diff --git a/config/config.yaml b/config/config.yaml index 8133d64..936ea34 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -1,5 +1,8 @@ # Agents can edit provider settings. Provider API keys are visible inside the world. # Empty keys allow startup. Fill the matching provider key before a model request. +# catalog selects a provider ID from pi-ai's catalog. It defaults to the provider's name. +# Model overrides retain unspecified catalog fields, including API flags and price tiers. +# Example: catalog: anthropic with models: [{id: claude-opus-5-5, context_window: 272000}]. providers: anthropic: type: anthropic-messages diff --git a/docs/RUNNING.md b/docs/RUNNING.md index 3657faf..f566f63 100644 --- a/docs/RUNNING.md +++ b/docs/RUNNING.md @@ -187,11 +187,13 @@ Run `sausage init`. Set `providers..api_key` in the config, then run `saus The defaults use Anthropic Messages and OpenAI Responses, with empty keys. The config also shows a commented OpenAI-compatible Chat Completions endpoint. Each provider has `type`, `base_url`, `api_key`, and `models`. References use `/`. -An optional `catalog` selects the models.dev provider ID. It defaults to the configured provider's name. -The host refreshes models.dev metadata at startup and caches it in `host/models-dev.json`. -If the refresh fails, the host uses that cache or the packaged snapshot. +An optional `catalog` selects a provider ID from pi-ai's catalog. It defaults to the configured provider's name. +Each model retains pi-ai's complete catalog entry, including API flags, thinking mappings, input limits, and price tiers. +The host needs no separate metadata download, cache, or snapshot. Model objects can override `context_window`, `max_tokens`, `reasoning`, and `cost`. Cost fields are `input`, `output`, `cache_read`, and `cache_write`, in USD per million tokens. +Overrides retain unspecified catalog fields. The base URL always comes from the config. +For example, `catalog: anthropic` with an Opus 5.5 context override retains adaptive thinking. An unknown model needs all metadata fields. Its error names the missing fields and config path. Pi-ai stores estimated call costs in assistant usage. diff --git a/extensions/models/README.md b/extensions/models/README.md index 8b49e3e..8f88ad1 100644 --- a/extensions/models/README.md +++ b/extensions/models/README.md @@ -28,18 +28,19 @@ The optional `models.pin` service supplies `pin(tx, conversationId)` for an exte Each provider has `type`, `base_url`, `api_key`, and `models`. Supported API types are `anthropic-messages`, `openai-responses`, and `openai-chat-completions`. Model references use `/`. -The optional `catalog` field selects a models.dev provider ID. It defaults to the configured provider's name. +The optional `catalog` field selects a provider ID from pi-ai's catalog. It defaults to the configured provider's name. Authentication and the base URL come from the config before each request. Missing keys and unknown providers produce errors that name the config file. Provider API keys in the config are intentionally visible to agents. Do not print or commit them. -The host refreshes `https://models.dev/api.json` at startup and caches it in `host/models-dev.json`. -A failed refresh uses the cache or the packaged snapshot. +Each model starts with pi-ai's complete catalog entry. No separate download, cache, or snapshot is required. +The entry retains API compatibility flags, thinking level mappings, prompt caching, input limits, input types, and price tiers. Each model entry is a string ID or an object with `id` and metadata overrides. Supported overrides are `context_window`, `max_tokens`, `reasoning`, and `cost`. Cost fields are `input`, `output`, `cache_read`, and `cache_write`, in USD per million tokens. An unknown model needs all metadata fields. Its error lists missing fields and the config path. -An override retains all catalog values that it does not replace. +An override retains all catalog values that it does not replace. The base URL always comes from the config. +For example, `catalog: anthropic` with an Opus 5.5 context override retains its adaptive thinking flags. Pi-ai computes call costs and stores them in assistant usage. These costs are estimates, not billing totals. `GET /harness/models` lists configured models and resolved metadata without authentication data. diff --git a/host/js/README.md b/host/js/README.md index f3bb050..ae2b34a 100644 --- a/host/js/README.md +++ b/host/js/README.md @@ -51,8 +51,10 @@ The Rust build must not execute npm or download JavaScript packages. The harness reads configured providers from `/etc/sausage/config.yaml` through Rust. `models.ts` registers pi-ai adapters for Anthropic Messages, OpenAI Responses, and OpenAI-compatible Chat Completions. Provider API keys in the config are intentionally visible to agents. Rust redacts them from module errors. -The host refreshes models.dev metadata at startup, with a private cache and a packaged snapshot as offline fallbacks. -Metadata supplies context limits, reasoning support, and prices. Pi-ai stores estimated costs in assistant usage. +Configured models start from pi-ai's public catalog. No separate metadata download, cache, or snapshot is required. +Models retain API compatibility flags, thinking level mappings, prompt caching, input limits, input types, and price tiers. +Config overrides replace only the specified metadata fields. The base URL comes from the config. +Pi-ai stores estimated costs in assistant usage. Provider and Markdown roster edits apply at the next run boundary. The console targets the configured main agent conversation. A rename retains its conversation. Tests use the faux provider or local fake servers without real credentials. diff --git a/host/js/bundle.js b/host/js/bundle.js index be2142a..dae8d85 100644 --- a/host/js/bundle.js +++ b/host/js/bundle.js @@ -1951,7 +1951,7 @@ var init_models = __esm({ } }); -// node_modules/@anthropic-ai/sdk/internal/tslib.mjs +// node_modules/openai/internal/tslib.mjs function __classPrivateFieldSet(receiver, state2, value2, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); @@ -1969,1365 +1969,14 @@ function __classPrivateFieldGet(receiver, state2, kind, f) { return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state2.get(receiver); } var init_tslib = __esm({ - "node_modules/@anthropic-ai/sdk/internal/tslib.mjs"() { + "node_modules/openai/internal/tslib.mjs"() { } }); -// node_modules/@anthropic-ai/sdk/internal/errors.mjs -function isAbortError(err) { - return typeof err === "object" && err !== null && // Spec-compliant fetch implementations - ("name" in err && err.name === "AbortError" || // Expo fetch - "message" in err && String(err.message).includes("FetchRequestCanceledException")); -} -var castToError; -var init_errors = __esm({ - "node_modules/@anthropic-ai/sdk/internal/errors.mjs"() { - castToError = (err) => { - if (err instanceof Error) - return err; - if (typeof err === "object" && err !== null) { - try { - const tag = Object.prototype.toString.call(err); - if (tag === "[object Error]" || tag === "[object DOMException]") { - const error = new Error(err.message, err.cause ? { cause: err.cause } : {}); - if (err.stack) - error.stack = err.stack; - if (err.cause && !error.cause) - error.cause = err.cause; - if (err.name) - error.name = err.name; - return error; - } - } catch { - } - try { - return new Error(JSON.stringify(err)); - } catch { - } - } - return new Error(err); - }; - } -}); - -// node_modules/@anthropic-ai/sdk/core/error.mjs -var AnthropicError, APIError, APIUserAbortError, APIConnectionError, APIConnectionTimeoutError, RetryableError, BadRequestError, AuthenticationError, PermissionDeniedError, NotFoundError, ConflictError, UnprocessableEntityError, RateLimitError, InternalServerError; -var init_error = __esm({ - "node_modules/@anthropic-ai/sdk/core/error.mjs"() { - init_errors(); - AnthropicError = /* @__PURE__ */ (() => { - class AnthropicError2 extends Error { - } - return AnthropicError2; - })(); - APIError = class _APIError extends AnthropicError { - constructor(status, error, message, headers, type) { - super(`${_APIError.makeMessage(status, error, message)}`); - this.status = status; - this.headers = headers; - this.requestID = headers?.get("request-id"); - this.workspaceID = headers?.get("anthropic-workspace-id"); - this.error = error; - this.type = type ?? null; - } - static makeMessage(status, error, message) { - const msg = error?.message ? typeof error.message === "string" ? error.message : JSON.stringify(error.message) : error ? JSON.stringify(error) : message; - if (status && msg) { - return `${status} ${msg}`; - } - if (status) { - return `${status} status code (no body)`; - } - if (msg) { - return msg; - } - return "(no status code or body)"; - } - static generate(status, errorResponse, message, headers) { - if (!status || !headers) { - return new APIConnectionError({ message, cause: castToError(errorResponse) }); - } - const error = errorResponse; - const type = error?.["error"]?.["type"]; - if (status === 400) { - return new BadRequestError(status, error, message, headers, type); - } - if (status === 401) { - return new AuthenticationError(status, error, message, headers, type); - } - if (status === 403) { - return new PermissionDeniedError(status, error, message, headers, type); - } - if (status === 404) { - return new NotFoundError(status, error, message, headers, type); - } - if (status === 409) { - return new ConflictError(status, error, message, headers, type); - } - if (status === 422) { - return new UnprocessableEntityError(status, error, message, headers, type); - } - if (status === 429) { - return new RateLimitError(status, error, message, headers, type); - } - if (status >= 500) { - return new InternalServerError(status, error, message, headers, type); - } - return new _APIError(status, error, message, headers, type); - } - }; - APIUserAbortError = class extends APIError { - constructor({ message } = {}) { - super(void 0, void 0, message || "Request was aborted.", void 0); - } - }; - APIConnectionError = class extends APIError { - constructor({ message, cause }) { - super(void 0, void 0, message || "Connection error.", void 0); - if (cause) - this.cause = cause; - } - }; - APIConnectionTimeoutError = class extends APIConnectionError { - constructor({ message } = {}) { - super({ message: message ?? "Request timed out." }); - } - }; - RetryableError = class extends AnthropicError { - constructor(message, { cause } = {}) { - super(message ?? "Retryable error."); - if (cause !== void 0) - this.cause = cause; - } - }; - BadRequestError = class extends APIError { - }; - AuthenticationError = class extends APIError { - }; - PermissionDeniedError = class extends APIError { - }; - NotFoundError = class extends APIError { - }; - ConflictError = class extends APIError { - }; - UnprocessableEntityError = class extends APIError { - }; - RateLimitError = class extends APIError { - }; - InternalServerError = class extends APIError { - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/values.mjs -function maybeObj(x) { - if (typeof x !== "object") { - return {}; - } - return x ?? {}; -} -function isEmptyObj(obj2) { - if (!obj2) - return true; - for (const _k in obj2) - return false; - return true; -} -function hasOwn(obj2, key) { - return Object.prototype.hasOwnProperty.call(obj2, key); -} -function isObj(obj2) { - return obj2 != null && typeof obj2 === "object" && !Array.isArray(obj2); -} -function checkNever(_value) { -} -var startsWithSchemeRegexp, isAbsoluteURL, isArray, isReadonlyArray, validatePositiveInteger, safeJSON; -var init_values = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/values.mjs"() { - init_error(); - startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i; - isAbsoluteURL = (url) => { - return startsWithSchemeRegexp.test(url); - }; - isArray = (val) => (isArray = Array.isArray, isArray(val)); - isReadonlyArray = isArray; - validatePositiveInteger = (name, n) => { - if (typeof n !== "number" || !Number.isInteger(n)) { - throw new AnthropicError(`${name} must be an integer`); - } - if (n < 0) { - throw new AnthropicError(`${name} must be a positive integer`); - } - return n; - }; - safeJSON = (text2) => { - try { - return JSON.parse(text2); - } catch (err) { - return void 0; - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/sleep.mjs -var sleep; -var init_sleep = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/sleep.mjs"() { - sleep = (ms, signal) => new Promise((resolve2) => { - if (signal?.aborted) - return resolve2(); - const onAbort = () => { - clearTimeout(timer); - resolve2(); - }; - const timer = setTimeout(() => { - signal?.removeEventListener("abort", onAbort); - resolve2(); - }, ms); - signal?.addEventListener("abort", onAbort, { once: true }); - }); - } -}); - -// node_modules/@anthropic-ai/sdk/version.mjs -var VERSION; -var init_version2 = __esm({ - "node_modules/@anthropic-ai/sdk/version.mjs"() { - VERSION = "0.129.0"; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/detect-platform.mjs -function getDetectedPlatform() { - if (typeof Deno !== "undefined" && Deno.build != null) { - return "deno"; - } - if (typeof EdgeRuntime !== "undefined") { - return "edge"; - } - if (Object.prototype.toString.call(typeof globalThis.process !== "undefined" ? globalThis.process : 0) === "[object process]") { - return "node"; - } - return "unknown"; -} -function getBrowserInfo() { - if (typeof navigator === "undefined" || !navigator) { - return null; - } - const browserPatterns = [ - { key: "edge", pattern: /Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, - { key: "ie", pattern: /MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, - { key: "ie", pattern: /Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/ }, - { key: "chrome", pattern: /Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, - { key: "firefox", pattern: /Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, - { key: "safari", pattern: /(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/ } - ]; - for (const { key, pattern } of browserPatterns) { - const match = pattern.exec(navigator.userAgent); - if (match) { - const major = match[1] || 0; - const minor = match[2] || 0; - const patch = match[3] || 0; - return { browser: key, version: `${major}.${minor}.${patch}` }; - } - } - return null; -} -var isRunningInBrowser, getPlatformProperties, normalizeArch, normalizePlatform, _platformHeaders, getPlatformHeaders; -var init_detect_platform = __esm({ - "node_modules/@anthropic-ai/sdk/internal/detect-platform.mjs"() { - init_version2(); - isRunningInBrowser = () => { - return ( - // @ts-ignore - typeof window !== "undefined" && // @ts-ignore - typeof window.document !== "undefined" && // @ts-ignore - typeof navigator !== "undefined" - ); - }; - getPlatformProperties = () => { - const detectedPlatform = getDetectedPlatform(); - if (detectedPlatform === "deno") { - return { - "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION, - "X-Stainless-OS": normalizePlatform(Deno.build.os), - "X-Stainless-Arch": normalizeArch(Deno.build.arch), - "X-Stainless-Runtime": "deno", - "X-Stainless-Runtime-Version": typeof Deno.version === "string" ? Deno.version : Deno.version?.deno ?? "unknown" - }; - } - if (typeof EdgeRuntime !== "undefined") { - return { - "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION, - "X-Stainless-OS": "Unknown", - "X-Stainless-Arch": `other:${EdgeRuntime}`, - "X-Stainless-Runtime": "edge", - "X-Stainless-Runtime-Version": globalThis.process?.version ?? "unknown" - }; - } - if (detectedPlatform === "node") { - return { - "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION, - "X-Stainless-OS": normalizePlatform(globalThis.process.platform ?? "unknown"), - "X-Stainless-Arch": normalizeArch(globalThis.process.arch ?? "unknown"), - "X-Stainless-Runtime": "node", - "X-Stainless-Runtime-Version": globalThis.process.version ?? "unknown" - }; - } - const browserInfo = getBrowserInfo(); - if (browserInfo) { - return { - "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION, - "X-Stainless-OS": "Unknown", - "X-Stainless-Arch": "unknown", - "X-Stainless-Runtime": `browser:${browserInfo.browser}`, - "X-Stainless-Runtime-Version": browserInfo.version - }; - } - return { - "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION, - "X-Stainless-OS": "Unknown", - "X-Stainless-Arch": "unknown", - "X-Stainless-Runtime": "unknown", - "X-Stainless-Runtime-Version": "unknown" - }; - }; - normalizeArch = (arch) => { - if (arch === "x32") - return "x32"; - if (arch === "x86_64" || arch === "x64") - return "x64"; - if (arch === "arm") - return "arm"; - if (arch === "aarch64" || arch === "arm64") - return "arm64"; - if (arch) - return `other:${arch}`; - return "unknown"; - }; - normalizePlatform = (platform) => { - platform = platform.toLowerCase(); - if (platform.includes("ios")) - return "iOS"; - if (platform === "android") - return "Android"; - if (platform === "darwin") - return "MacOS"; - if (platform === "win32") - return "Windows"; - if (platform === "freebsd") - return "FreeBSD"; - if (platform === "openbsd") - return "OpenBSD"; - if (platform === "linux") - return "Linux"; - if (platform) - return `Other:${platform}`; - return "Unknown"; - }; - getPlatformHeaders = () => { - return _platformHeaders ?? (_platformHeaders = getPlatformProperties()); - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/request-signal.mjs -function makeCleanup(signal, listener) { - return () => signal.removeEventListener("abort", listener); -} -function registerRequestSignalCleanup(controller, signal, listener) { - cleanups.set(controller, makeCleanup(signal, listener)); -} -function armAbandonmentBackstop(body, controller) { - if (cleanups.has(controller)) - registry?.register(body, controller, controller); -} -function releaseRequestSignal(controller) { - const cleanup = cleanups.get(controller); - if (cleanup) { - cleanups.delete(controller); - registry?.unregister(controller); - cleanup(); - } -} -var cleanups, registry; -var init_request_signal = __esm({ - "node_modules/@anthropic-ai/sdk/internal/request-signal.mjs"() { - cleanups = /* @__PURE__ */ new WeakMap(); - registry = typeof globalThis.FinalizationRegistry === "function" ? new globalThis.FinalizationRegistry((controller) => releaseRequestSignal(controller)) : null; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/shims.mjs -function getDefaultFetch() { - if (typeof fetch !== "undefined") { - return fetch; - } - throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`"); -} -function makeReadableStream(...args) { - const ReadableStream2 = globalThis.ReadableStream; - if (typeof ReadableStream2 === "undefined") { - throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`"); - } - return new ReadableStream2(...args); -} -function ReadableStreamFrom(iterable) { - let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator](); - return makeReadableStream({ - start() { - }, - async pull(controller) { - const { done, value: value2 } = await iter.next(); - if (done) { - controller.close(); - } else { - controller.enqueue(value2); - } - }, - async cancel() { - await iter.return?.(); - } - }); -} -function ReadableStreamToAsyncIterable(stream5) { - if (stream5[Symbol.asyncIterator]) - return stream5; - const reader = stream5.getReader(); - return { - async next() { - try { - const result = await reader.read(); - if (result?.done) - reader.releaseLock(); - return result; - } catch (e) { - reader.releaseLock(); - throw e; - } - }, - async return() { - const cancelPromise = reader.cancel(); - reader.releaseLock(); - await cancelPromise; - return { done: true, value: void 0 }; - }, - [Symbol.asyncIterator]() { - return this; - } - }; -} -async function CancelReadableStream(stream5) { - if (stream5 === null || typeof stream5 !== "object") - return; - if (stream5[Symbol.asyncIterator]) { - await stream5[Symbol.asyncIterator]().return?.(); - return; - } - const reader = stream5.getReader(); - const cancelPromise = reader.cancel(); - reader.releaseLock(); - await cancelPromise; -} -var init_shims = __esm({ - "node_modules/@anthropic-ai/sdk/internal/shims.mjs"() { - } -}); - -// node_modules/@anthropic-ai/sdk/internal/request-options.mjs -var FallbackEncoder; -var init_request_options = __esm({ - "node_modules/@anthropic-ai/sdk/internal/request-options.mjs"() { - FallbackEncoder = ({ headers, body }) => { - return { - bodyHeaders: { - "content-type": "application/json" - }, - body: JSON.stringify(body) - }; - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/qs/formats.mjs -var default_format, default_formatter, formatters, RFC1738; -var init_formats = __esm({ - "node_modules/@anthropic-ai/sdk/internal/qs/formats.mjs"() { - default_format = "RFC3986"; - default_formatter = (v) => String(v); - formatters = { - RFC1738: (v) => String(v).replace(/%20/g, "+"), - RFC3986: default_formatter - }; - RFC1738 = "RFC1738"; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/qs/utils.mjs -function is_buffer(obj2) { - if (!obj2 || typeof obj2 !== "object") { - return false; - } - return !!(obj2.constructor && obj2.constructor.isBuffer && obj2.constructor.isBuffer(obj2)); -} -function maybe_map(val, fn) { - if (isArray(val)) { - const mapped = []; - for (let i = 0; i < val.length; i += 1) { - mapped.push(fn(val[i])); - } - return mapped; - } - return fn(val); -} -var has, hex_table, limit, encode; -var init_utils = __esm({ - "node_modules/@anthropic-ai/sdk/internal/qs/utils.mjs"() { - init_formats(); - init_values(); - has = (obj2, key) => (has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty), has(obj2, key)); - hex_table = /* @__PURE__ */ (() => { - const array = []; - for (let i = 0; i < 256; ++i) { - array.push("%" + ((i < 16 ? "0" : "") + i.toString(16)).toUpperCase()); - } - return array; - })(); - limit = 1024; - encode = (str2, _defaultEncoder, charset, _kind, format) => { - if (str2.length === 0) { - return str2; - } - let string2 = str2; - if (typeof str2 === "symbol") { - string2 = Symbol.prototype.toString.call(str2); - } else if (typeof str2 !== "string") { - string2 = String(str2); - } - if (charset === "iso-8859-1") { - return escape(string2).replace(/%u[0-9a-f]{4}/gi, function($0) { - return "%26%23" + parseInt($0.slice(2), 16) + "%3B"; - }); - } - let out = ""; - for (let j = 0; j < string2.length; j += limit) { - const segment = string2.length >= limit ? string2.slice(j, j + limit) : string2; - const arr2 = []; - for (let i = 0; i < segment.length; ++i) { - let c = segment.charCodeAt(i); - if (c === 45 || // - - c === 46 || // . - c === 95 || // _ - c === 126 || // ~ - c >= 48 && c <= 57 || // 0-9 - c >= 65 && c <= 90 || // a-z - c >= 97 && c <= 122 || // A-Z - format === RFC1738 && (c === 40 || c === 41)) { - arr2[arr2.length] = segment.charAt(i); - continue; - } - if (c < 128) { - arr2[arr2.length] = hex_table[c]; - continue; - } - if (c < 2048) { - arr2[arr2.length] = hex_table[192 | c >> 6] + hex_table[128 | c & 63]; - continue; - } - if (c < 55296 || c >= 57344) { - arr2[arr2.length] = hex_table[224 | c >> 12] + hex_table[128 | c >> 6 & 63] + hex_table[128 | c & 63]; - continue; - } - i += 1; - c = 65536 + ((c & 1023) << 10 | segment.charCodeAt(i) & 1023); - arr2[arr2.length] = hex_table[240 | c >> 18] + hex_table[128 | c >> 12 & 63] + hex_table[128 | c >> 6 & 63] + hex_table[128 | c & 63]; - } - out += arr2.join(""); - } - return out; - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/qs/stringify.mjs -function is_non_nullish_primitive(v) { - return typeof v === "string" || typeof v === "number" || typeof v === "boolean" || typeof v === "symbol" || typeof v === "bigint"; -} -function inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder6, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) { - let obj2 = object; - let tmp_sc = sideChannel; - let step = 0; - let find_flag = false; - while ((tmp_sc = tmp_sc.get(sentinel)) !== void 0 && !find_flag) { - const pos = tmp_sc.get(object); - step += 1; - if (typeof pos !== "undefined") { - if (pos === step) { - throw new RangeError("Cyclic object value"); - } else { - find_flag = true; - } - } - if (typeof tmp_sc.get(sentinel) === "undefined") { - step = 0; - } - } - if (typeof filter === "function") { - obj2 = filter(prefix, obj2); - } else if (obj2 instanceof Date) { - obj2 = serializeDate?.(obj2); - } else if (generateArrayPrefix === "comma" && isArray(obj2)) { - obj2 = maybe_map(obj2, function(value2) { - if (value2 instanceof Date) { - return serializeDate?.(value2); - } - return value2; - }); - } - if (obj2 === null) { - if (strictNullHandling) { - return encoder6 && !encodeValuesOnly ? ( - // @ts-expect-error - encoder6(prefix, defaults.encoder, charset, "key", format) - ) : prefix; - } - obj2 = ""; - } - if (is_non_nullish_primitive(obj2) || is_buffer(obj2)) { - if (encoder6) { - const key_value = encodeValuesOnly ? prefix : encoder6(prefix, defaults.encoder, charset, "key", format); - return [ - formatter?.(key_value) + "=" + // @ts-expect-error - formatter?.(encoder6(obj2, defaults.encoder, charset, "value", format)) - ]; - } - return [formatter?.(prefix) + "=" + formatter?.(String(obj2))]; - } - const values = []; - if (typeof obj2 === "undefined") { - return values; - } - let obj_keys; - if (generateArrayPrefix === "comma" && isArray(obj2)) { - if (encodeValuesOnly && encoder6) { - obj2 = maybe_map(obj2, encoder6); - } - obj_keys = [{ value: obj2.length > 0 ? obj2.join(",") || null : void 0 }]; - } else if (isArray(filter)) { - obj_keys = filter; - } else { - const keys = Object.keys(obj2); - obj_keys = sort ? keys.sort(sort) : keys; - } - const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\./g, "%2E") : String(prefix); - const adjusted_prefix = commaRoundTrip && isArray(obj2) && obj2.length === 1 ? encoded_prefix + "[]" : encoded_prefix; - if (allowEmptyArrays && isArray(obj2) && obj2.length === 0) { - return adjusted_prefix + "[]"; - } - for (let j = 0; j < obj_keys.length; ++j) { - const key = obj_keys[j]; - const value2 = ( - // @ts-ignore - typeof key === "object" && typeof key.value !== "undefined" ? key.value : obj2[key] - ); - if (skipNulls && value2 === null) { - continue; - } - const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\./g, "%2E") : key; - const key_prefix = isArray(obj2) ? typeof generateArrayPrefix === "function" ? generateArrayPrefix(adjusted_prefix, encoded_key) : adjusted_prefix : adjusted_prefix + (allowDots ? "." + encoded_key : "[" + encoded_key + "]"); - sideChannel.set(object, step); - const valueSideChannel = /* @__PURE__ */ new WeakMap(); - valueSideChannel.set(sentinel, sideChannel); - push_to_array(values, inner_stringify( - value2, - key_prefix, - generateArrayPrefix, - commaRoundTrip, - allowEmptyArrays, - strictNullHandling, - skipNulls, - encodeDotInKeys, - // @ts-ignore - generateArrayPrefix === "comma" && encodeValuesOnly && isArray(obj2) ? null : encoder6, - filter, - sort, - allowDots, - serializeDate, - format, - formatter, - encodeValuesOnly, - charset, - valueSideChannel - )); - } - return values; -} -function normalize_stringify_options(opts = defaults) { - if (typeof opts.allowEmptyArrays !== "undefined" && typeof opts.allowEmptyArrays !== "boolean") { - throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided"); - } - if (typeof opts.encodeDotInKeys !== "undefined" && typeof opts.encodeDotInKeys !== "boolean") { - throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided"); - } - if (opts.encoder !== null && typeof opts.encoder !== "undefined" && typeof opts.encoder !== "function") { - throw new TypeError("Encoder has to be a function."); - } - const charset = opts.charset || defaults.charset; - if (typeof opts.charset !== "undefined" && opts.charset !== "utf-8" && opts.charset !== "iso-8859-1") { - throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined"); - } - let format = default_format; - if (typeof opts.format !== "undefined") { - if (!has(formatters, opts.format)) { - throw new TypeError("Unknown format option provided."); - } - format = opts.format; - } - const formatter = formatters[format]; - let filter = defaults.filter; - if (typeof opts.filter === "function" || isArray(opts.filter)) { - filter = opts.filter; - } - let arrayFormat; - if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) { - arrayFormat = opts.arrayFormat; - } else if ("indices" in opts) { - arrayFormat = opts.indices ? "indices" : "repeat"; - } else { - arrayFormat = defaults.arrayFormat; - } - if ("commaRoundTrip" in opts && typeof opts.commaRoundTrip !== "boolean") { - throw new TypeError("`commaRoundTrip` must be a boolean, or absent"); - } - const allowDots = typeof opts.allowDots === "undefined" ? !!opts.encodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots; - return { - addQueryPrefix: typeof opts.addQueryPrefix === "boolean" ? opts.addQueryPrefix : defaults.addQueryPrefix, - // @ts-ignore - allowDots, - allowEmptyArrays: typeof opts.allowEmptyArrays === "boolean" ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays, - arrayFormat, - charset, - charsetSentinel: typeof opts.charsetSentinel === "boolean" ? opts.charsetSentinel : defaults.charsetSentinel, - commaRoundTrip: !!opts.commaRoundTrip, - delimiter: typeof opts.delimiter === "undefined" ? defaults.delimiter : opts.delimiter, - encode: typeof opts.encode === "boolean" ? opts.encode : defaults.encode, - encodeDotInKeys: typeof opts.encodeDotInKeys === "boolean" ? opts.encodeDotInKeys : defaults.encodeDotInKeys, - encoder: typeof opts.encoder === "function" ? opts.encoder : defaults.encoder, - encodeValuesOnly: typeof opts.encodeValuesOnly === "boolean" ? opts.encodeValuesOnly : defaults.encodeValuesOnly, - filter, - format, - formatter, - serializeDate: typeof opts.serializeDate === "function" ? opts.serializeDate : defaults.serializeDate, - skipNulls: typeof opts.skipNulls === "boolean" ? opts.skipNulls : defaults.skipNulls, - // @ts-ignore - sort: typeof opts.sort === "function" ? opts.sort : null, - strictNullHandling: typeof opts.strictNullHandling === "boolean" ? opts.strictNullHandling : defaults.strictNullHandling - }; -} -function stringify(object, opts = {}) { - let obj2 = object; - const options = normalize_stringify_options(opts); - let obj_keys; - let filter; - if (typeof options.filter === "function") { - filter = options.filter; - obj2 = filter("", obj2); - } else if (isArray(options.filter)) { - filter = options.filter; - obj_keys = filter; - } - const keys = []; - if (typeof obj2 !== "object" || obj2 === null) { - return ""; - } - const generateArrayPrefix = array_prefix_generators[options.arrayFormat]; - const commaRoundTrip = generateArrayPrefix === "comma" && options.commaRoundTrip; - if (!obj_keys) { - obj_keys = Object.keys(obj2); - } - if (options.sort) { - obj_keys.sort(options.sort); - } - const sideChannel = /* @__PURE__ */ new WeakMap(); - for (let i = 0; i < obj_keys.length; ++i) { - const key = obj_keys[i]; - if (options.skipNulls && obj2[key] === null) { - continue; - } - push_to_array(keys, inner_stringify( - obj2[key], - key, - // @ts-expect-error - generateArrayPrefix, - commaRoundTrip, - options.allowEmptyArrays, - options.strictNullHandling, - options.skipNulls, - options.encodeDotInKeys, - options.encode ? options.encoder : null, - options.filter, - options.sort, - options.allowDots, - options.serializeDate, - options.format, - options.formatter, - options.encodeValuesOnly, - options.charset, - sideChannel - )); - } - const joined = keys.join(options.delimiter); - let prefix = options.addQueryPrefix === true ? "?" : ""; - if (options.charsetSentinel) { - if (options.charset === "iso-8859-1") { - prefix += "utf8=%26%2310003%3B&"; - } else { - prefix += "utf8=%E2%9C%93&"; - } - } - return joined.length > 0 ? prefix + joined : ""; -} -var array_prefix_generators, push_to_array, toISOString, defaults, sentinel; -var init_stringify = __esm({ - "node_modules/@anthropic-ai/sdk/internal/qs/stringify.mjs"() { - init_utils(); - init_formats(); - init_values(); - array_prefix_generators = { - brackets(prefix) { - return String(prefix) + "[]"; - }, - comma: "comma", - indices(prefix, key) { - return String(prefix) + "[" + key + "]"; - }, - repeat(prefix) { - return String(prefix); - } - }; - push_to_array = function(arr2, value_or_array) { - Array.prototype.push.apply(arr2, isArray(value_or_array) ? value_or_array : [value_or_array]); - }; - defaults = { - addQueryPrefix: false, - allowDots: false, - allowEmptyArrays: false, - arrayFormat: "indices", - charset: "utf-8", - charsetSentinel: false, - delimiter: "&", - encode: true, - encodeDotInKeys: false, - encoder: encode, - encodeValuesOnly: false, - format: default_format, - formatter: default_formatter, - /** @deprecated */ - indices: false, - serializeDate(date) { - return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date); - }, - skipNulls: false, - strictNullHandling: false - }; - sentinel = {}; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/query.mjs -function stringifyQuery(query) { - return stringify(query, { arrayFormat: "brackets" }); -} -var init_query = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/query.mjs"() { - init_stringify(); - } -}); - -// node_modules/@anthropic-ai/sdk/internal/node.browser.mjs -var node_browser_exports = {}; -__export(node_browser_exports, { - child_process: () => child_process, - crypto: () => crypto2, - fs: () => fs, - os: () => os, - path: () => path, - stream: () => stream, - util: () => util -}); -function unavailable(module) { - return new Proxy({}, { - get(_target, property) { - if (typeof property === "symbol") - return void 0; - throw new AnthropicError(`\`${module}.${property}\` is not available in this environment; it needs a Node.js-compatible runtime`); - } - }); -} -var child_process, crypto2, fs, os, path, stream, util; -var init_node_browser = __esm({ - "node_modules/@anthropic-ai/sdk/internal/node.browser.mjs"() { - init_error(); - child_process = /* @__PURE__ */ unavailable("child_process"); - crypto2 = /* @__PURE__ */ unavailable("crypto"); - fs = /* @__PURE__ */ unavailable("fs"); - os = /* @__PURE__ */ unavailable("os"); - path = /* @__PURE__ */ unavailable("path"); - stream = /* @__PURE__ */ unavailable("stream"); - util = /* @__PURE__ */ unavailable("util"); - } -}); - -// node_modules/@anthropic-ai/sdk/lib/credentials/types.mjs -function requireSecureTokenEndpoint(baseURL) { - if (!baseURL) - return; - let u; - try { - u = new URL(baseURL); - } catch (err) { - throw new WorkloadIdentityError(`Invalid token endpoint base URL "${baseURL}": ${err}`); - } - if (u.protocol === "https:") - return; - const host = u.hostname.toLowerCase().replace(/^\[|\]$/g, ""); - if (u.protocol === "http:" && (host === "localhost" || host === "127.0.0.1" || host === "::1")) { - return; - } - throw new WorkloadIdentityError(`Refusing to send credential over non-https token endpoint "${baseURL}"`); -} -async function parseTokenResponse(resp, requestId) { - const text2 = await readLimitedText(resp); - let data; - try { - data = JSON.parse(text2); - } catch { - throw new WorkloadIdentityError(`Token endpoint returned non-JSON response (status ${resp.status})`, resp.status, redactSensitive(text2), requestId); - } - if (!data.access_token) { - throw new WorkloadIdentityError(`Token endpoint response missing access_token: ${JSON.stringify(redactSensitive(data))}`, resp.status, redactSensitive(data), requestId); - } - if (data.token_type && data.token_type.toLowerCase() !== "bearer") { - throw new WorkloadIdentityError(`Token endpoint response: unsupported token_type "${data.token_type}" (want Bearer)`, resp.status, redactSensitive(data), requestId); - } - return data; -} -function redactSensitive(body) { - if (body == null) - return body; - if (typeof body === "string") { - let parsed; - try { - parsed = JSON.parse(body); - } catch { - if (body.length <= MAX_ERROR_BODY_CHARS) - return body; - return body.slice(0, MAX_ERROR_BODY_CHARS) + `... <${body.length - MAX_ERROR_BODY_CHARS} more chars>`; - } - return JSON.stringify(redactSensitive(parsed)); - } - if (typeof body === "object" && !Array.isArray(body)) { - const out = {}; - for (const [k, v] of Object.entries(body)) { - if (SAFE_ERROR_KEYS.has(k)) - out[k] = v; - } - return out; - } - return null; -} -async function checkCredentialsFileSafety(path5, onWarn = (m) => console.warn(`anthropic-sdk: ${m}`)) { - if (typeof process === "undefined" || process.platform === "win32") - return; - const { fs: fs3 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); - let resolved = path5; - let st; - try { - resolved = await fs3.promises.realpath(path5); - st = await fs3.promises.stat(resolved); - } catch { - return; - } - const mode = st.mode & 511; - if (mode & 18) { - throw new WorkloadIdentityError(`Credentials file at ${resolved} is group/world-writable (mode 0o${mode.toString(8)}); this allows other local users to plant tokens. Run \`chmod 600 ${resolved}\`.`); - } - if (mode & 36) { - throw new WorkloadIdentityError(`Credentials file at ${resolved} is group/world-readable (mode 0o${mode.toString(8)}); run \`chmod 600 ${resolved}\` before retrying.`); - } - if (typeof process.getuid === "function" && st.uid !== process.getuid()) { - onWarn(`credentials file at ${resolved} is owned by uid ${st.uid} (current process uid ${process.getuid()}); verify this is intentional.`); - } -} -async function writeCredentialsFileAtomic(targetPath, data) { - const { fs: fs3, path: path5 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); - const dir = path5.dirname(targetPath); - await fs3.promises.mkdir(dir, { recursive: true, mode: 448 }); - const tmpPath = `${targetPath}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`; - try { - const fh = await fs3.promises.open(tmpPath, "w", 384); - try { - await fh.writeFile(JSON.stringify(data, null, 2)); - await fh.sync(); - } finally { - await fh.close(); - } - await fs3.promises.rename(tmpPath, targetPath); - } catch (err) { - await fs3.promises.unlink(tmpPath).catch(() => { - }); - throw err; - } - try { - const dirFh = await fs3.promises.open(dir, "r"); - try { - await dirFh.sync(); - } finally { - await dirFh.close(); - } - } catch { - } -} -async function readLimitedText(resp) { - if (!resp.body) { - return ""; - } - const reader = resp.body.getReader(); - const chunks = []; - let received = 0; - for (; ; ) { - const { done, value: value2 } = await reader.read(); - if (done) - break; - if (received + value2.length > MAX_TOKEN_RESPONSE_BYTES) { - const remaining = MAX_TOKEN_RESPONSE_BYTES - received; - if (remaining > 0) - chunks.push(value2.subarray(0, remaining)); - await reader.cancel(); - break; - } - chunks.push(value2); - received += value2.length; - } - let merged; - if (chunks.length === 1) { - merged = chunks[0]; - } else { - merged = new Uint8Array(chunks.reduce((n, c) => n + c.length, 0)); - let offset = 0; - for (const c of chunks) { - merged.set(c, offset); - offset += c.length; - } - } - return new TextDecoder("utf-8").decode(merged); -} -var GRANT_TYPE_JWT_BEARER, GRANT_TYPE_REFRESH_TOKEN, TOKEN_ENDPOINT, OAUTH_API_BETA_HEADER, FEDERATION_BETA_HEADER, ADVISORY_REFRESH_THRESHOLD_IN_SECONDS, MANDATORY_REFRESH_THRESHOLD_IN_SECONDS, ADVISORY_REFRESH_BACKOFF_IN_SECONDS, MAX_TOKEN_RESPONSE_BYTES, MAX_ERROR_BODY_CHARS, SAFE_ERROR_KEYS, WorkloadIdentityError; -var init_types = __esm({ - "node_modules/@anthropic-ai/sdk/lib/credentials/types.mjs"() { - init_error(); - GRANT_TYPE_JWT_BEARER = "urn:ietf:params:oauth:grant-type:jwt-bearer"; - GRANT_TYPE_REFRESH_TOKEN = "refresh_token"; - TOKEN_ENDPOINT = "/v1/oauth/token"; - OAUTH_API_BETA_HEADER = "oauth-2025-04-20"; - FEDERATION_BETA_HEADER = "oidc-federation-2026-04-01"; - ADVISORY_REFRESH_THRESHOLD_IN_SECONDS = 120; - MANDATORY_REFRESH_THRESHOLD_IN_SECONDS = 30; - ADVISORY_REFRESH_BACKOFF_IN_SECONDS = 5; - MAX_TOKEN_RESPONSE_BYTES = 1 << 20; - MAX_ERROR_BODY_CHARS = 2e3; - SAFE_ERROR_KEYS = /* @__PURE__ */ new Set(["error", "error_description", "error_uri"]); - WorkloadIdentityError = class extends AnthropicError { - constructor(message, statusCode = null, body = null, requestId = null) { - super(message); - this.statusCode = statusCode; - this.body = body; - this.requestId = requestId; - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/time.mjs -function nowAsSeconds() { - return Math.floor(Date.now() / 1e3); -} -var init_time = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/time.mjs"() { - } -}); - -// node_modules/@anthropic-ai/sdk/lib/credentials/token-cache.mjs -var TokenCache; -var init_token_cache = __esm({ - "node_modules/@anthropic-ai/sdk/lib/credentials/token-cache.mjs"() { - init_types(); - init_time(); - TokenCache = class { - constructor(provider2, onAdvisoryRefreshError) { - this.cached = null; - this.pendingRefresh = null; - this.nextForce = false; - this.lastAdvisoryError = 0; - this.provider = provider2; - this.onAdvisoryRefreshError = onAdvisoryRefreshError; - } - async getToken() { - const force = this.nextForce; - this.nextForce = false; - const cached = this.cached; - if (force || cached == null) { - const token2 = await this.refresh(force); - return token2.token; - } - if (cached.expiresAt == null) { - return cached.token; - } - const remaining = cached.expiresAt - nowAsSeconds(); - if (remaining > ADVISORY_REFRESH_THRESHOLD_IN_SECONDS) { - return cached.token; - } - if (remaining > MANDATORY_REFRESH_THRESHOLD_IN_SECONDS) { - this.backgroundRefresh(); - return cached.token; - } - const token = await this.refresh(); - return token.token; - } - /** - * Clears the cached token and marks the next {@link getToken} as a forced - * refresh, so the underlying provider bypasses any on-disk freshness check. - * Called after a 401 — the server has just told us the token is bad even - * if its `expires_at` still looks fresh. - */ - invalidate() { - this.cached = null; - this.nextForce = true; - } - /** - * Mandatory refresh. Joins any in-flight refresh unless forced — a forced - * refresh must not coalesce into a non-forced one that may re-serve the - * same stale disk token. - */ - refresh(force = false) { - if (this.pendingRefresh && !force) { - return this.pendingRefresh; - } - return this.doRefresh(force); - } - /** - * Advisory background refresh. Shares the same in-flight promise as - * mandatory refreshes for deduplication, but swallows errors so the - * stale cached token keeps being served. Backs off for - * {@link ADVISORY_REFRESH_BACKOFF_IN_SECONDS} after a failure so an - * outage during the advisory window doesn't hammer the token endpoint. - */ - backgroundRefresh() { - if (this.pendingRefresh) { - return; - } - if (nowAsSeconds() - this.lastAdvisoryError < ADVISORY_REFRESH_BACKOFF_IN_SECONDS) { - return; - } - this.doRefresh().catch((err) => { - this.lastAdvisoryError = nowAsSeconds(); - this.onAdvisoryRefreshError?.(err); - }); - } - /** - * Core refresh. Sets {@link pendingRefresh} so concurrent callers - * (both advisory and mandatory) coalesce into a single provider call. - */ - doRefresh(force = false) { - this.pendingRefresh = this.provider(force ? { forceRefresh: true } : void 0).then((token) => { - this.cached = token; - this.pendingRefresh = null; - return token; - }, (err) => { - this.pendingRefresh = null; - throw err; - }); - return this.pendingRefresh; - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/env.mjs -var readEnv; -var init_env = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/env.mjs"() { - readEnv = (env) => { - if (typeof globalThis.process !== "undefined") { - return globalThis.process.env?.[env]?.trim() || void 0; - } - if (typeof globalThis.Deno !== "undefined") { - return globalThis.Deno.env?.get?.(env)?.trim() || void 0; - } - return void 0; - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/bytes.mjs -function concatBytes(buffers) { - let length = 0; - for (const buffer of buffers) { - length += buffer.length; - } - const output = new Uint8Array(length); - let index = 0; - for (const buffer of buffers) { - output.set(buffer, index); - index += buffer.length; - } - return output; -} -function encodeUTF8(str2) { - let encoder6; - return (encodeUTF8_ ?? (encoder6 = new globalThis.TextEncoder(), encodeUTF8_ = encoder6.encode.bind(encoder6)))(str2); -} -function decodeUTF8(bytes2) { - let decoder5; - return (decodeUTF8_ ?? (decoder5 = new globalThis.TextDecoder(), decodeUTF8_ = decoder5.decode.bind(decoder5)))(bytes2); -} -var encodeUTF8_, decodeUTF8_; -var init_bytes = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/bytes.mjs"() { - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/base64.mjs -var fromBase64; -var init_base64 = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/base64.mjs"() { - init_error(); - fromBase64 = (str2) => { - if (typeof globalThis.Buffer !== "undefined") { - const buf = globalThis.Buffer.from(str2, "base64"); - return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength); - } - if (typeof atob !== "undefined") { - const bstr = atob(str2); - const buf = new Uint8Array(bstr.length); - for (let i = 0; i < bstr.length; i++) { - buf[i] = bstr.charCodeAt(i); - } - return buf; - } - throw new AnthropicError("Cannot decode base64 string; Expected `Buffer` or `atob` to be defined"); - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/log.mjs -function noop() { -} -function makeLogFn(fnLevel, logger, logLevel) { - if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) { - return noop; - } else { - return logger[fnLevel].bind(logger); - } -} -function filterLogger(logger, logLevel) { - const cachedLogger = cachedLoggers.get(logger); - if (cachedLogger && cachedLogger[0] === logLevel) { - return cachedLogger[1]; - } - const levelLogger = { - error: makeLogFn("error", logger, logLevel), - warn: makeLogFn("warn", logger, logLevel), - info: makeLogFn("info", logger, logLevel), - debug: makeLogFn("debug", logger, logLevel) - }; - cachedLoggers.set(logger, [logLevel, levelLogger]); - return levelLogger; -} -function loggerFor(client) { - const logger = client.logger; - const logLevel = client.logLevel ?? "off"; - if (!logger) { - return noopLogger; - } - return filterLogger(logger, logLevel); -} -function defaultLogger() { - const envLevel = readEnv("ANTHROPIC_LOG"); - if (!cachedDefaultLogger || envLevel !== lastEnvLevel) { - lastEnvLevel = envLevel; - cachedDefaultLogger = filterLogger(console, parseLogLevel(envLevel, "process.env['ANTHROPIC_LOG']", filterLogger(console, defaultLogLevel)) ?? defaultLogLevel); - } - return cachedDefaultLogger; -} -function debugLogRequestDetails(logger, message, details) { - if (logger.debug === noop) { - return; - } - logger.debug(message, formatRequestDetails(details)); -} -var defaultLogLevel, levelNumbers, parseLogLevel, noopLogger, cachedLoggers, lastEnvLevel, cachedDefaultLogger, formatRequestDetails; -var init_log = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/log.mjs"() { - init_values(); - init_env(); - defaultLogLevel = "warn"; - levelNumbers = { - off: 0, - error: 200, - warn: 300, - info: 400, - debug: 500 - }; - parseLogLevel = (maybeLevel, sourceName, logger) => { - if (!maybeLevel) { - return void 0; - } - if (hasOwn(levelNumbers, maybeLevel)) { - return maybeLevel; - } - logger.warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`); - return void 0; - }; - noopLogger = { - error: noop, - warn: noop, - info: noop, - debug: noop - }; - cachedLoggers = /* @__PURE__ */ new WeakMap(); - formatRequestDetails = (details) => { - if (details.options) { - details.options = { ...details.options }; - delete details.options["headers"]; - } - if (details.headers) { - details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value2]) => [ - name, - name.toLowerCase() === "authorization" || name.toLowerCase() === "api-key" || name.toLowerCase() === "x-api-key" || name.toLowerCase() === "cookie" || name.toLowerCase() === "set-cookie" ? "***" : value2 - ])); - } - if ("retryOfRequestLogID" in details) { - if (details.retryOfRequestLogID) { - details.retryOf = details.retryOfRequestLogID; - } - delete details.retryOfRequestLogID; - } - return details; - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/uuid.mjs +// node_modules/openai/internal/utils/uuid.mjs var uuid4; var init_uuid = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/uuid.mjs"() { + "node_modules/openai/internal/utils/uuid.mjs"() { uuid4 = function() { const { crypto: crypto3 } = globalThis; if (crypto3?.randomUUID) { @@ -3341,16486 +1990,16 @@ var init_uuid = __esm({ } }); -// node_modules/@anthropic-ai/sdk/internal/utils.mjs -var init_utils2 = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils.mjs"() { - init_values(); - init_base64(); - init_env(); - init_log(); - init_uuid(); - init_sleep(); - init_query(); - } -}); - -// node_modules/@anthropic-ai/sdk/core/credentials.mjs -function validateProfileName(name) { - if (!name) { - throw new Error("profile name is empty"); - } - if (name === "." || name === "..") { - throw new Error(`profile name "${name}" is not allowed`); - } - if (name.includes("/") || name.includes("\\")) { - throw new Error(`profile name "${name}" must not contain path separators`); - } - if (!PROFILE_NAME_PATTERN.test(name)) { - throw new Error(`profile name "${name}" contains disallowed characters (allowed: letters, digits, '_', '.', '-')`); - } -} -var CREDENTIALS_FILE_VERSION, PROFILE_NAME_PATTERN, loadConfigWithSource, getCredentialsPath, getRootConfigPath, supportsLocalConfigFiles, getActiveProfileName; -var init_credentials = __esm({ - "node_modules/@anthropic-ai/sdk/core/credentials.mjs"() { - init_detect_platform(); - init_utils2(); - CREDENTIALS_FILE_VERSION = "1.0"; - PROFILE_NAME_PATTERN = /^[A-Za-z0-9_.-]+$/; - loadConfigWithSource = async (profile) => { - var _a6, _b; - const rootConfigPath = await getRootConfigPath(); - if (rootConfigPath === null) { - return null; - } - const profileName = profile ?? await getActiveProfileName(); - if (profileName === null) { - return null; - } - validateProfileName(profileName); - const { fs: fs3, path: path5 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); - const configPath = path5.join(rootConfigPath, "configs", `${profileName}.json`); - let configRaw; - try { - configRaw = await fs3.promises.readFile(configPath, "utf-8"); - } catch (err) { - if (err?.code !== "ENOENT") { - throw new Error(`failed to read config file ${configPath}: ${err}`); - } - configRaw = null; - } - if (configRaw === null) { - const organizationId = readEnv("ANTHROPIC_ORGANIZATION_ID"); - const identityTokenFile = readEnv("ANTHROPIC_IDENTITY_TOKEN_FILE"); - const federationRuleId = readEnv("ANTHROPIC_FEDERATION_RULE_ID"); - if (federationRuleId && organizationId) { - return { - fromFile: false, - config: { - organization_id: organizationId, - // A defaulted-but-empty CI variable (`ANTHROPIC_WORKSPACE_ID=""`) is - // treated as unset — readEnv coerces empty to undefined, and the body - // builder's truthy check skips it — so `"workspace_id": ""` never goes - // on the wire. - workspace_id: readEnv("ANTHROPIC_WORKSPACE_ID"), - base_url: readEnv("ANTHROPIC_BASE_URL"), - authentication: { - type: "oidc_federation", - federation_rule_id: federationRuleId, - service_account_id: readEnv("ANTHROPIC_SERVICE_ACCOUNT_ID"), - identity_token: identityTokenFile ? { source: "file", path: identityTokenFile } : void 0, - scope: readEnv("ANTHROPIC_SCOPE") - } - } - }; - } - return null; - } - let config; - try { - config = JSON.parse(configRaw); - } catch (err) { - throw new Error(`failed to parse config file ${configPath}: ${err}`); - } - if (!config.authentication) { - throw new Error(`config file ${configPath} is missing "authentication"`); - } - const authType = config.authentication.type; - if (authType !== "oidc_federation" && authType !== "user_oauth") { - throw new Error(`authentication.type "${authType}" is not a known authentication type`); - } - config.organization_id ?? (config.organization_id = readEnv("ANTHROPIC_ORGANIZATION_ID")); - config.workspace_id ?? (config.workspace_id = readEnv("ANTHROPIC_WORKSPACE_ID")); - config.base_url ?? (config.base_url = readEnv("ANTHROPIC_BASE_URL")); - (_a6 = config.authentication).scope ?? (_a6.scope = readEnv("ANTHROPIC_SCOPE")); - if (config.authentication.type === "oidc_federation") { - if (!config.authentication.identity_token) { - const identityTokenFile = readEnv("ANTHROPIC_IDENTITY_TOKEN_FILE"); - if (identityTokenFile) { - config.authentication.identity_token = { - source: "file", - path: identityTokenFile - }; - } - } - if (!config.authentication.federation_rule_id) { - config.authentication.federation_rule_id = readEnv("ANTHROPIC_FEDERATION_RULE_ID") ?? ""; - } - (_b = config.authentication).service_account_id ?? (_b.service_account_id = readEnv("ANTHROPIC_SERVICE_ACCOUNT_ID")); - } - return { config, fromFile: true }; - }; - getCredentialsPath = async (config, profile) => { - if (config?.authentication.credentials_path) { - return config.authentication.credentials_path; - } - const rootConfigPath = await getRootConfigPath(); - if (!rootConfigPath) { - return null; - } - const profileName = profile ?? await getActiveProfileName(); - if (!profileName) { - return null; - } - validateProfileName(profileName); - const { path: path5 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); - return path5.join(rootConfigPath, "credentials", `${profileName}.json`); - }; - getRootConfigPath = async () => { - if (!supportsLocalConfigFiles()) { - return null; - } - const { path: path5 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); - const configDir = readEnv("ANTHROPIC_CONFIG_DIR"); - if (configDir) { - return configDir; - } - const os2 = getPlatformHeaders()["X-Stainless-OS"]; - if (os2 === "Windows") { - const appData = readEnv("APPDATA"); - if (appData) { - return path5.join(appData, "Anthropic"); - } - const userProfile = readEnv("USERPROFILE"); - if (userProfile) { - return path5.join(userProfile, "AppData", "Roaming", "Anthropic"); - } - return null; - } - const xdgConfigHome = readEnv("XDG_CONFIG_HOME"); - if (xdgConfigHome) { - return path5.join(xdgConfigHome, "anthropic"); - } - const home = readEnv("HOME"); - if (home) { - return path5.join(home, ".config", "anthropic"); - } - return null; - }; - supportsLocalConfigFiles = () => { - const runtime = getPlatformHeaders()["X-Stainless-Runtime"]; - return runtime === "node" || runtime === "deno"; - }; - getActiveProfileName = async () => { - const rootConfigPath = await getRootConfigPath(); - if (!rootConfigPath) { - return null; - } - const profileName = readEnv("ANTHROPIC_PROFILE"); - if (profileName) { - return profileName; - } - const { fs: fs3, path: path5 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); - const filePath = path5.join(rootConfigPath, "active_config"); - try { - return (await fs3.promises.readFile(filePath, "utf-8")).trim() || "default"; - } catch (err) { - if (err?.code !== "ENOENT") { - throw new Error(`failed to read ${filePath}: ${err}`); - } - return "default"; - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/lib/credentials/identity-token.mjs -function identityTokenFromFile(path5) { - if (!path5) { - throw new AnthropicError("Identity token file path is empty"); - } - return async () => { - const { fs: fs3 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); - let content; - try { - content = await fs3.promises.readFile(path5, "utf-8"); - } catch (err) { - throw new AnthropicError(`Failed to read identity token file at ${path5}: ${err}`); - } - const token = content.trim(); - if (!token) { - throw new AnthropicError(`Identity token file at ${path5} is empty`); - } - return token; - }; -} -function identityTokenFromValue(token) { - if (!token) { - throw new AnthropicError("Identity token value is empty"); - } - return () => token; -} -var init_identity_token = __esm({ - "node_modules/@anthropic-ai/sdk/lib/credentials/identity-token.mjs"() { - init_error(); - } -}); - -// node_modules/@anthropic-ai/sdk/lib/credentials/oidc-federation.mjs -function oidcFederationProvider(config) { - return async () => { - requireSecureTokenEndpoint(config.baseURL); - const jwt = await config.identityTokenProvider(); - if (jwt.length > 16 * 1024) { - throw new WorkloadIdentityError(`Identity token is ${Math.ceil(jwt.length / 1024)} KiB, exceeds the 16 KiB assertion limit`); - } - const body = { - grant_type: GRANT_TYPE_JWT_BEARER, - assertion: jwt, - federation_rule_id: config.federationRuleId, - organization_id: config.organizationId - }; - if (config.serviceAccountId) { - body["service_account_id"] = config.serviceAccountId; - } - if (config.workspaceId) { - body["workspace_id"] = config.workspaceId; - } - const url = `${config.baseURL}${TOKEN_ENDPOINT}`; - let resp; - try { - resp = await config.fetch(url, { - method: "POST", - headers: { - "Content-Type": "application/json", - "anthropic-beta": `${OAUTH_API_BETA_HEADER},${FEDERATION_BETA_HEADER}`, - "User-Agent": config.userAgent || `anthropic-sdk-typescript/${VERSION} oidcFederationProvider` - }, - body: JSON.stringify(body) - }); - } catch (err) { - throw new WorkloadIdentityError(`Failed to reach token endpoint ${url}: ${err}`); - } - const requestId = resp.headers.get("Request-Id"); - if (!resp.ok) { - const text2 = await resp.text().catch(() => ""); - const redacted = redactSensitive(text2); - let hint = ""; - if (resp.status === 401) { - const hintMiddle = config.workspaceId ? "" : "If your federation rule is scoped to multiple workspaces, set the ANTHROPIC_WORKSPACE_ID environment variable, the 'workspace_id' config key, or the `workspaceId` option. "; - hint = ` Ensure your federation rule matches your identity token. ${hintMiddle}View your authentication events in the Workload identity page of Claude Console for more details.`; - } - throw new WorkloadIdentityError(`Token exchange failed with status ${resp.status}${requestId ? ` (request-id ${requestId})` : ""}: ${redacted}${hint}`, resp.status, redacted, requestId); - } - const data = await parseTokenResponse(resp, requestId); - const expiresIn = Number(data.expires_in); - if (!Number.isFinite(expiresIn)) { - throw new WorkloadIdentityError(`Token endpoint response missing required fields: ${JSON.stringify(redactSensitive(data))}`, resp.status, redactSensitive(data), requestId); - } - return { - token: data.access_token, - expiresAt: nowAsSeconds() + expiresIn - }; - }; -} -var init_oidc_federation = __esm({ - "node_modules/@anthropic-ai/sdk/lib/credentials/oidc-federation.mjs"() { - init_types(); - init_time(); - init_version2(); - } -}); - -// node_modules/@anthropic-ai/sdk/lib/credentials/user-oauth.mjs -function userOAuthProvider(config) { - return async (opts) => { - const { fs: fs3 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); - await checkCredentialsFileSafety(config.credentialsPath, config.onSafetyWarning); - let raw; - try { - raw = await fs3.promises.readFile(config.credentialsPath, "utf-8"); - } catch (err) { - throw new WorkloadIdentityError(`Credentials file not found at ${config.credentialsPath}: ${err}`); - } - let creds; - try { - creds = JSON.parse(raw); - } catch (err) { - throw new WorkloadIdentityError(`Credentials file at ${config.credentialsPath} is not valid JSON: ${err}`); - } - const accessToken = creds.access_token; - if (!accessToken) { - throw new WorkloadIdentityError(`Credentials file at ${config.credentialsPath} must include 'access_token'`); - } - const expiresAt = creds.expires_at; - if (!opts?.forceRefresh && (expiresAt == null || nowAsSeconds() < expiresAt - MANDATORY_REFRESH_THRESHOLD_IN_SECONDS)) { - return { token: accessToken, expiresAt: expiresAt ?? null }; - } - const refreshToken = creds.refresh_token; - if (!config.clientId || !refreshToken) { - throw new WorkloadIdentityError(`Access token at ${config.credentialsPath} has expired and no refresh is available (client_id ${config.clientId ? "set" : "empty"}, refresh_token ${refreshToken ? "set" : "empty"})`); - } - requireSecureTokenEndpoint(config.baseURL); - const body = { - grant_type: GRANT_TYPE_REFRESH_TOKEN, - refresh_token: refreshToken, - client_id: config.clientId - }; - const url = `${config.baseURL}${TOKEN_ENDPOINT}`; - let resp; - try { - resp = await config.fetch(url, { - method: "POST", - headers: { - "Content-Type": "application/json", - "anthropic-beta": OAUTH_API_BETA_HEADER, - "User-Agent": config.userAgent || `anthropic-sdk-typescript/${VERSION} userOAuthProvider` - }, - body: JSON.stringify(body) - }); - } catch (err) { - throw new WorkloadIdentityError(`User OAuth refresh failed to reach token endpoint: ${err}`); - } - const requestId = resp.headers.get("Request-Id"); - if (!resp.ok) { - const text2 = await resp.text().catch(() => ""); - throw new WorkloadIdentityError(`User OAuth refresh failed (HTTP ${resp.status}): ${redactSensitive(text2)}`, resp.status, redactSensitive(text2), requestId); - } - const data = await parseTokenResponse(resp, requestId); - const expiresIn = Number(data.expires_in); - if (!Number.isFinite(expiresIn)) { - throw new WorkloadIdentityError(`User OAuth refresh response missing or invalid expires_in: ${JSON.stringify(redactSensitive(data))}`, resp.status, redactSensitive(data), requestId); - } - const newExpiresAt = nowAsSeconds() + expiresIn; - const newRefreshToken = data.refresh_token || refreshToken; - await writeCredentialsFileAtomic(config.credentialsPath, { - ...creds, - version: CREDENTIALS_FILE_VERSION, - type: "oauth_token", - access_token: data.access_token, - expires_at: newExpiresAt, - refresh_token: newRefreshToken - }); - return { token: data.access_token, expiresAt: newExpiresAt }; - }; -} -var init_user_oauth = __esm({ - "node_modules/@anthropic-ai/sdk/lib/credentials/user-oauth.mjs"() { - init_credentials(); - init_types(); - init_time(); - init_version2(); - } -}); - -// node_modules/@anthropic-ai/sdk/lib/credentials/credential-chain.mjs -function resolveCredentialsFromConfig(config, options) { - const credentialsPath = config.authentication.credentials_path ?? null; - const effectiveBaseURL = (config.base_url || options.baseURL).replace(/\/+$/, ""); - const provider2 = buildProvider(config, credentialsPath, effectiveBaseURL, options); - const extraHeaders = {}; - if (config.workspace_id && config.authentication.type === "user_oauth") { - extraHeaders["anthropic-workspace-id"] = config.workspace_id; - } - return { provider: provider2, extraHeaders, baseURL: config.base_url || void 0 }; -} -async function defaultCredentials(options, profile) { - const loaded = await loadConfigWithSource(profile); - if (!loaded) { - return null; - } - const { config, fromFile } = loaded; - const withPath = config.authentication.credentials_path || !fromFile ? config : { - ...config, - authentication: { - ...config.authentication, - credentials_path: await getCredentialsPath(config, profile) ?? void 0 - } - }; - return resolveCredentialsFromConfig(withPath, options); -} -function buildProvider(config, credentialsPath, baseURL, options) { - switch (config.authentication.type) { - case "oidc_federation": { - const auth = config.authentication; - const identityProvider = resolveIdentityTokenProvider(auth); - if (!identityProvider) { - throw new WorkloadIdentityError("oidc_federation config requires an identity token (set authentication.identity_token, ANTHROPIC_IDENTITY_TOKEN_FILE, or ANTHROPIC_IDENTITY_TOKEN)"); - } - if (!auth.federation_rule_id) { - throw new WorkloadIdentityError("oidc_federation config requires 'federation_rule_id'. Set it in authentication.federation_rule_id in your profile, or via ANTHROPIC_FEDERATION_RULE_ID (profile takes precedence)."); - } - if (!config.organization_id) { - throw new WorkloadIdentityError("oidc_federation config requires organization_id (set ANTHROPIC_ORGANIZATION_ID or config.organization_id)"); - } - const exchange = oidcFederationProvider({ - identityTokenProvider: identityProvider, - federationRuleId: auth.federation_rule_id, - organizationId: config.organization_id, - serviceAccountId: auth.service_account_id, - workspaceId: config.workspace_id, - baseURL, - fetch: options.fetch, - userAgent: options.userAgent - }); - if (credentialsPath) { - return cachedExchangeProvider(exchange, credentialsPath, options.onCacheWriteError, options.onSafetyWarning); - } - return exchange; - } - case "user_oauth": { - if (!credentialsPath) { - throw new WorkloadIdentityError("user_oauth config requires authentication.credentials_path (or load via a profile so it defaults to /credentials/.json)"); - } - return userOAuthProvider({ - credentialsPath, - clientId: config.authentication.client_id, - baseURL, - fetch: options.fetch, - userAgent: options.userAgent, - onSafetyWarning: options.onSafetyWarning - }); - } - default: { - const t = config.authentication.type; - throw new WorkloadIdentityError(`authentication.type "${t}" is not a known authentication type`); - } - } -} -function resolveIdentityTokenProvider(auth) { - if (auth.identity_token) { - const source = auth.identity_token.source; - if (source !== "file") { - throw new WorkloadIdentityError(`identity_token.source "${source}" is not supported by this SDK version (only "file")`); - } - if (!auth.identity_token.path) { - throw new WorkloadIdentityError(`identity_token.source "file" requires a non-empty path`); - } - return identityTokenFromFile(auth.identity_token.path); - } - const tokenFile = readEnv("ANTHROPIC_IDENTITY_TOKEN_FILE"); - if (tokenFile) { - return identityTokenFromFile(tokenFile); - } - const tokenValue = readEnv("ANTHROPIC_IDENTITY_TOKEN"); - if (tokenValue) { - return identityTokenFromValue(tokenValue); - } - return null; -} -function cachedExchangeProvider(exchange, credentialsPath, onCacheWriteError, onSafetyWarning) { - return async (opts) => { - const { fs: fs3 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); - await checkCredentialsFileSafety(credentialsPath, onSafetyWarning); - let existing; - try { - const raw = await fs3.promises.readFile(credentialsPath, "utf-8"); - existing = JSON.parse(raw); - const token = existing?.["access_token"]; - if (token && !opts?.forceRefresh) { - const expiresAt = existing?.["expires_at"]; - if (expiresAt == null || nowAsSeconds() < expiresAt - MANDATORY_REFRESH_THRESHOLD_IN_SECONDS) { - return { token, expiresAt: expiresAt ?? null }; - } - } - } catch (err) { - const code = err?.code; - if (code !== "ENOENT" && !(err instanceof SyntaxError)) { - onCacheWriteError?.(err); - } - } - const result = await exchange(opts); - try { - await writeCredentialsFileAtomic(credentialsPath, { - ...existing ?? {}, - version: CREDENTIALS_FILE_VERSION, - type: "oauth_token", - access_token: result.token, - expires_at: result.expiresAt - }); - } catch (err) { - onCacheWriteError?.(err); - } - return result; - }; -} -var init_credential_chain = __esm({ - "node_modules/@anthropic-ai/sdk/lib/credentials/credential-chain.mjs"() { - init_env(); - init_credentials(); - init_types(); - init_time(); - init_identity_token(); - init_oidc_federation(); - init_user_oauth(); - } -}); - -// node_modules/@anthropic-ai/sdk/internal/decoders/line.mjs -function findNewlineIndex(buffer, startIndex) { - const newline = 10; - const carriage = 13; - for (let i = startIndex ?? 0; i < buffer.length; i++) { - if (buffer[i] === newline) { - return { preceding: i, index: i + 1, carriage: false }; - } - if (buffer[i] === carriage) { - return { preceding: i, index: i + 1, carriage: true }; - } - } - return null; -} -var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex, LineDecoder; -var init_line = __esm({ - "node_modules/@anthropic-ai/sdk/internal/decoders/line.mjs"() { - init_tslib(); - init_bytes(); - LineDecoder = /* @__PURE__ */ (() => { - class LineDecoder3 { - constructor() { - _LineDecoder_buffer.set(this, void 0); - _LineDecoder_carriageReturnIndex.set(this, void 0); - __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), "f"); - __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, "f"); - } - decode(chunk) { - if (chunk == null) { - return []; - } - const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk) : typeof chunk === "string" ? encodeUTF8(chunk) : chunk; - __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, "f"), binaryChunk]), "f"); - const lines2 = []; - let patternIndex; - while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, "f"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f"))) != null) { - if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") == null) { - __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, "f"); - continue; - } - if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") != null && (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") + 1 || patternIndex.carriage)) { - lines2.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, "f").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") - 1))); - __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, "f").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f")), "f"); - __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, "f"); - continue; - } - const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") !== null ? patternIndex.preceding - 1 : patternIndex.preceding; - const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, "f").subarray(0, endIndex)); - lines2.push(line); - __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, "f").subarray(patternIndex.index), "f"); - __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, "f"); - } - return lines2; - } - flush() { - if (!__classPrivateFieldGet(this, _LineDecoder_buffer, "f").length) { - return []; - } - return this.decode("\n"); - } - } - _LineDecoder_buffer = /* @__PURE__ */ new WeakMap(), _LineDecoder_carriageReturnIndex = /* @__PURE__ */ new WeakMap(); - LineDecoder3.NEWLINE_CHARS = /* @__PURE__ */ new Set(["\n", "\r"]); - LineDecoder3.NEWLINE_REGEXP = /\r\n|[\n\r]/g; - return LineDecoder3; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/core/streaming.mjs -async function* _iterSSEMessages(response, controller) { - if (!response.body) { - controller.abort(); - if (typeof globalThis.navigator !== "undefined" && globalThis.navigator.product === "ReactNative") { - throw new AnthropicError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`); - } - throw new AnthropicError(`Attempted to iterate over a response with no body`); - } - const sseDecoder = new SSEDecoder(); - const lineDecoder = new LineDecoder(); - const iter = ReadableStreamToAsyncIterable(response.body); - for await (const chunk of iter) { - for (const line of lineDecoder.decode(chunk)) { - const sse = sseDecoder.decode(line); - if (sse) - yield sse; - } - } - for (const line of lineDecoder.flush()) { - const sse = sseDecoder.decode(line); - if (sse) - yield sse; - } -} -function partition(str2, delimiter) { - const index = str2.indexOf(delimiter); - if (index !== -1) { - return [str2.substring(0, index), delimiter, str2.substring(index + delimiter.length)]; - } - return [str2, "", ""]; -} -var _Stream_client, Stream, SSEDecoder; -var init_streaming = __esm({ - "node_modules/@anthropic-ai/sdk/core/streaming.mjs"() { - init_tslib(); - init_error(); - init_shims(); - init_line(); - init_shims(); - init_errors(); - init_values(); - init_bytes(); - init_log(); - init_error(); - init_request_signal(); - Stream = /* @__PURE__ */ (() => { - class Stream3 { - constructor(iterator, controller, client) { - this.iterator = iterator; - _Stream_client.set(this, void 0); - this.controller = controller; - __classPrivateFieldSet(this, _Stream_client, client, "f"); - } - /** - * Iterate the raw Server-Sent Events from `response` — `{event, data, raw}` - * objects, before any JSON parsing or event-name filtering. - * - * This reads `response.body` directly (not a clone), so the response is - * consumed. Use this in middleware that fully replaces the stream body; for - * read-only observation of parsed events, use `ctx.parse()` instead. - */ - static rawEvents(response, controller = new AbortController()) { - return _iterSSEMessages(response, controller); - } - static fromSSEResponse(response, controller, client) { - let consumed = false; - const logger = client ? loggerFor(client) : console; - async function* iterator() { - if (consumed) { - throw new AnthropicError("Cannot iterate over a consumed stream, use `.tee()` to split the stream."); - } - consumed = true; - let done = false; - try { - for await (const sse of _iterSSEMessages(response, controller)) { - if (sse.event === "completion") { - try { - yield JSON.parse(sse.data); - } catch (e) { - logger.error(`Could not parse message into JSON:`, sse.data); - logger.error(`From chunk:`, sse.raw); - throw e; - } - } - if (sse.event === "message_start" || sse.event === "message_delta" || sse.event === "message_stop" || sse.event === "content_block_start" || sse.event === "content_block_delta" || sse.event === "content_block_stop" || sse.event === "message" || sse.event === "user.message" || sse.event === "user.interrupt" || sse.event === "user.tool_confirmation" || sse.event === "user.custom_tool_result" || sse.event === "user.tool_result" || sse.event === "agent.message" || sse.event === "agent.thinking" || sse.event === "agent.tool_use" || sse.event === "agent.tool_result" || sse.event === "agent.mcp_tool_use" || sse.event === "agent.mcp_tool_result" || sse.event === "agent.custom_tool_use" || sse.event === "agent.thread_context_compacted" || sse.event === "session.status_running" || sse.event === "session.status_idle" || sse.event === "session.status_rescheduled" || sse.event === "session.status_terminated" || sse.event === "session.error" || sse.event === "session.deleted" || sse.event === "session.updated" || sse.event === "span.model_request_start" || sse.event === "span.model_request_end" || sse.event === "span.outcome_evaluation_start" || sse.event === "span.outcome_evaluation_ongoing" || sse.event === "span.outcome_evaluation_end" || sse.event === "user.define_outcome" || sse.event === "agent.thread_message_received" || sse.event === "agent.thread_message_sent" || sse.event === "agent.session_thread_message_received" || sse.event === "agent.session_thread_message_sent" || sse.event === "session.thread_created" || sse.event === "session.thread_status_created" || sse.event === "session.thread_status_running" || sse.event === "session.thread_status_idle" || sse.event === "session.thread_status_rescheduled" || sse.event === "session.thread_status_terminated" || sse.event === "event_start" || sse.event === "event_delta" || sse.event === "system.message") { - try { - yield JSON.parse(sse.data); - } catch (e) { - logger.error(`Could not parse message into JSON:`, sse.data); - logger.error(`From chunk:`, sse.raw); - throw e; - } - } - if (sse.event === "ping") { - continue; - } - if (sse.event === "error") { - const body = safeJSON(sse.data) ?? sse.data; - const type = body?.error?.type; - throw new APIError(void 0, body, void 0, response.headers, type); - } - } - done = true; - } catch (e) { - if (isAbortError(e)) - return; - throw e; - } finally { - if (!done) - controller.abort(); - releaseRequestSignal(controller); - } - } - return new Stream3(iterator, controller, client); - } - /** - * Generates a Stream from a newline-separated ReadableStream - * where each item is a JSON value. - */ - static fromReadableStream(readableStream, controller, client) { - let consumed = false; - async function* iterLines() { - const lineDecoder = new LineDecoder(); - const iter = ReadableStreamToAsyncIterable(readableStream); - for await (const chunk of iter) { - for (const line of lineDecoder.decode(chunk)) { - yield line; - } - } - for (const line of lineDecoder.flush()) { - yield line; - } - } - async function* iterator() { - if (consumed) { - throw new AnthropicError("Cannot iterate over a consumed stream, use `.tee()` to split the stream."); - } - consumed = true; - let done = false; - try { - for await (const line of iterLines()) { - if (done) - continue; - if (line) - yield JSON.parse(line); - } - done = true; - } catch (e) { - if (isAbortError(e)) - return; - throw e; - } finally { - if (!done) - controller.abort(); - releaseRequestSignal(controller); - } - } - return new Stream3(iterator, controller, client); - } - [(_Stream_client = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() { - return this.iterator(); - } - /** - * Splits the stream into two streams which can be - * independently read from at different speeds. - */ - tee() { - const left = []; - const right = []; - const iterator = this.iterator(); - const teeIterator = (queue2) => { - return { - next: () => { - if (queue2.length === 0) { - const result = iterator.next(); - left.push(result); - right.push(result); - } - return queue2.shift(); - } - }; - }; - return [ - new Stream3(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, "f")), - new Stream3(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, "f")) - ]; - } - /** - * Converts this stream to a newline-separated ReadableStream of - * JSON stringified values in the stream - * which can be turned back into a Stream with `Stream.fromReadableStream()`. - */ - toReadableStream() { - const self = this; - let iter; - return makeReadableStream({ - async start() { - iter = self[Symbol.asyncIterator](); - }, - async pull(ctrl) { - try { - const { value: value2, done } = await iter.next(); - if (done) - return ctrl.close(); - const bytes2 = encodeUTF8(JSON.stringify(value2) + "\n"); - ctrl.enqueue(bytes2); - } catch (err) { - ctrl.error(err); - } - }, - async cancel() { - await iter.return?.(); - } - }); - } - } - return Stream3; - })(); - SSEDecoder = class { - constructor() { - this.event = null; - this.data = []; - this.chunks = []; - } - decode(line) { - if (line.endsWith("\r")) { - line = line.substring(0, line.length - 1); - } - if (!line) { - if (!this.event && !this.data.length) - return null; - const sse = { - event: this.event, - data: this.data.join("\n"), - raw: this.chunks - }; - this.event = null; - this.data = []; - this.chunks = []; - return sse; - } - this.chunks.push(line); - if (line.startsWith(":")) { - return null; - } - let [fieldname, _, value2] = partition(line, ":"); - if (value2.startsWith(" ")) { - value2 = value2.substring(1); - } - if (fieldname === "event") { - this.event = value2; - } else if (fieldname === "data") { - this.data.push(value2); - } - return null; - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/parse.mjs -async function defaultParseResponse(client, props) { - const { response, requestLogID, retryOfRequestLogID, startTime } = props; - const body = await (async () => { - if (props.options.stream) { - loggerFor(client).debug("response", response.status, response.url, response.headers, response.body); - return Stream.fromSSEResponse(response, props.controller, client); - } - if (response.status === 204) { - return null; - } - if (props.options.__binaryResponse) { - return response; - } - const contentType = response.headers.get("content-type"); - const mediaType = contentType?.split(";")[0]?.trim(); - const isJSON = mediaType?.includes("application/json") || mediaType?.endsWith("+json"); - if (isJSON) { - const contentLength = response.headers.get("content-length"); - if (contentLength === "0") { - return void 0; - } - const json = await response.json(); - return addResponseIDs(json, response); - } - const text2 = await response.text(); - return text2; - })().finally(() => { - if (!props.options.stream && !props.options.__binaryResponse) { - releaseRequestSignal(props.controller); - } - }); - debugLogRequestDetails(loggerFor(client), `[${requestLogID}] response parsed`, { - retryOfRequestLogID, - url: response.url, - status: response.status, - body, - durationMs: Date.now() - startTime - }); - return body; -} -function addResponseIDs(value2, response) { - if (!value2 || typeof value2 !== "object" || Array.isArray(value2)) { - return value2; - } - return Object.defineProperties(value2, { - _request_id: { value: response.headers.get("request-id"), enumerable: false }, - _workspace_id: { value: response.headers.get("anthropic-workspace-id"), enumerable: false } - }); -} -var init_parse = __esm({ - "node_modules/@anthropic-ai/sdk/internal/parse.mjs"() { - init_streaming(); - init_log(); - init_request_signal(); - } -}); - -// node_modules/@anthropic-ai/sdk/core/middleware.mjs -function isFetchOriginError(err) { - return typeof err === "object" && err !== null && fetchOriginErrors.has(err); -} -function isRetryableError(err) { - const seen = /* @__PURE__ */ new Set(); - while (typeof err === "object" && err !== null && !seen.has(err)) { - seen.add(err); - if (isFetchOriginError(err) || isAbortError(err) || err instanceof APIConnectionError || err instanceof RetryableError) { - return true; - } - err = err.cause; - } - return false; -} -function wrapFetchWithMiddleware(fetchFn, middleware, options, client) { - return async (url, init = {}) => { - if (middleware.length === 0) { - return fetchFn.call(void 0, url, init); - } - const headers = init.headers instanceof Headers ? init.headers : new Headers(init.headers); - const response = await applyMiddleware(fetchFn, middleware, options, client)({ - ...init, - headers, - url: typeof url === "string" ? url : url instanceof URL ? url.href : url.url - }); - if (response.bodyUsed || response.body?.locked) { - throw new AnthropicError("middleware consumed the response body; use response.clone() to inspect it, or return new Response(body, response) to consume and replace it"); - } - return response; - }; -} -function createMiddlewareContext(options, client) { - const cache = /* @__PURE__ */ new WeakMap(); - return { - options, - // Resolved per chain, so changes to the client's `logLevel`/`logger` - // apply to subsequent requests. - logger: client ? loggerFor(client) : defaultLogger(), - parse(response) { - if (options?.stream && response.ok) { - return parseMiddlewareResponse(response, options, client); - } - let parsed = cache.get(response); - if (!parsed) { - parsed = parseMiddlewareResponse(response, options, client); - cache.set(response, parsed); - } - return parsed; - } - }; -} -async function parseMiddlewareResponse(response, options, client) { - if (response.bodyUsed || response.body?.locked) { - throw new AnthropicError("cannot ctx.parse() a response whose body was already consumed; call ctx.parse() instead of reading the body, or read via response.clone()"); - } - if (options?.stream && response.ok) { - return Stream.fromSSEResponse(response.clone(), new AbortController(), client); - } - if (response.status === 204) { - return null; - } - if (options?.__binaryResponse) { - return response; - } - const contentType = response.headers.get("content-type"); - const mediaType = contentType?.split(";")[0]?.trim(); - const isJSON = mediaType?.includes("application/json") || mediaType?.endsWith("+json"); - if (isJSON) { - if (response.headers.get("content-length") === "0") { - return void 0; - } - return addResponseIDs(await response.clone().json(), response); - } - return await response.clone().text(); -} -function applyMiddleware(fetchFn, middleware, options, client) { - let next = async ({ url, ...init }) => { - try { - return await fetchFn.call(void 0, url, init); - } catch (err) { - const error = castToError(err); - fetchOriginErrors.add(error); - throw error; - } - }; - const ctx = createMiddlewareContext(options, client); - for (let i = middleware.length - 1; i >= 0; i--) { - const mw = middleware[i]; - const nextInner = next; - next = async (request2) => mw(request2, nextInner, ctx); - } - return next; -} -var fetchOriginErrors; -var init_middleware = __esm({ - "node_modules/@anthropic-ai/sdk/core/middleware.mjs"() { - init_errors(); - init_parse(); - init_log(); - init_error(); - init_streaming(); - fetchOriginErrors = /* @__PURE__ */ new WeakSet(); - } -}); - -// node_modules/@anthropic-ai/sdk/core/api-promise.mjs -var _APIPromise_client, APIPromise; -var init_api_promise = __esm({ - "node_modules/@anthropic-ai/sdk/core/api-promise.mjs"() { - init_tslib(); - init_parse(); - APIPromise = /* @__PURE__ */ (() => { - class APIPromise3 extends Promise { - constructor(client, responsePromise, parseResponse2 = defaultParseResponse) { - super((resolve2) => { - resolve2(null); - }); - this.responsePromise = responsePromise; - this.parseResponse = parseResponse2; - _APIPromise_client.set(this, void 0); - __classPrivateFieldSet(this, _APIPromise_client, client, "f"); - } - _thenUnwrap(transform) { - return new APIPromise3(__classPrivateFieldGet(this, _APIPromise_client, "f"), this.responsePromise, async (client, props) => addResponseIDs(transform(await this.parseResponse(client, props), props), props.response)); - } - /** - * Gets the raw `Response` instance instead of parsing the response - * data. - * - * If you want to parse the response body but still get the `Response` - * instance, you can use {@link withResponse()}. - * - * 👋 Getting the wrong TypeScript type for `Response`? - * Try setting `"moduleResolution": "NodeNext"` or add `"lib": ["DOM"]` - * to your `tsconfig.json`. - */ - asResponse() { - return this.responsePromise.then((p) => p.response); - } - /** - * Gets the parsed response data, the raw `Response` instance and the ID of the request, - * returned via the `request-id` header which is useful for debugging requests and resporting - * issues to Anthropic. - * - * If you just want to get the raw `Response` instance without parsing it, - * you can use {@link asResponse()}. - * - * 👋 Getting the wrong TypeScript type for `Response`? - * Try setting `"moduleResolution": "NodeNext"` or add `"lib": ["DOM"]` - * to your `tsconfig.json`. - */ - async withResponse() { - const [data, response] = await Promise.all([this.parse(), this.asResponse()]); - return { - data, - response, - request_id: response.headers.get("request-id"), - workspace_id: response.headers.get("anthropic-workspace-id") - }; - } - parse() { - if (!this.parsedPromise) { - this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, "f"), data)); - } - return this.parsedPromise; - } - then(onfulfilled, onrejected) { - return this.parse().then(onfulfilled, onrejected); - } - catch(onrejected) { - return this.parse().catch(onrejected); - } - finally(onfinally) { - return this.parse().finally(onfinally); - } - } - _APIPromise_client = /* @__PURE__ */ new WeakMap(); - return APIPromise3; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/core/pagination.mjs -var _AbstractPage_client, AbstractPage, PagePromise, Page, PageCursor, BidirectionalPageCursor; -var init_pagination = __esm({ - "node_modules/@anthropic-ai/sdk/core/pagination.mjs"() { - init_tslib(); - init_error(); - init_parse(); - init_api_promise(); - init_values(); - AbstractPage = /* @__PURE__ */ (() => { - class AbstractPage3 { - constructor(client, response, body, options) { - _AbstractPage_client.set(this, void 0); - __classPrivateFieldSet(this, _AbstractPage_client, client, "f"); - this.options = options; - this.response = response; - this.body = body; - } - hasNextPage() { - const items = this.getPaginatedItems(); - if (!items.length) - return false; - return this.nextPageRequestOptions() != null; - } - async getNextPage() { - const nextOptions = this.nextPageRequestOptions(); - if (!nextOptions) { - throw new AnthropicError("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`."); - } - return await __classPrivateFieldGet(this, _AbstractPage_client, "f").requestAPIList(this.constructor, nextOptions); - } - async *iterPages() { - let page3 = this; - yield page3; - while (page3.hasNextPage()) { - page3 = await page3.getNextPage(); - yield page3; - } - } - async *[(_AbstractPage_client = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() { - for await (const page3 of this.iterPages()) { - for (const item of page3.getPaginatedItems()) { - yield item; - } - } - } - } - return AbstractPage3; - })(); - PagePromise = /* @__PURE__ */ (() => { - class PagePromise3 extends APIPromise { - constructor(client, request2, Page3) { - super(client, request2, async (client2, props) => new Page3(client2, props.response, await defaultParseResponse(client2, props), props.options)); - } - /** - * Allow auto-paginating iteration on an unawaited list call, eg: - * - * for await (const item of client.items.list()) { - * console.log(item) - * } - */ - async *[Symbol.asyncIterator]() { - const page3 = await this; - for await (const item of page3) { - yield item; - } - } - } - return PagePromise3; - })(); - Page = class extends AbstractPage { - constructor(client, response, body, options) { - super(client, response, body, options); - this.data = body.data || []; - this.has_more = body.has_more || false; - this.first_id = body.first_id || null; - this.last_id = body.last_id || null; - } - getPaginatedItems() { - return this.data ?? []; - } - hasNextPage() { - if (this.has_more === false) { - return false; - } - return super.hasNextPage(); - } - nextPageRequestOptions() { - if (this.options.query?.["before_id"]) { - const first_id = this.first_id; - if (!first_id) { - return null; - } - return { - ...this.options, - query: { - ...maybeObj(this.options.query), - before_id: first_id - } - }; - } - const cursor = this.last_id; - if (!cursor) { - return null; - } - return { - ...this.options, - query: { - ...maybeObj(this.options.query), - after_id: cursor - } - }; - } - }; - PageCursor = class extends AbstractPage { - constructor(client, response, body, options) { - super(client, response, body, options); - this.data = body.data || []; - this.next_page = body.next_page || null; - } - getPaginatedItems() { - return this.data ?? []; - } - nextPageRequestOptions() { - const cursor = this.next_page; - if (!cursor) { - return null; - } - return { - ...this.options, - query: { - ...maybeObj(this.options.query), - page: cursor - } - }; - } - }; - BidirectionalPageCursor = class extends AbstractPage { - constructor(client, response, body, options) { - super(client, response, body, options); - this.data = body.data || []; - this.next_page = body.next_page || null; - this.prev_page = body.prev_page || null; - } - getPaginatedItems() { - return this.data ?? []; - } - nextPageRequestOptions() { - const cursor = this.next_page; - if (!cursor) { - return null; - } - return { - ...this.options, - query: { - ...maybeObj(this.options.query), - page: cursor - } - }; - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/uploads.mjs -function makeFile(fileBits, fileName, options) { - checkFileSupport(); - return new File(fileBits, fileName ?? "", options); -} -function getName(value2, stripPath) { - const val = typeof value2 === "object" && value2 !== null && ("name" in value2 && value2.name && String(value2.name) || "url" in value2 && value2.url && String(value2.url) || "filename" in value2 && value2.filename && String(value2.filename) || "path" in value2 && value2.path && String(value2.path)) || ""; - return stripPath ? val.split(/[\\/]/).pop() || void 0 : val; -} -function supportsFormData(fetchObject) { - const fetch2 = typeof fetchObject === "function" ? fetchObject : fetchObject.fetch; - const cached = supportsFormDataMap.get(fetch2); - if (cached) - return cached; - const promise = (async () => { - try { - const FetchResponse = "Response" in fetch2 ? fetch2.Response : (await fetch2("data:,")).constructor; - const data = new FormData(); - if (data.toString() === await new FetchResponse(data).text()) { - return false; - } - return true; - } catch { - return true; - } - })(); - supportsFormDataMap.set(fetch2, promise); - return promise; -} -var checkFileSupport, isAsyncIterable, multipartFormRequestOptions, supportsFormDataMap, createForm, addFormValue; -var init_uploads = __esm({ - "node_modules/@anthropic-ai/sdk/internal/uploads.mjs"() { - init_shims(); - checkFileSupport = () => { - if (typeof File === "undefined") { - const { process: process2 } = globalThis; - const isOldNode = typeof process2?.versions?.node === "string" && parseInt(process2.versions.node.split(".")) < 20; - throw new Error("`File` is not defined as a global, which is required for file uploads." + (isOldNode ? " Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`." : "")); - } - }; - isAsyncIterable = (value2) => value2 != null && typeof value2 === "object" && typeof value2[Symbol.asyncIterator] === "function"; - multipartFormRequestOptions = async (opts, fetch2, stripFilenames = true) => { - return { ...opts, body: await createForm(opts.body, fetch2, stripFilenames) }; - }; - supportsFormDataMap = /* @__PURE__ */ new WeakMap(); - createForm = async (body, fetch2, stripFilenames = true) => { - if (!await supportsFormData(fetch2)) { - throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class."); - } - const form = new FormData(); - await Promise.all(Object.entries(body || {}).map(([key, value2]) => addFormValue(form, key, value2, stripFilenames))); - return form; - }; - addFormValue = async (form, key, value2, stripFilenames) => { - if (value2 === void 0) - return; - if (value2 == null) { - throw new TypeError(`Received null for "${key}"; to pass null in FormData, you must use the string 'null'`); - } - if (typeof value2 === "string" || typeof value2 === "number" || typeof value2 === "boolean") { - form.append(key, String(value2)); - } else if (value2 instanceof Response) { - let options = {}; - const contentType = value2.headers.get("Content-Type"); - if (contentType) { - options = { type: contentType }; - } - form.append(key, makeFile([await value2.blob()], getName(value2, stripFilenames), options)); - } else if (isAsyncIterable(value2)) { - form.append(key, makeFile([await new Response(ReadableStreamFrom(value2)).blob()], getName(value2, stripFilenames))); - } else if (value2 instanceof Blob) { - const isFile = typeof File !== "undefined" && value2 instanceof File; - const name = isFile ? value2.name : getName(value2, stripFilenames); - form.append(key, makeFile([value2], name, { type: value2.type })); - } else if (Array.isArray(value2)) { - await Promise.all(value2.map((entry2) => addFormValue(form, key + "[]", entry2, stripFilenames))); - } else if (typeof value2.then === "function") { - throw new TypeError(`Received a Promise for "${key}"; await it first, e.g. \`await toFile(...)\``); - } else if (value2 instanceof ArrayBuffer || ArrayBuffer.isView(value2)) { - throw new TypeError(`Received ${value2.constructor.name} for "${key}"; to upload raw bytes, wrap them with \`await toFile(bytes, 'filename')\``); - } else if (typeof value2 === "object") { - await Promise.all(Object.entries(value2).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop, stripFilenames))); - } else { - throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value2} instead`); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/to-file.mjs -async function toFile(value2, name, options) { - checkFileSupport(); - value2 = await value2; - name || (name = value2 instanceof File ? value2.name : getName(value2, true)); - if (isFileLike(value2)) { - if (value2 instanceof File && name == null && options == null) { - return value2; - } - return makeFile([await value2.arrayBuffer()], name ?? value2.name, { - type: value2.type, - lastModified: value2.lastModified, - ...options - }); - } - if (isResponseLike(value2)) { - const blob = await value2.blob(); - name || (name = new URL(value2.url).pathname.split(/[\\/]/).pop()); - return makeFile(await getBytes(blob), name, options); - } - const parts = await getBytes(value2); - if (!options?.type) { - const type = parts.find((part) => typeof part === "object" && "type" in part && part.type); - if (typeof type === "string") { - options = { ...options, type }; - } - } - return makeFile(parts, name, options); -} -async function getBytes(value2) { - let parts = []; - if (typeof value2 === "string" || ArrayBuffer.isView(value2) || // includes Uint8Array, Buffer, etc. - value2 instanceof ArrayBuffer) { - parts.push(value2); - } else if (isBlobLike(value2)) { - parts.push(value2 instanceof Blob ? value2 : await value2.arrayBuffer()); - } else if (isAsyncIterable(value2)) { - for await (const chunk of value2) { - parts.push(...await getBytes(chunk)); - } - } else { - const constructor = value2?.constructor?.name; - throw new Error(`Unexpected data type: ${typeof value2}${constructor ? `; constructor: ${constructor}` : ""}${propsForError(value2)}`); - } - return parts; -} -function propsForError(value2) { - if (typeof value2 !== "object" || value2 === null) - return ""; - const props = Object.getOwnPropertyNames(value2); - return `; props: [${props.map((p) => `"${p}"`).join(", ")}]`; -} -var isBlobLike, isFileLike, isResponseLike; -var init_to_file = __esm({ - "node_modules/@anthropic-ai/sdk/internal/to-file.mjs"() { - init_uploads(); - init_uploads(); - isBlobLike = (value2) => value2 != null && typeof value2 === "object" && typeof value2.size === "number" && typeof value2.type === "string" && typeof value2.text === "function" && typeof value2.slice === "function" && typeof value2.arrayBuffer === "function"; - isFileLike = (value2) => value2 != null && typeof value2 === "object" && typeof value2.name === "string" && typeof value2.lastModified === "number" && isBlobLike(value2); - isResponseLike = (value2) => value2 != null && typeof value2 === "object" && typeof value2.url === "string" && typeof value2.blob === "function"; - } -}); - -// node_modules/@anthropic-ai/sdk/core/uploads.mjs -var init_uploads2 = __esm({ - "node_modules/@anthropic-ai/sdk/core/uploads.mjs"() { - init_to_file(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/shared.mjs -var init_shared = __esm({ - "node_modules/@anthropic-ai/sdk/resources/shared.mjs"() { - } -}); - -// node_modules/@anthropic-ai/sdk/core/resource.mjs -var APIResource; -var init_resource = __esm({ - "node_modules/@anthropic-ai/sdk/core/resource.mjs"() { - APIResource = class { - constructor(client) { - this._client = client; - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/headers.mjs -function* iterateHeaders(headers) { - if (!headers) - return; - if (brand_privateNullableHeaders in headers) { - const { values, nulls } = headers; - yield* values.entries(); - for (const name of nulls) { - yield [name, null]; - } - return; - } - let shouldClear = false; - let iter; - if (headers instanceof Headers) { - iter = headers.entries(); - } else if (isReadonlyArray(headers)) { - iter = headers; - } else { - shouldClear = true; - iter = Object.entries(headers ?? {}); - } - for (let row of iter) { - const name = row[0]; - if (typeof name !== "string") - throw new TypeError("expected header name to be a string"); - const values = isReadonlyArray(row[1]) ? row[1] : [row[1]]; - let didClear = false; - for (const value2 of values) { - if (value2 === void 0) - continue; - if (shouldClear && !didClear) { - didClear = true; - yield [name, clearSentinel]; - } - yield [name, value2]; - } - } -} -var brand_privateNullableHeaders, clearSentinel, APPEND_HEADERS, appendHeaderValue, buildHeaders; -var init_headers = __esm({ - "node_modules/@anthropic-ai/sdk/internal/headers.mjs"() { - init_values(); - brand_privateNullableHeaders = /* @__PURE__ */ Symbol.for("brand.privateNullableHeaders"); - clearSentinel = /* @__PURE__ */ Symbol("clear"); - APPEND_HEADERS = /* @__PURE__ */ new Set(["x-stainless-helper"]); - appendHeaderValue = (existing, addition) => { - const tokens = existing ? existing.split(",").map((t) => t.trim()).filter(Boolean) : []; - for (const tok of addition.split(",").map((t) => t.trim())) { - if (tok && !tokens.includes(tok)) - tokens.push(tok); - } - return tokens.join(", "); - }; - buildHeaders = (newHeaders) => { - const targetHeaders = new Headers(); - const nullHeaders = /* @__PURE__ */ new Set(); - for (const headers of newHeaders) { - const seenHeaders = /* @__PURE__ */ new Set(); - for (const [name, value2] of iterateHeaders(headers)) { - const lowerName = name.toLowerCase(); - if (APPEND_HEADERS.has(lowerName)) { - if (value2 === clearSentinel) - continue; - if (value2 === null) { - targetHeaders.delete(name); - nullHeaders.add(lowerName); - } else { - targetHeaders.set(name, appendHeaderValue(targetHeaders.get(name), value2)); - nullHeaders.delete(lowerName); - } - continue; - } - if (value2 === clearSentinel || !seenHeaders.has(lowerName)) { - targetHeaders.delete(name); - seenHeaders.add(lowerName); - if (value2 === clearSentinel) - continue; - } - if (value2 === null) { - targetHeaders.delete(name); - nullHeaders.add(lowerName); - } else { - targetHeaders.append(name, value2); - nullHeaders.delete(lowerName); - } - } - } - return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders }; - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/path.mjs -function encodeURIPath(str2) { - return str2.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g, encodeURIComponent); -} -var EMPTY, createPathTagFunction, path2; -var init_path = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/path.mjs"() { - init_error(); - EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null)); - createPathTagFunction = (pathEncoder = encodeURIPath) => function path5(statics, ...params) { - if (statics.length === 1) - return statics[0]; - let postPath = false; - const invalidSegments = []; - const path6 = statics.reduce((previousValue, currentValue, index) => { - if (/[?#]/.test(currentValue)) { - postPath = true; - } - const value2 = params[index]; - let encoded = (postPath ? encodeURIComponent : pathEncoder)("" + value2); - if (index !== params.length && (value2 == null || typeof value2 === "object" && // handle values from other realms - value2.toString === Object.getPrototypeOf(Object.getPrototypeOf(value2.hasOwnProperty ?? EMPTY) ?? EMPTY)?.toString)) { - encoded = value2 + ""; - invalidSegments.push({ - start: previousValue.length + currentValue.length, - length: encoded.length, - error: `Value of type ${Object.prototype.toString.call(value2).slice(8, -1)} is not a valid path parameter` - }); - } - return previousValue + currentValue + (index === params.length ? "" : encoded); - }, ""); - const pathOnly = path6.split(/[?#]/, 1)[0]; - const invalidSegmentPattern = /(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi; - let match; - while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) { - invalidSegments.push({ - start: match.index, - length: match[0].length, - error: `Value "${match[0]}" can't be safely passed as a path parameter` - }); - } - invalidSegments.sort((a, b) => a.start - b.start); - if (invalidSegments.length > 0) { - let lastEnd = 0; - const underline = invalidSegments.reduce((acc, segment) => { - const spaces = " ".repeat(segment.start - lastEnd); - const arrows = "^".repeat(segment.length); - lastEnd = segment.start + segment.length; - return acc + spaces + arrows; - }, ""); - throw new AnthropicError(`Path parameters result in path with invalid segments: -${invalidSegments.map((e) => e.error).join("\n")} -${path6} -${underline}`); - } - return path6; - }; - path2 = /* @__PURE__ */ createPathTagFunction(encodeURIPath); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/deployment-runs.mjs -var DeploymentRuns; -var init_deployment_runs = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/deployment-runs.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - DeploymentRuns = class extends APIResource { - /** - * Get Deployment Run - * - * @example - * ```ts - * const betaManagedAgentsDeploymentRun = - * await client.beta.deploymentRuns.retrieve( - * 'deployment_run_id', - * ); - * ``` - */ - retrieve(deploymentRunID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/deployment_runs/${deploymentRunID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List Deployment Runs - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsDeploymentRun of client.beta.deploymentRuns.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/deployment_runs?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/deployments.mjs -var Deployments; -var init_deployments = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/deployments.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Deployments = class extends APIResource { - /** - * Create Deployment - * - * @example - * ```ts - * const betaManagedAgentsDeployment = - * await client.beta.deployments.create({ - * agent: 'string', - * environment_id: 'x', - * initial_events: [ - * { - * content: [ - * { - * text: 'Where is my order #1234?', - * type: 'text', - * }, - * ], - * type: 'user.message', - * }, - * ], - * name: 'x', - * }); - * ``` - */ - create(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/deployments?beta=true", { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Get Deployment - * - * @example - * ```ts - * const betaManagedAgentsDeployment = - * await client.beta.deployments.retrieve( - * 'depl_011CZkZcDH3vPqd7xnEfwTai', - * ); - * ``` - */ - retrieve(deploymentID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/deployments/${deploymentID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Update Deployment - * - * @example - * ```ts - * const betaManagedAgentsDeployment = - * await client.beta.deployments.update( - * 'depl_011CZkZcDH3vPqd7xnEfwTai', - * ); - * ``` - */ - update(deploymentID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/deployments/${deploymentID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List Deployments - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsDeployment of client.beta.deployments.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/deployments?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Archive Deployment - * - * @example - * ```ts - * const betaManagedAgentsDeployment = - * await client.beta.deployments.archive( - * 'depl_011CZkZcDH3vPqd7xnEfwTai', - * ); - * ``` - */ - archive(deploymentID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/deployments/${deploymentID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Pause Deployment - * - * @example - * ```ts - * const betaManagedAgentsDeployment = - * await client.beta.deployments.pause( - * 'depl_011CZkZcDH3vPqd7xnEfwTai', - * ); - * ``` - */ - pause(deploymentID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/deployments/${deploymentID}/pause?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Run Deployment Now - * - * @example - * ```ts - * const betaManagedAgentsDeploymentRun = - * await client.beta.deployments.run( - * 'depl_011CZkZcDH3vPqd7xnEfwTai', - * ); - * ``` - */ - run(deploymentID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/deployments/${deploymentID}/run?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Unpause Deployment - * - * @example - * ```ts - * const betaManagedAgentsDeployment = - * await client.beta.deployments.unpause( - * 'depl_011CZkZcDH3vPqd7xnEfwTai', - * ); - * ``` - */ - unpause(deploymentID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/deployments/${deploymentID}/unpause?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/dreams.mjs -var Dreams; -var init_dreams = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/dreams.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Dreams = class extends APIResource { - /** - * Start an asynchronous job that uses past sessions to produce a reorganized - * version of a memory store and get back the dream to poll for the result. - * - * By default the dream writes its result to a new memory store and doesn't change - * the input memory store. The response has `status` set to `pending` and an empty - * `outputs` array. Poll the dream until `status` is `completed`, `failed`, or - * `canceled`. - * - * See the - * [Dreams guide](https://platform.claude.com/docs/en/managed-agents/dreams#create-a-dream) - * to learn more about creating dreams. - * - * @example - * ```ts - * const betaDream = await client.beta.dreams.create({ - * inputs: [{ memory_store_id: 'x', type: 'memory_store' }], - * model: 'string', - * }); - * ``` - */ - create(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/dreams?beta=true", { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "dreaming-2026-04-21"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Get a dream by ID to check its status, output memory store, and token usage. - * - * Archived dreams are returned too. - * - * See the - * [Dreams guide](https://platform.claude.com/docs/en/managed-agents/dreams#track-progress) - * for how to poll a dream and what each status means. - * - * @example - * ```ts - * const betaDream = await client.beta.dreams.retrieve( - * 'dream_id', - * ); - * ``` - */ - retrieve(dreamID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/dreams/${dreamID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "dreaming-2026-04-21"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List the dreams in the workspace, newest first. - * - * Archived dreams are left out unless `include_archived` is `true`. - * - * See the - * [Dreams guide](https://platform.claude.com/docs/en/managed-agents/dreams#list-dreams) - * for how to page through dreams. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaDream of client.beta.dreams.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/dreams?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "dreaming-2026-04-21"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Hide a `completed`, `failed`, or `canceled` dream from the default list of - * dreams. - * - * Archiving a `pending` or `running` dream returns a 400 error, so cancel it - * first. Archiving an archived dream returns it unchanged. An archived dream can - * still be fetched by ID. Archiving can't be undone. - * - * See the - * [Dreams guide](https://platform.claude.com/docs/en/managed-agents/dreams#archive-a-dream) - * to learn more about archiving dreams. - * - * @example - * ```ts - * const betaDream = await client.beta.dreams.archive( - * 'dream_id', - * ); - * ``` - */ - archive(dreamID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/dreams/${dreamID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "dreaming-2026-04-21"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Stop a `pending` or `running` dream. - * - * The response shows `status` as `canceled`, unless the dream reached `completed` - * or `failed` first. `usage` can keep changing after the response. Canceling a - * `canceled` dream returns it unchanged. Canceling a `completed` or `failed` dream - * returns a 400 error. - * - * See the - * [Dreams guide](https://platform.claude.com/docs/en/managed-agents/dreams#cancel-a-dream) - * to learn more about canceling dreams. - * - * @example - * ```ts - * const betaDream = await client.beta.dreams.cancel( - * 'dream_id', - * ); - * ``` - */ - cancel(dreamID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/dreams/${dreamID}/cancel?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "dreaming-2026-04-21"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/stainless-helper-header.mjs -function helperHeader(value2) { - return { [STAINLESS_HELPER_HEADER]: value2 }; -} -function wasCreatedByStainlessHelper(value2) { - return typeof value2 === "object" && value2 !== null && SDK_HELPER_SYMBOL in value2; -} -function collectStainlessHelpers(tools, messages) { - const helpers = /* @__PURE__ */ new Set(); - if (tools) { - for (const tool of tools) { - if (wasCreatedByStainlessHelper(tool)) { - helpers.add(tool[SDK_HELPER_SYMBOL]); - } - } - } - if (messages) { - for (const message of messages) { - if (wasCreatedByStainlessHelper(message)) { - helpers.add(message[SDK_HELPER_SYMBOL]); - } - const content = message.content; - if (Array.isArray(content)) { - for (const block of content) { - if (wasCreatedByStainlessHelper(block)) { - helpers.add(block[SDK_HELPER_SYMBOL]); - } - const definition = block?.tool?.definition; - if (wasCreatedByStainlessHelper(definition)) { - helpers.add(definition[SDK_HELPER_SYMBOL]); - } - } - } - } - } - return Array.from(helpers); -} -function stainlessHelperHeader(tools, messages) { - const helpers = collectStainlessHelpers(tools, messages); - if (helpers.length === 0) - return {}; - return { [STAINLESS_HELPER_HEADER]: helpers.join(", ") }; -} -function stainlessHelperHeaderFromFile(file2) { - if (wasCreatedByStainlessHelper(file2)) { - return { [STAINLESS_HELPER_HEADER]: file2[SDK_HELPER_SYMBOL] }; - } - return {}; -} -var STAINLESS_HELPER_HEADER, STAINLESS_HELPER_METHOD_HEADER, SDK_HELPER_SYMBOL; -var init_stainless_helper_header = __esm({ - "node_modules/@anthropic-ai/sdk/internal/stainless-helper-header.mjs"() { - STAINLESS_HELPER_HEADER = "x-stainless-helper"; - STAINLESS_HELPER_METHOD_HEADER = "x-stainless-helper-method"; - SDK_HELPER_SYMBOL = /* @__PURE__ */ Symbol("anthropic.sdk.stainlessHelper"); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/files.mjs -var Files; -var init_files = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/files.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_stainless_helper_header(); - init_uploads(); - init_path(); - Files = class extends APIResource { - /** - * List Files - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaFileMetadata of client.beta.files.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/files?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Delete File - * - * @example - * ```ts - * const betaDeletedFile = await client.beta.files.delete( - * 'file_id', - * ); - * ``` - */ - delete(fileID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.delete(path2`/v1/files/${fileID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Download File - * - * @example - * ```ts - * const response = await client.beta.files.download( - * 'file_id', - * ); - * - * const content = await response.blob(); - * console.log(content); - * ``` - */ - download(fileID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/files/${fileID}/content?beta=true`, { - ...options, - headers: buildHeaders([ - { - Accept: "application/binary", - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]), - __binaryResponse: true - }); - } - /** - * Get File Metadata - * - * @example - * ```ts - * const betaFileMetadata = - * await client.beta.files.retrieveMetadata('file_id'); - * ``` - */ - retrieveMetadata(fileID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/files/${fileID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Upload File - * - * @example - * ```ts - * const betaFileMetadata = await client.beta.files.upload({ - * file: fs.createReadStream('path/to/file'), - * }); - * ``` - */ - upload(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/files?beta=true", multipartFormRequestOptions({ - body, - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - stainlessHelperHeaderFromFile(body.file), - options?.headers - ]) - }, this._client)); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/models.mjs -var Models; -var init_models2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/models.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Models = class extends APIResource { - /** - * Get a specific model. - * - * The Models API response can be used to determine information about a specific - * model or resolve a model alias to a model ID. - * - * @example - * ```ts - * const betaModelInfo = await client.beta.models.retrieve( - * 'model_id', - * ); - * ``` - */ - retrieve(modelID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/models/${modelID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List available models. - * - * The Models API response can be used to determine which models are available for - * use in the API. More recently released models are listed first. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaModelInfo of client.beta.models.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/models?beta=true", Page, { - query, - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/user-profiles.mjs -var UserProfiles; -var init_user_profiles = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/user-profiles.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - UserProfiles = class extends APIResource { - /** - * Create User Profile - * - * @example - * ```ts - * const betaUserProfile = - * await client.beta.userProfiles.create(); - * ``` - */ - create(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/user_profiles?beta=true", { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "user-profiles-2026-08-18"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Get User Profile - * - * @example - * ```ts - * const betaUserProfile = - * await client.beta.userProfiles.retrieve( - * 'uprof_011CZkZCu8hGbp5mYRQgUmz9', - * ); - * ``` - */ - retrieve(userProfileID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/user_profiles/${userProfileID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "user-profiles-2026-08-18"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Update User Profile - * - * @example - * ```ts - * const betaUserProfile = - * await client.beta.userProfiles.update( - * 'uprof_011CZkZCu8hGbp5mYRQgUmz9', - * ); - * ``` - */ - update(userProfileID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/user_profiles/${userProfileID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "user-profiles-2026-08-18"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List User Profiles - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaUserProfile of client.beta.userProfiles.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/user_profiles?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "user-profiles-2026-08-18"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Create Enrollment URL - * - * @example - * ```ts - * const betaUserProfileEnrollmentURL = - * await client.beta.userProfiles.createEnrollmentURL( - * 'uprof_011CZkZCu8hGbp5mYRQgUmz9', - * ); - * ``` - */ - createEnrollmentURL(userProfileID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/user_profiles/${userProfileID}/enrollment_url?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "user-profiles-2026-08-18"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@stablelib/base64/lib/base64.js -var require_base64 = __commonJS({ - "node_modules/@stablelib/base64/lib/base64.js"(exports) { - "use strict"; - var __extends = exports && exports.__extends || /* @__PURE__ */ (function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) if (b2.hasOwnProperty(p)) d2[p] = b2[p]; - }; - return extendStatics(d, b); - }; - return function(d, b) { - extendStatics(d, b); - function __() { - this.constructor = d; - } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; - })(); - Object.defineProperty(exports, "__esModule", { value: true }); - var INVALID_BYTE = 256; - var Coder = ( - /** @class */ - (function() { - function Coder2(_paddingCharacter) { - if (_paddingCharacter === void 0) { - _paddingCharacter = "="; - } - this._paddingCharacter = _paddingCharacter; - } - Coder2.prototype.encodedLength = function(length) { - if (!this._paddingCharacter) { - return (length * 8 + 5) / 6 | 0; - } - return (length + 2) / 3 * 4 | 0; - }; - Coder2.prototype.encode = function(data) { - var out = ""; - var i = 0; - for (; i < data.length - 2; i += 3) { - var c = data[i] << 16 | data[i + 1] << 8 | data[i + 2]; - out += this._encodeByte(c >>> 3 * 6 & 63); - out += this._encodeByte(c >>> 2 * 6 & 63); - out += this._encodeByte(c >>> 1 * 6 & 63); - out += this._encodeByte(c >>> 0 * 6 & 63); - } - var left = data.length - i; - if (left > 0) { - var c = data[i] << 16 | (left === 2 ? data[i + 1] << 8 : 0); - out += this._encodeByte(c >>> 3 * 6 & 63); - out += this._encodeByte(c >>> 2 * 6 & 63); - if (left === 2) { - out += this._encodeByte(c >>> 1 * 6 & 63); - } else { - out += this._paddingCharacter || ""; - } - out += this._paddingCharacter || ""; - } - return out; - }; - Coder2.prototype.maxDecodedLength = function(length) { - if (!this._paddingCharacter) { - return (length * 6 + 7) / 8 | 0; - } - return length / 4 * 3 | 0; - }; - Coder2.prototype.decodedLength = function(s) { - return this.maxDecodedLength(s.length - this._getPaddingLength(s)); - }; - Coder2.prototype.decode = function(s) { - if (s.length === 0) { - return new Uint8Array(0); - } - var paddingLength = this._getPaddingLength(s); - var length = s.length - paddingLength; - var out = new Uint8Array(this.maxDecodedLength(length)); - var op2 = 0; - var i = 0; - var haveBad = 0; - var v0 = 0, v1 = 0, v2 = 0, v3 = 0; - for (; i < length - 4; i += 4) { - v0 = this._decodeChar(s.charCodeAt(i + 0)); - v1 = this._decodeChar(s.charCodeAt(i + 1)); - v2 = this._decodeChar(s.charCodeAt(i + 2)); - v3 = this._decodeChar(s.charCodeAt(i + 3)); - out[op2++] = v0 << 2 | v1 >>> 4; - out[op2++] = v1 << 4 | v2 >>> 2; - out[op2++] = v2 << 6 | v3; - haveBad |= v0 & INVALID_BYTE; - haveBad |= v1 & INVALID_BYTE; - haveBad |= v2 & INVALID_BYTE; - haveBad |= v3 & INVALID_BYTE; - } - if (i < length - 1) { - v0 = this._decodeChar(s.charCodeAt(i)); - v1 = this._decodeChar(s.charCodeAt(i + 1)); - out[op2++] = v0 << 2 | v1 >>> 4; - haveBad |= v0 & INVALID_BYTE; - haveBad |= v1 & INVALID_BYTE; - } - if (i < length - 2) { - v2 = this._decodeChar(s.charCodeAt(i + 2)); - out[op2++] = v1 << 4 | v2 >>> 2; - haveBad |= v2 & INVALID_BYTE; - } - if (i < length - 3) { - v3 = this._decodeChar(s.charCodeAt(i + 3)); - out[op2++] = v2 << 6 | v3; - haveBad |= v3 & INVALID_BYTE; - } - if (haveBad !== 0) { - throw new Error("Base64Coder: incorrect characters for decoding"); - } - return out; - }; - Coder2.prototype._encodeByte = function(b) { - var result = b; - result += 65; - result += 25 - b >>> 8 & 0 - 65 - 26 + 97; - result += 51 - b >>> 8 & 26 - 97 - 52 + 48; - result += 61 - b >>> 8 & 52 - 48 - 62 + 43; - result += 62 - b >>> 8 & 62 - 43 - 63 + 47; - return String.fromCharCode(result); - }; - Coder2.prototype._decodeChar = function(c) { - var result = INVALID_BYTE; - result += (42 - c & c - 44) >>> 8 & -INVALID_BYTE + c - 43 + 62; - result += (46 - c & c - 48) >>> 8 & -INVALID_BYTE + c - 47 + 63; - result += (47 - c & c - 58) >>> 8 & -INVALID_BYTE + c - 48 + 52; - result += (64 - c & c - 91) >>> 8 & -INVALID_BYTE + c - 65 + 0; - result += (96 - c & c - 123) >>> 8 & -INVALID_BYTE + c - 97 + 26; - return result; - }; - Coder2.prototype._getPaddingLength = function(s) { - var paddingLength = 0; - if (this._paddingCharacter) { - for (var i = s.length - 1; i >= 0; i--) { - if (s[i] !== this._paddingCharacter) { - break; - } - paddingLength++; - } - if (s.length < 4 || paddingLength > 2) { - throw new Error("Base64Coder: incorrect padding"); - } - } - return paddingLength; - }; - return Coder2; - })() - ); - exports.Coder = Coder; - var stdCoder = new Coder(); - function encode3(data) { - return stdCoder.encode(data); - } - exports.encode = encode3; - function decode(s) { - return stdCoder.decode(s); - } - exports.decode = decode; - var URLSafeCoder = ( - /** @class */ - (function(_super) { - __extends(URLSafeCoder2, _super); - function URLSafeCoder2() { - return _super !== null && _super.apply(this, arguments) || this; - } - URLSafeCoder2.prototype._encodeByte = function(b) { - var result = b; - result += 65; - result += 25 - b >>> 8 & 0 - 65 - 26 + 97; - result += 51 - b >>> 8 & 26 - 97 - 52 + 48; - result += 61 - b >>> 8 & 52 - 48 - 62 + 45; - result += 62 - b >>> 8 & 62 - 45 - 63 + 95; - return String.fromCharCode(result); - }; - URLSafeCoder2.prototype._decodeChar = function(c) { - var result = INVALID_BYTE; - result += (44 - c & c - 46) >>> 8 & -INVALID_BYTE + c - 45 + 62; - result += (94 - c & c - 96) >>> 8 & -INVALID_BYTE + c - 95 + 63; - result += (47 - c & c - 58) >>> 8 & -INVALID_BYTE + c - 48 + 52; - result += (64 - c & c - 91) >>> 8 & -INVALID_BYTE + c - 65 + 0; - result += (96 - c & c - 123) >>> 8 & -INVALID_BYTE + c - 97 + 26; - return result; - }; - return URLSafeCoder2; - })(Coder) - ); - exports.URLSafeCoder = URLSafeCoder; - var urlSafeCoder = new URLSafeCoder(); - function encodeURLSafe(data) { - return urlSafeCoder.encode(data); - } - exports.encodeURLSafe = encodeURLSafe; - function decodeURLSafe(s) { - return urlSafeCoder.decode(s); - } - exports.decodeURLSafe = decodeURLSafe; - exports.encodedLength = function(length) { - return stdCoder.encodedLength(length); - }; - exports.maxDecodedLength = function(length) { - return stdCoder.maxDecodedLength(length); - }; - exports.decodedLength = function(s) { - return stdCoder.decodedLength(s); - }; - } -}); - -// node_modules/fast-sha256/sha256.js -var require_sha256 = __commonJS({ - "node_modules/fast-sha256/sha256.js"(exports, module) { - (function(root, factory) { - var exports2 = {}; - factory(exports2); - var sha256 = exports2["default"]; - for (var k in exports2) { - sha256[k] = exports2[k]; - } - if (typeof module === "object" && typeof module.exports === "object") { - module.exports = sha256; - } else if (typeof define === "function" && define.amd) { - define(function() { - return sha256; - }); - } else { - root.sha256 = sha256; - } - })(exports, function(exports2) { - "use strict"; - exports2.__esModule = true; - exports2.digestLength = 32; - exports2.blockSize = 64; - var K = new Uint32Array([ - 1116352408, - 1899447441, - 3049323471, - 3921009573, - 961987163, - 1508970993, - 2453635748, - 2870763221, - 3624381080, - 310598401, - 607225278, - 1426881987, - 1925078388, - 2162078206, - 2614888103, - 3248222580, - 3835390401, - 4022224774, - 264347078, - 604807628, - 770255983, - 1249150122, - 1555081692, - 1996064986, - 2554220882, - 2821834349, - 2952996808, - 3210313671, - 3336571891, - 3584528711, - 113926993, - 338241895, - 666307205, - 773529912, - 1294757372, - 1396182291, - 1695183700, - 1986661051, - 2177026350, - 2456956037, - 2730485921, - 2820302411, - 3259730800, - 3345764771, - 3516065817, - 3600352804, - 4094571909, - 275423344, - 430227734, - 506948616, - 659060556, - 883997877, - 958139571, - 1322822218, - 1537002063, - 1747873779, - 1955562222, - 2024104815, - 2227730452, - 2361852424, - 2428436474, - 2756734187, - 3204031479, - 3329325298 - ]); - function hashBlocks(w, v, p, pos, len) { - var a, b, c, d, e, f, g, h, u, i, j, t1, t2; - while (len >= 64) { - a = v[0]; - b = v[1]; - c = v[2]; - d = v[3]; - e = v[4]; - f = v[5]; - g = v[6]; - h = v[7]; - for (i = 0; i < 16; i++) { - j = pos + i * 4; - w[i] = (p[j] & 255) << 24 | (p[j + 1] & 255) << 16 | (p[j + 2] & 255) << 8 | p[j + 3] & 255; - } - for (i = 16; i < 64; i++) { - u = w[i - 2]; - t1 = (u >>> 17 | u << 32 - 17) ^ (u >>> 19 | u << 32 - 19) ^ u >>> 10; - u = w[i - 15]; - t2 = (u >>> 7 | u << 32 - 7) ^ (u >>> 18 | u << 32 - 18) ^ u >>> 3; - w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0); - } - for (i = 0; i < 64; i++) { - t1 = (((e >>> 6 | e << 32 - 6) ^ (e >>> 11 | e << 32 - 11) ^ (e >>> 25 | e << 32 - 25)) + (e & f ^ ~e & g) | 0) + (h + (K[i] + w[i] | 0) | 0) | 0; - t2 = ((a >>> 2 | a << 32 - 2) ^ (a >>> 13 | a << 32 - 13) ^ (a >>> 22 | a << 32 - 22)) + (a & b ^ a & c ^ b & c) | 0; - h = g; - g = f; - f = e; - e = d + t1 | 0; - d = c; - c = b; - b = a; - a = t1 + t2 | 0; - } - v[0] += a; - v[1] += b; - v[2] += c; - v[3] += d; - v[4] += e; - v[5] += f; - v[6] += g; - v[7] += h; - pos += 64; - len -= 64; - } - return pos; - } - var Hash = ( - /** @class */ - (function() { - function Hash2() { - this.digestLength = exports2.digestLength; - this.blockSize = exports2.blockSize; - this.state = new Int32Array(8); - this.temp = new Int32Array(64); - this.buffer = new Uint8Array(128); - this.bufferLength = 0; - this.bytesHashed = 0; - this.finished = false; - this.reset(); - } - Hash2.prototype.reset = function() { - this.state[0] = 1779033703; - this.state[1] = 3144134277; - this.state[2] = 1013904242; - this.state[3] = 2773480762; - this.state[4] = 1359893119; - this.state[5] = 2600822924; - this.state[6] = 528734635; - this.state[7] = 1541459225; - this.bufferLength = 0; - this.bytesHashed = 0; - this.finished = false; - return this; - }; - Hash2.prototype.clean = function() { - for (var i = 0; i < this.buffer.length; i++) { - this.buffer[i] = 0; - } - for (var i = 0; i < this.temp.length; i++) { - this.temp[i] = 0; - } - this.reset(); - }; - Hash2.prototype.update = function(data, dataLength) { - if (dataLength === void 0) { - dataLength = data.length; - } - if (this.finished) { - throw new Error("SHA256: can't update because hash was finished."); - } - var dataPos = 0; - this.bytesHashed += dataLength; - if (this.bufferLength > 0) { - while (this.bufferLength < 64 && dataLength > 0) { - this.buffer[this.bufferLength++] = data[dataPos++]; - dataLength--; - } - if (this.bufferLength === 64) { - hashBlocks(this.temp, this.state, this.buffer, 0, 64); - this.bufferLength = 0; - } - } - if (dataLength >= 64) { - dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength); - dataLength %= 64; - } - while (dataLength > 0) { - this.buffer[this.bufferLength++] = data[dataPos++]; - dataLength--; - } - return this; - }; - Hash2.prototype.finish = function(out) { - if (!this.finished) { - var bytesHashed = this.bytesHashed; - var left = this.bufferLength; - var bitLenHi = bytesHashed / 536870912 | 0; - var bitLenLo = bytesHashed << 3; - var padLength = bytesHashed % 64 < 56 ? 64 : 128; - this.buffer[left] = 128; - for (var i = left + 1; i < padLength - 8; i++) { - this.buffer[i] = 0; - } - this.buffer[padLength - 8] = bitLenHi >>> 24 & 255; - this.buffer[padLength - 7] = bitLenHi >>> 16 & 255; - this.buffer[padLength - 6] = bitLenHi >>> 8 & 255; - this.buffer[padLength - 5] = bitLenHi >>> 0 & 255; - this.buffer[padLength - 4] = bitLenLo >>> 24 & 255; - this.buffer[padLength - 3] = bitLenLo >>> 16 & 255; - this.buffer[padLength - 2] = bitLenLo >>> 8 & 255; - this.buffer[padLength - 1] = bitLenLo >>> 0 & 255; - hashBlocks(this.temp, this.state, this.buffer, 0, padLength); - this.finished = true; - } - for (var i = 0; i < 8; i++) { - out[i * 4 + 0] = this.state[i] >>> 24 & 255; - out[i * 4 + 1] = this.state[i] >>> 16 & 255; - out[i * 4 + 2] = this.state[i] >>> 8 & 255; - out[i * 4 + 3] = this.state[i] >>> 0 & 255; - } - return this; - }; - Hash2.prototype.digest = function() { - var out = new Uint8Array(this.digestLength); - this.finish(out); - return out; - }; - Hash2.prototype._saveState = function(out) { - for (var i = 0; i < this.state.length; i++) { - out[i] = this.state[i]; - } - }; - Hash2.prototype._restoreState = function(from, bytesHashed) { - for (var i = 0; i < this.state.length; i++) { - this.state[i] = from[i]; - } - this.bytesHashed = bytesHashed; - this.finished = false; - this.bufferLength = 0; - }; - return Hash2; - })() - ); - exports2.Hash = Hash; - var HMAC = ( - /** @class */ - (function() { - function HMAC2(key) { - this.inner = new Hash(); - this.outer = new Hash(); - this.blockSize = this.inner.blockSize; - this.digestLength = this.inner.digestLength; - var pad = new Uint8Array(this.blockSize); - if (key.length > this.blockSize) { - new Hash().update(key).finish(pad).clean(); - } else { - for (var i = 0; i < key.length; i++) { - pad[i] = key[i]; - } - } - for (var i = 0; i < pad.length; i++) { - pad[i] ^= 54; - } - this.inner.update(pad); - for (var i = 0; i < pad.length; i++) { - pad[i] ^= 54 ^ 92; - } - this.outer.update(pad); - this.istate = new Uint32Array(8); - this.ostate = new Uint32Array(8); - this.inner._saveState(this.istate); - this.outer._saveState(this.ostate); - for (var i = 0; i < pad.length; i++) { - pad[i] = 0; - } - } - HMAC2.prototype.reset = function() { - this.inner._restoreState(this.istate, this.inner.blockSize); - this.outer._restoreState(this.ostate, this.outer.blockSize); - return this; - }; - HMAC2.prototype.clean = function() { - for (var i = 0; i < this.istate.length; i++) { - this.ostate[i] = this.istate[i] = 0; - } - this.inner.clean(); - this.outer.clean(); - }; - HMAC2.prototype.update = function(data) { - this.inner.update(data); - return this; - }; - HMAC2.prototype.finish = function(out) { - if (this.outer.finished) { - this.outer.finish(out); - } else { - this.inner.finish(out); - this.outer.update(out, this.digestLength).finish(out); - } - return this; - }; - HMAC2.prototype.digest = function() { - var out = new Uint8Array(this.digestLength); - this.finish(out); - return out; - }; - return HMAC2; - })() - ); - exports2.HMAC = HMAC; - function hash(data) { - var h = new Hash().update(data); - var digest = h.digest(); - h.clean(); - return digest; - } - exports2.hash = hash; - exports2["default"] = hash; - function hmac(key, data) { - var h = new HMAC(key).update(data); - var digest = h.digest(); - h.clean(); - return digest; - } - exports2.hmac = hmac; - function fillBuffer(buffer, hmac2, info, counter) { - var num2 = counter[0]; - if (num2 === 0) { - throw new Error("hkdf: cannot expand more"); - } - hmac2.reset(); - if (num2 > 1) { - hmac2.update(buffer); - } - if (info) { - hmac2.update(info); - } - hmac2.update(counter); - hmac2.finish(buffer); - counter[0]++; - } - var hkdfSalt = new Uint8Array(exports2.digestLength); - function hkdf(key, salt, info, length) { - if (salt === void 0) { - salt = hkdfSalt; - } - if (length === void 0) { - length = 32; - } - var counter = new Uint8Array([1]); - var okm = hmac(salt, key); - var hmac_ = new HMAC(okm); - var buffer = new Uint8Array(hmac_.digestLength); - var bufpos = buffer.length; - var out = new Uint8Array(length); - for (var i = 0; i < length; i++) { - if (bufpos === buffer.length) { - fillBuffer(buffer, hmac_, info, counter); - bufpos = 0; - } - out[i] = buffer[bufpos++]; - } - hmac_.clean(); - buffer.fill(0); - counter.fill(0); - return out; - } - exports2.hkdf = hkdf; - function pbkdf2(password, salt, iterations, dkLen) { - var prf = new HMAC(password); - var len = prf.digestLength; - var ctr = new Uint8Array(4); - var t = new Uint8Array(len); - var u = new Uint8Array(len); - var dk = new Uint8Array(dkLen); - for (var i = 0; i * len < dkLen; i++) { - var c = i + 1; - ctr[0] = c >>> 24 & 255; - ctr[1] = c >>> 16 & 255; - ctr[2] = c >>> 8 & 255; - ctr[3] = c >>> 0 & 255; - prf.reset(); - prf.update(salt); - prf.update(ctr); - prf.finish(u); - for (var j = 0; j < len; j++) { - t[j] = u[j]; - } - for (var j = 2; j <= iterations; j++) { - prf.reset(); - prf.update(u).finish(u); - for (var k = 0; k < len; k++) { - t[k] ^= u[k]; - } - } - for (var j = 0; j < len && i * len + j < dkLen; j++) { - dk[i * len + j] = t[j]; - } - } - for (var i = 0; i < len; i++) { - t[i] = u[i] = 0; - } - for (var i = 0; i < 4; i++) { - ctr[i] = 0; - } - prf.clean(); - return dk; - } - exports2.pbkdf2 = pbkdf2; - }); - } -}); - -// node_modules/standardwebhooks/dist/timing_safe_equal.js -var require_timing_safe_equal = __commonJS({ - "node_modules/standardwebhooks/dist/timing_safe_equal.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.timingSafeEqual = timingSafeEqual; - function assert(expr, msg = "") { - if (!expr) { - throw new Error(msg); - } - } - function timingSafeEqual(a, b) { - if (a.byteLength !== b.byteLength) { - return false; - } - if (!(a instanceof DataView)) { - a = new DataView(ArrayBuffer.isView(a) ? a.buffer : a); - } - if (!(b instanceof DataView)) { - b = new DataView(ArrayBuffer.isView(b) ? b.buffer : b); - } - assert(a instanceof DataView); - assert(b instanceof DataView); - const length = a.byteLength; - let out = 0; - let i = -1; - while (++i < length) { - out |= a.getUint8(i) ^ b.getUint8(i); - } - return out === 0; - } - } -}); - -// node_modules/standardwebhooks/dist/index.js -var require_dist = __commonJS({ - "node_modules/standardwebhooks/dist/index.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Webhook = exports.WebhookVerificationError = void 0; - var base64 = require_base64(); - var sha256 = require_sha256(); - var timing_safe_equal_1 = require_timing_safe_equal(); - var WEBHOOK_TOLERANCE_IN_SECONDS = 5 * 60; - var ExtendableError = class _ExtendableError extends Error { - constructor(message) { - super(message); - Object.setPrototypeOf(this, _ExtendableError.prototype); - this.name = "ExtendableError"; - this.stack = new Error(message).stack; - } - }; - var WebhookVerificationError = class _WebhookVerificationError extends ExtendableError { - constructor(message) { - super(message); - Object.setPrototypeOf(this, _WebhookVerificationError.prototype); - this.name = "WebhookVerificationError"; - } - }; - exports.WebhookVerificationError = WebhookVerificationError; - var Webhook2 = class _Webhook { - constructor(secret, options) { - if ((options === null || options === void 0 ? void 0 : options.format) === "raw") { - if (secret instanceof Uint8Array) { - this.key = secret; - } else { - this.key = Uint8Array.from(secret, (c) => c.charCodeAt(0)); - } - } else { - if (typeof secret !== "string") { - throw new Error("Expected secret to be of type string"); - } - if (secret.startsWith(_Webhook.prefix)) { - secret = secret.substring(_Webhook.prefix.length); - } - this.key = base64.decode(secret); - } - if (this.key.length === 0) { - throw new Error("Secret can't be empty."); - } - } - verify(payload, headers, options) { - var _a6; - const jsonParse = (_a6 = options === null || options === void 0 ? void 0 : options.jsonParse) !== null && _a6 !== void 0 ? _a6 : true; - const normalizedHeaders = {}; - for (const key of Object.keys(headers)) { - normalizedHeaders[key.toLowerCase()] = headers[key]; - } - const msgId = normalizedHeaders["webhook-id"]; - const msgSignature = normalizedHeaders["webhook-signature"]; - const msgTimestamp = normalizedHeaders["webhook-timestamp"]; - if (!msgSignature || !msgId || !msgTimestamp) { - throw new WebhookVerificationError("Missing required headers"); - } - const timestamp2 = this.verifyTimestamp(msgTimestamp); - const computedSignature = this.sign(msgId, timestamp2, payload); - const expectedSignature = computedSignature.split(",")[1]; - const passedSignatures = msgSignature.split(" "); - const encoder6 = new globalThis.TextEncoder(); - for (const versionedSignature of passedSignatures) { - const [version, signature] = versionedSignature.split(","); - if (version !== "v1") { - continue; - } - if ((0, timing_safe_equal_1.timingSafeEqual)(encoder6.encode(signature), encoder6.encode(expectedSignature))) { - const payloadString = payload.toString(); - if (payloadString === "") { - return void 0; - } - if (jsonParse) { - return JSON.parse(payloadString); - } else { - return void 0; - } - } - } - throw new WebhookVerificationError("No matching signature found"); - } - sign(msgId, timestamp2, payload) { - if (typeof payload === "string") { - } else if (payload.constructor.name === "Buffer") { - payload = payload.toString(); - } else { - throw new Error("Expected payload to be of type string or Buffer."); - } - const encoder6 = new TextEncoder(); - const timestampNumber = Math.floor(timestamp2.getTime() / 1e3); - const toSign = encoder6.encode(`${msgId}.${timestampNumber}.${payload}`); - const expectedSignature = base64.encode(sha256.hmac(this.key, toSign)); - return `v1,${expectedSignature}`; - } - verifyTimestamp(timestampHeader) { - const now = Math.floor(Date.now() / 1e3); - const timestamp2 = parseInt(timestampHeader, 10); - if (Number.isNaN(timestamp2)) { - throw new WebhookVerificationError("Invalid Signature Headers"); - } - if (now - timestamp2 > WEBHOOK_TOLERANCE_IN_SECONDS) { - throw new WebhookVerificationError("Message timestamp too old"); - } - if (timestamp2 > now + WEBHOOK_TOLERANCE_IN_SECONDS) { - throw new WebhookVerificationError("Message timestamp too new"); - } - return new Date(timestamp2 * 1e3); - } - }; - exports.Webhook = Webhook2; - Webhook2.prefix = "whsec_"; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/webhooks.mjs -var import_standardwebhooks, Webhooks; -var init_webhooks = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/webhooks.mjs"() { - init_resource(); - import_standardwebhooks = __toESM(require_dist(), 1); - Webhooks = class extends APIResource { - /** - * Parses a webhook payload into an event without verifying its signature. Prefer - * `unwrap()` unless you have already verified the signature yourself. - */ - parseUnverified(body) { - return JSON.parse(body); - } - /** - * Verifies the webhook signature from the `webhook-id`, `webhook-timestamp` and - * `webhook-signature` headers using your webhook signing key, then parses the - * payload into an event. Fails if the signature is missing or invalid. - */ - unwrap(body, options) { - const headers = options?.headers; - if (headers == null) - throw new Error("Webhook headers are required in order to verify the signature"); - const keyStr = options.key === void 0 ? this._client.webhookKey : options.key; - if (!keyStr) - throw new Error("Webhook key must not be null or empty in order to unwrap"); - const wh = new import_standardwebhooks.Webhook(keyStr); - wh.verify(body, headers); - return JSON.parse(body); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/agents/versions.mjs -var Versions; -var init_versions = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/agents/versions.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Versions = class extends APIResource { - /** - * List Agent Versions - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsAgent of client.beta.agents.versions.list( - * 'agent_011CZkYpogX7uDKUyvBTophP', - * )) { - * // ... - * } - * ``` - */ - list(agentID, params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/agents/${agentID}/versions?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/agents/agents.mjs -var Agents; -var init_agents = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/agents/agents.mjs"() { - init_resource(); - init_versions(); - init_versions(); - init_pagination(); - init_headers(); - init_path(); - Agents = /* @__PURE__ */ (() => { - class Agents3 extends APIResource { - constructor() { - super(...arguments); - this.versions = new Versions(this._client); - } - /** - * Create Agent - * - * @example - * ```ts - * const betaManagedAgentsAgent = - * await client.beta.agents.create({ - * model: 'claude-opus-5', - * name: 'My First Agent', - * }); - * ``` - */ - create(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/agents?beta=true", { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Get Agent - * - * @example - * ```ts - * const betaManagedAgentsAgent = - * await client.beta.agents.retrieve( - * 'agent_011CZkYpogX7uDKUyvBTophP', - * ); - * ``` - */ - retrieve(agentID, params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.get(path2`/v1/agents/${agentID}?beta=true`, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Update Agent - * - * @example - * ```ts - * const betaManagedAgentsAgent = - * await client.beta.agents.update( - * 'agent_011CZkYpogX7uDKUyvBTophP', - * { description: 'updated' }, - * ); - * ``` - */ - update(agentID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/agents/${agentID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List Agents - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsAgent of client.beta.agents.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/agents?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Archive Agent - * - * @example - * ```ts - * const betaManagedAgentsAgent = - * await client.beta.agents.archive( - * 'agent_011CZkYpogX7uDKUyvBTophP', - * ); - * ``` - */ - archive(agentID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/agents/${agentID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - } - Agents3.Versions = Versions; - return Agents3; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/abort.mjs -function linkAbort(external, controller) { - if (!external) - return () => { - }; - if (external.aborted) { - controller.abort(); - return () => { - }; - } - const onAbort = () => controller.abort(); - external.addEventListener("abort", onAbort); - return () => external.removeEventListener("abort", onAbort); -} -var init_abort2 = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/abort.mjs"() { - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/backoff.mjs -function isStatus(e, code) { - return e instanceof APIError && e.status === code; -} -function is4xx(e) { - return e instanceof APIError && typeof e.status === "number" && e.status >= 400 && e.status < 500; -} -function isFatal4xx(e) { - return is4xx(e) && !isStatus(e, 408) && !isStatus(e, 409) && !isStatus(e, 429); -} -function backoff(attempt, baseMs, capMs) { - return Math.min(baseMs * 2 ** attempt, capMs); -} -function jitter(lowMs, highMs) { - return lowMs + Math.random() * (highMs - lowMs); -} -function applyJitter(ms) { - return ms * (1 - Math.random() * 0.25); -} -var init_backoff = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/backoff.mjs"() { - init_error(); - } -}); - -// node_modules/@anthropic-ai/sdk/lib/helper-client.mjs -function copyClientForHelper(client, { authToken, helper }) { - if (!authToken) { - throw new AnthropicError(`copyClientForHelper: expected a non-empty authToken but received ${JSON.stringify(authToken)}`); - } - const internal = client; - const parentDefaults = internal._options.defaultHeaders; - const parentAuthExtraHeaders = internal._authState?.extraHeaders; - const inheritedAuthExtraHeaders = parentAuthExtraHeaders ? Object.fromEntries(Object.entries(parentAuthExtraHeaders).filter(([name]) => { - const lower = name.toLowerCase(); - return lower !== "authorization" && lower !== "x-api-key"; - })) : void 0; - const defaultHeaders = buildHeaders([ - inheritedAuthExtraHeaders, - parentDefaults, - { [STAINLESS_HELPER_HEADER]: helper } - ]); - return client.withOptions({ - apiKey: null, - authToken, - baseURL: client.baseURL, - credentials: void 0, - defaultHeaders - }); -} -var init_helper_client = __esm({ - "node_modules/@anthropic-ai/sdk/lib/helper-client.mjs"() { - init_error(); - init_headers(); - init_stainless_helper_header(); - } -}); - -// node_modules/@anthropic-ai/sdk/lib/environments/poller.mjs -function backoff2(attempt) { - return backoff(attempt, POLL_BACKOFF_BASE_MS, POLL_BACKOFF_CAP_MS); -} -function defaultWorkerId() { - const env = globalThis.process?.env; - const host = env?.["HOSTNAME"]; - return host ? `${host}-${uuid4()}` : uuid4(); -} -var _WorkPoller_runnerClient, _WorkPoller_consumed, _WorkPoller_controller, _WorkPoller_detachExternal, _WorkPoller_autoStop, _WorkPoller_drain, _WorkPoller_blockMs, _WorkPoller_reclaimOlderThanMs, _WorkPoller_requestOpts, _IdleLog_log, _IdleLog_environmentId, _IdleLog_idleSince, _IdleLog_lastReport, POLL_BLOCK_MS, POLL_BACKOFF_BASE_MS, POLL_BACKOFF_CAP_MS, IDLE_REPORT_INTERVAL_MS, WorkPoller, IdleLog; -var init_poller = __esm({ - "node_modules/@anthropic-ai/sdk/lib/environments/poller.mjs"() { - init_tslib(); - init_error(); - init_log(); - init_sleep(); - init_uuid(); - init_abort2(); - init_headers(); - init_backoff(); - init_helper_client(); - POLL_BLOCK_MS = 999; - POLL_BACKOFF_BASE_MS = 1e3; - POLL_BACKOFF_CAP_MS = 6e4; - IDLE_REPORT_INTERVAL_MS = 3e5; - WorkPoller = /* @__PURE__ */ (() => { - class WorkPoller2 { - constructor(opts) { - _WorkPoller_runnerClient.set(this, void 0); - _WorkPoller_consumed.set(this, false); - _WorkPoller_controller.set(this, void 0); - _WorkPoller_detachExternal.set(this, void 0); - _WorkPoller_autoStop.set(this, void 0); - _WorkPoller_drain.set(this, void 0); - _WorkPoller_blockMs.set(this, void 0); - _WorkPoller_reclaimOlderThanMs.set(this, void 0); - _WorkPoller_requestOpts.set(this, void 0); - this.client = opts.client; - this.environmentId = opts.environmentId; - this.environmentKey = opts.environmentKey; - this.workerId = opts.workerId ?? defaultWorkerId(); - __classPrivateFieldSet(this, _WorkPoller_runnerClient, copyClientForHelper(opts.client, { - authToken: opts.environmentKey, - helper: "environments-work-poller" - }), "f"); - __classPrivateFieldSet(this, _WorkPoller_autoStop, opts.autoStop ?? true, "f"); - __classPrivateFieldSet(this, _WorkPoller_drain, opts.drain ?? false, "f"); - __classPrivateFieldSet(this, _WorkPoller_blockMs, opts.blockMs === void 0 ? POLL_BLOCK_MS : opts.blockMs, "f"); - __classPrivateFieldSet(this, _WorkPoller_reclaimOlderThanMs, opts.reclaimOlderThanMs ?? null, "f"); - __classPrivateFieldSet(this, _WorkPoller_requestOpts, opts.requestOptions, "f"); - __classPrivateFieldSet(this, _WorkPoller_controller, new AbortController(), "f"); - __classPrivateFieldSet(this, _WorkPoller_detachExternal, linkAbort(opts.signal, __classPrivateFieldGet(this, _WorkPoller_controller, "f")), "f"); - } - /** Read-only view of this iterator's abort signal. */ - get signal() { - return __classPrivateFieldGet(this, _WorkPoller_controller, "f").signal; - } - /** Abort the iterator. The current `for await` will exit cleanly. */ - abort() { - __classPrivateFieldGet(this, _WorkPoller_controller, "f").abort(); - } - async *[(_WorkPoller_runnerClient = /* @__PURE__ */ new WeakMap(), _WorkPoller_consumed = /* @__PURE__ */ new WeakMap(), _WorkPoller_controller = /* @__PURE__ */ new WeakMap(), _WorkPoller_detachExternal = /* @__PURE__ */ new WeakMap(), _WorkPoller_autoStop = /* @__PURE__ */ new WeakMap(), _WorkPoller_drain = /* @__PURE__ */ new WeakMap(), _WorkPoller_blockMs = /* @__PURE__ */ new WeakMap(), _WorkPoller_reclaimOlderThanMs = /* @__PURE__ */ new WeakMap(), _WorkPoller_requestOpts = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() { - if (__classPrivateFieldGet(this, _WorkPoller_consumed, "f")) { - throw new AnthropicError("Cannot iterate over a consumed WorkPoller"); - } - __classPrivateFieldSet(this, _WorkPoller_consumed, true, "f"); - const log = loggerFor(this.client); - log.info("poller starting", { - component: "work-poller", - environment_id: this.environmentId - }); - const idle = new IdleLog(log, this.environmentId); - try { - let attempt = 0; - while (!__classPrivateFieldGet(this, _WorkPoller_controller, "f").signal.aborted) { - let work; - try { - work = await __classPrivateFieldGet(this, _WorkPoller_runnerClient, "f").beta.environments.work.poll(this.environmentId, { - "Anthropic-Worker-ID": this.workerId, - ...__classPrivateFieldGet(this, _WorkPoller_blockMs, "f") !== null ? { block_ms: __classPrivateFieldGet(this, _WorkPoller_blockMs, "f") } : {}, - ...__classPrivateFieldGet(this, _WorkPoller_reclaimOlderThanMs, "f") !== null ? { reclaim_older_than_ms: __classPrivateFieldGet(this, _WorkPoller_reclaimOlderThanMs, "f") } : {} - }, { headers: buildHeaders([__classPrivateFieldGet(this, _WorkPoller_requestOpts, "f")?.headers]), signal: __classPrivateFieldGet(this, _WorkPoller_controller, "f").signal }); - } catch (e) { - if (__classPrivateFieldGet(this, _WorkPoller_controller, "f").signal.aborted) - return; - if (isFatal4xx(e)) { - log.error("poll failed permanently, stopping poller", { error: String(e) }); - throw e; - } - const wait = applyJitter(backoff2(attempt)); - log.warn("poll failed, backing off", { error: String(e), backoff_ms: wait }); - attempt++; - await sleep(wait, __classPrivateFieldGet(this, _WorkPoller_controller, "f").signal); - continue; - } - attempt = 0; - if (work == null) { - if (__classPrivateFieldGet(this, _WorkPoller_drain, "f")) - return; - idle.onEmptyPoll(); - await sleep(jitter(1e3, 3e3), __classPrivateFieldGet(this, _WorkPoller_controller, "f").signal); - continue; - } - idle.onClaim(); - log.info("claimed work", { - component: "work-poller", - environment_id: this.environmentId, - work_id: work.id, - work_type: work.data.type - }); - try { - await __classPrivateFieldGet(this, _WorkPoller_runnerClient, "f").beta.environments.work.ack(work.id, { environment_id: work.environment_id }, { headers: buildHeaders([__classPrivateFieldGet(this, _WorkPoller_requestOpts, "f")?.headers]), signal: __classPrivateFieldGet(this, _WorkPoller_controller, "f").signal }); - } catch (e) { - log.error("ack failed", { work_id: work.id, error: String(e) }); - continue; - } - try { - yield work; - } finally { - if (__classPrivateFieldGet(this, _WorkPoller_autoStop, "f")) { - try { - await __classPrivateFieldGet(this, _WorkPoller_runnerClient, "f").beta.environments.work.stop(work.id, { environment_id: work.environment_id }, { headers: buildHeaders([__classPrivateFieldGet(this, _WorkPoller_requestOpts, "f")?.headers]) }); - } catch (e) { - if (!isStatus(e, 409)) - log.warn("stop failed", { work_id: work.id, error: String(e) }); - } - } - } - } - } finally { - __classPrivateFieldGet(this, _WorkPoller_detachExternal, "f").call(this); - } - } - } - return WorkPoller2; - })(); - IdleLog = /* @__PURE__ */ (() => { - class IdleLog2 { - constructor(log, environmentId) { - _IdleLog_log.set(this, void 0); - _IdleLog_environmentId.set(this, void 0); - _IdleLog_idleSince.set(this, void 0); - _IdleLog_lastReport.set(this, 0); - __classPrivateFieldSet(this, _IdleLog_log, log, "f"); - __classPrivateFieldSet(this, _IdleLog_environmentId, environmentId, "f"); - } - onEmptyPoll() { - const now = Date.now(); - const fields = { component: "work-poller", environment_id: __classPrivateFieldGet(this, _IdleLog_environmentId, "f") }; - if (__classPrivateFieldGet(this, _IdleLog_idleSince, "f") === void 0) { - __classPrivateFieldSet(this, _IdleLog_idleSince, __classPrivateFieldSet(this, _IdleLog_lastReport, now, "f"), "f"); - __classPrivateFieldGet(this, _IdleLog_log, "f").info("idle; polling for work", fields); - } else if (now - __classPrivateFieldGet(this, _IdleLog_lastReport, "f") >= IDLE_REPORT_INTERVAL_MS) { - __classPrivateFieldSet(this, _IdleLog_lastReport, now, "f"); - __classPrivateFieldGet(this, _IdleLog_log, "f").info(`still polling; idle for ${Math.round((now - __classPrivateFieldGet(this, _IdleLog_idleSince, "f")) / 1e3)}s`, fields); - } else { - __classPrivateFieldGet(this, _IdleLog_log, "f").debug("poll returned no work", fields); - } - } - onClaim() { - __classPrivateFieldSet(this, _IdleLog_idleSince, void 0, "f"); - } - } - _IdleLog_log = /* @__PURE__ */ new WeakMap(), _IdleLog_environmentId = /* @__PURE__ */ new WeakMap(), _IdleLog_idleSince = /* @__PURE__ */ new WeakMap(), _IdleLog_lastReport = /* @__PURE__ */ new WeakMap(); - return IdleLog2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/async-queue.mjs -var _AsyncQueue_items, _AsyncQueue_waiters, _AsyncQueue_closed, AsyncQueue; -var init_async_queue = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/async-queue.mjs"() { - init_tslib(); - AsyncQueue = /* @__PURE__ */ (() => { - class AsyncQueue2 { - constructor() { - _AsyncQueue_items.set(this, []); - _AsyncQueue_waiters.set(this, []); - _AsyncQueue_closed.set(this, false); - } - /** Enqueue an item, or hand it directly to a waiting reader. Returns `false` once closed. */ - push(item) { - if (__classPrivateFieldGet(this, _AsyncQueue_closed, "f")) - return false; - const w = __classPrivateFieldGet(this, _AsyncQueue_waiters, "f").shift(); - if (w) - w({ done: false, value: item }); - else - __classPrivateFieldGet(this, _AsyncQueue_items, "f").push(item); - return true; - } - /** Mark the queue done. Idempotent; wakes every pending reader with `done: true`. */ - close() { - if (__classPrivateFieldGet(this, _AsyncQueue_closed, "f")) - return; - __classPrivateFieldSet(this, _AsyncQueue_closed, true, "f"); - while (__classPrivateFieldGet(this, _AsyncQueue_waiters, "f").length > 0) { - const w = __classPrivateFieldGet(this, _AsyncQueue_waiters, "f").shift(); - w({ done: true, value: void 0 }); - } - } - /** - * Resolve with the next item, or `done: true` once the queue is closed and - * drained. When `signal` is supplied, aborting it resolves a pending read - * with `done: true` (cancellation is pushed down here rather than handled by - * an outer `Promise.race`). - */ - next(signal) { - if (__classPrivateFieldGet(this, _AsyncQueue_items, "f").length > 0) { - return Promise.resolve({ done: false, value: __classPrivateFieldGet(this, _AsyncQueue_items, "f").shift() }); - } - if (__classPrivateFieldGet(this, _AsyncQueue_closed, "f") || signal?.aborted) { - return Promise.resolve({ done: true, value: void 0 }); - } - return new Promise((resolve2) => { - const waiter = (r) => { - signal?.removeEventListener("abort", onAbort); - resolve2(r); - }; - const onAbort = () => { - const idx = __classPrivateFieldGet(this, _AsyncQueue_waiters, "f").indexOf(waiter); - if (idx >= 0) - __classPrivateFieldGet(this, _AsyncQueue_waiters, "f").splice(idx, 1); - resolve2({ done: true, value: void 0 }); - }; - __classPrivateFieldGet(this, _AsyncQueue_waiters, "f").push(waiter); - signal?.addEventListener("abort", onAbort, { once: true }); - }); - } - /** Synchronously remove and return the next buffered item, or `undefined` if empty. */ - tryShift() { - return __classPrivateFieldGet(this, _AsyncQueue_items, "f").shift(); - } - } - _AsyncQueue_items = /* @__PURE__ */ new WeakMap(), _AsyncQueue_waiters = /* @__PURE__ */ new WeakMap(), _AsyncQueue_closed = /* @__PURE__ */ new WeakMap(); - return AsyncQueue2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/lib/tools/ToolError.mjs -var ToolError; -var init_ToolError = __esm({ - "node_modules/@anthropic-ai/sdk/lib/tools/ToolError.mjs"() { - ToolError = /* @__PURE__ */ (() => { - class ToolError2 extends Error { - constructor(content) { - const message = typeof content === "string" ? content : content.map((block) => { - if (block.type === "text") - return block.text; - return `[${block.type}]`; - }).join(" "); - super(message); - this.name = "ToolError"; - this.content = content; - } - } - return ToolError2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/lib/tools/BetaRunnableTool.mjs -function toolName(tool) { - return "name" in tool ? tool.name : "mcp_server_name" in tool ? tool.mcp_server_name : tool.type; -} -function toolErrorContent(e) { - return e instanceof ToolError ? e.content : `Error: ${e instanceof Error ? e.message : String(e)}`; -} -async function runRunnableTool(tool, rawInput, context) { - try { - const input = tool.parse ? tool.parse(rawInput) : rawInput; - const content = await tool.run(input, context); - return { content, isError: false }; - } catch (e) { - return { content: toolErrorContent(e), isError: true }; - } -} -var init_BetaRunnableTool = __esm({ - "node_modules/@anthropic-ai/sdk/lib/tools/BetaRunnableTool.mjs"() { - init_ToolError(); - } -}); - -// node_modules/@anthropic-ai/sdk/lib/tools/SessionToolRunner.mjs -function isEndTurnIdle(ev) { - return ev.type === "session.status_idle" && ev.stop_reason?.type === "end_turn"; -} -function buildResultEvent(ev, isError, content) { - if (ev.type === "agent.custom_tool_use") { - return { type: "user.custom_tool_result", custom_tool_use_id: ev.id, is_error: isError, content }; - } - return { type: "user.tool_result", tool_use_id: ev.id, is_error: isError, content }; -} -function toSessionContent(content) { - if (typeof content === "string") - return [{ type: "text", text: content || "(no output)" }]; - const out = content.map((b) => { - if (b.type === "text") - return { type: "text", text: b.text || "(no output)" }; - if (b.type === "image" || b.type === "document") - return b; - if (b.type === "search_result") { - return { - type: "search_result", - source: b.source, - title: b.title, - content: b.content.map((c) => ({ type: "text", text: c.text })), - citations: { enabled: b.citations?.enabled ?? false } - }; - } - return { type: "text", text: JSON.stringify(b) }; - }); - return out.length > 0 ? out : [{ type: "text", text: "(no output)" }]; -} -var _IdleClock_maxIdleMs, _IdleClock_onExpire, _IdleClock_blockers, _IdleClock_armPending, _IdleClock_timer, _SessionToolRunner_instances, _SessionToolRunner_consumed, _SessionToolRunner_controller, _SessionToolRunner_detachExternal, _SessionToolRunner_requestOpts, _SessionToolRunner_toolByName, _SessionToolRunner_logger, _SessionToolRunner_seen, _SessionToolRunner_answered, _SessionToolRunner_confirmationVerdicts, _SessionToolRunner_awaitingConfirmation, _SessionToolRunner_results, _SessionToolRunner_inFlightCount, _SessionToolRunner_sendRetryWindowMs, _SessionToolRunner_onIdle, _SessionToolRunner_idleClock, _SessionToolRunner_requestOptions, _SessionToolRunner_streamLoop, _SessionToolRunner_reconcile, _SessionToolRunner_ingestHistory, _SessionToolRunner_handleStreamEvent, _SessionToolRunner_routeToolEvent, _SessionToolRunner_noteConfirmation, _SessionToolRunner_applyVerdict, _SessionToolRunner_surfaceCall, _SessionToolRunner_execute, _SessionToolRunner_sendResult, _SessionToolRunner_drain, STREAM_BACKOFF_START_MS, STREAM_BACKOFF_CAP_MS, TOOL_TIMEOUT_MS, DRAIN_TIMEOUT_MS, SEND_BACKOFF_START_MS, SEND_BACKOFF_CAP_MS, SEND_RETRY_WINDOW_MS, DEFAULT_MAX_IDLE_MS, IdleClock, SessionToolRunner; -var init_SessionToolRunner = __esm({ - "node_modules/@anthropic-ai/sdk/lib/tools/SessionToolRunner.mjs"() { - init_tslib(); - init_error(); - init_log(); - init_sleep(); - init_backoff(); - init_abort2(); - init_async_queue(); - init_headers(); - init_stainless_helper_header(); - init_BetaRunnableTool(); - STREAM_BACKOFF_START_MS = 500; - STREAM_BACKOFF_CAP_MS = 1e4; - TOOL_TIMEOUT_MS = 12e4; - DRAIN_TIMEOUT_MS = 3e4; - SEND_BACKOFF_START_MS = 1e3; - SEND_BACKOFF_CAP_MS = 3e4; - SEND_RETRY_WINDOW_MS = 5 * 6e4; - DEFAULT_MAX_IDLE_MS = 6e4; - IdleClock = /* @__PURE__ */ (() => { - class IdleClock2 { - constructor(maxIdleMs, onExpire) { - _IdleClock_maxIdleMs.set(this, void 0); - _IdleClock_onExpire.set(this, void 0); - _IdleClock_blockers.set(this, /* @__PURE__ */ new Set()); - _IdleClock_armPending.set(this, false); - _IdleClock_timer.set(this, void 0); - __classPrivateFieldSet(this, _IdleClock_maxIdleMs, maxIdleMs, "f"); - __classPrivateFieldSet(this, _IdleClock_onExpire, onExpire, "f"); - } - /** - * Arm on `status_idle{end_turn}`; disarm otherwise. `user.tool_confirmation` - * is neutral: it signals neither agent activity nor an idle, and its effect - * on the clock flows through {@link block} / {@link unblock} instead — - * disarming here would discard the pending arm the verdict is about to - * settle. - */ - noteEvent(ev) { - if (ev.type === "user.tool_confirmation") - return; - if (isEndTurnIdle(ev)) - this.arm(); - else - this.disarm(); - } - /** Register gated work that must resolve before an idle countdown starts. */ - block(toolUseId) { - __classPrivateFieldGet(this, _IdleClock_blockers, "f").add(toolUseId); - if (__classPrivateFieldGet(this, _IdleClock_timer, "f") !== void 0) { - __classPrivateFieldSet(this, _IdleClock_armPending, true, "f"); - clearTimeout(__classPrivateFieldGet(this, _IdleClock_timer, "f")); - __classPrivateFieldSet(this, _IdleClock_timer, void 0, "f"); - } - } - /** - * Retire gated work (a no-op for ids never blocked); applies a pending arm — - * with a fresh full `maxIdleMs` window — once the last blocker retires. - */ - unblock(toolUseId) { - __classPrivateFieldGet(this, _IdleClock_blockers, "f").delete(toolUseId); - if (__classPrivateFieldGet(this, _IdleClock_blockers, "f").size === 0 && __classPrivateFieldGet(this, _IdleClock_armPending, "f")) - this.arm(); - } - /** - * (Re)start the idle countdown — or, while blockers are outstanding, hold - * the arm pending instead. Stopping then would drop a held call when its - * verdict later arrives, or cut the runner off before a released call's - * result can drive the next turn. - */ - arm() { - if (__classPrivateFieldGet(this, _IdleClock_maxIdleMs, "f") <= 0) - return; - if (__classPrivateFieldGet(this, _IdleClock_blockers, "f").size > 0) { - __classPrivateFieldSet(this, _IdleClock_armPending, true, "f"); - return; - } - __classPrivateFieldSet(this, _IdleClock_armPending, false, "f"); - if (__classPrivateFieldGet(this, _IdleClock_timer, "f") !== void 0) - clearTimeout(__classPrivateFieldGet(this, _IdleClock_timer, "f")); - __classPrivateFieldSet(this, _IdleClock_timer, setTimeout(__classPrivateFieldGet(this, _IdleClock_onExpire, "f"), __classPrivateFieldGet(this, _IdleClock_maxIdleMs, "f")), "f"); - } - /** - * Cancel the idle countdown and any pending arm. Blockers persist — they - * track real outstanding work, retired only by {@link unblock}. - */ - disarm() { - __classPrivateFieldSet(this, _IdleClock_armPending, false, "f"); - if (__classPrivateFieldGet(this, _IdleClock_timer, "f") !== void 0) { - clearTimeout(__classPrivateFieldGet(this, _IdleClock_timer, "f")); - __classPrivateFieldSet(this, _IdleClock_timer, void 0, "f"); - } - } - } - _IdleClock_maxIdleMs = /* @__PURE__ */ new WeakMap(), _IdleClock_onExpire = /* @__PURE__ */ new WeakMap(), _IdleClock_blockers = /* @__PURE__ */ new WeakMap(), _IdleClock_armPending = /* @__PURE__ */ new WeakMap(), _IdleClock_timer = /* @__PURE__ */ new WeakMap(); - return IdleClock2; - })(); - SessionToolRunner = /* @__PURE__ */ (() => { - class SessionToolRunner2 { - constructor(sessionId, opts) { - _SessionToolRunner_instances.add(this); - _SessionToolRunner_consumed.set(this, false); - _SessionToolRunner_controller.set(this, void 0); - _SessionToolRunner_detachExternal.set(this, void 0); - _SessionToolRunner_requestOpts.set(this, void 0); - _SessionToolRunner_toolByName.set(this, void 0); - _SessionToolRunner_logger.set(this, void 0); - _SessionToolRunner_seen.set(this, /* @__PURE__ */ new Set()); - _SessionToolRunner_answered.set(this, /* @__PURE__ */ new Set()); - _SessionToolRunner_confirmationVerdicts.set(this, /* @__PURE__ */ new Map()); - _SessionToolRunner_awaitingConfirmation.set(this, /* @__PURE__ */ new Map()); - _SessionToolRunner_results.set(this, new AsyncQueue()); - _SessionToolRunner_inFlightCount.set(this, 0); - _SessionToolRunner_sendRetryWindowMs.set(this, SEND_RETRY_WINDOW_MS); - _SessionToolRunner_onIdle.set(this, null); - _SessionToolRunner_idleClock.set(this, void 0); - this.client = opts.client; - this.sessionId = sessionId; - this.tools = opts.tools; - this.maxIdleMs = opts.maxIdleMs ?? DEFAULT_MAX_IDLE_MS; - __classPrivateFieldSet(this, _SessionToolRunner_logger, loggerFor(opts.client), "f"); - __classPrivateFieldSet(this, _SessionToolRunner_toolByName, new Map(opts.tools.map((t) => [toolName(t), t])), "f"); - __classPrivateFieldSet(this, _SessionToolRunner_controller, new AbortController(), "f"); - __classPrivateFieldSet(this, _SessionToolRunner_detachExternal, linkAbort(opts.signal, __classPrivateFieldGet(this, _SessionToolRunner_controller, "f")), "f"); - __classPrivateFieldSet(this, _SessionToolRunner_requestOpts, opts.requestOptions, "f"); - __classPrivateFieldSet(this, _SessionToolRunner_idleClock, new IdleClock(this.maxIdleMs, () => { - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").info("session idle after end_turn; stopping", { - component: "session-tool-runner", - session_id: this.sessionId, - max_idle_ms: this.maxIdleMs - }); - __classPrivateFieldGet(this, _SessionToolRunner_controller, "f").abort(); - }), "f"); - } - /** Read-only view of this runner's abort signal. */ - get signal() { - return __classPrivateFieldGet(this, _SessionToolRunner_controller, "f").signal; - } - /** Abort the runner. Background tasks will wind down and `for await` will exit cleanly. */ - abort() { - __classPrivateFieldGet(this, _SessionToolRunner_controller, "f").abort(); - } - /** - * @internal - * `EnvironmentWorker` keeps this equal to the lease TTL each heartbeat - * reports; applies to a send already retrying. - */ - _setSendRetryWindow(ms) { - __classPrivateFieldSet(this, _SessionToolRunner_sendRetryWindowMs, ms, "f"); - } - async *[(_SessionToolRunner_consumed = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_controller = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_detachExternal = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_requestOpts = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_toolByName = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_logger = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_seen = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_answered = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_confirmationVerdicts = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_awaitingConfirmation = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_results = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_inFlightCount = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_sendRetryWindowMs = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_onIdle = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_idleClock = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_instances = /* @__PURE__ */ new WeakSet(), Symbol.asyncIterator)]() { - if (__classPrivateFieldGet(this, _SessionToolRunner_consumed, "f")) { - throw new AnthropicError("Cannot iterate over a consumed SessionToolRunner"); - } - __classPrivateFieldSet(this, _SessionToolRunner_consumed, true, "f"); - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").info("session tool runner starting", { - component: "session-tool-runner", - session_id: this.sessionId - }); - const streamPromise = __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_streamLoop).call(this).catch((e) => { - if (!__classPrivateFieldGet(this, _SessionToolRunner_controller, "f").signal.aborted) { - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").error("stream loop failed", { error: String(e) }); - } - __classPrivateFieldGet(this, _SessionToolRunner_controller, "f").abort(); - }); - try { - while (true) { - const next = await __classPrivateFieldGet(this, _SessionToolRunner_results, "f").next(__classPrivateFieldGet(this, _SessionToolRunner_controller, "f").signal); - if (next.done) - break; - yield next.value; - } - await streamPromise; - let pending; - while ((pending = __classPrivateFieldGet(this, _SessionToolRunner_results, "f").tryShift()) !== void 0) { - yield pending; - } - } finally { - __classPrivateFieldGet(this, _SessionToolRunner_controller, "f").abort(); - __classPrivateFieldGet(this, _SessionToolRunner_idleClock, "f").disarm(); - await streamPromise; - try { - await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_drain).call(this); - } catch (e) { - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").warn("drain failed", { error: String(e) }); - } - __classPrivateFieldGet(this, _SessionToolRunner_results, "f").close(); - for (const t of this.tools) { - try { - await t.close?.(); - } catch (e) { - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").warn("tool.close failed", { tool: toolName(t), error: String(e) }); - } - } - __classPrivateFieldGet(this, _SessionToolRunner_detachExternal, "f").call(this); - } - } - } - _SessionToolRunner_requestOptions = function _SessionToolRunner_requestOptions2() { - return { - ...__classPrivateFieldGet(this, _SessionToolRunner_requestOpts, "f"), - headers: buildHeaders([helperHeader("session-tool-runner"), __classPrivateFieldGet(this, _SessionToolRunner_requestOpts, "f")?.headers]), - signal: __classPrivateFieldGet(this, _SessionToolRunner_controller, "f").signal - }; - }, _SessionToolRunner_streamLoop = // ===== event stream ===== - async function _SessionToolRunner_streamLoop2() { - const ctrl = __classPrivateFieldGet(this, _SessionToolRunner_controller, "f"); - let backoff3 = STREAM_BACKOFF_START_MS; - while (!ctrl.signal.aborted) { - try { - const stream5 = await this.client.beta.sessions.events.stream(this.sessionId, {}, __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_requestOptions).call(this)); - await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_reconcile).call(this); - for await (const ev of stream5) { - backoff3 = STREAM_BACKOFF_START_MS; - if (await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_handleStreamEvent).call(this, ev)) - return; - } - } catch (e) { - ctrl.signal.throwIfAborted(); - if (isFatal4xx(e)) { - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").error("permanent stream failure, shutting down", { error: String(e) }); - ctrl.abort(); - throw e; - } - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").warn("stream disconnected, reconnecting", { - error: String(e), - backoff_ms: backoff3 - }); - } - ctrl.signal.throwIfAborted(); - await sleep(backoff3, ctrl.signal); - backoff3 = Math.min(backoff3 * 2, STREAM_BACKOFF_CAP_MS); - } - }, _SessionToolRunner_reconcile = /** - * Read full history before dispatching so a `tool_use` whose result appears - * later in the same history is not re-executed. Runs after the live stream is - * already attached (see {@link SessionToolRunner.#streamLoop}). - */ - async function _SessionToolRunner_reconcile2() { - const ctrl = __classPrivateFieldGet(this, _SessionToolRunner_controller, "f"); - const pending = []; - let lastWasEndTurn = false; - try { - for await (const ev of this.client.beta.sessions.events.list(this.sessionId, { limit: 1e3 }, __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_requestOptions).call(this))) { - __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_ingestHistory).call(this, ev, pending); - lastWasEndTurn = isEndTurnIdle(ev); - } - } catch (e) { - ctrl.signal.throwIfAborted(); - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").warn("reconcile list failed", { error: String(e) }); - for (const ev of pending) - __classPrivateFieldGet(this, _SessionToolRunner_seen, "f").delete(ev.id); - return; - } - const unanswered = pending.filter((ev) => !__classPrivateFieldGet(this, _SessionToolRunner_answered, "f").has(ev.id)); - __classPrivateFieldGet(this, _SessionToolRunner_idleClock, "f").disarm(); - for (const ev of unanswered) - await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_routeToolEvent).call(this, ev); - for (const held2 of [...__classPrivateFieldGet(this, _SessionToolRunner_awaitingConfirmation, "f").values()]) { - const verdict = __classPrivateFieldGet(this, _SessionToolRunner_confirmationVerdicts, "f").get(held2.id); - if (verdict !== void 0) - await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_applyVerdict).call(this, held2, verdict); - } - const outstanding = unanswered.filter((ev) => !__classPrivateFieldGet(this, _SessionToolRunner_answered, "f").has(ev.id) && !__classPrivateFieldGet(this, _SessionToolRunner_awaitingConfirmation, "f").has(ev.id)); - if (lastWasEndTurn && outstanding.length === 0) - __classPrivateFieldGet(this, _SessionToolRunner_idleClock, "f").arm(); - else - __classPrivateFieldGet(this, _SessionToolRunner_idleClock, "f").disarm(); - }, _SessionToolRunner_ingestHistory = function _SessionToolRunner_ingestHistory2(ev, pending) { - if (ev.type === "agent.tool_use" || ev.type === "agent.custom_tool_use") { - __classPrivateFieldGet(this, _SessionToolRunner_seen, "f").add(ev.id); - if (!__classPrivateFieldGet(this, _SessionToolRunner_answered, "f").has(ev.id)) - pending.push(ev); - } else if (ev.type === "user.tool_result") { - __classPrivateFieldGet(this, _SessionToolRunner_answered, "f").add(ev.tool_use_id); - } else if (ev.type === "user.custom_tool_result") { - __classPrivateFieldGet(this, _SessionToolRunner_answered, "f").add(ev.custom_tool_use_id); - } else if (ev.type === "user.tool_confirmation") { - if (!__classPrivateFieldGet(this, _SessionToolRunner_answered, "f").has(ev.tool_use_id)) - __classPrivateFieldGet(this, _SessionToolRunner_confirmationVerdicts, "f").set(ev.tool_use_id, ev.result); - } - }, _SessionToolRunner_handleStreamEvent = /** Returns true when the runner should exit. */ - async function _SessionToolRunner_handleStreamEvent2(ev) { - __classPrivateFieldGet(this, _SessionToolRunner_idleClock, "f").noteEvent(ev); - switch (ev.type) { - case "agent.tool_use": - case "agent.custom_tool_use": - if (!__classPrivateFieldGet(this, _SessionToolRunner_seen, "f").has(ev.id)) { - __classPrivateFieldGet(this, _SessionToolRunner_seen, "f").add(ev.id); - await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_routeToolEvent).call(this, ev); - } - return false; - case "user.tool_confirmation": - await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_noteConfirmation).call(this, ev); - return false; - case "user.tool_result": - __classPrivateFieldGet(this, _SessionToolRunner_answered, "f").add(ev.tool_use_id); - return false; - case "user.custom_tool_result": - __classPrivateFieldGet(this, _SessionToolRunner_answered, "f").add(ev.custom_tool_use_id); - return false; - case "session.status_terminated": - case "session.deleted": - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").info("session terminated", { - component: "session-tool-runner", - session_id: this.sessionId - }); - __classPrivateFieldGet(this, _SessionToolRunner_controller, "f").abort(); - return true; - default: - return false; - } - }, _SessionToolRunner_routeToolEvent = // ===== confirmation gating (always_ask tools) ===== - /** - * Dispatch `ev`, honoring its evaluated permission. A call the server gated - * (`evaluated_permission == "ask"`) is held until its `user.tool_confirmation` - * arrives. Fails closed: only an explicit `allow` verdict releases a gated - * call; a server-side `deny` overrides any recorded verdict; an unrecognized - * permission is held like `ask` and an unrecognized verdict is denied. - */ - async function _SessionToolRunner_routeToolEvent2(ev) { - const permission = ev.evaluated_permission; - const verdict = permission === "deny" ? "deny" : __classPrivateFieldGet(this, _SessionToolRunner_confirmationVerdicts, "f").get(ev.id); - if (verdict === void 0) { - if (permission === void 0 || permission === "allow") { - await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_execute).call(this, ev, void 0); - } else if (!__classPrivateFieldGet(this, _SessionToolRunner_awaitingConfirmation, "f").has(ev.id)) { - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").info("tool call awaiting confirmation; holding", { - component: "session-tool-runner", - session_id: this.sessionId, - tool: ev.name, - tool_use_id: ev.id - }); - __classPrivateFieldGet(this, _SessionToolRunner_awaitingConfirmation, "f").set(ev.id, ev); - __classPrivateFieldGet(this, _SessionToolRunner_idleClock, "f").block(ev.id); - } - return; - } - await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_applyVerdict).call(this, ev, verdict); - }, _SessionToolRunner_noteConfirmation = /** Record an allow/deny verdict and release the held call it gates, if any. */ - async function _SessionToolRunner_noteConfirmation2(ev) { - __classPrivateFieldGet(this, _SessionToolRunner_confirmationVerdicts, "f").set(ev.tool_use_id, ev.result); - const held2 = __classPrivateFieldGet(this, _SessionToolRunner_awaitingConfirmation, "f").get(ev.tool_use_id); - if (held2 === void 0) - return; - await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_applyVerdict).call(this, held2, ev.result); - }, _SessionToolRunner_applyVerdict = /** - * Dispatch or resolve a gated call according to its verdict. - * - * The idle-clock blocker accounting lives here: a denial retires the held - * call's blocker, while an allow keeps one on the call — taking it now if the - * verdict was already known when the call was routed, so it was never held — - * until `#execute` has finished with it. The countdown must not run over - * gated work that is still in flight. - */ - async function _SessionToolRunner_applyVerdict2(ev, verdict) { - const wasHeld = __classPrivateFieldGet(this, _SessionToolRunner_awaitingConfirmation, "f").delete(ev.id); - if (verdict === "allow") { - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").info("tool call confirmed", { - component: "session-tool-runner", - session_id: this.sessionId, - tool: ev.name, - tool_use_id: ev.id - }); - if (!wasHeld) - __classPrivateFieldGet(this, _SessionToolRunner_idleClock, "f").block(ev.id); - try { - await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_execute).call(this, ev, "allow"); - } finally { - __classPrivateFieldGet(this, _SessionToolRunner_idleClock, "f").unblock(ev.id); - } - return; - } - if (wasHeld) - __classPrivateFieldGet(this, _SessionToolRunner_idleClock, "f").unblock(ev.id); - __classPrivateFieldGet(this, _SessionToolRunner_answered, "f").add(ev.id); - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").info("tool call denied; not executing", { - component: "session-tool-runner", - session_id: this.sessionId, - tool: ev.name, - tool_use_id: ev.id - }); - __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_surfaceCall).call(this, { - event: ev, - toolUseId: ev.id, - name: ev.name, - isError: false, - posted: false, - confirmation: "deny" - }); - }, _SessionToolRunner_surfaceCall = function _SessionToolRunner_surfaceCall2(call) { - __classPrivateFieldGet(this, _SessionToolRunner_results, "f").push(call); - }, _SessionToolRunner_execute = // ===== tool execution ===== - async function _SessionToolRunner_execute2(ev, confirmation) { - var _a6, _b; - if (__classPrivateFieldGet(this, _SessionToolRunner_answered, "f").has(ev.id)) - return; - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").info("executing tool", { - component: "session-tool-runner", - session_id: this.sessionId, - tool: ev.name, - tool_use_id: ev.id - }); - __classPrivateFieldSet(this, _SessionToolRunner_inFlightCount, (_a6 = __classPrivateFieldGet(this, _SessionToolRunner_inFlightCount, "f"), _a6++, _a6), "f"); - try { - const tool = __classPrivateFieldGet(this, _SessionToolRunner_toolByName, "f").get(ev.name); - if (!tool) { - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").info("tool not owned by this runner; leaving the tool_use_id pending for its owner", { - component: "session-tool-runner", - session_id: this.sessionId, - tool: ev.name, - tool_use_id: ev.id - }); - __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_surfaceCall).call(this, { - event: ev, - toolUseId: ev.id, - name: ev.name, - isError: false, - posted: false, - confirmation - }); - return; - } - let content; - let isError; - const toolCtrl = new AbortController(); - const detachTool = linkAbort(__classPrivateFieldGet(this, _SessionToolRunner_controller, "f").signal, toolCtrl); - const timer = setTimeout(() => toolCtrl.abort(), TOOL_TIMEOUT_MS); - try { - const outcome = await runRunnableTool(tool, ev.input, { - toolUse: ev, - toolUseBlock: ev, - signal: toolCtrl.signal - }); - content = outcome.content; - isError = outcome.isError; - } finally { - clearTimeout(timer); - detachTool(); - } - const result = buildResultEvent(ev, isError, toSessionContent(content)); - const posted = await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_sendResult).call(this, result, ev.id); - __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_surfaceCall).call(this, { - event: ev, - result, - toolUseId: ev.id, - name: ev.name, - isError, - posted, - confirmation - }); - } finally { - __classPrivateFieldSet(this, _SessionToolRunner_inFlightCount, (_b = __classPrivateFieldGet(this, _SessionToolRunner_inFlightCount, "f"), _b--, _b), "f"); - if (__classPrivateFieldGet(this, _SessionToolRunner_inFlightCount, "f") === 0) - __classPrivateFieldGet(this, _SessionToolRunner_onIdle, "f")?.call(this); - } - }, _SessionToolRunner_sendResult = async function _SessionToolRunner_sendResult2(result, toolUseId) { - const ctrl = __classPrivateFieldGet(this, _SessionToolRunner_controller, "f"); - const start = Date.now(); - let lastErr; - let attempt = 0; - while (true) { - attempt++; - ctrl.signal.throwIfAborted(); - try { - await this.client.beta.sessions.events.send(this.sessionId, { events: [result] }, __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_requestOptions).call(this)); - __classPrivateFieldGet(this, _SessionToolRunner_answered, "f").add(toolUseId); - return true; - } catch (e) { - lastErr = e; - if (isFatal4xx(e)) - break; - const remainingMs = __classPrivateFieldGet(this, _SessionToolRunner_sendRetryWindowMs, "f") - (Date.now() - start); - if (remainingMs <= 0) - break; - const waitMs = Math.min(applyJitter(backoff(attempt - 1, SEND_BACKOFF_START_MS, SEND_BACKOFF_CAP_MS)), remainingMs); - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").warn("tool result send failed; retrying", { - tool_use_id: toolUseId, - attempt, - backoff_ms: waitMs, - error: String(e) - }); - await sleep(waitMs, ctrl.signal); - } - } - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").error("failed to send tool result", { - tool_use_id: toolUseId, - attempts: attempt, - error: String(lastErr) - }); - return false; - }, _SessionToolRunner_drain = /** Wait (bounded) for in-flight tool executions to finish during teardown. */ - async function _SessionToolRunner_drain2() { - if (__classPrivateFieldGet(this, _SessionToolRunner_inFlightCount, "f") === 0) - return; - await Promise.race([new Promise((r) => __classPrivateFieldSet(this, _SessionToolRunner_onIdle, r, "f")), sleep(DRAIN_TIMEOUT_MS)]); - __classPrivateFieldSet(this, _SessionToolRunner_onIdle, null, "f"); - if (__classPrivateFieldGet(this, _SessionToolRunner_inFlightCount, "f") > 0) { - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").warn("drain timeout exceeded"); - } - }; - return SessionToolRunner2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/tools/agent-toolset/sync-interval.mjs -function checkMemorySyncInterval(ms, option) { - if (!(ms >= MIN_MEMORY_SYNC_INTERVAL_MS)) { - throw new AnthropicError(`${option} must be at least ${MIN_MEMORY_SYNC_INTERVAL_MS}ms (got ${ms}); to run without memory sync, pass \`memorySyncIntervalMs: null\` to the worker instead`); - } -} -var DEFAULT_MEMORY_SYNC_INTERVAL_MS, MIN_MEMORY_SYNC_INTERVAL_MS; -var init_sync_interval = __esm({ - "node_modules/@anthropic-ai/sdk/tools/agent-toolset/sync-interval.mjs"() { - init_error(); - DEFAULT_MEMORY_SYNC_INTERVAL_MS = 15e3; - MIN_MEMORY_SYNC_INTERVAL_MS = 5e3; - } -}); - -// node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.mjs -var node_browser_exports2 = {}; -__export(node_browser_exports2, { - BashSession: () => BashSession, - BashTimeoutError: () => BashTimeoutError, - DEFAULT_MEMORY_SYNC_INTERVAL_MS: () => DEFAULT_MEMORY_SYNC_INTERVAL_MS, - MARKER_PATH: () => MARKER_PATH, - MEMORY_FLUSH_TIMEOUT_MS: () => MEMORY_FLUSH_TIMEOUT_MS, - MIN_MEMORY_SYNC_INTERVAL_MS: () => MIN_MEMORY_SYNC_INTERVAL_MS, - SessionMemoryError: () => SessionMemoryError, - SessionMemoryStores: () => SessionMemoryStores, - betaAgentToolset20260401: () => betaAgentToolset20260401, - betaBashTool: () => betaBashTool, - betaEditTool: () => betaEditTool, - betaGlobTool: () => betaGlobTool, - betaGrepTool: () => betaGrepTool, - betaReadTool: () => betaReadTool, - betaWriteTool: () => betaWriteTool, - extractSkillArchive: () => extractSkillArchive, - resolvePath: () => resolvePath, - setupSkills: () => setupSkills -}); -function nodeOnly(name) { - throw new AnthropicError(`${name} requires Node.js or a Node-compatible runtime`); -} -function setupSkills(_ctx) { - return nodeOnly("setupSkills"); -} -function extractSkillArchive(_resp, _dest) { - return nodeOnly("extractSkillArchive"); -} -function betaAgentToolset20260401(_ctx) { - return nodeOnly("betaAgentToolset20260401"); -} -function resolvePath(_ctx, _p) { - return nodeOnly("resolvePath"); -} -function betaBashTool(_ctx) { - return nodeOnly("betaBashTool"); -} -function betaReadTool(_ctx) { - return nodeOnly("betaReadTool"); -} -function betaWriteTool(_ctx) { - return nodeOnly("betaWriteTool"); -} -function betaEditTool(_ctx) { - return nodeOnly("betaEditTool"); -} -function betaGlobTool(_ctx) { - return nodeOnly("betaGlobTool"); -} -function betaGrepTool(_ctx) { - return nodeOnly("betaGrepTool"); -} -var MEMORY_FLUSH_TIMEOUT_MS, MARKER_PATH, SessionMemoryError, SessionMemoryStores, BashTimeoutError, BashSession; -var init_node_browser2 = __esm({ - "node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.mjs"() { - init_error(); - init_sync_interval(); - MEMORY_FLUSH_TIMEOUT_MS = 3e4; - MARKER_PATH = ".anthropic-memory-store"; - SessionMemoryError = class extends AnthropicError { - constructor(message, cause) { - super(message); - this.name = "SessionMemoryError"; - if (cause !== void 0) - this.cause = cause; - } - }; - SessionMemoryStores = class { - constructor(_client, _opts) { - nodeOnly("SessionMemoryStores"); - } - get roots() { - return nodeOnly("SessionMemoryStores"); - } - get readOnlyRoots() { - return nodeOnly("SessionMemoryStores"); - } - download(_session) { - return nodeOnly("SessionMemoryStores"); - } - finish() { - return nodeOnly("SessionMemoryStores"); - } - /** @internal */ - syncAll(_final) { - return nodeOnly("SessionMemoryStores"); - } - syncIfDue() { - return nodeOnly("SessionMemoryStores"); - } - flushWrites(_signal) { - return nodeOnly("SessionMemoryStores"); - } - dispose() { - return nodeOnly("SessionMemoryStores"); - } - }; - BashTimeoutError = class extends AnthropicError { - constructor(timeoutMs) { - super(`bash command timed out after ${timeoutMs}ms`); - this.name = "BashTimeoutError"; - this.timeoutMs = timeoutMs; - } - }; - BashSession = class { - constructor(_dir, _env) { - nodeOnly("BashSession"); - } - get closed() { - return nodeOnly("BashSession"); - } - exec(_command, _opts = {}) { - return nodeOnly("BashSession"); - } - close() { - nodeOnly("BashSession"); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/lib/environments/worker.mjs -function hasMemoryStore(session) { - return session.resources.some((r) => r.type === "memory_store"); -} -function sessionsTokenFromSecret(secret) { - if (!secret) - return null; - let parsed; - try { - const normalized = secret.replace(/-/g, "+").replace(/_/g, "/"); - const padded = normalized.padEnd(Math.ceil(normalized.length / 4) * 4, "="); - parsed = JSON.parse(decodeUTF8(fromBase64(padded))); - } catch { - return null; - } - if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) - return null; - const token = parsed.sessions_token; - return typeof token === "string" && token !== "" ? token : null; -} -async function withTimeout(p, ms) { - let timer; - try { - return await Promise.race([ - p.then(() => false, () => false), - new Promise((resolve2) => { - timer = setTimeout(() => resolve2(true), ms); - }) - ]); - } finally { - if (timer !== void 0) - clearTimeout(timer); - } -} -async function forceStop(client, work, log, requestOptions) { - try { - await client.beta.environments.work.stop( - work.id, - { environment_id: work.environment_id, force: true }, - // Caller's headers pass through; the helper-tag header is on the scoped - // sub-client's default_headers via copyClientForHelper, so no per-call - // re-stamping needed. - { ...requestOptions, headers: buildHeaders([requestOptions?.headers]) } - ); - } catch (e) { - if (!isStatus(e, 409)) { - log.error("force-stop on exit failed", { work_id: work.id, error: String(e) }); - } - } -} -function serverLeaseState(e) { - let node = e instanceof APIError ? e.error : void 0; - for (const key of ["error", "details", "current_state"]) { - if (!isObj(node)) - return {}; - node = node[key]; - } - return isObj(node) ? node : {}; -} -async function heartbeatLoop(client, work, lease, logger, requestOptions, onLeaseTtl) { - let intervalMs = HEARTBEAT_DEFAULT_MS; - let ttlMs = HEARTBEAT_TTL_DEFAULT_MS; - let lastSuccessMs = Date.now(); - let last = NO_HEARTBEAT_SENTINEL; - const beat = async () => { - const beatCtrl = new AbortController(); - const detach = linkAbort(lease.signal, beatCtrl); - const cutoff = setTimeout(() => beatCtrl.abort(), intervalMs); - try { - const resp = await client.beta.environments.work.heartbeat(work.id, { environment_id: work.environment_id, expected_last_heartbeat: last }, { ...requestOptions, headers: buildHeaders([requestOptions?.headers]), signal: beatCtrl.signal }); - lastSuccessMs = Date.now(); - last = resp.last_heartbeat; - if (resp.ttl_seconds > 0) { - ttlMs = resp.ttl_seconds * 1e3; - intervalMs = Math.max(1e3, Math.min(ttlMs / 2, HEARTBEAT_DEFAULT_MS)); - onLeaseTtl?.(ttlMs); - } - if (resp.state === "stopping" || resp.state === "stopped") { - logger.info("heartbeat signals shutdown", { work_id: work.id, state: resp.state }); - lease.finish("control_plane_stop"); - } - if (!resp.lease_extended) { - logger.warn("lease not extended, shutting down", { work_id: work.id }); - lease.finish("control_plane_stop"); - } - } catch (e) { - lease.signal.throwIfAborted(); - if (isStatus(e, 412)) { - const server = serverLeaseState(e); - logger.error("lease lost: heartbeat precondition failed", { - work_id: work.id, - server_state: server["state"], - server_ttl_seconds: server["ttl_seconds"], - server_last_heartbeat: server["last_heartbeat"] - }); - lease.finish("lease_lost"); - return; - } - if (isFatal4xx(e)) { - logger.error("permanent heartbeat failure", { work_id: work.id, error: String(e) }); - lease.finish("heartbeat_rejected"); - throw e; - } - if (Date.now() - lastSuccessMs > ttlMs) { - logger.error("lease assumed lost: no successful heartbeat in ttl", { - work_id: work.id, - ttl_ms: ttlMs, - error: String(e) - }); - lease.finish("assumed_lost"); - return; - } - logger.warn("transient heartbeat failure", { work_id: work.id, error: String(e) }); - } finally { - clearTimeout(cutoff); - detach(); - } - }; - await beat(); - while (!lease.signal.aborted) { - await sleep(intervalMs, lease.signal); - lease.signal.throwIfAborted(); - await beat(); - } -} -var _EnvironmentWorker_instances, _EnvironmentWorker_signal, _EnvironmentWorker_handleItem, _Lease_ctrl, _Lease_endReason, HEARTBEAT_DEFAULT_MS, HEARTBEAT_TTL_DEFAULT_MS, NO_HEARTBEAT_SENTINEL, EnvironmentWorker, Lease; -var init_worker = __esm({ - "node_modules/@anthropic-ai/sdk/lib/environments/worker.mjs"() { - init_tslib(); - init_error(); - init_log(); - init_base64(); - init_bytes(); - init_env(); - init_sleep(); - init_backoff(); - init_abort2(); - init_values(); - init_headers(); - init_SessionToolRunner(); - init_poller(); - init_helper_client(); - init_sync_interval(); - HEARTBEAT_DEFAULT_MS = 3e4; - HEARTBEAT_TTL_DEFAULT_MS = 9e4; - NO_HEARTBEAT_SENTINEL = "NO_HEARTBEAT"; - EnvironmentWorker = /* @__PURE__ */ (() => { - class EnvironmentWorker2 { - constructor(opts) { - _EnvironmentWorker_instances.add(this); - _EnvironmentWorker_signal.set(this, void 0); - if (opts.unrestrictedPaths !== void 0) { - throw new AnthropicError("The `unrestrictedPaths` option you passed to EnvironmentWorker (or client.beta.environments.work.worker()) is no longer supported. The worker's file tools (read, write, edit, glob, grep) are now always confined to `workdir` plus the session's memory folders. Remove `unrestrictedPaths` from your options; to let the file tools reach any other directory, add it to `AgentToolContext.allowedRoots` from a `tools` factory."); - } - this.client = opts.client; - this.environmentId = opts.environmentId; - this.environmentKey = opts.environmentKey; - this.tools = opts.tools; - this.workdir = opts.workdir ?? process.cwd(); - this.maxFileBytes = opts.maxFileBytes; - this.maxIdleMs = opts.maxIdleMs; - if (opts.memorySyncIntervalMs != null) { - checkMemorySyncInterval(opts.memorySyncIntervalMs, "memorySyncIntervalMs"); - } - this.memorySyncIntervalMs = opts.memorySyncIntervalMs; - this.memorySyncDeletions = opts.memorySyncDeletions ?? "enabled"; - this.workerId = opts.workerId; - this.requestOptions = opts.requestOptions; - __classPrivateFieldSet(this, _EnvironmentWorker_signal, opts.signal, "f"); - } - /** - * Poll the environment and service each claimed session until the supplied - * signal (or the one passed to the constructor) aborts. Throws if - * `environmentId` / `environmentKey` were not provided to the constructor. - */ - async run(signal) { - const { environmentId, environmentKey } = this; - if (environmentId === void 0 || environmentKey === void 0) { - throw new AnthropicError("EnvironmentWorker.run: environmentId and environmentKey are required to poll for work"); - } - const externalSignal = signal ?? __classPrivateFieldGet(this, _EnvironmentWorker_signal, "f"); - const poller = new WorkPoller({ - client: this.client, - environmentId, - environmentKey, - ...this.workerId !== void 0 ? { workerId: this.workerId } : {}, - ...externalSignal ? { signal: externalSignal } : {}, - ...this.requestOptions !== void 0 ? { requestOptions: this.requestOptions } : {}, - // The per-item handler stops or releases every work item on exit; let it - // be the single owner of `work.stop` rather than double-posting from the - // poller. - autoStop: false - }); - for await (const work of poller) { - try { - await __classPrivateFieldGet(this, _EnvironmentWorker_instances, "m", _EnvironmentWorker_handleItem).call(this, work, environmentKey, poller.signal); - } catch (e) { - if (poller.signal?.aborted) - throw e; - loggerFor(this.client).error("work item failed", { work_id: work.id, error: String(e) }); - } - } - } - /** - * Service a single, already-claimed work item without the poll loop: build the - * per-session {@link AgentToolContext} (workdir from this worker's options), - * download the session agent's skills (`setupSkills`), run a - * {@link SessionToolRunner} for the session while heartbeating the work-item - * lease, and force-stop the work item on exit (whether the runner finishes - * normally, throws, or the control plane signals shutdown). The one - * exception is a lost lease: the item then belongs to the queue or another - * worker and is left alone. - * - * Use this when something else does the claiming — e.g. a `worker poll - * --on-work` script that hands an already-claimed item to a fresh process. The - * work id / environment id / session id each fall back to `ANTHROPIC_WORK_ID` / - * `ANTHROPIC_ENVIRONMENT_ID` / `ANTHROPIC_SESSION_ID` (the env vars that - * command sets) when not passed; the environment key resolves from this - * option, then the worker's own `environmentKey`, then - * `ANTHROPIC_ENVIRONMENT_KEY`, and is needed only when the work item's - * `secret` yields no sessions token — a host that receives only the - * per-item secret runs without ever holding the key. With no arguments - * inside that command it just works. Throws a clear error naming the first - * required value still missing after resolution, and — rather than ever - * running unauthenticated — when neither a sessions token nor an - * environment key resolved. Throws `SessionMemoryError` when the - * session has memory stores attached but they cannot be mounted — the work - * item carried no sessions token (unless `memorySyncIntervalMs` turned - * memory off), or a store failed to download. - * - * `workSecret` is the work item's per-item `secret` payload from the poll - * response, falling back to `ANTHROPIC_WORK_SECRET`; unlike the others it is - * optional — when present, the sessions token extracted from it is preferred - * as the Bearer credential for this item's heartbeat / force-stop / session - * calls; when absent (or undecodable) those calls use the environment key. - */ - async handleItem(opts) { - const workId = opts?.workId ?? readEnv("ANTHROPIC_WORK_ID"); - const environmentId = opts?.environmentId ?? readEnv("ANTHROPIC_ENVIRONMENT_ID"); - const sessionId = opts?.sessionId ?? readEnv("ANTHROPIC_SESSION_ID"); - const environmentKey = (opts?.environmentKey ?? this.environmentKey ?? readEnv("ANTHROPIC_ENVIRONMENT_KEY")) || void 0; - const workSecret = opts?.workSecret || readEnv("ANTHROPIC_WORK_SECRET") || null; - if (!workId) { - throw new AnthropicError("handleItem: workId is required \u2014 pass it or set ANTHROPIC_WORK_ID"); - } - if (!environmentId) { - throw new AnthropicError("handleItem: environmentId is required \u2014 pass it or set ANTHROPIC_ENVIRONMENT_ID"); - } - if (!sessionId) { - throw new AnthropicError("handleItem: sessionId is required \u2014 pass it or set ANTHROPIC_SESSION_ID"); - } - if (!environmentKey && !workSecret) { - throw new AnthropicError("handleItem: environmentKey is required when there is no work secret \u2014 pass it, construct the worker with it, or set ANTHROPIC_ENVIRONMENT_KEY"); - } - const work = { - id: workId, - environment_id: environmentId, - secret: workSecret, - data: { type: "session", id: sessionId } - }; - await __classPrivateFieldGet(this, _EnvironmentWorker_instances, "m", _EnvironmentWorker_handleItem).call(this, work, environmentKey, opts?.signal ?? __classPrivateFieldGet(this, _EnvironmentWorker_signal, "f")); - } - } - _EnvironmentWorker_signal = /* @__PURE__ */ new WeakMap(), _EnvironmentWorker_instances = /* @__PURE__ */ new WeakSet(), _EnvironmentWorker_handleItem = /** - * The per-item body shared by {@link EnvironmentWorker.run}'s poll loop and - * {@link EnvironmentWorker.handleItem}: run a {@link SessionToolRunner} for the - * work item's session while heartbeating its lease, force-stopping on exit - * unless the lease was lost. Non-session work items are ignored. - * - * When the poll response carried a per-item `secret` (a short-lived payload - * scoped to this work item), the sessions token extracted from it is - * preferred over `environmentKey` as the Bearer credential for those - * per-item calls; a missing/undecodable secret falls back to - * `environmentKey` unchanged. - */ - async function _EnvironmentWorker_handleItem2(work, environmentKey, externalSignal) { - const log = loggerFor(this.client); - const sessionsToken = sessionsTokenFromSecret(work.secret); - const itemCredential = sessionsToken ?? environmentKey; - if (itemCredential === void 0) { - throw new AnthropicError("handleItem: the work item carried a secret payload but no sessions token could be extracted, and there is no environment key to fall back to; the poller must issue a secret whose payload carries `sessions_token`, or provide the environment key (pass it, construct the worker with it, or set ANTHROPIC_ENVIRONMENT_KEY)"); - } - if (work.secret && sessionsToken === null) { - log.warn("work item carried a secret payload but no sessions token could be extracted; falling back to the environment key", { work_id: work.id }); - } - const sessionClient = copyClientForHelper(this.client, { - authToken: itemCredential, - helper: "environments-worker" - }); - const sessionId = work.data.id; - const ctrl = new AbortController(); - const detachExternal = linkAbort(externalSignal, ctrl); - const lease = new Lease(ctrl); - const agentToolset = await Promise.resolve().then(() => (init_node_browser2(), node_browser_exports2)); - let leaseTtlMs; - let runner; - const heartbeatPromise = heartbeatLoop(sessionClient, work, lease, log, this.requestOptions, (ttlMs) => { - leaseTtlMs = ttlMs; - runner?._setSendRetryWindow(ttlMs); - }).catch((e) => { - if (!ctrl.signal.aborted) - log.error("heartbeat loop failed", { work_id: work.id, error: String(e) }); - ctrl.abort(); - }); - let cleanupSkills = async () => { - }; - let stores; - let cleanEnd = false; - try { - if (work.data.type !== "session") { - log.debug("skipping non-session work item", { work_id: work.id, type: work.data.type }); - return; - } - const session = await sessionClient.beta.sessions.retrieve(sessionId); - if (sessionsToken === null && this.memorySyncIntervalMs !== null && hasMemoryStore(session)) { - throw new agentToolset.SessionMemoryError(`cannot mount the session's memories: the work item carried no sessions token (work_id=${work.id}, session_id=${sessionId}); the memory endpoints reject the environment key, so the poller must issue a per-item \`secret\` carrying \`sessions_token\`, or set \`memorySyncIntervalMs: null\` to run without memory`); - } - const ctx = { - workdir: this.workdir, - // The scoped sub-client, not the parent: the skill download - // `setupSkills` performs for this session rides the same per-item - // credential as every other per-item call. - client: sessionClient, - session, - ...this.maxFileBytes !== void 0 ? { maxFileBytes: this.maxFileBytes } : {} - }; - try { - cleanupSkills = await agentToolset.setupSkills(ctx); - } catch (e) { - log.warn("skill setup failed", { session_id: sessionId, work_id: work.id, error: String(e) }); - } - if (sessionsToken !== null && this.memorySyncIntervalMs !== null) { - stores = new agentToolset.SessionMemoryStores(sessionClient, { - workdir: this.workdir, - ...this.memorySyncIntervalMs !== void 0 ? { syncIntervalMs: this.memorySyncIntervalMs } : {}, - syncDeletions: this.memorySyncDeletions - }); - await stores.download(session); - ctx.allowedRoots = stores.roots; - ctx.readOnlyRoots = stores.readOnlyRoots; - } else { - log.debug("memory stores disabled for this item", { work_id: work.id }); - } - const tools = typeof this.tools === "function" ? this.tools(ctx) : this.tools ?? agentToolset.betaAgentToolset20260401(ctx); - runner = new SessionToolRunner(sessionId, { - client: sessionClient, - tools, - ...this.maxIdleMs !== void 0 ? { maxIdleMs: this.maxIdleMs } : {}, - ...this.requestOptions !== void 0 ? { requestOptions: this.requestOptions } : {}, - signal: ctrl.signal - }); - if (leaseTtlMs !== void 0) - runner._setSendRetryWindow(leaseTtlMs); - for await (const _ of runner) { - if (stores) - await stores.syncIfDue(); - } - cleanEnd = !ctrl.signal.aborted; - } finally { - try { - await cleanupSkills().catch((e) => { - log.warn("skill cleanup failed", { session_id: sessionId, work_id: work.id, error: String(e) }); - }); - } finally { - if (stores) { - const boundMs = agentToolset.MEMORY_FLUSH_TIMEOUT_MS; - if (cleanEnd) { - const finishCutOff = await withTimeout(stores.finish(), boundMs); - if (finishCutOff) { - log.warn(`final memory sync cut off after ${boundMs}ms; the flush that follows still uploads changed files`, { session_id: sessionId, work_id: work.id }); - } - } - const flushBound = new AbortController(); - const flushCutOff = await withTimeout(stores.flushWrites(flushBound.signal), boundMs); - if (flushCutOff) { - flushBound.abort(); - log.warn(`memory flush cut off after ${boundMs}ms; changed files it had not uploaded yet are not saved`, { session_id: sessionId, work_id: work.id }); - } - await stores.dispose().catch((e) => { - log.warn("memory store cleanup failed", { - session_id: sessionId, - work_id: work.id, - error: String(e) - }); - }); - } - } - lease.finish("runner_done"); - detachExternal(); - await heartbeatPromise; - if (lease.lost) { - log.info("lease lost; released without stopping it", { session_id: sessionId, work_id: work.id }); - } else { - await forceStop(sessionClient, work, log, this.requestOptions); - } - } - }; - return EnvironmentWorker2; - })(); - Lease = /* @__PURE__ */ (() => { - class Lease2 { - constructor(ctrl) { - _Lease_ctrl.set(this, void 0); - _Lease_endReason.set(this, void 0); - __classPrivateFieldSet(this, _Lease_ctrl, ctrl, "f"); - } - get signal() { - return __classPrivateFieldGet(this, _Lease_ctrl, "f").signal; - } - finish(reason) { - __classPrivateFieldSet(this, _Lease_endReason, __classPrivateFieldGet(this, _Lease_endReason, "f") ?? reason, "f"); - __classPrivateFieldGet(this, _Lease_ctrl, "f").abort(); - } - /** True once the item belongs to the queue or another worker. */ - get lost() { - return __classPrivateFieldGet(this, _Lease_endReason, "f") === "lease_lost" || __classPrivateFieldGet(this, _Lease_endReason, "f") === "assumed_lost"; - } - } - _Lease_ctrl = /* @__PURE__ */ new WeakMap(), _Lease_endReason = /* @__PURE__ */ new WeakMap(); - return Lease2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/environments/work.mjs -var Work; -var init_work = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/environments/work.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - init_poller(); - init_worker(); - Work = /* @__PURE__ */ (() => { - class Work2 extends APIResource { - /** - * Note: these endpoints are called automatically by the pre-built environment - * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted - * sandbox environments. They are included here as a reference; you do not need to - * invoke them directly. - * - * Retrieve detailed information about a specific work item. - * - * @example - * ```ts - * const betaSelfHostedWork = - * await client.beta.environments.work.retrieve('work_id', { - * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * }); - * ``` - */ - retrieve(workID, params, options) { - const { environment_id, betas, workspace_id } = params; - return this._client.get(path2`/v1/environments/${environment_id}/work/${workID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Note: these endpoints are called automatically by the pre-built environment - * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted - * sandbox environments. They are included here as a reference; you do not need to - * invoke them directly. - * - * Update work item metadata with merge semantics. - * - * @example - * ```ts - * const betaSelfHostedWork = - * await client.beta.environments.work.update('work_id', { - * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * metadata: { foo: 'string' }, - * }); - * ``` - */ - update(workID, params, options) { - const { environment_id, betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/environments/${environment_id}/work/${workID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Note: these endpoints are called automatically by the pre-built environment - * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted - * sandbox environments. They are included here as a reference; you do not need to - * invoke them directly. - * - * List work items in an environment. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaSelfHostedWork of client.beta.environments.work.list( - * 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * )) { - * // ... - * } - * ``` - */ - list(environmentID, params = {}, options) { - const { betas, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/environments/${environmentID}/work?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString() }, - options?.headers - ]) - }); - } - /** - * Note: these endpoints are called automatically by the pre-built environment - * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted - * sandbox environments. They are included here as a reference; you do not need to - * invoke them directly. - * - * Acknowledge receipt of a work item, transitioning it from 'queued' to 'starting' - * and removing it from the queue. - * - * @example - * ```ts - * const betaSelfHostedWork = - * await client.beta.environments.work.ack('work_id', { - * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * }); - * ``` - */ - ack(workID, params, options) { - const { environment_id, betas } = params; - return this._client.post(path2`/v1/environments/${environment_id}/work/${workID}/ack?beta=true`, { - ...options, - headers: buildHeaders([ - { "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString() }, - options?.headers - ]) - }); - } - /** - * Note: these endpoints are called automatically by the pre-built environment - * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted - * sandbox environments. They are included here as a reference; you do not need to - * invoke them directly. - * - * Record a heartbeat for a work item to maintain the lease. - * - * @example - * ```ts - * const betaSelfHostedWorkHeartbeatResponse = - * await client.beta.environments.work.heartbeat('work_id', { - * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * }); - * ``` - */ - heartbeat(workID, params, options) { - const { environment_id, desired_ttl_seconds, expected_last_heartbeat, betas } = params; - return this._client.post(path2`/v1/environments/${environment_id}/work/${workID}/heartbeat?beta=true`, { - query: { desired_ttl_seconds, expected_last_heartbeat }, - ...options, - headers: buildHeaders([ - { "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString() }, - options?.headers - ]) - }); - } - /** - * Note: these endpoints are called automatically by the pre-built environment - * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted - * sandbox environments. They are included here as a reference; you do not need to - * invoke them directly. - * - * Long poll for work items in the queue. - * - * @example - * ```ts - * const betaSelfHostedWork = - * await client.beta.environments.work.poll( - * 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * ); - * ``` - */ - poll(environmentID, params = {}, options) { - const { betas, "Anthropic-Worker-ID": anthropicWorkerID, ...query } = params ?? {}; - return this._client.get(path2`/v1/environments/${environmentID}/work/poll?beta=true`, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...anthropicWorkerID != null ? { "Anthropic-Worker-ID": anthropicWorkerID } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Get statistics about the work queue for an environment. - * - * @example - * ```ts - * const betaSelfHostedWorkQueueStats = - * await client.beta.environments.work.stats( - * 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * ); - * ``` - */ - stats(environmentID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/environments/${environmentID}/work/stats?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Note: these endpoints are called automatically by the pre-built environment - * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted - * sandbox environments. They are included here as a reference; you do not need to - * invoke them directly. - * - * Stop a work item, initiating graceful or forced shutdown. - * - * @example - * ```ts - * const betaSelfHostedWork = - * await client.beta.environments.work.stop('work_id', { - * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * }); - * ``` - */ - stop(workID, params, options) { - const { environment_id, betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/environments/${environment_id}/work/${workID}/stop?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Continuously claim work from a self-hosted environment, ack each item, - * and yield it. Posts `stop` automatically when the consumer's loop body - * returns or when iteration ends. - * - * @example - * ```ts - * for await (const work of client.beta.environments.work.poller({ - * environmentId, - * environmentKey, - * })) { - * if (work.data.type !== 'session') continue; - * // ...service the work... - * } - * ``` - */ - poller(opts) { - return new WorkPoller({ ...opts, client: this._client }); - } - worker(opts) { - return new EnvironmentWorker({ ...opts, client: this._client }); - } - } - Work2.WorkPoller = WorkPoller; - Work2.EnvironmentWorker = EnvironmentWorker; - return Work2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/environments/environments.mjs -var Environments; -var init_environments = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/environments/environments.mjs"() { - init_resource(); - init_work(); - init_work(); - init_pagination(); - init_headers(); - init_path(); - Environments = /* @__PURE__ */ (() => { - class Environments3 extends APIResource { - constructor() { - super(...arguments); - this.work = new Work(this._client); - } - /** - * Create a new environment with the specified configuration. - * - * @example - * ```ts - * const betaEnvironment = - * await client.beta.environments.create({ - * name: 'python-data-analysis', - * }); - * ``` - */ - create(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/environments?beta=true", { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Retrieve a specific environment by ID. - * - * @example - * ```ts - * const betaEnvironment = - * await client.beta.environments.retrieve( - * 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * ); - * ``` - */ - retrieve(environmentID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/environments/${environmentID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Update an existing environment's configuration. - * - * @example - * ```ts - * const betaEnvironment = - * await client.beta.environments.update( - * 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * ); - * ``` - */ - update(environmentID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/environments/${environmentID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List environments with pagination support. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaEnvironment of client.beta.environments.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/environments?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Delete an environment by ID. Returns a confirmation of the deletion. - * - * @example - * ```ts - * const betaEnvironmentDeleteResponse = - * await client.beta.environments.delete( - * 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * ); - * ``` - */ - delete(environmentID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.delete(path2`/v1/environments/${environmentID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Archive an environment by ID. Archived environments cannot be used to create new - * sessions. - * - * @example - * ```ts - * const betaEnvironment = - * await client.beta.environments.archive( - * 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * ); - * ``` - */ - archive(environmentID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/environments/${environmentID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - } - Environments3.Work = Work; - return Environments3; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memories.mjs -var Memories; -var init_memories = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memories.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Memories = class extends APIResource { - /** - * Create a memory - * - * @example - * ```ts - * const betaManagedAgentsMemory = - * await client.beta.memoryStores.memories.create( - * 'memory_store_id', - * { content: 'content', path: 'xx' }, - * ); - * ``` - */ - create(memoryStoreID, params, options) { - const { view: view2, betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/memory_stores/${memoryStoreID}/memories?beta=true`, { - query: { view: view2 }, - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Retrieve a memory - * - * @example - * ```ts - * const betaManagedAgentsMemory = - * await client.beta.memoryStores.memories.retrieve( - * 'memory_id', - * { memory_store_id: 'memory_store_id' }, - * ); - * ``` - */ - retrieve(memoryID, params, options) { - const { memory_store_id, betas, workspace_id, ...query } = params; - return this._client.get(path2`/v1/memory_stores/${memory_store_id}/memories/${memoryID}?beta=true`, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Update a memory - * - * @example - * ```ts - * const betaManagedAgentsMemory = - * await client.beta.memoryStores.memories.update( - * 'memory_id', - * { memory_store_id: 'memory_store_id' }, - * ); - * ``` - */ - update(memoryID, params, options) { - const { memory_store_id, view: view2, betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/memory_stores/${memory_store_id}/memories/${memoryID}?beta=true`, { - query: { view: view2 }, - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List memories - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsMemoryListItem of client.beta.memoryStores.memories.list( - * 'memory_store_id', - * )) { - * // ... - * } - * ``` - */ - list(memoryStoreID, params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/memory_stores/${memoryStoreID}/memories?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Delete a memory - * - * @example - * ```ts - * const betaManagedAgentsDeletedMemory = - * await client.beta.memoryStores.memories.delete( - * 'memory_id', - * { memory_store_id: 'memory_store_id' }, - * ); - * ``` - */ - delete(memoryID, params, options) { - const { memory_store_id, expected_content_sha256, betas, workspace_id } = params; - return this._client.delete(path2`/v1/memory_stores/${memory_store_id}/memories/${memoryID}?beta=true`, { - query: { expected_content_sha256 }, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-versions.mjs -var MemoryVersions; -var init_memory_versions = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-versions.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - MemoryVersions = class extends APIResource { - /** - * Retrieve a memory version - * - * @example - * ```ts - * const betaManagedAgentsMemoryVersion = - * await client.beta.memoryStores.memoryVersions.retrieve( - * 'memory_version_id', - * { memory_store_id: 'memory_store_id' }, - * ); - * ``` - */ - retrieve(memoryVersionID, params, options) { - const { memory_store_id, betas, workspace_id, ...query } = params; - return this._client.get(path2`/v1/memory_stores/${memory_store_id}/memory_versions/${memoryVersionID}?beta=true`, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List memory versions - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsMemoryVersion of client.beta.memoryStores.memoryVersions.list( - * 'memory_store_id', - * )) { - * // ... - * } - * ``` - */ - list(memoryStoreID, params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/memory_stores/${memoryStoreID}/memory_versions?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Redact a memory version - * - * @example - * ```ts - * const betaManagedAgentsMemoryVersion = - * await client.beta.memoryStores.memoryVersions.redact( - * 'memory_version_id', - * { memory_store_id: 'memory_store_id' }, - * ); - * ``` - */ - redact(memoryVersionID, params, options) { - const { memory_store_id, betas, workspace_id } = params; - return this._client.post(path2`/v1/memory_stores/${memory_store_id}/memory_versions/${memoryVersionID}/redact?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-stores.mjs -var MemoryStores; -var init_memory_stores = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-stores.mjs"() { - init_resource(); - init_memories(); - init_memories(); - init_memory_versions(); - init_memory_versions(); - init_pagination(); - init_headers(); - init_path(); - MemoryStores = /* @__PURE__ */ (() => { - class MemoryStores2 extends APIResource { - constructor() { - super(...arguments); - this.memories = new Memories(this._client); - this.memoryVersions = new MemoryVersions(this._client); - } - /** - * Create a memory store - * - * @example - * ```ts - * const betaManagedAgentsMemoryStore = - * await client.beta.memoryStores.create({ name: 'x' }); - * ``` - */ - create(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/memory_stores?beta=true", { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Retrieve a memory store - * - * @example - * ```ts - * const betaManagedAgentsMemoryStore = - * await client.beta.memoryStores.retrieve( - * 'memory_store_id', - * ); - * ``` - */ - retrieve(memoryStoreID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/memory_stores/${memoryStoreID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Update a memory store - * - * @example - * ```ts - * const betaManagedAgentsMemoryStore = - * await client.beta.memoryStores.update('memory_store_id'); - * ``` - */ - update(memoryStoreID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/memory_stores/${memoryStoreID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List memory stores - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsMemoryStore of client.beta.memoryStores.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/memory_stores?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Delete a memory store - * - * @example - * ```ts - * const betaManagedAgentsDeletedMemoryStore = - * await client.beta.memoryStores.delete('memory_store_id'); - * ``` - */ - delete(memoryStoreID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.delete(path2`/v1/memory_stores/${memoryStoreID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Archive a memory store - * - * @example - * ```ts - * const betaManagedAgentsMemoryStore = - * await client.beta.memoryStores.archive('memory_store_id'); - * ``` - */ - archive(memoryStoreID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/memory_stores/${memoryStoreID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - } - MemoryStores2.Memories = Memories; - MemoryStores2.MemoryVersions = MemoryVersions; - return MemoryStores2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/error.mjs -var init_error2 = __esm({ - "node_modules/@anthropic-ai/sdk/error.mjs"() { - init_error(); - } -}); - -// node_modules/@anthropic-ai/sdk/internal/decoders/jsonl.mjs -var JSONLDecoder; -var init_jsonl = __esm({ - "node_modules/@anthropic-ai/sdk/internal/decoders/jsonl.mjs"() { - init_error(); - init_shims(); - init_line(); - JSONLDecoder = /* @__PURE__ */ (() => { - class JSONLDecoder2 { - constructor(iterator, controller) { - this.iterator = iterator; - this.controller = controller; - } - async *decoder() { - const lineDecoder = new LineDecoder(); - for await (const chunk of this.iterator) { - for (const line of lineDecoder.decode(chunk)) { - yield JSON.parse(line); - } - } - for (const line of lineDecoder.flush()) { - yield JSON.parse(line); - } - } - [Symbol.asyncIterator]() { - return this.decoder(); - } - static fromResponse(response, controller) { - if (!response.body) { - controller.abort(); - if (typeof globalThis.navigator !== "undefined" && globalThis.navigator.product === "ReactNative") { - throw new AnthropicError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`); - } - throw new AnthropicError(`Attempted to iterate over a response with no body`); - } - return new JSONLDecoder2(ReadableStreamToAsyncIterable(response.body), controller); - } - } - return JSONLDecoder2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/messages/batches.mjs -var Batches; -var init_batches = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/messages/batches.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_jsonl(); - init_error2(); - init_path(); - Batches = class extends APIResource { - /** - * Send a batch of Message creation requests. - * - * The Message Batches API can be used to process multiple Messages API requests at - * once. Once a Message Batch is created, it begins processing immediately. Batches - * can take up to 24 hours to complete. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * const betaMessageBatch = - * await client.beta.messages.batches.create({ - * requests: [ - * { - * custom_id: 'my-custom-id-1', - * params: { - * max_tokens: 1024, - * messages: [ - * { content: 'Hello, world', role: 'user' }, - * ], - * model: 'claude-opus-5', - * }, - * }, - * ], - * }); - * ``` - */ - create(params, options) { - const { betas, user_profile_id, workspace_id, ...body } = params; - return this._client.post("/v1/messages/batches?beta=true", { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), - ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * This endpoint is idempotent and can be used to poll for Message Batch - * completion. To access the results of a Message Batch, make a request to the - * `results_url` field in the response. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * const betaMessageBatch = - * await client.beta.messages.batches.retrieve( - * 'message_batch_id', - * ); - * ``` - */ - retrieve(messageBatchID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/messages/batches/${messageBatchID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List all Message Batches within a Workspace. Most recently created batches are - * returned first. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaMessageBatch of client.beta.messages.batches.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/messages/batches?beta=true", Page, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Delete a Message Batch. - * - * Message Batches can only be deleted once they've finished processing. If you'd - * like to delete an in-progress batch, you must first cancel it. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * const betaDeletedMessageBatch = - * await client.beta.messages.batches.delete( - * 'message_batch_id', - * ); - * ``` - */ - delete(messageBatchID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.delete(path2`/v1/messages/batches/${messageBatchID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Batches may be canceled any time before processing ends. Once cancellation is - * initiated, the batch enters a `canceling` state, at which time the system may - * complete any in-progress, non-interruptible requests before finalizing - * cancellation. - * - * The number of canceled requests is specified in `request_counts`. To determine - * which requests were canceled, check the individual results within the batch. - * Note that cancellation may not result in any canceled requests if they were - * non-interruptible. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * const betaMessageBatch = - * await client.beta.messages.batches.cancel( - * 'message_batch_id', - * ); - * ``` - */ - cancel(messageBatchID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/messages/batches/${messageBatchID}/cancel?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Streams the results of a Message Batch as a `.jsonl` file. - * - * Each line in the file is a JSON object containing the result of a single request - * in the Message Batch. Results are not guaranteed to be in the same order as - * requests. Use the `custom_id` field to match results to requests. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * const betaMessageBatchIndividualResponse = - * await client.beta.messages.batches.results( - * 'message_batch_id', - * ); - * ``` - */ - async results(messageBatchID, params = {}, options) { - const batch = await this.retrieve(messageBatchID, params, options); - if (!batch.results_url) { - throw new AnthropicError(`No batch \`results_url\`; Has it finished processing? ${batch.processing_status} - ${batch.id}`); - } - const { betas, workspace_id } = params ?? {}; - return this._client.get(batch.results_url, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), - Accept: "application/binary", - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]), - stream: true, - __binaryResponse: true - })._thenUnwrap((_, props) => JSONLDecoder.fromResponse(props.response, props.controller)); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/constants.mjs -var MODEL_NONSTREAMING_TOKENS; -var init_constants = __esm({ - "node_modules/@anthropic-ai/sdk/internal/constants.mjs"() { - MODEL_NONSTREAMING_TOKENS = { - "claude-opus-4@20250514": 8192, - "anthropic.claude-opus-4-1-20250805-v1:0": 8192, - "claude-opus-4-1@20250805": 8192 - }; - } -}); - -// node_modules/@anthropic-ai/sdk/lib/beta-parser.mjs -function getOutputFormat(params) { - return params?.output_format ?? params?.output_config?.format; -} -function maybeParseBetaMessage(message, params, opts) { - const outputFormat = getOutputFormat(params); - if (!params || !("parse" in (outputFormat ?? {}))) { - return { - ...message, - content: message.content.map((block) => { - if (block.type === "text") { - const parsedBlock = Object.defineProperty({ ...block }, "parsed_output", { - value: null, - enumerable: false - }); - return Object.defineProperty(parsedBlock, "parsed", { - get() { - opts.logger.warn("The `parsed` property on `text` blocks is deprecated, please use `parsed_output` instead."); - return null; - }, - enumerable: false - }); - } - return block; - }), - parsed_output: null - }; - } - return parseBetaMessage(message, params, opts); -} -function parseBetaMessage(message, params, opts) { - let firstParsedOutput = null; - const content = message.content.map((block) => { - if (block.type === "text") { - const parsedOutput = parseBetaOutputFormat(params, block.text); - if (firstParsedOutput === null) { - firstParsedOutput = parsedOutput; - } - const parsedBlock = Object.defineProperty({ ...block }, "parsed_output", { - value: parsedOutput, - enumerable: false - }); - return Object.defineProperty(parsedBlock, "parsed", { - get() { - opts.logger.warn("The `parsed` property on `text` blocks is deprecated, please use `parsed_output` instead."); - return parsedOutput; - }, - enumerable: false - }); - } - return block; - }); - return { - ...message, - content, - parsed_output: firstParsedOutput - }; -} -function parseBetaOutputFormat(params, content) { - const outputFormat = getOutputFormat(params); - if (outputFormat?.type !== "json_schema") { - return null; - } - try { - if ("parse" in outputFormat) { - return outputFormat.parse(content); - } - return JSON.parse(content); - } catch (error) { - throw new AnthropicError(`Failed to parse structured output: ${error}`); - } -} -var init_beta_parser = __esm({ - "node_modules/@anthropic-ai/sdk/lib/beta-parser.mjs"() { - init_error(); - } -}); - -// node_modules/@anthropic-ai/sdk/streaming.mjs -var init_streaming2 = __esm({ - "node_modules/@anthropic-ai/sdk/streaming.mjs"() { - init_streaming(); - } -}); - -// node_modules/@anthropic-ai/sdk/_vendor/partial-json-parser/parser.mjs -var tokenize, strip, unstrip, generate, partialParse; -var init_parser = __esm({ - "node_modules/@anthropic-ai/sdk/_vendor/partial-json-parser/parser.mjs"() { - tokenize = (input) => { - let current = 0; - let tokens = []; - while (current < input.length) { - let char = input[current]; - if (char === "\\") { - current++; - continue; - } - if (char === "{") { - tokens.push({ - type: "brace", - value: "{" - }); - current++; - continue; - } - if (char === "}") { - tokens.push({ - type: "brace", - value: "}" - }); - current++; - continue; - } - if (char === "[") { - tokens.push({ - type: "paren", - value: "[" - }); - current++; - continue; - } - if (char === "]") { - tokens.push({ - type: "paren", - value: "]" - }); - current++; - continue; - } - if (char === ":") { - tokens.push({ - type: "separator", - value: ":" - }); - current++; - continue; - } - if (char === ",") { - tokens.push({ - type: "delimiter", - value: "," - }); - current++; - continue; - } - if (char === '"') { - const start = current + 1; - let end = start; - let danglingQuote = false; - while (true) { - end = input.indexOf('"', end); - if (end === -1) { - danglingQuote = true; - break; - } - let backslashes = 0; - let i = end - 1; - while (i >= start && input[i] === "\\") { - backslashes++; - i--; - } - if (backslashes % 2 === 0) - break; - end++; - } - if (danglingQuote) { - current = input.length; - } else { - tokens.push({ - type: "string", - value: input.slice(start, end) - }); - current = end + 1; - } - continue; - } - let WHITESPACE = /\s/; - if (char && WHITESPACE.test(char)) { - current++; - continue; - } - let NUMBERS = /[0-9]/; - if (char && NUMBERS.test(char) || char === "-" || char === ".") { - let value2 = ""; - if (char === "-") { - value2 += char; - char = input[++current]; - } - while (char && (NUMBERS.test(char) || char === "." || // exponent marker, e.g. `1e10` or `1.5E-9` - char === "e" || char === "E" || // exponent sign, only valid immediately after the exponent marker - (char === "-" || char === "+") && (value2[value2.length - 1] === "e" || value2[value2.length - 1] === "E"))) { - value2 += char; - char = input[++current]; - } - tokens.push({ - type: "number", - value: value2, - unterminated: current === input.length - }); - continue; - } - let LETTERS = /[a-z]/i; - if (char && LETTERS.test(char)) { - let value2 = ""; - while (char && LETTERS.test(char)) { - if (current === input.length) { - break; - } - value2 += char; - char = input[++current]; - } - if (value2 == "true" || value2 == "false" || value2 === "null") { - tokens.push({ - type: "name", - value: value2 - }); - } else { - current++; - continue; - } - continue; - } - current++; - } - return tokens; - }; - strip = (tokens) => { - let open = []; - for (const token of tokens) { - if (token.type === "brace" || token.type === "paren") { - if (token.value === "{" || token.value === "[") { - open.push(token.value); - } else { - open.pop(); - } - } - } - let innermostOpenBracket = open[open.length - 1]; - let length = tokens.length; - let JSON_NUMBER = /^-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][-+]?[0-9]+)?$/; - while (length > 0) { - let lastToken = tokens[length - 1]; - switch (lastToken.type) { - case "separator": - length--; - continue; - case "number": - if (lastToken.unterminated || !JSON_NUMBER.test(lastToken.value)) { - length--; - continue; - } - break; - case "string": - let tokenBeforeTheLastToken = tokens[length - 2]; - if (innermostOpenBracket === "{" && (tokenBeforeTheLastToken?.type === "delimiter" || tokenBeforeTheLastToken?.type === "brace" && tokenBeforeTheLastToken.value === "{")) { - length--; - continue; - } - break; - case "delimiter": - length--; - break; - } - break; - } - return tokens.slice(0, length); - }; - unstrip = (tokens) => { - let tail = []; - tokens.map((token) => { - if (token.type === "brace") { - if (token.value === "{") { - tail.push("}"); - } else { - tail.splice(tail.lastIndexOf("}"), 1); - } - } - if (token.type === "paren") { - if (token.value === "[") { - tail.push("]"); - } else { - tail.splice(tail.lastIndexOf("]"), 1); - } - } - }); - if (tail.length > 0) { - tail.reverse().map((item) => { - if (item === "}") { - tokens.push({ - type: "brace", - value: "}" - }); - } else if (item === "]") { - tokens.push({ - type: "paren", - value: "]" - }); - } - }); - } - return tokens; - }; - generate = (tokens) => { - let output = ""; - tokens.map((token) => { - switch (token.type) { - case "string": - output += '"' + token.value + '"'; - break; - default: - output += token.value; - break; - } - }); - return output; - }; - partialParse = (input) => JSON.parse(generate(unstrip(strip(tokenize(input))))); - } -}); - -// node_modules/@anthropic-ai/sdk/internal/message-stream-utils.mjs -function withLazyInput(prev, jsonBuf) { - const next = {}; - for (const key of Object.keys(prev)) { - if (key !== "input") - next[key] = prev[key]; - } - Object.defineProperty(next, JSON_BUF_PROPERTY, { value: jsonBuf, enumerable: false, writable: true }); - let input; - let parsed = false; - Object.defineProperty(next, "input", { - enumerable: true, - configurable: true, - get() { - if (!parsed) { - input = jsonBuf ? partialParse(jsonBuf) : {}; - parsed = true; - } - return input; - } - }); - return next; -} -var JSON_BUF_PROPERTY; -var init_message_stream_utils = __esm({ - "node_modules/@anthropic-ai/sdk/internal/message-stream-utils.mjs"() { - init_parser(); - JSON_BUF_PROPERTY = "__json_buf"; - } -}); - -// node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.mjs -function tracksToolInput(content) { - return content.type === "tool_use" || content.type === "server_tool_use" || content.type === "mcp_tool_use"; -} -var _BetaMessageStream_instances, _BetaMessageStream_currentMessageSnapshot, _BetaMessageStream_params, _BetaMessageStream_connectedPromise, _BetaMessageStream_resolveConnectedPromise, _BetaMessageStream_rejectConnectedPromise, _BetaMessageStream_endPromise, _BetaMessageStream_resolveEndPromise, _BetaMessageStream_rejectEndPromise, _BetaMessageStream_listeners, _BetaMessageStream_ended, _BetaMessageStream_errored, _BetaMessageStream_aborted, _BetaMessageStream_catchingPromiseCreated, _BetaMessageStream_response, _BetaMessageStream_request_id, _BetaMessageStream_workspace_id, _BetaMessageStream_logger, _BetaMessageStream_getFinalMessage, _BetaMessageStream_getFinalText, _BetaMessageStream_handleError, _BetaMessageStream_beginRequest, _BetaMessageStream_addStreamEvent, _BetaMessageStream_endRequest, _BetaMessageStream_accumulateMessage, _BetaMessageStream_toolInputParseError, BetaMessageStream; -var init_BetaMessageStream = __esm({ - "node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.mjs"() { - init_tslib(); - init_stainless_helper_header(); - init_error2(); - init_errors(); - init_values(); - init_streaming2(); - init_beta_parser(); - init_message_stream_utils(); - BetaMessageStream = /* @__PURE__ */ (() => { - class BetaMessageStream2 { - constructor(params, opts) { - _BetaMessageStream_instances.add(this); - this.messages = []; - this.receivedMessages = []; - _BetaMessageStream_currentMessageSnapshot.set(this, void 0); - _BetaMessageStream_params.set(this, null); - this.controller = new AbortController(); - _BetaMessageStream_connectedPromise.set(this, void 0); - _BetaMessageStream_resolveConnectedPromise.set(this, () => { - }); - _BetaMessageStream_rejectConnectedPromise.set(this, () => { - }); - _BetaMessageStream_endPromise.set(this, void 0); - _BetaMessageStream_resolveEndPromise.set(this, () => { - }); - _BetaMessageStream_rejectEndPromise.set(this, () => { - }); - _BetaMessageStream_listeners.set(this, {}); - _BetaMessageStream_ended.set(this, false); - _BetaMessageStream_errored.set(this, false); - _BetaMessageStream_aborted.set(this, false); - _BetaMessageStream_catchingPromiseCreated.set(this, false); - _BetaMessageStream_response.set(this, void 0); - _BetaMessageStream_request_id.set(this, void 0); - _BetaMessageStream_workspace_id.set(this, void 0); - _BetaMessageStream_logger.set(this, void 0); - _BetaMessageStream_handleError.set(this, (error) => { - __classPrivateFieldSet(this, _BetaMessageStream_errored, true, "f"); - if (isAbortError(error)) { - error = new APIUserAbortError(); - } - if (error instanceof APIUserAbortError) { - __classPrivateFieldSet(this, _BetaMessageStream_aborted, true, "f"); - return this._emit("abort", error); - } - if (error instanceof AnthropicError) { - return this._emit("error", error); - } - if (error instanceof Error) { - const anthropicError = new AnthropicError(error.message); - anthropicError.cause = error; - return this._emit("error", anthropicError); - } - return this._emit("error", new AnthropicError(String(error))); - }); - __classPrivateFieldSet(this, _BetaMessageStream_connectedPromise, new Promise((resolve2, reject2) => { - __classPrivateFieldSet(this, _BetaMessageStream_resolveConnectedPromise, resolve2, "f"); - __classPrivateFieldSet(this, _BetaMessageStream_rejectConnectedPromise, reject2, "f"); - }), "f"); - __classPrivateFieldSet(this, _BetaMessageStream_endPromise, new Promise((resolve2, reject2) => { - __classPrivateFieldSet(this, _BetaMessageStream_resolveEndPromise, resolve2, "f"); - __classPrivateFieldSet(this, _BetaMessageStream_rejectEndPromise, reject2, "f"); - }), "f"); - __classPrivateFieldGet(this, _BetaMessageStream_connectedPromise, "f").catch(() => { - }); - __classPrivateFieldGet(this, _BetaMessageStream_endPromise, "f").catch(() => { - }); - __classPrivateFieldSet(this, _BetaMessageStream_params, params, "f"); - __classPrivateFieldSet(this, _BetaMessageStream_logger, opts?.logger ?? console, "f"); - } - get response() { - return __classPrivateFieldGet(this, _BetaMessageStream_response, "f"); - } - get request_id() { - return __classPrivateFieldGet(this, _BetaMessageStream_request_id, "f"); - } - get workspace_id() { - return __classPrivateFieldGet(this, _BetaMessageStream_workspace_id, "f"); - } - /** - * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request, - * returned vie the `request-id` header which is useful for debugging requests and resporting - * issues to Anthropic. - * - * This is the same as the `APIPromise.withResponse()` method. - * - * This method will raise an error if you created the stream using `MessageStream.fromReadableStream` - * as no `Response` is available. - */ - async withResponse() { - __classPrivateFieldSet(this, _BetaMessageStream_catchingPromiseCreated, true, "f"); - const response = await __classPrivateFieldGet(this, _BetaMessageStream_connectedPromise, "f"); - if (!response) { - throw new Error("Could not resolve a `Response` object"); - } - return { - data: this, - response, - request_id: response.headers.get("request-id"), - workspace_id: response.headers.get("anthropic-workspace-id") - }; - } - /** - * Intended for use on the frontend, consuming a stream produced with - * `.toReadableStream()` on the backend. - * - * Note that messages sent to the model do not appear in `.on('message')` - * in this context. - */ - static fromReadableStream(stream5) { - const runner = new BetaMessageStream2(null); - runner._run(() => runner._fromReadableStream(stream5)); - return runner; - } - static createMessage(messages, params, options, { logger } = {}) { - const runner = new BetaMessageStream2(params, { logger }); - for (const message of params.messages) { - runner._addMessageParam(message); - } - __classPrivateFieldSet(runner, _BetaMessageStream_params, { ...params, stream: true }, "f"); - runner._run(() => runner._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, [STAINLESS_HELPER_METHOD_HEADER]: "stream" } })); - return runner; - } - _run(executor) { - executor().then(() => { - this._emitFinal(); - this._emit("end"); - }, __classPrivateFieldGet(this, _BetaMessageStream_handleError, "f")); - } - _addMessageParam(message) { - this.messages.push(message); - } - _addMessage(message, emit2 = true) { - this.receivedMessages.push(message); - if (emit2) { - this._emit("message", message); - } - } - async _createMessage(messages, params, options) { - const signal = options?.signal; - let abortHandler; - if (signal) { - if (signal.aborted) - this.controller.abort(); - abortHandler = this.controller.abort.bind(this.controller); - signal.addEventListener("abort", abortHandler); - } - try { - __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_beginRequest).call(this); - const { response, data: stream5 } = await messages.create({ ...params, stream: true }, { ...options, signal: this.controller.signal }).withResponse(); - this._connected(response); - for await (const event of stream5) { - __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_addStreamEvent).call(this, event); - } - if (stream5.controller.signal?.aborted) { - throw new APIUserAbortError(); - } - __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_endRequest).call(this); - } finally { - if (signal && abortHandler) { - signal.removeEventListener("abort", abortHandler); - } - } - } - _connected(response) { - if (this.ended) - return; - __classPrivateFieldSet(this, _BetaMessageStream_response, response, "f"); - __classPrivateFieldSet(this, _BetaMessageStream_request_id, response?.headers.get("request-id"), "f"); - __classPrivateFieldSet(this, _BetaMessageStream_workspace_id, response?.headers.get("anthropic-workspace-id"), "f"); - __classPrivateFieldGet(this, _BetaMessageStream_resolveConnectedPromise, "f").call(this, response); - this._emit("connect"); - } - get ended() { - return __classPrivateFieldGet(this, _BetaMessageStream_ended, "f"); - } - get errored() { - return __classPrivateFieldGet(this, _BetaMessageStream_errored, "f"); - } - get aborted() { - return __classPrivateFieldGet(this, _BetaMessageStream_aborted, "f"); - } - abort() { - this.controller.abort(); - } - /** - * Adds the listener function to the end of the listeners array for the event. - * No checks are made to see if the listener has already been added. Multiple calls passing - * the same combination of event and listener will result in the listener being added, and - * called, multiple times. - * @returns this MessageStream, so that calls can be chained - */ - on(event, listener) { - const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] = []); - listeners.push({ listener }); - return this; - } - /** - * Removes the specified listener from the listener array for the event. - * off() will remove, at most, one instance of a listener from the listener array. If any single - * listener has been added multiple times to the listener array for the specified event, then - * off() must be called multiple times to remove each instance. - * @returns this MessageStream, so that calls can be chained - */ - off(event, listener) { - const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event]; - if (!listeners) - return this; - const index = listeners.findIndex((l) => l.listener === listener); - if (index >= 0) - listeners.splice(index, 1); - return this; - } - /** - * Adds a one-time listener function for the event. The next time the event is triggered, - * this listener is removed and then invoked. - * @returns this MessageStream, so that calls can be chained - */ - once(event, listener) { - const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] = []); - listeners.push({ listener, once: true }); - return this; - } - /** - * This is similar to `.once()`, but returns a Promise that resolves the next time - * the event is triggered, instead of calling a listener callback. - * @returns a Promise that resolves the next time given event is triggered, - * or rejects if an error is emitted. (If you request the 'error' event, - * returns a promise that resolves with the error). - * - * Example: - * - * const message = await stream.emitted('message') // rejects if the stream errors - */ - emitted(event) { - return new Promise((resolve2, reject2) => { - __classPrivateFieldSet(this, _BetaMessageStream_catchingPromiseCreated, true, "f"); - if (event !== "error") - this.once("error", reject2); - this.once(event, resolve2); - }); - } - async done() { - __classPrivateFieldSet(this, _BetaMessageStream_catchingPromiseCreated, true, "f"); - await __classPrivateFieldGet(this, _BetaMessageStream_endPromise, "f"); - } - get currentMessage() { - return __classPrivateFieldGet(this, _BetaMessageStream_currentMessageSnapshot, "f"); - } - /** - * @returns a promise that resolves with the the final assistant Message response, - * or rejects if an error occurred or the stream ended prematurely without producing a Message. - * If structured outputs were used, this will be a ParsedMessage with a `parsed` field. - */ - async finalMessage() { - await this.done(); - return __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalMessage).call(this); - } - /** - * @returns a promise that resolves with the the final assistant Message's text response, concatenated - * together if there are more than one text blocks. - * Rejects if an error occurred or the stream ended prematurely without producing a Message. - */ - async finalText() { - await this.done(); - return __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalText).call(this); - } - _emit(event, ...args) { - if (__classPrivateFieldGet(this, _BetaMessageStream_ended, "f")) - return; - if (event === "end") { - __classPrivateFieldSet(this, _BetaMessageStream_ended, true, "f"); - __classPrivateFieldGet(this, _BetaMessageStream_resolveEndPromise, "f").call(this); - } - const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event]; - if (listeners) { - __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] = listeners.filter((l) => !l.once); - listeners.forEach(({ listener }) => listener(...args)); - } - if (event === "abort") { - const error = args[0]; - if (!__classPrivateFieldGet(this, _BetaMessageStream_catchingPromiseCreated, "f") && !listeners?.length) { - Promise.reject(error); - } - __classPrivateFieldGet(this, _BetaMessageStream_rejectConnectedPromise, "f").call(this, error); - __classPrivateFieldGet(this, _BetaMessageStream_rejectEndPromise, "f").call(this, error); - this._emit("end"); - return; - } - if (event === "error") { - const error = args[0]; - if (!__classPrivateFieldGet(this, _BetaMessageStream_catchingPromiseCreated, "f") && !listeners?.length) { - Promise.reject(error); - } - __classPrivateFieldGet(this, _BetaMessageStream_rejectConnectedPromise, "f").call(this, error); - __classPrivateFieldGet(this, _BetaMessageStream_rejectEndPromise, "f").call(this, error); - this._emit("end"); - } - } - _emitFinal() { - const finalMessage = this.receivedMessages.at(-1); - if (finalMessage) { - this._emit("finalMessage", __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalMessage).call(this)); - } - } - async _fromReadableStream(readableStream, options) { - const signal = options?.signal; - let abortHandler; - if (signal) { - if (signal.aborted) - this.controller.abort(); - abortHandler = this.controller.abort.bind(this.controller); - signal.addEventListener("abort", abortHandler); - } - try { - __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_beginRequest).call(this); - this._connected(null); - const stream5 = Stream.fromReadableStream(readableStream, this.controller); - for await (const event of stream5) { - __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_addStreamEvent).call(this, event); - } - if (stream5.controller.signal?.aborted) { - throw new APIUserAbortError(); - } - __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_endRequest).call(this); - } finally { - if (signal && abortHandler) { - signal.removeEventListener("abort", abortHandler); - } - } - } - [(_BetaMessageStream_currentMessageSnapshot = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_params = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_connectedPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_resolveConnectedPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_rejectConnectedPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_endPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_resolveEndPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_rejectEndPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_listeners = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_ended = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_errored = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_aborted = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_catchingPromiseCreated = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_response = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_request_id = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_workspace_id = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_logger = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_handleError = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_instances = /* @__PURE__ */ new WeakSet(), _BetaMessageStream_getFinalMessage = function _BetaMessageStream_getFinalMessage2() { - if (this.receivedMessages.length === 0) { - throw new AnthropicError("stream ended without producing a Message with role=assistant"); - } - return this.receivedMessages.at(-1); - }, _BetaMessageStream_getFinalText = function _BetaMessageStream_getFinalText2() { - if (this.receivedMessages.length === 0) { - throw new AnthropicError("stream ended without producing a Message with role=assistant"); - } - const textBlocks = this.receivedMessages.at(-1).content.filter((block) => block.type === "text").map((block) => block.text); - if (textBlocks.length === 0) { - throw new AnthropicError("stream ended without producing a content block with type=text"); - } - return textBlocks.join(" "); - }, _BetaMessageStream_beginRequest = function _BetaMessageStream_beginRequest2() { - if (this.ended) - return; - __classPrivateFieldSet(this, _BetaMessageStream_currentMessageSnapshot, void 0, "f"); - }, _BetaMessageStream_addStreamEvent = function _BetaMessageStream_addStreamEvent2(event) { - if (this.ended) - return; - const messageSnapshot = __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_accumulateMessage).call(this, event); - this._emit("streamEvent", event, messageSnapshot); - switch (event.type) { - case "content_block_delta": { - const content = messageSnapshot.content.at(-1); - switch (event.delta.type) { - case "text_delta": { - if (content.type === "text") { - this._emit("text", event.delta.text, content.text || ""); - } - break; - } - case "citations_delta": { - if (content.type === "text") { - this._emit("citation", event.delta.citation, content.citations ?? []); - } - break; - } - case "input_json_delta": { - if (tracksToolInput(content) && __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f").inputJson?.length) { - let jsonSnapshot; - try { - jsonSnapshot = content.input; - } catch (err) { - __classPrivateFieldGet(this, _BetaMessageStream_handleError, "f").call(this, __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_toolInputParseError).call(this, content, err)); - break; - } - this._emit("inputJson", event.delta.partial_json, jsonSnapshot); - } - break; - } - case "thinking_delta": { - if (content.type === "thinking") { - this._emit("thinking", event.delta.thinking, content.thinking); - } - break; - } - case "signature_delta": { - if (content.type === "thinking") { - this._emit("signature", content.signature); - } - break; - } - case "compaction_delta": { - if (content.type === "compaction" && content.content) { - this._emit("compaction", content.content); - } - break; - } - default: - checkNever(event.delta); - } - break; - } - case "message_stop": { - this._addMessageParam(messageSnapshot); - this._addMessage(maybeParseBetaMessage(messageSnapshot, __classPrivateFieldGet(this, _BetaMessageStream_params, "f"), { logger: __classPrivateFieldGet(this, _BetaMessageStream_logger, "f") }), true); - break; - } - case "content_block_stop": { - this._emit("contentBlock", messageSnapshot.content.at(-1)); - break; - } - case "message_start": { - __classPrivateFieldSet(this, _BetaMessageStream_currentMessageSnapshot, messageSnapshot, "f"); - break; - } - case "content_block_start": - case "message_delta": - break; - } - }, _BetaMessageStream_endRequest = function _BetaMessageStream_endRequest2() { - if (this.ended) { - throw new AnthropicError(`stream has ended, this shouldn't happen`); - } - const snapshot = __classPrivateFieldGet(this, _BetaMessageStream_currentMessageSnapshot, "f"); - if (!snapshot) { - throw new AnthropicError(`request ended without sending any chunks`); - } - __classPrivateFieldSet(this, _BetaMessageStream_currentMessageSnapshot, void 0, "f"); - return maybeParseBetaMessage(snapshot, __classPrivateFieldGet(this, _BetaMessageStream_params, "f"), { logger: __classPrivateFieldGet(this, _BetaMessageStream_logger, "f") }); - }, _BetaMessageStream_accumulateMessage = function _BetaMessageStream_accumulateMessage2(event) { - let snapshot = __classPrivateFieldGet(this, _BetaMessageStream_currentMessageSnapshot, "f"); - if (event.type === "message_start") { - if (snapshot) { - throw new AnthropicError(`Unexpected event order, got ${event.type} before receiving "message_stop"`); - } - return event.message; - } - if (!snapshot) { - throw new AnthropicError(`Unexpected event order, got ${event.type} before "message_start"`); - } - switch (event.type) { - case "message_stop": - return snapshot; - case "message_delta": - snapshot.stop_reason = event.delta.stop_reason; - snapshot.stop_sequence = event.delta.stop_sequence; - snapshot.stop_details = event.delta.stop_details; - snapshot.usage.output_tokens = event.usage.output_tokens; - if (event.delta.container != null) { - snapshot.container = event.delta.container; - } - if (event.context_management != null) { - snapshot.context_management = event.context_management; - } - if (event.input_transformations != null) { - snapshot.input_transformations = event.input_transformations; - } - if (event.usage.input_tokens != null) { - snapshot.usage.input_tokens = event.usage.input_tokens; - } - if (event.usage.cache_creation_input_tokens != null) { - snapshot.usage.cache_creation_input_tokens = event.usage.cache_creation_input_tokens; - } - if (event.usage.cache_read_input_tokens != null) { - snapshot.usage.cache_read_input_tokens = event.usage.cache_read_input_tokens; - } - if (event.usage.server_tool_use != null) { - snapshot.usage.server_tool_use = event.usage.server_tool_use; - } - if (event.usage.iterations != null) { - snapshot.usage.iterations = event.usage.iterations; - } - if (event.usage.fallback_credit != null) { - snapshot.usage.fallback_credit = event.usage.fallback_credit; - } - if (event.usage.output_tokens_details != null) { - snapshot.usage.output_tokens_details = event.usage.output_tokens_details; - } - return snapshot; - case "content_block_start": - snapshot.content.push(event.content_block); - if (event.content_block.type === "fallback") { - snapshot.model = event.content_block.to.model; - } - return snapshot; - case "content_block_delta": { - const snapshotContent = snapshot.content.at(event.index); - switch (event.delta.type) { - case "text_delta": { - if (snapshotContent?.type === "text") { - snapshot.content[event.index] = { - ...snapshotContent, - text: (snapshotContent.text || "") + event.delta.text - }; - } - break; - } - case "citations_delta": { - if (snapshotContent?.type === "text") { - snapshot.content[event.index] = { - ...snapshotContent, - citations: [...snapshotContent.citations ?? [], event.delta.citation] - }; - } - break; - } - case "input_json_delta": { - if (snapshotContent && tracksToolInput(snapshotContent)) { - const jsonBuf = (snapshotContent[JSON_BUF_PROPERTY] || "") + event.delta.partial_json; - snapshot.content[event.index] = withLazyInput(snapshotContent, jsonBuf); - } - break; - } - case "thinking_delta": { - if (snapshotContent?.type === "thinking") { - snapshot.content[event.index] = { - ...snapshotContent, - thinking: snapshotContent.thinking + event.delta.thinking - }; - } - break; - } - case "signature_delta": { - if (snapshotContent?.type === "thinking") { - snapshot.content[event.index] = { - ...snapshotContent, - signature: event.delta.signature - }; - } - break; - } - case "compaction_delta": { - if (snapshotContent?.type === "compaction") { - const block = { ...snapshotContent, content: event.delta.content }; - if ("encrypted_content" in event.delta) { - block.encrypted_content = event.delta.encrypted_content; - } - snapshot.content[event.index] = block; - } - break; - } - default: - checkNever(event.delta); - } - return snapshot; - } - case "content_block_stop": { - const snapshotContent = snapshot.content.at(event.index); - if (snapshotContent && tracksToolInput(snapshotContent) && JSON_BUF_PROPERTY in snapshotContent) { - let input; - try { - input = snapshotContent.input; - } catch (err) { - input = {}; - __classPrivateFieldGet(this, _BetaMessageStream_handleError, "f").call(this, __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_toolInputParseError).call(this, snapshotContent, err)); - } - Object.defineProperty(snapshotContent, "input", { - value: input, - enumerable: true, - configurable: true, - writable: true - }); - } - return snapshot; - } - } - }, _BetaMessageStream_toolInputParseError = function _BetaMessageStream_toolInputParseError2(block, err) { - const jsonBuf = block[JSON_BUF_PROPERTY]; - return new AnthropicError(`Unable to parse tool parameter JSON from model. Please retry your request or adjust your prompt. Error: ${err}. JSON: ${jsonBuf}`); - }, Symbol.asyncIterator)]() { - const pushQueue = []; - const readQueue = []; - let done = false; - this.on("streamEvent", (event) => { - const reader = readQueue.shift(); - if (reader) { - reader.resolve(event); - } else { - pushQueue.push(event); - } - }); - this.on("end", () => { - done = true; - for (const reader of readQueue) { - reader.resolve(void 0); - } - readQueue.length = 0; - }); - this.on("abort", (err) => { - done = true; - for (const reader of readQueue) { - reader.reject(err); - } - readQueue.length = 0; - }); - this.on("error", (err) => { - done = true; - for (const reader of readQueue) { - reader.reject(err); - } - readQueue.length = 0; - }); - return { - next: async () => { - if (!pushQueue.length) { - if (done) { - return { value: void 0, done: true }; - } - return new Promise((resolve2, reject2) => readQueue.push({ resolve: resolve2, reject: reject2 })).then((chunk2) => chunk2 ? { value: chunk2, done: false } : { value: void 0, done: true }); - } - const chunk = pushQueue.shift(); - return { value: chunk, done: false }; - }, - return: async () => { - this.abort(); - return { value: void 0, done: true }; - } - }; - } - toReadableStream() { - const stream5 = new Stream(this[Symbol.asyncIterator].bind(this), this.controller); - return stream5.toReadableStream(); - } - } - return BetaMessageStream2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/lib/internal/BetaToolRunnerStream.mjs -var _BetaToolRunnerStream_instances, _BetaToolRunnerStream_onToolCall, _BetaToolRunnerStream_emitted, _BetaToolRunnerStream_readers, _BetaToolRunnerStream_toolCalls, _BetaToolRunnerStream_closed, _BetaToolRunnerStream_ready, _BetaToolRunnerStream_fallback, _BetaToolRunnerStream_track, _BetaToolRunnerStream_release, _BetaToolRunnerStream_removeReader, BetaToolRunnerStream; -var init_BetaToolRunnerStream = __esm({ - "node_modules/@anthropic-ai/sdk/lib/internal/BetaToolRunnerStream.mjs"() { - init_tslib(); - init_stainless_helper_header(); - init_BetaMessageStream(); - BetaToolRunnerStream = /* @__PURE__ */ (() => { - class BetaToolRunnerStream2 extends BetaMessageStream { - constructor(params, onToolCall) { - super(params); - _BetaToolRunnerStream_instances.add(this); - _BetaToolRunnerStream_onToolCall.set(this, void 0); - _BetaToolRunnerStream_emitted.set(this, 0); - _BetaToolRunnerStream_readers.set(this, []); - _BetaToolRunnerStream_toolCalls.set(this, []); - _BetaToolRunnerStream_closed.set(this, void 0); - _BetaToolRunnerStream_ready.set(this, []); - _BetaToolRunnerStream_fallback.set(this, false); - __classPrivateFieldSet(this, _BetaToolRunnerStream_onToolCall, onToolCall, "f"); - } - /** The `tool_use` blocks that have finished streaming, in the model's order */ - get toolCalls() { - return __classPrivateFieldGet(this, _BetaToolRunnerStream_toolCalls, "f"); - } - /** Sends the request as `client.beta.messages.stream()` does. */ - static start(messages, params, options, onToolCall) { - const stream5 = new BetaToolRunnerStream2({ ...params, stream: true }, onToolCall); - for (const message of params.messages) { - stream5._addMessageParam(message); - } - stream5._run(() => stream5._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, [STAINLESS_HELPER_METHOD_HEADER]: "stream" } })); - return stream5; - } - _emit(event, ...args) { - var _a6; - if (event !== "streamEvent" || this.ended) { - super._emit(event, ...args); - return; - } - __classPrivateFieldSet(this, _BetaToolRunnerStream_emitted, (_a6 = __classPrivateFieldGet(this, _BetaToolRunnerStream_emitted, "f"), _a6++, _a6), "f"); - const [streamEvent, snapshot] = args; - const block = streamEvent.type === "content_block_stop" ? snapshot.content[streamEvent.index] : void 0; - const closed = block?.type === "tool_use" ? block : void 0; - if (closed) { - __classPrivateFieldGet(this, _BetaToolRunnerStream_toolCalls, "f").push(closed); - } - super._emit(event, ...args); - __classPrivateFieldGet(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_track).call(this, streamEvent, closed); - __classPrivateFieldGet(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_release).call(this); - } - [(_BetaToolRunnerStream_onToolCall = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_emitted = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_readers = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_toolCalls = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_closed = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_ready = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_fallback = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_instances = /* @__PURE__ */ new WeakSet(), Symbol.asyncIterator)]() { - const iterator = super[Symbol.asyncIterator](); - const reader = { handled: __classPrivateFieldGet(this, _BetaToolRunnerStream_emitted, "f") }; - __classPrivateFieldGet(this, _BetaToolRunnerStream_readers, "f").push(reader); - let holdsEvent = false; - return { - next: async () => { - if (holdsEvent) { - holdsEvent = false; - reader.handled++; - __classPrivateFieldGet(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_release).call(this); - } - try { - const result = await iterator.next(); - holdsEvent = !result.done; - if (result.done) { - __classPrivateFieldGet(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_removeReader).call(this, reader); - } - return result; - } catch (error) { - __classPrivateFieldGet(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_removeReader).call(this, reader); - throw error; - } - }, - return: async () => { - const result = iterator.return?.(); - __classPrivateFieldGet(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_removeReader).call(this, reader); - return await result ?? { value: void 0, done: true }; - } - }; - } - } - _BetaToolRunnerStream_track = function _BetaToolRunnerStream_track2(event, closed) { - if (__classPrivateFieldGet(this, _BetaToolRunnerStream_fallback, "f")) { - return; - } - if (event.type === "content_block_start" && event.content_block.type === "fallback") { - __classPrivateFieldSet(this, _BetaToolRunnerStream_fallback, true, "f"); - __classPrivateFieldSet(this, _BetaToolRunnerStream_closed, void 0, "f"); - return; - } - const movedOn = event.type === "content_block_start" || event.type === "message_delta" && event.delta.stop_reason === "tool_use"; - if (__classPrivateFieldGet(this, _BetaToolRunnerStream_closed, "f") && movedOn) { - __classPrivateFieldGet(this, _BetaToolRunnerStream_ready, "f").push({ toolUse: __classPrivateFieldGet(this, _BetaToolRunnerStream_closed, "f"), event: __classPrivateFieldGet(this, _BetaToolRunnerStream_emitted, "f") }); - __classPrivateFieldSet(this, _BetaToolRunnerStream_closed, void 0, "f"); - } - if (closed) { - __classPrivateFieldSet(this, _BetaToolRunnerStream_closed, closed, "f"); - } - }, _BetaToolRunnerStream_release = function _BetaToolRunnerStream_release2() { - if (this.errored || this.controller.signal.aborted) { - return; - } - const handled = Math.min(__classPrivateFieldGet(this, _BetaToolRunnerStream_emitted, "f"), ...__classPrivateFieldGet(this, _BetaToolRunnerStream_readers, "f").map((reader) => reader.handled)); - while (__classPrivateFieldGet(this, _BetaToolRunnerStream_ready, "f")[0] && __classPrivateFieldGet(this, _BetaToolRunnerStream_ready, "f")[0].event <= handled) { - __classPrivateFieldGet(this, _BetaToolRunnerStream_onToolCall, "f").call(this, __classPrivateFieldGet(this, _BetaToolRunnerStream_ready, "f").shift().toolUse); - } - }, _BetaToolRunnerStream_removeReader = function _BetaToolRunnerStream_removeReader2(reader) { - const index = __classPrivateFieldGet(this, _BetaToolRunnerStream_readers, "f").indexOf(reader); - if (index >= 0) { - __classPrivateFieldGet(this, _BetaToolRunnerStream_readers, "f").splice(index, 1); - __classPrivateFieldGet(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_release).call(this); - } - }; - return BetaToolRunnerStream2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/promise.mjs -function promiseWithResolvers() { - let resolve2; - let reject2; - const promise = new Promise((res, rej) => { - resolve2 = res; - reject2 = rej; - }); - return { promise, resolve: resolve2, reject: reject2 }; -} -var init_promise = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/promise.mjs"() { - } -}); - -// node_modules/@anthropic-ai/sdk/lib/tools/BetaToolRunner.mjs -function rejectCompactionParam(params) { - if ("compaction" in params && params.compaction != null) { - throw new AnthropicError("`compaction` cannot be set on a tool runner: every request in the loop would compact again. Call `runner.compactBeforeNextTurn()` when the conversation should be compacted instead."); - } -} -function rejectCompactionControl(params) { - if ("compactionControl" in params && params.compactionControl != null) { - throw new AnthropicError("`compactionControl` has been removed from the tool runner. Use server-side compaction instead: call `runner.compactBeforeNextTurn()` when the conversation should be compacted."); - } -} -function rejectRunToolsEagerlyWithoutStream(params) { - if (params.runToolsEagerly && !params.stream) { - throw new TypeError("`runToolsEagerly: true` needs `stream: true` in the tool runner's params, because a reply that isn't streamed arrives whole."); - } -} -function rejectCompactionEdit(params) { - if (params.context_management?.edits?.some((edit) => edit.type.startsWith("compact_"))) { - throw new AnthropicError("`compactBeforeNextTurn()` can't be used while `context_management` has a compaction edit, because the API doesn't accept a compaction block together with one. Remove the edit first."); - } -} -function withoutCompactionIncompatibleParams(params) { - const { context_management, stop_sequences, output_format, ...kept } = params; - const withoutFormat = ({ format, ...outputConfig }) => outputConfig; - if (kept.tool_choice?.type === "any" || kept.tool_choice?.type === "tool") { - delete kept.tool_choice; - } - if (kept.output_config) { - kept.output_config = withoutFormat(kept.output_config); - } - if (Array.isArray(kept.fallbacks)) { - kept.fallbacks = kept.fallbacks.map((fallback) => fallback.output_config ? { ...fallback, output_config: withoutFormat(fallback.output_config) } : fallback); - } - return kept; -} -async function generateToolResponse(runnable, available, lastMessage, requestOptions, calls) { - if (!lastMessage || lastMessage.role !== "assistant" || !lastMessage.content || typeof lastMessage.content === "string") { - return null; - } - const toolUseBlocks = lastMessage.content.filter((content) => content.type === "tool_use"); - if (toolUseBlocks.length === 0) { - return null; - } - const toolResults = await Promise.all(toolUseBlocks.map((toolUse) => { - const call = calls?.get(toolUse.id); - if (call?.status === "started") { - return call.result; - } - const result = runToolCall(runnable, available, toolUse, requestOptions); - calls?.set(toolUse.id, { status: "started", result }); - return result; - })); - return { - role: "user", - content: toolResults - }; -} -async function runToolCall(runnable, available, toolUse, requestOptions) { - const tool = available.has(toolUse.name) ? runnable.get(toolUse.name) : void 0; - if (!tool) { - return toolNotFoundResult(toolUse); - } - try { - let input = toolUse.input; - if ("parse" in tool && tool.parse) { - input = tool.parse(input); - } - const result = await tool.run(input, { - toolUse, - toolUseBlock: toolUse, - signal: requestOptions?.signal - }); - return { - type: "tool_result", - tool_use_id: toolUse.id, - content: result - }; - } catch (error) { - return { - type: "tool_result", - tool_use_id: toolUse.id, - content: error instanceof ToolError ? error.content : `Error: ${error instanceof Error ? error.message : String(error)}`, - is_error: true - }; - } -} -function asContentParam(content) { - return content; -} -function toolNotFoundResult(toolUse) { - return { - type: "tool_result", - tool_use_id: toolUse.id, - content: `Error: Tool '${toolUse.name}' not found`, - is_error: true - }; -} -function applyToolChange(block, available) { - switch (block.type) { - case "tool_removal": - case "tool_addition": - applyToolReference(block, available); - break; - } -} -function applyToolReference(block, available) { - const name = changedToolName(block.tool); - if (name === void 0) - return; - if (block.type === "tool_removal") { - available.delete(name); - } else { - available.add(name); - } -} -function changedToolName(tool) { - switch (tool.type) { - case "tool_reference": - return tool.name; - case "tool_definition": - return "name" in tool.definition ? tool.definition.name : void 0; - default: - return void 0; - } -} -function determineNextStepFromStopReason(stopReason) { - if (stopReason === null) - return "stop"; - switch (stopReason) { - case "tool_use": - return "run_tools"; - case "pause_turn": - // pause_after_compaction hands the turn back before the model answers; sending it back - // unchanged continues it. - case "compaction": - return "resume"; - case "end_turn": - case "stop_sequence": - case "max_tokens": - case "model_context_window_exceeded": - case "refusal": - return "stop"; - default: - checkNever(stopReason); - return "stop"; - } -} -var _BetaToolRunner_instances, _BetaToolRunner_consumed, _BetaToolRunner_mutated, _BetaToolRunner_state, _BetaToolRunner_options, _BetaToolRunner_message, _BetaToolRunner_stream, _BetaToolRunner_toolResponse, _BetaToolRunner_completion, _BetaToolRunner_iterationCount, _BetaToolRunner_compaction, _BetaToolRunner_calls, _BetaToolRunner_lastStopReason, _BetaToolRunner_toolOverrides, _BetaToolRunner_pendingToolChanges, _BetaToolRunner_send, _BetaToolRunner_streamThatStartsTools, _BetaToolRunner_startedCallsSettled, _BetaToolRunner_compact, _BetaToolRunner_runnableTools, _BetaToolRunner_availableToolNames, _BetaToolRunner_recordRemovalsFromHistory, _BetaToolRunner_compactAfterFinalTurn, _BetaToolRunner_generateToolResponse, _BetaToolRunner_flushPendingToolChanges, _BetaToolRunner_pendingToolChangesMessage, BetaToolRunner; -var init_BetaToolRunner = __esm({ - "node_modules/@anthropic-ai/sdk/lib/tools/BetaToolRunner.mjs"() { - init_tslib(); - init_ToolError(); - init_error(); - init_BetaToolRunnerStream(); - init_headers(); - init_promise(); - init_values(); - init_log(); - init_stainless_helper_header(); - BetaToolRunner = /* @__PURE__ */ (() => { - class BetaToolRunner2 { - constructor(client, params, options) { - _BetaToolRunner_instances.add(this); - this.client = client; - _BetaToolRunner_consumed.set(this, false); - _BetaToolRunner_mutated.set(this, false); - _BetaToolRunner_state.set(this, void 0); - _BetaToolRunner_options.set(this, void 0); - _BetaToolRunner_message.set(this, void 0); - _BetaToolRunner_stream.set(this, void 0); - _BetaToolRunner_toolResponse.set(this, void 0); - _BetaToolRunner_completion.set(this, void 0); - _BetaToolRunner_iterationCount.set(this, 0); - _BetaToolRunner_compaction.set(this, { status: "idle" }); - _BetaToolRunner_calls.set(this, void 0); - _BetaToolRunner_lastStopReason.set(this, null); - _BetaToolRunner_toolOverrides.set(this, /* @__PURE__ */ new Map()); - _BetaToolRunner_pendingToolChanges.set(this, []); - rejectCompactionParam(params); - rejectCompactionControl(params); - rejectRunToolsEagerlyWithoutStream(params); - __classPrivateFieldSet(this, _BetaToolRunner_state, { - params: { - // You can't clone the entire params since there are functions as handlers. - // You also don't really need to clone params.messages, but it probably will prevent a foot gun - // somewhere. - ...params, - // Not structuredClone(): it throws on a function, and a runnable tool written by value into a - // `tool_addition` block has `run`. A JSON copy is the messages as they are sent, which drops it. - messages: JSON.parse(JSON.stringify(params.messages)) - } - }, "f"); - const collected = collectStainlessHelpers(params.tools, params.messages); - __classPrivateFieldSet(this, _BetaToolRunner_options, { - ...options, - headers: buildHeaders([ - helperHeader("BetaToolRunner"), - collected.length ? { [STAINLESS_HELPER_HEADER]: collected.join(", ") } : void 0, - options?.headers - ]) - }, "f"); - __classPrivateFieldSet(this, _BetaToolRunner_completion, promiseWithResolvers(), "f"); - } - async *[(_BetaToolRunner_consumed = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_mutated = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_state = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_options = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_message = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_stream = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_toolResponse = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_completion = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_iterationCount = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_compaction = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_calls = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_lastStopReason = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_toolOverrides = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_pendingToolChanges = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_instances = /* @__PURE__ */ new WeakSet(), Symbol.asyncIterator)]() { - var _a6; - if (__classPrivateFieldGet(this, _BetaToolRunner_consumed, "f")) { - throw new AnthropicError("Cannot iterate over a consumed stream"); - } - __classPrivateFieldSet(this, _BetaToolRunner_consumed, true, "f"); - __classPrivateFieldSet(this, _BetaToolRunner_mutated, true, "f"); - __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, void 0, "f"); - try { - while (true) { - try { - if (__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.max_iterations && __classPrivateFieldGet(this, _BetaToolRunner_iterationCount, "f") >= __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.max_iterations) { - break; - } - __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_flushPendingToolChanges).call(this); - if (__classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").status === "scheduled" && determineNextStepFromStopReason(__classPrivateFieldGet(this, _BetaToolRunner_lastStopReason, "f")) !== "resume") { - yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compact).call(this, __classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").config); - continue; - } - __classPrivateFieldSet(this, _BetaToolRunner_mutated, false, "f"); - __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, void 0, "f"); - __classPrivateFieldSet(this, _BetaToolRunner_iterationCount, (_a6 = __classPrivateFieldGet(this, _BetaToolRunner_iterationCount, "f"), _a6++, _a6), "f"); - __classPrivateFieldSet(this, _BetaToolRunner_message, void 0, "f"); - const { max_iterations, runToolsEagerly, ...params } = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params; - yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_send).call(this, params); - if (!__classPrivateFieldGet(this, _BetaToolRunner_mutated, "f")) { - const message = await __classPrivateFieldGet(this, _BetaToolRunner_message, "f"); - const nextStep = determineNextStepFromStopReason(message.stop_reason); - __classPrivateFieldSet(this, _BetaToolRunner_lastStopReason, message.stop_reason, "f"); - __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.push({ - role: message.role, - content: asContentParam(message.content) - }); - const { container } = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params; - if (message.container) { - if (container == null) { - __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.container = message.container.id; - } else if (typeof container === "object" && container.id == null) { - __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.container = { ...container, id: message.container.id }; - } - } - if (nextStep === "stop") { - yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compactAfterFinalTurn).call(this); - break; - } - if (nextStep === "resume") { - continue; - } - } else { - __classPrivateFieldSet(this, _BetaToolRunner_lastStopReason, null, "f"); - } - const toolMessage = await __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_generateToolResponse).call(this, __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.at(-1)); - if (toolMessage) { - __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.push(toolMessage); - } else if (!__classPrivateFieldGet(this, _BetaToolRunner_mutated, "f")) { - yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compactAfterFinalTurn).call(this); - break; - } - } finally { - __classPrivateFieldGet(this, _BetaToolRunner_stream, "f")?.abort(); - __classPrivateFieldSet(this, _BetaToolRunner_stream, void 0, "f"); - } - } - await __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_startedCallsSettled).call(this); - if (!__classPrivateFieldGet(this, _BetaToolRunner_message, "f")) { - throw new AnthropicError("ToolRunner concluded without a message from the server"); - } - __classPrivateFieldGet(this, _BetaToolRunner_completion, "f").resolve(await __classPrivateFieldGet(this, _BetaToolRunner_message, "f")); - } catch (error) { - __classPrivateFieldSet(this, _BetaToolRunner_consumed, false, "f"); - __classPrivateFieldGet(this, _BetaToolRunner_completion, "f").promise.catch(() => { - }); - __classPrivateFieldGet(this, _BetaToolRunner_completion, "f").reject(error); - __classPrivateFieldSet(this, _BetaToolRunner_completion, promiseWithResolvers(), "f"); - throw error; - } - } - setMessagesParams(paramsOrMutator) { - const params = typeof paramsOrMutator === "function" ? paramsOrMutator(__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params) : paramsOrMutator; - rejectCompactionParam(params); - rejectRunToolsEagerlyWithoutStream(params); - if (__classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").status !== "idle") { - rejectCompactionEdit(params); - } - if (__classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").status === "in_flight" && params.messages !== __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages) { - throw new AnthropicError("Message params can't be changed while the conversation is being compacted, because the compaction response is about to replace them. Change them after this iteration instead."); - } - __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params = params; - __classPrivateFieldSet(this, _BetaToolRunner_mutated, true, "f"); - __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, void 0, "f"); - } - setRequestOptions(optionsOrMutator) { - if (typeof optionsOrMutator === "function") { - __classPrivateFieldSet(this, _BetaToolRunner_options, optionsOrMutator(__classPrivateFieldGet(this, _BetaToolRunner_options, "f")), "f"); - } else { - __classPrivateFieldSet(this, _BetaToolRunner_options, { ...__classPrivateFieldGet(this, _BetaToolRunner_options, "f"), ...optionsOrMutator }, "f"); - } - } - /** - * Get the tool response for the last message from the assistant. - * Avoids redundant tool executions by caching results. With `runToolsEagerly`, it reuses the calls of - * the reply that have started and runs the rest, including the ones `deferToolCall()` is holding, so that no - * call runs twice. - * - * @returns A promise that resolves to a BetaMessageParam containing tool results, or null if no tools need to be executed - * - * @example - * const toolResponse = await runner.generateToolResponse(); - * if (toolResponse) { - * console.log('Tool results:', toolResponse.content); - * } - */ - async generateToolResponse(signal = __classPrivateFieldGet(this, _BetaToolRunner_options, "f").signal) { - const message = await __classPrivateFieldGet(this, _BetaToolRunner_message, "f") ?? this.params.messages.at(-1); - if (!message) { - return null; - } - return __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_generateToolResponse).call(this, message, signal); - } - /** - * Hold a tool call of the current reply until you are done with the reply, which is when it runs without - * streaming: at the end of the loop body, or when you call `generateToolResponse()`. - * - * With `runToolsEagerly` the runner otherwise starts each call while the reply streams, as soon as - * the model has moved on from it: when the next block starts, or the reply stops with `tool_use`. A call - * never starts before your stream listeners and any `for await` over the stream have handled that event, so - * you can call this from either once you have seen the call. The other calls of the reply still start early. - * It does nothing for a call that has started, outside the loop body, and without `runToolsEagerly`. - * - * @param toolUse - The `tool_use` block of the call, or its id - * - * @example - * for await (const stream of runner) { - * stream.on('contentBlock', (block) => { - * if (block.type === 'tool_use' && block.name === 'delete_file') { - * runner.deferToolCall(block); - * } - * }); - * await stream.finalMessage(); - * // No `delete_file` call has started yet. - * } - */ - deferToolCall(toolUse) { - const id = typeof toolUse === "string" ? toolUse : toolUse.id; - if (__classPrivateFieldGet(this, _BetaToolRunner_calls, "f") && !__classPrivateFieldGet(this, _BetaToolRunner_calls, "f").has(id)) { - __classPrivateFieldGet(this, _BetaToolRunner_calls, "f").set(id, { status: "held" }); - } - } - /** - * The tool calls of the current reply that `deferToolCall()` is holding, in the model's order, as their - * `tool_use` blocks. A call is in the list once its block has finished streaming, so read the list when you - * are done with the stream. A call that has started is not in it. It is empty without - * `runToolsEagerly`. - * - * Held calls are listed whatever the reply's `stop_reason`, because `generateToolResponse()` runs them - * whatever it is. After `max_tokens` the input of the last call can be cut off. - * - * @example - * for await (const stream of runner) { - * stream.on('contentBlock', (block) => { - * if (block.type === 'tool_use' && block.name === 'delete_file') { - * runner.deferToolCall(block); - * } - * }); - * await stream.finalMessage(); - * - * const held = runner.deferredToolCalls; - * if (held.length > 0 && !(await confirm(held))) break; - * } - */ - get deferredToolCalls() { - const stream5 = __classPrivateFieldGet(this, _BetaToolRunner_stream, "f"); - const calls = __classPrivateFieldGet(this, _BetaToolRunner_calls, "f"); - if (!(stream5 instanceof BetaToolRunnerStream) || !calls) { - return []; - } - return stream5.toolCalls.filter((toolUse) => calls.get(toolUse.id)?.status === "held"); - } - /** - * Wait for the async iterator to complete. This works even if the async iterator hasn't yet started, and - * will wait for an instance to start and go to completion. - * - * @returns A promise that resolves to the final BetaMessage when the iterator completes - * - * @example - * // Start consuming the iterator - * for await (const message of runner) { - * console.log('Message:', message.content); - * } - * - * // Meanwhile, wait for completion from another part of the code - * const finalMessage = await runner.done(); - * console.log('Final response:', finalMessage.content); - */ - done() { - return __classPrivateFieldGet(this, _BetaToolRunner_completion, "f").promise; - } - /** - * Returns a promise indicating that the stream is done. Unlike .done(), this will eagerly read the stream: - * * If the iterator has not been consumed, consume the entire iterator and return the final message from the - * assistant. - * * If the iterator has been consumed, waits for it to complete and returns the final message. - * - * @returns A promise that resolves to the final BetaMessage from the conversation - * @throws {AnthropicError} If no messages were processed during the conversation - * - * @example - * const finalMessage = await runner.runUntilDone(); - * console.log('Final response:', finalMessage.content); - */ - async runUntilDone() { - if (!__classPrivateFieldGet(this, _BetaToolRunner_consumed, "f")) { - for await (const _ of this) { - } - } - return this.done(); - } - /** - * Get the current parameters being used by the ToolRunner. - * - * @returns A readonly view of the current ToolRunnerParams - * - * @example - * const currentParams = runner.params; - * console.log('Current model:', currentParams.model); - * console.log('Message count:', currentParams.messages.length); - */ - get params() { - return __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params; - } - /** - * Add one or more messages to the conversation history. - * - * @param messages - One or more BetaMessageParam objects to add to the conversation - * - * @example - * runner.pushMessages( - * { role: 'user', content: 'Also, what about the weather in NYC?' } - * ); - * - * @example - * // Adding multiple messages - * runner.pushMessages( - * { role: 'user', content: 'What about NYC?' }, - * { role: 'user', content: 'And Boston?' } - * ); - */ - pushMessages(...messages) { - this.setMessagesParams((params) => ({ - ...params, - messages: [...params.messages, ...messages] - })); - } - /** - * Schedule a compaction of the conversation. Once the current turn has finished, including any tool - * calls, the runner requests a summary and replaces the message history with the compaction response, - * which is yielded like any other message. Requires the `compact-2026-09-04` beta. - * - * @param compaction - The config to send, as `messages.create()` takes it. Defaults to `{ type: 'summarize' }` - * - * @example - * for await (const message of runner) { - * if (message.usage.input_tokens > 100_000) { - * runner.compactBeforeNextTurn(); - * } - * } - */ - compactBeforeNextTurn(compaction) { - if (__classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").status === "in_flight") { - return; - } - rejectCompactionEdit(__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params); - __classPrivateFieldSet(this, _BetaToolRunner_compaction, { status: "scheduled", config: compaction ?? { type: "summarize" } }, "f"); - } - /** - * Give the model more tools without changing `params.tools`, which would miss the prompt cache. - * - * Each tool's whole definition is sent in a `tool_addition` block with the next request, and a - * runnable tool replaces a runnable tool of the same name straight away, even for a call already in - * the message being handled. A call that started while the reply streamed keeps the old one. A raw - * definition is only sent: the runner never runs it, and stops running a tool of the same name. - * Requires the `inline-tools-2026-09-15` beta, which the runner does not add for you. - * - * @param tools - Runnable tools (for example from `betaZodTool()`) or raw tool definitions - * - * @example - * runner.addTools(queryDatabaseTool); - */ - addTools(...tools) { - for (const tool of tools) { - if ("name" in tool) { - __classPrivateFieldGet(this, _BetaToolRunner_toolOverrides, "f").set(tool.name, "run" in tool ? tool : null); - } - __classPrivateFieldGet(this, _BetaToolRunner_pendingToolChanges, "f").push({ type: "addition", tool }); - } - } - /** - * Take tools away from the model without changing `params.tools`, which would miss the prompt cache. - * - * The tools stop being run straight away: a call to one of them, even one in the message being - * handled, gets the same "not found" error result as a call to an unknown tool. A call that started - * while the reply streamed finishes as usual. The model is told in a `tool_removal` block with the - * next request. Use {@link addTools} to bring a tool back. - * Requires the `inline-tools-2026-09-15` beta, which the runner does not add for you. - * - * @param tools - The tools to remove, or their names - * - * @example - * runner.removeTools('query_database'); - */ - removeTools(...tools) { - for (const tool of tools) { - const name = typeof tool === "string" ? tool : tool.name; - __classPrivateFieldGet(this, _BetaToolRunner_toolOverrides, "f").set(name, null); - __classPrivateFieldGet(this, _BetaToolRunner_pendingToolChanges, "f").push({ type: "removal", name }); - } - } - /** - * Makes the ToolRunner directly awaitable, equivalent to calling .runUntilDone() - * This allows using `await runner` instead of `await runner.runUntilDone()` - */ - then(onfulfilled, onrejected) { - return this.runUntilDone().then(onfulfilled, onrejected); - } - } - _BetaToolRunner_send = /** - * Sends one request and yields its message, or its stream when streaming. `#message` and `#stream` are set - * before the yield, so they are there while the caller handles the item; the loop aborts the stream at the - * end of the iteration. - */ - async function* _BetaToolRunner_send2(params) { - await __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_startedCallsSettled).call(this); - __classPrivateFieldSet(this, _BetaToolRunner_calls, void 0, "f"); - if (params.stream) { - __classPrivateFieldSet(this, _BetaToolRunner_stream, __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.runToolsEagerly ? __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_streamThatStartsTools).call(this, params) : this.client.beta.messages.stream({ ...params }, __classPrivateFieldGet(this, _BetaToolRunner_options, "f")), "f"); - __classPrivateFieldSet(this, _BetaToolRunner_message, __classPrivateFieldGet(this, _BetaToolRunner_stream, "f").finalMessage(), "f"); - __classPrivateFieldGet(this, _BetaToolRunner_message, "f").catch(() => { - }); - yield __classPrivateFieldGet(this, _BetaToolRunner_stream, "f"); - } else { - __classPrivateFieldSet(this, _BetaToolRunner_message, this.client.beta.messages.create({ ...params, stream: false }, __classPrivateFieldGet(this, _BetaToolRunner_options, "f")), "f"); - yield __classPrivateFieldGet(this, _BetaToolRunner_message, "f"); - } - }, _BetaToolRunner_streamThatStartsTools = function _BetaToolRunner_streamThatStartsTools2(params) { - const calls = /* @__PURE__ */ new Map(); - __classPrivateFieldSet(this, _BetaToolRunner_calls, calls, "f"); - return BetaToolRunnerStream.start(this.client.beta.messages, params, __classPrivateFieldGet(this, _BetaToolRunner_options, "f"), (toolUse) => { - if (calls.has(toolUse.id)) { - return; - } - const result = runToolCall(__classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_runnableTools).call(this), __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_availableToolNames).call(this), toolUse, __classPrivateFieldGet(this, _BetaToolRunner_options, "f")); - result.catch(() => { - }); - calls.set(toolUse.id, { status: "started", result }); - }); - }, _BetaToolRunner_startedCallsSettled = /** Waits for the calls of the last streamed reply that have started, whether or not their results were sent. */ - async function _BetaToolRunner_startedCallsSettled2() { - const started = [...__classPrivateFieldGet(this, _BetaToolRunner_calls, "f")?.values() ?? []].filter((call) => call.status === "started"); - await Promise.allSettled(started.map((call) => call.result)); - }, _BetaToolRunner_compact = async function* _BetaToolRunner_compact2(compaction) { - rejectCompactionEdit(__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params); - const { max_iterations, runToolsEagerly, ...requestParams } = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params; - const params = withoutCompactionIncompatibleParams(requestParams); - __classPrivateFieldSet(this, _BetaToolRunner_compaction, { status: "in_flight" }, "f"); - __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, void 0, "f"); - const lastMessage = __classPrivateFieldGet(this, _BetaToolRunner_message, "f"); - try { - yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_send).call(this, { ...params, compaction }); - const message = await __classPrivateFieldGet(this, _BetaToolRunner_message, "f"); - if (message.content.some((block) => block.type === "compaction" && block.content)) { - __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_recordRemovalsFromHistory).call(this); - __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages = [{ role: message.role, content: message.content }]; - } else { - loggerFor(this.client).warn("Compaction produced no summary; keeping the conversation as it is."); - __classPrivateFieldSet(this, _BetaToolRunner_message, lastMessage, "f"); - } - } finally { - __classPrivateFieldSet(this, _BetaToolRunner_compaction, { status: "idle" }, "f"); - } - }, _BetaToolRunner_runnableTools = function _BetaToolRunner_runnableTools2() { - const runnable = /* @__PURE__ */ new Map(); - for (const tool of __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.tools) { - if ("run" in tool) { - runnable.set(tool.name, tool); - } - } - for (const [name, tool] of __classPrivateFieldGet(this, _BetaToolRunner_toolOverrides, "f")) { - if (tool) { - runnable.set(name, tool); - } else { - runnable.delete(name); - } - } - return runnable; - }, _BetaToolRunner_availableToolNames = function _BetaToolRunner_availableToolNames2() { - const available = new Set(__classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_runnableTools).call(this).keys()); - for (const message of [...__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages, __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_pendingToolChangesMessage).call(this)]) { - if (typeof message.content === "string") { - continue; - } - for (const block of message.content) { - if (message.role === "system") { - applyToolChange(block, available); - } else if (message.role === "assistant" && block.type === "compaction") { - for (const change of block.tool_changes ?? []) { - applyToolChange(change, available); - } - } - } - } - return available; - }, _BetaToolRunner_recordRemovalsFromHistory = function _BetaToolRunner_recordRemovalsFromHistory2() { - const available = __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_availableToolNames).call(this); - for (const name of __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_runnableTools).call(this).keys()) { - if (!available.has(name)) { - __classPrivateFieldGet(this, _BetaToolRunner_toolOverrides, "f").set(name, null); - } - } - }, _BetaToolRunner_compactAfterFinalTurn = async function* _BetaToolRunner_compactAfterFinalTurn2() { - if (__classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").status !== "scheduled") { - return; - } - const lastContent = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.at(-1)?.content; - if (Array.isArray(lastContent) && lastContent.some((block) => block.type === "tool_use")) { - loggerFor(this.client).warn("The pending compaction was skipped because the last turn ended with tool calls that were not run. Call `compactBeforeNextTurn()` again if you continue the conversation."); - __classPrivateFieldSet(this, _BetaToolRunner_compaction, { status: "idle" }, "f"); - return; - } - yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compact).call(this, __classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").config); - }, _BetaToolRunner_generateToolResponse = async function _BetaToolRunner_generateToolResponse2(lastMessage, signal = __classPrivateFieldGet(this, _BetaToolRunner_options, "f").signal) { - if (__classPrivateFieldGet(this, _BetaToolRunner_toolResponse, "f") !== void 0) { - return __classPrivateFieldGet(this, _BetaToolRunner_toolResponse, "f"); - } - __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, generateToolResponse(__classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_runnableTools).call(this), __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_availableToolNames).call(this), lastMessage, { ...__classPrivateFieldGet(this, _BetaToolRunner_options, "f"), signal }, __classPrivateFieldGet(this, _BetaToolRunner_calls, "f")), "f"); - return __classPrivateFieldGet(this, _BetaToolRunner_toolResponse, "f"); - }, _BetaToolRunner_flushPendingToolChanges = function _BetaToolRunner_flushPendingToolChanges2() { - if (__classPrivateFieldGet(this, _BetaToolRunner_lastStopReason, "f") === "pause_turn" || __classPrivateFieldGet(this, _BetaToolRunner_pendingToolChanges, "f").length === 0) { - return; - } - __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.push(__classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_pendingToolChangesMessage).call(this)); - __classPrivateFieldSet(this, _BetaToolRunner_pendingToolChanges, [], "f"); - }, _BetaToolRunner_pendingToolChangesMessage = function _BetaToolRunner_pendingToolChangesMessage2() { - const content = []; - for (const change of __classPrivateFieldGet(this, _BetaToolRunner_pendingToolChanges, "f")) { - if (change.type === "removal") { - content.push({ type: "tool_removal", tool: { type: "tool_reference", name: change.name } }); - continue; - } - let definition = change.tool; - if ("run" in change.tool) { - const { run: run2, parse: parse2, close, ...rest } = change.tool; - definition = rest; - } - content.push({ type: "tool_addition", tool: { type: "tool_definition", definition } }); - } - return { role: "system", content }; - }; - return BetaToolRunner2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.mjs -function transformOutputFormat(params) { - if (!params.output_format) { - return params; - } - if (params.output_config?.format) { - throw new AnthropicError("Both output_format and output_config.format were provided. Please use only output_config.format (output_format is deprecated)."); - } - const { output_format, ...rest } = params; - return { - ...rest, - output_config: { - ...params.output_config, - format: output_format - } - }; -} -var DEPRECATED_MODELS, MODELS_TO_WARN_WITH_THINKING_ENABLED, Messages; -var init_messages = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.mjs"() { - init_error2(); - init_batches(); - init_resource(); - init_constants(); - init_headers(); - init_stainless_helper_header(); - init_beta_parser(); - init_BetaMessageStream(); - init_BetaToolRunner(); - init_ToolError(); - init_batches(); - DEPRECATED_MODELS = {}; - MODELS_TO_WARN_WITH_THINKING_ENABLED = ["claude-mythos-preview", "claude-opus-4-6"]; - Messages = /* @__PURE__ */ (() => { - class Messages5 extends APIResource { - constructor() { - super(...arguments); - this.batches = new Batches(this._client); - } - create(params, options) { - const modifiedParams = transformOutputFormat(params); - const { betas, user_profile_id, workspace_id, ...body } = modifiedParams; - if (body.model in DEPRECATED_MODELS) { - console.warn(`The model '${body.model}' is deprecated and will reach end-of-life on ${DEPRECATED_MODELS[body.model]} -Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`); - } - if (MODELS_TO_WARN_WITH_THINKING_ENABLED.includes(body.model) && body.thinking && body.thinking.type === "enabled") { - console.warn(`Using Claude with ${body.model} and 'thinking.type=enabled' is deprecated. Use 'thinking.type=adaptive' instead which results in better model performance in our testing: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking`); - } - let timeout = options?.timeout ?? this._client._options.timeout; - if (!body.stream && timeout == null) { - const maxNonstreamingTokens = MODEL_NONSTREAMING_TOKENS[body.model] ?? void 0; - timeout = this._client.calculateNonstreamingTimeout(body.max_tokens, maxNonstreamingTokens); - } - const helperHeader2 = stainlessHelperHeader(body.tools, body.messages); - return this._client.post("/v1/messages?beta=true", { - body, - timeout: timeout ?? 6e5, - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - helperHeader2, - options?.headers - ]), - stream: modifiedParams.stream ?? false - }); - } - /** - * Send a structured list of input messages with text and/or image content, along with an expected `output_format` and - * the response will be automatically parsed and available in the `parsed_output` property of the message. - * - * @example - * ```ts - * const message = await client.beta.messages.parse({ - * model: 'claude-3-5-sonnet-20241022', - * max_tokens: 1024, - * messages: [{ role: 'user', content: 'What is 2+2?' }], - * output_format: zodOutputFormat(z.object({ answer: z.number() }), 'math'), - * }); - * - * console.log(message.parsed_output?.answer); // 4 - * ``` - */ - parse(params, options) { - options = { - ...options, - headers: buildHeaders([ - { "anthropic-beta": [...params.betas ?? [], "structured-outputs-2025-12-15"].toString() }, - options?.headers - ]) - }; - return this.create(params, options).then((message) => parseBetaMessage(message, params, { logger: this._client.logger ?? console })); - } - /** - * Create a Message stream - */ - stream(body, options) { - return BetaMessageStream.createMessage(this, body, options); - } - /** - * Count the number of tokens in a Message. - * - * The Token Count API can be used to count the number of tokens in a Message, - * including tools, images, and documents, without creating it. - * - * Learn more about token counting in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/token-counting) - * - * @example - * ```ts - * const betaMessageTokensCount = - * await client.beta.messages.countTokens({ - * messages: [{ content: 'Hello, world', role: 'user' }], - * model: 'claude-opus-5', - * }); - * ``` - */ - countTokens(params, options) { - const modifiedParams = transformOutputFormat(params); - const { betas, user_profile_id, workspace_id, ...body } = modifiedParams; - return this._client.post("/v1/messages/count_tokens?beta=true", { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "token-counting-2024-11-01"].toString(), - ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - toolRunner(body, options) { - return new BetaToolRunner(this._client, body, options); - } - } - Messages5.Batches = Batches; - Messages5.BetaToolRunner = BetaToolRunner; - Messages5.ToolError = ToolError; - return Messages5; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.mjs -var APIKeys; -var init_api_keys = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.mjs"() { - init_resource(); - init_pagination(); - init_path(); - APIKeys = class extends APIResource { - /** - * Get API Key - * - * @example - * ```ts - * const betaAPIKey = - * await client.beta.organization.apiKeys.retrieve( - * 'api_key_id', - * ); - * ``` - */ - retrieve(apiKeyID, options) { - return this._client.get(path2`/v1/organizations/api_keys/${apiKeyID}?beta=true`, options); - } - /** - * Update API Key - * - * @example - * ```ts - * const betaAPIKey = - * await client.beta.organization.apiKeys.update( - * 'api_key_id', - * ); - * ``` - */ - update(apiKeyID, body, options) { - return this._client.post(path2`/v1/organizations/api_keys/${apiKeyID}?beta=true`, { body, ...options }); - } - /** - * List API Keys - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaAPIKey of client.beta.organization.apiKeys.list()) { - * // ... - * } - * ``` - */ - list(query = {}, options) { - return this._client.getAPIList("/v1/organizations/api_keys?beta=true", Page, { - query, - ...options - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.mjs -var ComplianceSettings; -var init_compliance_settings = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.mjs"() { - init_resource(); - ComplianceSettings = class extends APIResource { - /** - * Retrieve your organization's Compliance Settings. - * - * Compliance Settings is a singleton resource: there is exactly one per - * organization, addressed without an identifier. The `state` field reflects - * whether the Compliance API is enabled. An organization with a parent - * organization reads the state inherited from the parent's configuration. - * - * @example - * ```ts - * const betaComplianceSettings = - * await client.beta.organization.complianceSettings.retrieve(); - * ``` - */ - retrieve(options) { - return this._client.get("/v1/organizations/compliance_settings?beta=true", options); - } - /** - * Update your organization's Compliance Settings. - * - * Setting `state` to `enabled` turns on the Compliance API and begins capturing - * organization activity events. Setting it to `disabled` turns both off. `state` - * reflects whether the Compliance API is enabled. - * - * A request that sets `state` to its current value succeeds and leaves the - * resource unchanged. A `disabled` request stays in effect until a later `enabled` - * request or the organization's next provisioning action that enables Access - * Transparency: enabling Access Transparency also enables the Compliance API, - * which serves its activity events, so such provisioning (including re-runs) - * re-enables the Compliance API even after a `disabled` request. Automated - * provisioning never disables compliance settings. - * - * @example - * ```ts - * const betaComplianceSettings = - * await client.beta.organization.complianceSettings.update({ - * state: { type: 'enabled' }, - * }); - * ``` - */ - update(body, options) { - return this._client.post("/v1/organizations/compliance_settings?beta=true", { body, ...options }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.mjs -var ExternalKeys; -var init_external_keys = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.mjs"() { - init_resource(); - init_pagination(); - init_path(); - ExternalKeys = class extends APIResource { - /** - * Create an external key config owned by the caller's organization. - * - * @example - * ```ts - * const betaExternalKey = - * await client.beta.organization.externalKeys.create({ - * provider_config: { - * kms_arn: - * 'arn:aws:kms:us-east-1:111122223333:key/abcd1234-5678-90ab-cdef-000011112222', - * type: 'aws', - * }, - * }); - * ``` - */ - create(body, options) { - return this._client.post("/v1/organizations/external_keys?beta=true", { body, ...options }); - } - /** - * Retrieve a single external key config in the caller's organization by ID. - * - * @example - * ```ts - * const betaExternalKey = - * await client.beta.organization.externalKeys.retrieve( - * 'external_key_id', - * ); - * ``` - */ - retrieve(externalKeyID, options) { - return this._client.get(path2`/v1/organizations/external_keys/${externalKeyID}?beta=true`, options); - } - /** - * Partially update an external key config. Omitted fields are left unchanged. - * - * `display_name` is always editable. `geo` and `provider_config` cannot be changed - * once any workspace references this config, because previously encrypted data - * requires the original key identity to decrypt. - * - * @example - * ```ts - * const betaExternalKey = - * await client.beta.organization.externalKeys.update( - * 'external_key_id', - * ); - * ``` - */ - update(externalKeyID, body, options) { - return this._client.post(path2`/v1/organizations/external_keys/${externalKeyID}?beta=true`, { - body, - ...options - }); - } - /** - * List external key configs in the caller's organization. - * - * Results are ordered by creation time (newest first). Use the `next_page` cursor - * from the response to fetch subsequent pages. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaExternalKey of client.beta.organization.externalKeys.list()) { - * // ... - * } - * ``` - */ - list(query = {}, options) { - return this._client.getAPIList("/v1/organizations/external_keys?beta=true", PageCursor, { - query, - ...options - }); - } - /** - * Delete an external key config. - * - * The request is rejected if any workspace still references this config. - * - * @example - * ```ts - * const externalKey = - * await client.beta.organization.externalKeys.delete( - * 'external_key_id', - * ); - * ``` - */ - delete(externalKeyID, options) { - return this._client.delete(path2`/v1/organizations/external_keys/${externalKeyID}?beta=true`, options); - } - /** - * Validate an external key config against the customer's KMS. - * - * Anthropic performs an encrypt/decrypt roundtrip against the configured KMS key - * and waits up to 30 seconds for the result. The response status is `success` if - * the roundtrip succeeded, or `failure` with an error message if it failed or - * timed out. - * - * @example - * ```ts - * const response = - * await client.beta.organization.externalKeys.validate( - * 'external_key_id', - * ); - * ``` - */ - validate(externalKeyID, options) { - return this._client.post(path2`/v1/organizations/external_keys/${externalKeyID}/validate?beta=true`, options); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.mjs -var Invites; -var init_invites = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.mjs"() { - init_resource(); - init_pagination(); - init_path(); - Invites = class extends APIResource { - /** - * Invite a user to join the organization by email. - * - * On plans that draw members from a finite pool of purchased seats, the invite - * automatically consumes a seat from the lowest tier with availability; there is - * no seat-tier parameter. When no seat is free the request fails with a 400 error - * rather than purchasing a seat. - * - * @example - * ```ts - * const betaOrganizationInvite = - * await client.beta.organization.invites.create({ - * email: 'user@emaildomain.com', - * role: 'user', - * }); - * ``` - */ - create(body, options) { - return this._client.post("/v1/organizations/invites?beta=true", { body, ...options }); - } - /** - * Retrieve an invite by ID. - * - * @example - * ```ts - * const betaOrganizationInvite = - * await client.beta.organization.invites.retrieve( - * 'invite_id', - * ); - * ``` - */ - retrieve(inviteID, options) { - return this._client.get(path2`/v1/organizations/invites/${inviteID}?beta=true`, options); - } - /** - * List the organization's invites. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaOrganizationInvite of client.beta.organization.invites.list()) { - * // ... - * } - * ``` - */ - list(query = {}, options) { - return this._client.getAPIList("/v1/organizations/invites?beta=true", Page, { - query, - ...options - }); - } - /** - * Delete a pending invite. - * - * @example - * ```ts - * const invite = - * await client.beta.organization.invites.delete( - * 'invite_id', - * ); - * ``` - */ - delete(inviteID, options) { - return this._client.delete(path2`/v1/organizations/invites/${inviteID}?beta=true`, options); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.mjs -var RateLimits; -var init_rate_limits = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.mjs"() { - init_resource(); - init_pagination(); - RateLimits = class extends APIResource { - /** - * List Messages API rate limits for your organization. - * - * Each entry corresponds to one rate-limit group (either a model family or an - * API-surface category such as the Files API or Message Batches) and contains the - * set of limiter values that apply to it. - * - * When `limit` is omitted, every matching entry is returned in a single page; when - * `limit` truncates the result, follow `next_page` to fetch the remaining entries. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaOrganizationRateLimit of client.beta.organization.rateLimits.list()) { - * // ... - * } - * ``` - */ - list(query = {}, options) { - return this._client.getAPIList("/v1/organizations/rate_limits?beta=true", PageCursor, { query, ...options }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/users.mjs -var Users; -var init_users = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/users.mjs"() { - init_resource(); - init_pagination(); - init_path(); - Users = class extends APIResource { - /** - * Retrieve a member of the organization by user ID. - * - * @example - * ```ts - * const betaOrganizationUser = - * await client.beta.organization.users.retrieve('user_id'); - * ``` - */ - retrieve(userID, options) { - return this._client.get(path2`/v1/organizations/users/${userID}?beta=true`, options); - } - /** - * Update a member's organization role. - * - * @example - * ```ts - * const betaOrganizationUser = - * await client.beta.organization.users.update('user_id', { - * role: 'user', - * }); - * ``` - */ - update(userID, body, options) { - return this._client.post(path2`/v1/organizations/users/${userID}?beta=true`, { body, ...options }); - } - /** - * List the organization's members. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaOrganizationUser of client.beta.organization.users.list()) { - * // ... - * } - * ``` - */ - list(query = {}, options) { - return this._client.getAPIList("/v1/organizations/users?beta=true", Page, { - query, - ...options - }); - } - /** - * Remove a member from the organization. - * - * @example - * ```ts - * const user = await client.beta.organization.users.remove( - * 'user_id', - * ); - * ``` - */ - remove(userID, options) { - return this._client.delete(path2`/v1/organizations/users/${userID}?beta=true`, options); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.mjs -var Issuers; -var init_issuers = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Issuers = class extends APIResource { - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Register an OIDC issuer that Anthropic will trust for workload identity - * federation in your organization. - * - * The `jwks` field controls how the issuer's signing keys are obtained and takes - * one of three shapes selected by `type`: `discovery` (resolve keys through OIDC - * discovery), `explicit_url` (fetch keys from a fixed JWKS URL), or `inline` - * (provide a static key set). When `jwks.type` is `discovery` and no - * `discovery_base` is set, the issuer URL must be publicly reachable over HTTPS so - * Anthropic can fetch the discovery document; for `explicit_url` and `inline` - * modes the issuer URL is only matched as the JWT's `iss` claim and is not - * fetched. - * - * @example - * ```ts - * const betaFederationIssuer = - * await client.beta.organization.federation.issuers.create({ - * issuer_url: 'x', - * name: 'x', - * }); - * ``` - */ - create(params, options) { - const { betas, ...body } = params; - return this._client.post("/v1/organizations/federation_issuers?beta=true", { - body, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Retrieve a federation issuer by its ID (`fdis_...`). - * - * @example - * ```ts - * const betaFederationIssuer = - * await client.beta.organization.federation.issuers.retrieve( - * 'federation_issuer_id', - * ); - * ``` - */ - retrieve(federationIssuerID, params = {}, options) { - const { betas } = params ?? {}; - return this._client.get(path2`/v1/organizations/federation_issuers/${federationIssuerID}?beta=true`, { - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Partially update a federation issuer. - * - * Setting `jwks` replaces the full JWKS shape at once. Archived issuers cannot be - * updated; this returns 400. Create a new issuer instead. - * - * Updating an issuer that backs a rule with a scope outside `workspace:developer` - * or `workspace:inference` requires a Console session. - * - * @example - * ```ts - * const betaFederationIssuer = - * await client.beta.organization.federation.issuers.update( - * 'federation_issuer_id', - * ); - * ``` - */ - update(federationIssuerID, params, options) { - const { betas, ...body } = params; - return this._client.post(path2`/v1/organizations/federation_issuers/${federationIssuerID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * List federation issuers in your organization. - * - * Archived issuers are excluded unless `include_archived=true`. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaFederationIssuer of client.beta.organization.federation.issuers.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, ...query } = params ?? {}; - return this._client.getAPIList("/v1/organizations/federation_issuers?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Archive a federation issuer. - * - * Idempotent; re-archiving returns the issuer with its original `archived_at`. - * Rejected with 400 if any live (non-archived) federation rule still references - * the issuer; archive those rules first (a rule's issuer cannot be changed), or - * recreate them against another issuer. - * - * @example - * ```ts - * const betaFederationIssuer = - * await client.beta.organization.federation.issuers.archive( - * 'federation_issuer_id', - * ); - * ``` - */ - archive(federationIssuerID, params = {}, options) { - const { betas } = params ?? {}; - return this._client.post(path2`/v1/organizations/federation_issuers/${federationIssuerID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.mjs -var Workspaces; -var init_workspaces = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Workspaces = class extends APIResource { - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * List workspaces where this federation rule is enabled. - * - * Returns all workspace enablements in a single response; the `limit` and `page` - * parameters are accepted but have no effect, and `next_page` is always `null`. - * Returns explicit per-workspace enablements only; for rules with - * `applies_to_all_workspaces` or a legacy single `workspace_id`, check those - * fields on the rule itself. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaFederationRuleWorkspace of client.beta.organization.federation.rules.workspaces.list( - * 'federation_rule_id', - * )) { - * // ... - * } - * ``` - */ - list(federationRuleID, params = {}, options) { - const { betas, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/organizations/federation_rules/${federationRuleID}/workspaces?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Enable a federation rule for a workspace. - * - * Idempotent; re-enabling returns the existing enablement. The rule and workspace - * must both belong to your organization. Membership of the rule's target service - * account in this workspace is not checked at enablement: token exchange into this - * workspace is rejected unless the target is a member (it is implicitly a member - * of the default workspace). Archived rules are rejected with 400. OAuth callers - * may only manage rules whose `oauth_scope` is `workspace:developer` or - * `workspace:inference`; other scopes require a Console session. - * - * @example - * ```ts - * const betaFederationRuleWorkspace = - * await client.beta.organization.federation.rules.workspaces.add( - * 'federation_rule_id', - * { workspace_id: 'workspace_id' }, - * ); - * ``` - */ - add(federationRuleID, params, options) { - const { betas, ...body } = params; - return this._client.post(path2`/v1/organizations/federation_rules/${federationRuleID}/workspaces?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Disable a federation rule for a workspace. - * - * Idempotent; succeeds even if the enablement was already removed. OAuth callers - * may only manage rules whose `oauth_scope` is `workspace:developer` or - * `workspace:inference`; other scopes require a Console session. - * - * @example - * ```ts - * const workspace = - * await client.beta.organization.federation.rules.workspaces.remove( - * 'workspace_id', - * { federation_rule_id: 'federation_rule_id' }, - * ); - * ``` - */ - remove(workspaceID, params, options) { - const { federation_rule_id, betas } = params; - return this._client.delete(path2`/v1/organizations/federation_rules/${federation_rule_id}/workspaces/${workspaceID}?beta=true`, { - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.mjs -var Rules; -var init_rules = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.mjs"() { - init_resource(); - init_workspaces(); - init_workspaces(); - init_pagination(); - init_headers(); - init_path(); - Rules = /* @__PURE__ */ (() => { - class Rules2 extends APIResource { - constructor() { - super(...arguments); - this.workspaces = new Workspaces(this._client); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Create a federation rule owned by your organization. - * - * The referenced issuer and the target service account must already exist in the - * same organization; invalid references are rejected with a 400 error. The - * workspace reference is validated. Membership is not checked at rule creation: - * token exchange resolves a single enabled workspace per call and is rejected - * unless the target service account is a member of that workspace (it is - * implicitly a member of the default workspace). Rules on well-known shared - * issuers (GitHub Actions, GitLab, Buildkite, Terraform Cloud, Google) must - * constrain tenant identity via an identity-bearing claim, a tenant-pinning - * subject prefix (such as `repo:YOUR_ORG/...`), or a CEL condition referencing one - * of those identity claims (e.g. `claims.repository_owner`). OAuth callers may - * only manage rules whose `oauth_scope` is `workspace:developer` or - * `workspace:inference`; other scopes require a Console session. - * - * @example - * ```ts - * const betaFederationRule = - * await client.beta.organization.federation.rules.create({ - * issuer_id: 'issuer_id', - * match: {}, - * name: 'x', - * oauth_scope: 'x', - * target: { - * service_account_id: 'svac_01SDCCSbTxrXDpWc1phhtcfK', - * type: 'service_account', - * }, - * }); - * ``` - */ - create(params, options) { - const { betas, ...body } = params; - return this._client.post("/v1/organizations/federation_rules?beta=true", { - body, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Retrieve a federation rule by its ID (`fdrl_...`). - * - * @example - * ```ts - * const betaFederationRule = - * await client.beta.organization.federation.rules.retrieve( - * 'federation_rule_id', - * ); - * ``` - */ - retrieve(federationRuleID, params = {}, options) { - const { betas } = params ?? {}; - return this._client.get(path2`/v1/organizations/federation_rules/${federationRuleID}?beta=true`, { - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Partially update a federation rule. - * - * `issuer_id` is immutable. `match` and `target` are replaced as whole objects - * when set. Referenced service accounts and workspaces must exist in your - * organization; invalid references are rejected with a 400 error. Archived rules - * cannot be updated; this returns 400. Create a new rule instead. Rules on - * well-known shared issuers (GitHub Actions, GitLab, Buildkite, Terraform Cloud, - * Google) must constrain tenant identity via an identity-bearing claim, a - * tenant-pinning subject prefix (such as `repo:YOUR_ORG/...`), or a CEL condition - * referencing one of those identity claims (e.g. `claims.repository_owner`). On - * these issuers the requirement is re-checked on every update; if an existing - * rule's stored match does not yet constrain tenant identity, any update (even a - * rename or description change) must also supply a conforming `match` in the same - * request. OAuth callers may only manage rules whose `oauth_scope` is - * `workspace:developer` or `workspace:inference`; other scopes require a Console - * session. - * - * @example - * ```ts - * const betaFederationRule = - * await client.beta.organization.federation.rules.update( - * 'federation_rule_id', - * ); - * ``` - */ - update(federationRuleID, params, options) { - const { betas, ...body } = params; - return this._client.post(path2`/v1/organizations/federation_rules/${federationRuleID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * List federation rules in your organization. - * - * Optionally filter by issuer with `issuer_id`. Archived rules are excluded unless - * `include_archived=true`. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaFederationRule of client.beta.organization.federation.rules.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, ...query } = params ?? {}; - return this._client.getAPIList("/v1/organizations/federation_rules?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Archive a federation rule. - * - * Token exchange through this rule stops immediately. Idempotent; re-archiving - * returns the rule with its original `archived_at`. Archiving clears the rule's - * workspace targeting (`workspace_id` and `workspace_ids` are emptied). Tokens - * already minted before archive remain valid until they expire. OAuth callers may - * only manage rules whose `oauth_scope` is `workspace:developer` or - * `workspace:inference`; other scopes require a Console session. - * - * @example - * ```ts - * const betaFederationRule = - * await client.beta.organization.federation.rules.archive( - * 'federation_rule_id', - * ); - * ``` - */ - archive(federationRuleID, params = {}, options) { - const { betas } = params ?? {}; - return this._client.post(path2`/v1/organizations/federation_rules/${federationRuleID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - } - Rules2.Workspaces = Workspaces; - return Rules2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.mjs -var Federation; -var init_federation = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.mjs"() { - init_resource(); - init_issuers(); - init_issuers(); - init_rules(); - init_rules(); - Federation = /* @__PURE__ */ (() => { - class Federation2 extends APIResource { - constructor() { - super(...arguments); - this.issuers = new Issuers(this._client); - this.rules = new Rules(this._client); - } - } - Federation2.Issuers = Issuers; - Federation2.Rules = Rules; - return Federation2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.mjs -var Workspaces2; -var init_workspaces2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Workspaces2 = class extends APIResource { - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * List the workspaces a service account is a member of. - * - * Each entry includes the service account's `workspace_role` in that workspace. - * Use `limit` and the `next_page` cursor to paginate. When the service account has - * no explicit default-workspace membership, the implicit (`implicit: true`) - * membership is returned as the first entry on the first page; with `limit=1` the - * first page may return up to 2 entries (the implicit entry plus one explicit - * membership) so a pagination cursor can be derived. Memberships are returned only - * while the service account is active. Without a `page` cursor, an archived - * service account returns an empty list. A `page` cursor that does not match an - * active membership returns a 400 invalid-request error. A cursor stops matching - * when the membership is removed, the workspace is deleted, or the service account - * is archived. Restart pagination from the first page to recover. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaServiceAccountWorkspaceMember of client.beta.organization.serviceAccounts.workspaces.list( - * 'service_account_id', - * )) { - * // ... - * } - * ``` - */ - list(serviceAccountID, params = {}, options) { - const { betas, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/organizations/service_accounts/${serviceAccountID}/workspaces?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Add a service account to a workspace with the given `workspace_role`. - * - * Mirror of `POST /workspaces/{workspace_id}/service_accounts`, addressed from the - * service-account side; both create the same membership. If the service account is - * already an explicit member of the workspace, its `workspace_role` is replaced - * with the value supplied here. Archived workspaces return 400. Archived service - * accounts cannot be added and are rejected. - * - * @example - * ```ts - * const betaServiceAccountWorkspaceMember = - * await client.beta.organization.serviceAccounts.workspaces.add( - * 'service_account_id', - * { - * workspace_id: 'workspace_id', - * workspace_role: 'workspace_admin', - * }, - * ); - * ``` - */ - add(serviceAccountID, params, options) { - const { betas, ...body } = params; - return this._client.post(path2`/v1/organizations/service_accounts/${serviceAccountID}/workspaces?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Remove a service account from a workspace. - * - * Mirror of - * `DELETE /workspaces/{workspace_id}/service_accounts/{service_account_id}`, - * addressed from the service-account side. Removal is idempotent (returns 200 even - * if the membership was already removed). A DELETE against the implicit - * default-workspace membership returns 200 but is a no-op and the membership - * persists; deleting an explicit default-workspace row reverts to the implicit - * `workspace_user` membership. Archived workspaces return 400. - * - * @example - * ```ts - * const workspace = - * await client.beta.organization.serviceAccounts.workspaces.remove( - * 'workspace_id', - * { service_account_id: 'service_account_id' }, - * ); - * ``` - */ - remove(workspaceID, params, options) { - const { service_account_id, betas } = params; - return this._client.delete(path2`/v1/organizations/service_accounts/${service_account_id}/workspaces/${workspaceID}?beta=true`, { - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.mjs -var ServiceAccounts; -var init_service_accounts = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.mjs"() { - init_resource(); - init_workspaces2(); - init_workspaces2(); - init_pagination(); - init_headers(); - init_path(); - ServiceAccounts = /* @__PURE__ */ (() => { - class ServiceAccounts4 extends APIResource { - constructor() { - super(...arguments); - this.workspaces = new Workspaces2(this._client); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Create a service account. - * - * A service account is a named workload identity that federation rules target. - * `organization_role` is `developer` (default) or `admin`; a rule may only be - * created or retargeted to grant `org:admin` scope when the target's - * `organization_role` is `admin`. Creating an `admin`-role service account - * requires an interactive credential (a user OAuth token or a Console session) — a - * workload may only create `developer`-role service accounts. - * - * @example - * ```ts - * const betaServiceAccount = - * await client.beta.organization.serviceAccounts.create({ - * name: 'ci-deploy-bot', - * }); - * ``` - */ - create(params, options) { - const { betas, ...body } = params; - return this._client.post("/v1/organizations/service_accounts?beta=true", { - body, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Retrieve a service account by its ID (`svac_...`). - * - * @example - * ```ts - * const betaServiceAccount = - * await client.beta.organization.serviceAccounts.retrieve( - * 'service_account_id', - * ); - * ``` - */ - retrieve(serviceAccountID, params = {}, options) { - const { betas } = params ?? {}; - return this._client.get(path2`/v1/organizations/service_accounts/${serviceAccountID}?beta=true`, { - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Update a service account. - * - * Only `description` and `organization_role` are mutable; `name` cannot be - * changed. Archived service accounts cannot be updated; this returns 400. Setting - * `organization_role` to `admin` (even when unchanged) requires an interactive - * credential (a user OAuth token or a Console session). - * - * @example - * ```ts - * const betaServiceAccount = - * await client.beta.organization.serviceAccounts.update( - * 'service_account_id', - * ); - * ``` - */ - update(serviceAccountID, params, options) { - const { betas, ...body } = params; - return this._client.post(path2`/v1/organizations/service_accounts/${serviceAccountID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * List service accounts in the caller's organization. - * - * Results are ordered by creation time, newest first. Use `limit` and the - * `next_page` cursor to paginate; set `include_archived=true` to include archived - * service accounts. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaServiceAccount of client.beta.organization.serviceAccounts.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, ...query } = params ?? {}; - return this._client.getAPIList("/v1/organizations/service_accounts?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Archive a service account. - * - * Idempotent; re-archiving returns the service account with its original - * `archived_at`. Rejected with 400 if any live (non-archived) federation rule - * still targets this service account, same as issuer archival; archive those rules - * first or change their target to another service account. - * - * @example - * ```ts - * const betaServiceAccount = - * await client.beta.organization.serviceAccounts.archive( - * 'service_account_id', - * ); - * ``` - */ - archive(serviceAccountID, params = {}, options) { - const { betas } = params ?? {}; - return this._client.post(path2`/v1/organizations/service_accounts/${serviceAccountID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - } - ServiceAccounts4.Workspaces = Workspaces2; - return ServiceAccounts4; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.mjs -var Members; -var init_members = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.mjs"() { - init_resource(); - init_pagination(); - init_path(); - Members = class extends APIResource { - /** - * Get Workspace Member - * - * @example - * ```ts - * const betaWorkspaceMember = - * await client.beta.organization.workspaces.members.retrieve( - * 'user_id', - * { workspace_id: 'workspace_id' }, - * ); - * ``` - */ - retrieve(userID, params, options) { - const { workspace_id } = params; - return this._client.get(path2`/v1/organizations/workspaces/${workspace_id}/members/${userID}?beta=true`, options); - } - /** - * Update Workspace Member - * - * @example - * ```ts - * const betaWorkspaceMember = - * await client.beta.organization.workspaces.members.update( - * 'user_id', - * { - * workspace_id: 'workspace_id', - * workspace_role: 'workspace_admin', - * }, - * ); - * ``` - */ - update(userID, params, options) { - const { workspace_id, ...body } = params; - return this._client.post(path2`/v1/organizations/workspaces/${workspace_id}/members/${userID}?beta=true`, { - body, - ...options - }); - } - /** - * List Workspace Members - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaWorkspaceMember of client.beta.organization.workspaces.members.list( - * 'workspace_id', - * )) { - * // ... - * } - * ``` - */ - list(workspaceID, query = {}, options) { - return this._client.getAPIList(path2`/v1/organizations/workspaces/${workspaceID}/members?beta=true`, Page, { query, ...options }); - } - /** - * Create Workspace Member - * - * @example - * ```ts - * const betaWorkspaceMember = - * await client.beta.organization.workspaces.members.add( - * 'workspace_id', - * { - * user_id: 'user_01WCz1FkmYMm4gnmykNKUu3Q', - * workspace_role: 'workspace_admin', - * }, - * ); - * ``` - */ - add(workspaceID, body, options) { - return this._client.post(path2`/v1/organizations/workspaces/${workspaceID}/members?beta=true`, { - body, - ...options - }); - } - /** - * Delete Workspace Member - * - * @example - * ```ts - * const member = - * await client.beta.organization.workspaces.members.remove( - * 'user_id', - * { workspace_id: 'workspace_id' }, - * ); - * ``` - */ - remove(userID, params, options) { - const { workspace_id } = params; - return this._client.delete(path2`/v1/organizations/workspaces/${workspace_id}/members/${userID}?beta=true`, options); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.mjs -var RateLimits2; -var init_rate_limits2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.mjs"() { - init_resource(); - init_pagination(); - init_path(); - RateLimits2 = class extends APIResource { - /** - * List a workspace's rate limits. - * - * By default, returns only the groups and limiter types that have a - * workspace-level override. With `include_inherited=true`, returns every group - * with organization-level limits the workspace can see, listing for each the - * values it inherits from the organization as well as its own overrides. Each - * value's `source` says which it is. - * - * When `limit` is omitted, every matching entry is returned in a single page; when - * `limit` truncates the result, follow `next_page` to fetch the remaining entries. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaWorkspaceRateLimit of client.beta.organization.workspaces.rateLimits.list( - * 'workspace_id', - * )) { - * // ... - * } - * ``` - */ - list(workspaceID, query = {}, options) { - return this._client.getAPIList(path2`/v1/organizations/workspaces/${workspaceID}/rate_limits?beta=true`, PageCursor, { query, ...options }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.mjs -var ServiceAccounts2; -var init_service_accounts2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - ServiceAccounts2 = class extends APIResource { - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Retrieve a service account's membership in a workspace. - * - * Returns the membership record, including the service account's `workspace_role` - * in this workspace. Archived workspaces return 400. For the default workspace, - * returns the implicit (`implicit: true`) membership when no explicit membership - * exists; an explicitly added membership is returned with its assigned role. An - * archived service account returns 404. - * - * @example - * ```ts - * const betaServiceAccountWorkspaceMember = - * await client.beta.organization.workspaces.serviceAccounts.retrieve( - * 'service_account_id', - * { workspace_id: 'workspace_id' }, - * ); - * ``` - */ - retrieve(serviceAccountID, params, options) { - const { workspace_id, betas } = params; - return this._client.get(path2`/v1/organizations/workspaces/${workspace_id}/service_accounts/${serviceAccountID}?beta=true`, { - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Change a service account's role in a workspace. - * - * The new `workspace_role` replaces the current one. Only explicit memberships can - * be updated; to set a role on the implicit default-workspace membership, add the - * service account explicitly with - * `POST /workspaces/{workspace_id}/service_accounts`. Archived workspaces - * return 400. Archived service accounts cannot be updated and are rejected. - * - * @example - * ```ts - * const betaServiceAccountWorkspaceMember = - * await client.beta.organization.workspaces.serviceAccounts.update( - * 'service_account_id', - * { - * workspace_id: 'workspace_id', - * workspace_role: 'workspace_admin', - * }, - * ); - * ``` - */ - update(serviceAccountID, params, options) { - const { workspace_id, betas, ...body } = params; - return this._client.post(path2`/v1/organizations/workspaces/${workspace_id}/service_accounts/${serviceAccountID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * List the service accounts that are members of a workspace. - * - * Each entry includes the service account's `workspace_role`. Use `limit` and the - * `next_page` cursor to paginate. Archived workspaces return 400; use - * `GET /service_accounts/{id}/workspaces` to audit memberships of an archived - * workspace. The implicit default-workspace membership is not included in this - * list. Memberships of archived service accounts are omitted from the results. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaServiceAccountWorkspaceMember of client.beta.organization.workspaces.serviceAccounts.list( - * 'workspace_id', - * )) { - * // ... - * } - * ``` - */ - list(workspaceID, params = {}, options) { - const { betas, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/organizations/workspaces/${workspaceID}/service_accounts?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Add a service account to a workspace with the given `workspace_role`. - * - * The role determines what the service account can do in the workspace and which - * workspace-scoped permissions it can be granted when authenticating through - * federation. Every service account is already an implicit `workspace_user` member - * of the default workspace; adding it explicitly assigns a chosen role. If the - * service account is already an explicit member of the workspace, its - * `workspace_role` is replaced with the value supplied here. Archived workspaces - * return 400. Archived service accounts cannot be added and are rejected. - * - * @example - * ```ts - * const betaServiceAccountWorkspaceMember = - * await client.beta.organization.workspaces.serviceAccounts.add( - * 'workspace_id', - * { - * service_account_id: 'service_account_id', - * workspace_role: 'workspace_admin', - * }, - * ); - * ``` - */ - add(workspaceID, params, options) { - const { betas, ...body } = params; - return this._client.post(path2`/v1/organizations/workspaces/${workspaceID}/service_accounts?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Remove a service account from a workspace. - * - * Removal is idempotent (returns 200 even if the membership was already removed). - * A DELETE against the implicit default-workspace membership returns 200 but is a - * no-op and the membership persists; deleting an explicit default-workspace row - * reverts to the implicit `workspace_user` membership. Archived workspaces - * return 400. - * - * @example - * ```ts - * const serviceAccount = - * await client.beta.organization.workspaces.serviceAccounts.remove( - * 'service_account_id', - * { workspace_id: 'workspace_id' }, - * ); - * ``` - */ - remove(serviceAccountID, params, options) { - const { workspace_id, betas } = params; - return this._client.delete(path2`/v1/organizations/workspaces/${workspace_id}/service_accounts/${serviceAccountID}?beta=true`, { - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.mjs -var Workspaces3; -var init_workspaces3 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.mjs"() { - init_resource(); - init_members(); - init_members(); - init_rate_limits2(); - init_rate_limits2(); - init_service_accounts2(); - init_service_accounts2(); - init_pagination(); - init_headers(); - init_path(); - Workspaces3 = /* @__PURE__ */ (() => { - class Workspaces4 extends APIResource { - constructor() { - super(...arguments); - this.rateLimits = new RateLimits2(this._client); - this.members = new Members(this._client); - this.serviceAccounts = new ServiceAccounts2(this._client); - } - /** - * Create Workspace - * - * @example - * ```ts - * const betaWorkspace = - * await client.beta.organization.workspaces.create({ - * name: 'x', - * }); - * ``` - */ - create(params, options) { - const { betas, ...body } = params; - return this._client.post("/v1/organizations/workspaces?beta=true", { - body, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * Get Workspace - * - * @example - * ```ts - * const betaWorkspace = - * await client.beta.organization.workspaces.retrieve( - * 'workspace_id', - * ); - * ``` - */ - retrieve(workspaceID, options) { - return this._client.get(path2`/v1/organizations/workspaces/${workspaceID}?beta=true`, options); - } - /** - * Update Workspace - * - * @example - * ```ts - * const betaWorkspace = - * await client.beta.organization.workspaces.update( - * 'workspace_id', - * ); - * ``` - */ - update(workspaceID, body, options) { - return this._client.post(path2`/v1/organizations/workspaces/${workspaceID}?beta=true`, { - body, - ...options - }); - } - /** - * List Workspaces - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaWorkspace of client.beta.organization.workspaces.list()) { - * // ... - * } - * ``` - */ - list(query = {}, options) { - return this._client.getAPIList("/v1/organizations/workspaces?beta=true", Page, { - query, - ...options - }); - } - /** - * Archive Workspace - * - * @example - * ```ts - * const betaWorkspace = - * await client.beta.organization.workspaces.archive( - * 'workspace_id', - * ); - * ``` - */ - archive(workspaceID, options) { - return this._client.post(path2`/v1/organizations/workspaces/${workspaceID}/archive?beta=true`, options); - } - } - Workspaces4.RateLimits = RateLimits2; - Workspaces4.Members = Members; - Workspaces4.ServiceAccounts = ServiceAccounts2; - return Workspaces4; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.mjs -var Organization; -var init_organization = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.mjs"() { - init_resource(); - init_api_keys(); - init_api_keys(); - init_compliance_settings(); - init_compliance_settings(); - init_external_keys(); - init_external_keys(); - init_invites(); - init_invites(); - init_rate_limits(); - init_rate_limits(); - init_users(); - init_users(); - init_federation(); - init_federation(); - init_service_accounts(); - init_service_accounts(); - init_workspaces3(); - init_workspaces3(); - Organization = /* @__PURE__ */ (() => { - class Organization3 extends APIResource { - constructor() { - super(...arguments); - this.apiKeys = new APIKeys(this._client); - this.externalKeys = new ExternalKeys(this._client); - this.federation = new Federation(this._client); - this.invites = new Invites(this._client); - this.serviceAccounts = new ServiceAccounts(this._client); - this.users = new Users(this._client); - this.workspaces = new Workspaces3(this._client); - this.rateLimits = new RateLimits(this._client); - this.complianceSettings = new ComplianceSettings(this._client); - } - /** - * Retrieve information about the organization associated with the authenticated - * API key. - * - * @example - * ```ts - * const betaOrganization = - * await client.beta.organization.retrieve(); - * ``` - */ - retrieve(options) { - return this._client.get("/v1/organizations/me?beta=true", options); - } - } - Organization3.APIKeys = APIKeys; - Organization3.ExternalKeys = ExternalKeys; - Organization3.Federation = Federation; - Organization3.Invites = Invites; - Organization3.ServiceAccounts = ServiceAccounts; - Organization3.Users = Users; - Organization3.Workspaces = Workspaces3; - Organization3.RateLimits = RateLimits; - Organization3.ComplianceSettings = ComplianceSettings; - return Organization3; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/sessions/events.mjs -var Events; -var init_events = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/sessions/events.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - init_SessionToolRunner(); - Events = /* @__PURE__ */ (() => { - class Events4 extends APIResource { - /** - * List Events - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsSessionEvent of client.beta.sessions.events.list( - * 'sesn_011CZkZAtmR3yMPDzynEDxu7', - * )) { - * // ... - * } - * ``` - */ - list(sessionID, params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/sessions/${sessionID}/events?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Send Events - * - * @example - * ```ts - * const betaManagedAgentsSendSessionEvents = - * await client.beta.sessions.events.send( - * 'sesn_011CZkZAtmR3yMPDzynEDxu7', - * { - * events: [ - * { - * content: [ - * { - * text: 'Where is my order #1234?', - * type: 'text', - * }, - * ], - * type: 'user.message', - * }, - * ], - * }, - * ); - * ``` - */ - send(sessionID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/sessions/${sessionID}/events?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Stream Events - * - * @example - * ```ts - * const betaManagedAgentsStreamSessionEvents = - * await client.beta.sessions.events.stream( - * 'sesn_011CZkZAtmR3yMPDzynEDxu7', - * ); - * ``` - */ - stream(sessionID, params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.get(path2`/v1/sessions/${sessionID}/events/stream?beta=true`, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]), - stream: true - }); - } - /** - * Attach to a session and dispatch every incoming `agent.tool_use` and - * `agent.custom_tool_use` event to a local tool registry, sending the matching - * result back (`user.tool_result` / `user.custom_tool_result`). The - * sessions-side counterpart to `client.beta.messages.toolRunner`: yields one - * entry per completed tool call so callers can observe each dispatch (and - * `break` to abort cleanly). - * - * @example - * ```ts - * import { betaAgentToolset20260401 } from '@anthropic-ai/sdk/tools/agent-toolset/node'; - * - * for await (const call of client.beta.sessions.events.toolRunner(work.data.id, { - * tools: [...betaAgentToolset20260401({ workdir }), myTool], - * })) { - * console.log(`${call.name} -> ${call.isError ? 'error' : 'ok'}`); - * } - * ``` - */ - toolRunner(sessionID, opts) { - return new SessionToolRunner(sessionID, { ...opts, client: this._client }); - } - } - Events4.SessionToolRunner = SessionToolRunner; - return Events4; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/sessions/resources.mjs -var Resources; -var init_resources = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/sessions/resources.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Resources = class extends APIResource { - /** - * Get Session Resource - * - * @example - * ```ts - * const resource = - * await client.beta.sessions.resources.retrieve( - * 'sesrsc_011CZkZBJq5dWxk9fVLNcPht', - * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, - * ); - * ``` - */ - retrieve(resourceID, params, options) { - const { session_id, betas, workspace_id } = params; - return this._client.get(path2`/v1/sessions/${session_id}/resources/${resourceID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Update Session Resource - * - * @example - * ```ts - * const resource = - * await client.beta.sessions.resources.update( - * 'sesrsc_011CZkZBJq5dWxk9fVLNcPht', - * { - * session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7', - * authorization_token: 'ghp_exampletoken', - * }, - * ); - * ``` - */ - update(resourceID, params, options) { - const { session_id, betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/sessions/${session_id}/resources/${resourceID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List Session Resources - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsSessionResource of client.beta.sessions.resources.list( - * 'sesn_011CZkZAtmR3yMPDzynEDxu7', - * )) { - * // ... - * } - * ``` - */ - list(sessionID, params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/sessions/${sessionID}/resources?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Delete Session Resource - * - * @example - * ```ts - * const betaManagedAgentsDeleteSessionResource = - * await client.beta.sessions.resources.delete( - * 'sesrsc_011CZkZBJq5dWxk9fVLNcPht', - * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, - * ); - * ``` - */ - delete(resourceID, params, options) { - const { session_id, betas, workspace_id } = params; - return this._client.delete(path2`/v1/sessions/${session_id}/resources/${resourceID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Add Session Resource - * - * @example - * ```ts - * const betaManagedAgentsFileResource = - * await client.beta.sessions.resources.add( - * 'sesn_011CZkZAtmR3yMPDzynEDxu7', - * { - * file_id: 'file_011CNha8iCJcU1wXNR6q4V8w', - * type: 'file', - * }, - * ); - * ``` - */ - add(sessionID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/sessions/${sessionID}/resources?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/events.mjs -var Events2; -var init_events2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/events.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Events2 = class extends APIResource { - /** - * List Session Thread Events - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsSessionEvent of client.beta.sessions.threads.events.list( - * 'sthr_011CZkZVWa6oIjw0rgXZpnBt', - * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, - * )) { - * // ... - * } - * ``` - */ - list(threadID, params, options) { - const { session_id, betas, workspace_id, ...query } = params; - return this._client.getAPIList(path2`/v1/sessions/${session_id}/threads/${threadID}/events?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Stream Session Thread Events - * - * @example - * ```ts - * const betaManagedAgentsStreamSessionThreadEvents = - * await client.beta.sessions.threads.events.stream( - * 'sthr_011CZkZVWa6oIjw0rgXZpnBt', - * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, - * ); - * ``` - */ - stream(threadID, params, options) { - const { session_id, betas, workspace_id, ...query } = params; - return this._client.get(path2`/v1/sessions/${session_id}/threads/${threadID}/stream?beta=true`, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]), - stream: true - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/threads.mjs -var Threads; -var init_threads = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/threads.mjs"() { - init_resource(); - init_events2(); - init_events2(); - init_pagination(); - init_headers(); - init_path(); - Threads = /* @__PURE__ */ (() => { - class Threads4 extends APIResource { - constructor() { - super(...arguments); - this.events = new Events2(this._client); - } - /** - * Get Session Thread - * - * @example - * ```ts - * const betaManagedAgentsSessionThread = - * await client.beta.sessions.threads.retrieve( - * 'sthr_011CZkZVWa6oIjw0rgXZpnBt', - * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, - * ); - * ``` - */ - retrieve(threadID, params, options) { - const { session_id, betas, workspace_id } = params; - return this._client.get(path2`/v1/sessions/${session_id}/threads/${threadID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List Session Threads - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsSessionThread of client.beta.sessions.threads.list( - * 'sesn_011CZkZAtmR3yMPDzynEDxu7', - * )) { - * // ... - * } - * ``` - */ - list(sessionID, params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/sessions/${sessionID}/threads?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Archive Session Thread - * - * @example - * ```ts - * const betaManagedAgentsSessionThread = - * await client.beta.sessions.threads.archive( - * 'sthr_011CZkZVWa6oIjw0rgXZpnBt', - * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, - * ); - * ``` - */ - archive(threadID, params, options) { - const { session_id, betas, workspace_id } = params; - return this._client.post(path2`/v1/sessions/${session_id}/threads/${threadID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - } - Threads4.Events = Events2; - return Threads4; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/sessions/sessions.mjs -var Sessions; -var init_sessions = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/sessions/sessions.mjs"() { - init_resource(); - init_events(); - init_events(); - init_resources(); - init_resources(); - init_threads(); - init_threads(); - init_pagination(); - init_headers(); - init_path(); - Sessions = /* @__PURE__ */ (() => { - class Sessions6 extends APIResource { - constructor() { - super(...arguments); - this.events = new Events(this._client); - this.resources = new Resources(this._client); - this.threads = new Threads(this._client); - } - /** - * Create Session - * - * @example - * ```ts - * const betaManagedAgentsSession = - * await client.beta.sessions.create({ - * agent: 'agent_011CZkYpogX7uDKUyvBTophP', - * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * }); - * ``` - */ - create(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/sessions?beta=true", { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Get Session - * - * @example - * ```ts - * const betaManagedAgentsSession = - * await client.beta.sessions.retrieve( - * 'sesn_011CZkZAtmR3yMPDzynEDxu7', - * ); - * ``` - */ - retrieve(sessionID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/sessions/${sessionID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Update Session - * - * @example - * ```ts - * const betaManagedAgentsSession = - * await client.beta.sessions.update( - * 'sesn_011CZkZAtmR3yMPDzynEDxu7', - * ); - * ``` - */ - update(sessionID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/sessions/${sessionID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List Sessions - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsSession of client.beta.sessions.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/sessions?beta=true", BidirectionalPageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Delete Session - * - * @example - * ```ts - * const betaManagedAgentsDeletedSession = - * await client.beta.sessions.delete( - * 'sesn_011CZkZAtmR3yMPDzynEDxu7', - * ); - * ``` - */ - delete(sessionID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.delete(path2`/v1/sessions/${sessionID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Archive Session - * - * @example - * ```ts - * const betaManagedAgentsSession = - * await client.beta.sessions.archive( - * 'sesn_011CZkZAtmR3yMPDzynEDxu7', - * ); - * ``` - */ - archive(sessionID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/sessions/${sessionID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - } - Sessions6.Events = Events; - Sessions6.Resources = Resources; - Sessions6.Threads = Threads; - return Sessions6; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.mjs -var Versions2; -var init_versions2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_uploads(); - init_path(); - Versions2 = class extends APIResource { - /** - * Create Skill Version - * - * @example - * ```ts - * const betaSkillVersion = - * await client.beta.skills.versions.create('skill_id', { - * files: [fs.createReadStream('path/to/file')], - * }); - * ``` - */ - create(skillID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/skills/${skillID}/versions?beta=true`, multipartFormRequestOptions({ - body, - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }, this._client, false)); - } - /** - * Get Skill Version - * - * @example - * ```ts - * const betaSkillVersion = - * await client.beta.skills.versions.retrieve('version', { - * skill_id: 'skill_id', - * }); - * ``` - */ - retrieve(version, params, options) { - const { skill_id, betas, workspace_id } = params; - return this._client.get(path2`/v1/skills/${skill_id}/versions/${version}?beta=true`, { - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List Skill Versions - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaSkillVersion of client.beta.skills.versions.list( - * 'skill_id', - * )) { - * // ... - * } - * ``` - */ - list(skillID, params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/skills/${skillID}/versions?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Delete Skill Version - * - * @example - * ```ts - * const betaDeletedSkillVersion = - * await client.beta.skills.versions.delete('version', { - * skill_id: 'skill_id', - * }); - * ``` - */ - delete(version, params, options) { - const { skill_id, betas, workspace_id } = params; - return this._client.delete(path2`/v1/skills/${skill_id}/versions/${version}?beta=true`, { - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Download a skill version's content as a zip archive. - * - * @example - * ```ts - * const response = await client.beta.skills.versions.download( - * 'version', - * { skill_id: 'skill_id' }, - * ); - * - * const content = await response.blob(); - * console.log(content); - * ``` - */ - download(version, params, options) { - const { skill_id, betas, workspace_id } = params; - return this._client.get(path2`/v1/skills/${skill_id}/versions/${version}/content?beta=true`, { - ...options, - headers: buildHeaders([ - { - Accept: "application/binary", - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]), - __binaryResponse: true - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.mjs -var Skills; -var init_skills = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.mjs"() { - init_resource(); - init_versions2(); - init_versions2(); - init_pagination(); - init_headers(); - init_uploads(); - init_path(); - Skills = /* @__PURE__ */ (() => { - class Skills4 extends APIResource { - constructor() { - super(...arguments); - this.versions = new Versions2(this._client); - } - /** - * Create Skill - * - * @example - * ```ts - * const betaSkill = await client.beta.skills.create({ - * files: [fs.createReadStream('path/to/file')], - * }); - * ``` - */ - create(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/skills?beta=true", multipartFormRequestOptions({ - body, - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }, this._client, false)); - } - /** - * Get Skill - * - * @example - * ```ts - * const betaSkill = await client.beta.skills.retrieve( - * 'skill_id', - * ); - * ``` - */ - retrieve(skillID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/skills/${skillID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List Skills - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaSkill of client.beta.skills.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/skills?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Delete Skill - * - * @example - * ```ts - * const betaDeletedSkill = await client.beta.skills.delete( - * 'skill_id', - * ); - * ``` - */ - delete(skillID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.delete(path2`/v1/skills/${skillID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - } - Skills4.Versions = Versions2; - return Skills4; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/tunnels/certificates.mjs -var Certificates; -var init_certificates = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/tunnels/certificates.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Certificates = class extends APIResource { - /** - * The Tunnels API is in research preview. It requires the - * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a - * deprecation period. It supersedes the Admin API endpoints at - * `/v1/organizations/tunnels`, which remain available during a migration window. - * - * Registers a public CA certificate on a tunnel. Anthropic verifies the gateway's - * server certificate against this CA when it terminates the inner TLS session. A - * tunnel holds at most two non-archived certificates. - * - * @example - * ```ts - * const betaTunnelCertificate = - * await client.beta.tunnels.certificates.create( - * 'tunnel_id', - * { ca_certificate_pem: 'ca_certificate_pem' }, - * ); - * ``` - */ - create(tunnelID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/tunnels/${tunnelID}/certificates?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * The Tunnels API is in research preview. It requires the - * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a - * deprecation period. It supersedes the Admin API endpoints at - * `/v1/organizations/tunnels`, which remain available during a migration window. - * - * Fetches a tunnel certificate by ID. - * - * @example - * ```ts - * const betaTunnelCertificate = - * await client.beta.tunnels.certificates.retrieve( - * 'certificate_id', - * { tunnel_id: 'tunnel_id' }, - * ); - * ``` - */ - retrieve(certificateID, params, options) { - const { tunnel_id, betas, workspace_id } = params; - return this._client.get(path2`/v1/tunnels/${tunnel_id}/certificates/${certificateID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * The Tunnels API is in research preview. It requires the - * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a - * deprecation period. It supersedes the Admin API endpoints at - * `/v1/organizations/tunnels`, which remain available during a migration window. - * - * Lists the certificates registered on a tunnel. Archived certificates are - * excluded unless include_archived is set. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaTunnelCertificate of client.beta.tunnels.certificates.list( - * 'tunnel_id', - * )) { - * // ... - * } - * ``` - */ - list(tunnelID, params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/tunnels/${tunnelID}/certificates?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * The Tunnels API is in research preview. It requires the - * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a - * deprecation period. It supersedes the Admin API endpoints at - * `/v1/organizations/tunnels`, which remain available during a migration window. - * - * Archives a tunnel certificate, removing it from the set Anthropic trusts for the - * tunnel. The certificate record is retained. Archiving the last non-archived - * certificate is permitted; the tunnel rejects MCP traffic until a new certificate - * is added. - * - * @example - * ```ts - * const betaTunnelCertificate = - * await client.beta.tunnels.certificates.archive( - * 'certificate_id', - * { tunnel_id: 'tunnel_id' }, - * ); - * ``` - */ - archive(certificateID, params, options) { - const { tunnel_id, betas, workspace_id } = params; - return this._client.post(path2`/v1/tunnels/${tunnel_id}/certificates/${certificateID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/tunnels/tunnels.mjs -var Tunnels; -var init_tunnels = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/tunnels/tunnels.mjs"() { - init_resource(); - init_certificates(); - init_certificates(); - init_pagination(); - init_headers(); - init_path(); - Tunnels = /* @__PURE__ */ (() => { - class Tunnels2 extends APIResource { - constructor() { - super(...arguments); - this.certificates = new Certificates(this._client); - } - /** - * The Tunnels API is in research preview. It requires the - * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a - * deprecation period. It supersedes the Admin API endpoints at - * `/v1/organizations/tunnels`, which remain available during a migration window. - * - * Creates a tunnel. Creation allocates a fresh hostname and provisions the tunnel; - * it is not idempotent. The new tunnel rejects MCP traffic until at least one CA - * certificate is added. - * - * @example - * ```ts - * const betaTunnel = await client.beta.tunnels.create(); - * ``` - */ - create(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/tunnels?beta=true", { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * The Tunnels API is in research preview. It requires the - * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a - * deprecation period. It supersedes the Admin API endpoints at - * `/v1/organizations/tunnels`, which remain available during a migration window. - * - * Fetches a tunnel by ID. - * - * @example - * ```ts - * const betaTunnel = await client.beta.tunnels.retrieve( - * 'tunnel_id', - * ); - * ``` - */ - retrieve(tunnelID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/tunnels/${tunnelID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * The Tunnels API is in research preview. It requires the - * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a - * deprecation period. It supersedes the Admin API endpoints at - * `/v1/organizations/tunnels`, which remain available during a migration window. - * - * Lists tunnels. Results are ordered by creation time, newest first; archived - * tunnels are excluded unless include_archived is set. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaTunnel of client.beta.tunnels.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/tunnels?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * The Tunnels API is in research preview. It requires the - * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a - * deprecation period. It supersedes the Admin API endpoints at - * `/v1/organizations/tunnels`, which remain available during a migration window. - * - * Archives a tunnel. Archival is irreversible: every non-archived certificate on - * the tunnel is archived in the same operation, the hostname is retired and never - * re-allocated, and the tunnel token is invalidated. Retrying against an - * already-archived tunnel returns the existing record unchanged. - * - * @example - * ```ts - * const betaTunnel = await client.beta.tunnels.archive( - * 'tunnel_id', - * ); - * ``` - */ - archive(tunnelID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/tunnels/${tunnelID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * The Tunnels API is in research preview. It requires the - * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a - * deprecation period. It supersedes the Admin API endpoints at - * `/v1/organizations/tunnels`, which remain available during a migration window. - * - * Reveals a tunnel's connector token. The value is fetched live on each call; - * Anthropic does not store it. Repeated calls return the same value until the - * token is rotated. Exposed as POST so the token does not appear in intermediary - * access logs. - * - * @example - * ```ts - * const betaTunnelToken = - * await client.beta.tunnels.revealToken('tunnel_id'); - * ``` - */ - revealToken(tunnelID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/tunnels/${tunnelID}/reveal_token?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * The Tunnels API is in research preview. It requires the - * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a - * deprecation period. It supersedes the Admin API endpoints at - * `/v1/organizations/tunnels`, which remain available during a migration window. - * - * Rotates a tunnel's connector token. Rotation invalidates the current token for - * new connections and returns a fresh value; established connections are not - * severed. A connector restarted after rotation must use the new value. - * - * @example - * ```ts - * const betaTunnelToken = - * await client.beta.tunnels.rotateToken('tunnel_id'); - * ``` - */ - rotateToken(tunnelID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/tunnels/${tunnelID}/rotate_token?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - } - Tunnels2.Certificates = Certificates; - return Tunnels2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/vaults/credentials.mjs -var Credentials; -var init_credentials2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/vaults/credentials.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Credentials = class extends APIResource { - /** - * Create Credential - * - * @example - * ```ts - * const betaManagedAgentsCredential = - * await client.beta.vaults.credentials.create( - * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', - * { - * auth: { - * token: 'bearer_exampletoken', - * mcp_server_url: - * 'https://example-server.modelcontextprotocol.io/sse', - * type: 'static_bearer', - * }, - * }, - * ); - * ``` - */ - create(vaultID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/vaults/${vaultID}/credentials?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Get Credential - * - * @example - * ```ts - * const betaManagedAgentsCredential = - * await client.beta.vaults.credentials.retrieve( - * 'vcrd_011CZkZEMt8gZan2iYOQfSkw', - * { vault_id: 'vlt_011CZkZDLs7fYzm1hXNPeRjv' }, - * ); - * ``` - */ - retrieve(credentialID, params, options) { - const { vault_id, betas, workspace_id } = params; - return this._client.get(path2`/v1/vaults/${vault_id}/credentials/${credentialID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Update Credential - * - * @example - * ```ts - * const betaManagedAgentsCredential = - * await client.beta.vaults.credentials.update( - * 'vcrd_011CZkZEMt8gZan2iYOQfSkw', - * { vault_id: 'vlt_011CZkZDLs7fYzm1hXNPeRjv' }, - * ); - * ``` - */ - update(credentialID, params, options) { - const { vault_id, betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/vaults/${vault_id}/credentials/${credentialID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List Credentials - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsCredential of client.beta.vaults.credentials.list( - * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', - * )) { - * // ... - * } - * ``` - */ - list(vaultID, params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/vaults/${vaultID}/credentials?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Delete Credential - * - * @example - * ```ts - * const betaManagedAgentsDeletedCredential = - * await client.beta.vaults.credentials.delete( - * 'vcrd_011CZkZEMt8gZan2iYOQfSkw', - * { vault_id: 'vlt_011CZkZDLs7fYzm1hXNPeRjv' }, - * ); - * ``` - */ - delete(credentialID, params, options) { - const { vault_id, betas, workspace_id } = params; - return this._client.delete(path2`/v1/vaults/${vault_id}/credentials/${credentialID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Archive Credential - * - * @example - * ```ts - * const betaManagedAgentsCredential = - * await client.beta.vaults.credentials.archive( - * 'vcrd_011CZkZEMt8gZan2iYOQfSkw', - * { vault_id: 'vlt_011CZkZDLs7fYzm1hXNPeRjv' }, - * ); - * ``` - */ - archive(credentialID, params, options) { - const { vault_id, betas, workspace_id } = params; - return this._client.post(path2`/v1/vaults/${vault_id}/credentials/${credentialID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Validate Credential - * - * @example - * ```ts - * const betaManagedAgentsCredentialValidation = - * await client.beta.vaults.credentials.mcpOAuthValidate( - * 'vcrd_011CZkZEMt8gZan2iYOQfSkw', - * { vault_id: 'vlt_011CZkZDLs7fYzm1hXNPeRjv' }, - * ); - * ``` - */ - mcpOAuthValidate(credentialID, params, options) { - const { vault_id, betas, workspace_id } = params; - return this._client.post(path2`/v1/vaults/${vault_id}/credentials/${credentialID}/mcp_oauth_validate?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/vaults/vaults.mjs -var Vaults; -var init_vaults = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/vaults/vaults.mjs"() { - init_resource(); - init_credentials2(); - init_credentials2(); - init_pagination(); - init_headers(); - init_path(); - Vaults = /* @__PURE__ */ (() => { - class Vaults3 extends APIResource { - constructor() { - super(...arguments); - this.credentials = new Credentials(this._client); - } - /** - * Create Vault - * - * @example - * ```ts - * const betaManagedAgentsVault = - * await client.beta.vaults.create({ - * display_name: 'Example vault', - * }); - * ``` - */ - create(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/vaults?beta=true", { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Get Vault - * - * @example - * ```ts - * const betaManagedAgentsVault = - * await client.beta.vaults.retrieve( - * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', - * ); - * ``` - */ - retrieve(vaultID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/vaults/${vaultID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Update Vault - * - * @example - * ```ts - * const betaManagedAgentsVault = - * await client.beta.vaults.update( - * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', - * ); - * ``` - */ - update(vaultID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/vaults/${vaultID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List Vaults - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsVault of client.beta.vaults.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/vaults?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Delete Vault - * - * @example - * ```ts - * const betaManagedAgentsDeletedVault = - * await client.beta.vaults.delete( - * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', - * ); - * ``` - */ - delete(vaultID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.delete(path2`/v1/vaults/${vaultID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Archive Vault - * - * @example - * ```ts - * const betaManagedAgentsVault = - * await client.beta.vaults.archive( - * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', - * ); - * ``` - */ - archive(vaultID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/vaults/${vaultID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - } - Vaults3.Credentials = Credentials; - return Vaults3; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/beta.mjs -var Beta; -var init_beta = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/beta.mjs"() { - init_resource(); - init_deployment_runs(); - init_deployment_runs(); - init_deployments(); - init_deployments(); - init_dreams(); - init_dreams(); - init_files(); - init_files(); - init_models2(); - init_models2(); - init_user_profiles(); - init_user_profiles(); - init_webhooks(); - init_webhooks(); - init_agents(); - init_agents(); - init_environments(); - init_environments(); - init_memory_stores(); - init_memory_stores(); - init_messages(); - init_messages(); - init_organization(); - init_organization(); - init_sessions(); - init_sessions(); - init_skills(); - init_skills(); - init_tunnels(); - init_tunnels(); - init_vaults(); - init_vaults(); - Beta = /* @__PURE__ */ (() => { - class Beta3 extends APIResource { - constructor() { - super(...arguments); - this.models = new Models(this._client); - this.messages = new Messages(this._client); - this.agents = new Agents(this._client); - this.environments = new Environments(this._client); - this.sessions = new Sessions(this._client); - this.deployments = new Deployments(this._client); - this.deploymentRuns = new DeploymentRuns(this._client); - this.vaults = new Vaults(this._client); - this.memoryStores = new MemoryStores(this._client); - this.files = new Files(this._client); - this.skills = new Skills(this._client); - this.webhooks = new Webhooks(this._client); - this.userProfiles = new UserProfiles(this._client); - this.dreams = new Dreams(this._client); - this.tunnels = new Tunnels(this._client); - this.organization = new Organization(this._client); - } - } - Beta3.Models = Models; - Beta3.Messages = Messages; - Beta3.Agents = Agents; - Beta3.Environments = Environments; - Beta3.Sessions = Sessions; - Beta3.Deployments = Deployments; - Beta3.DeploymentRuns = DeploymentRuns; - Beta3.Vaults = Vaults; - Beta3.MemoryStores = MemoryStores; - Beta3.Files = Files; - Beta3.Skills = Skills; - Beta3.Webhooks = Webhooks; - Beta3.UserProfiles = UserProfiles; - Beta3.Dreams = Dreams; - Beta3.Tunnels = Tunnels; - Beta3.Organization = Organization; - return Beta3; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/completions.mjs -var Completions; -var init_completions = __esm({ - "node_modules/@anthropic-ai/sdk/resources/completions.mjs"() { - init_resource(); - init_headers(); - Completions = class extends APIResource { - create(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/complete", { - body, - timeout: this._client._options.timeout ?? 6e5, - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]), - stream: params.stream ?? false - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/files.mjs -var Files2; -var init_files2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/files.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_stainless_helper_header(); - init_uploads(); - init_path(); - Files2 = class extends APIResource { - /** - * List Files - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const fileMetadata of client.files.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/files", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - /** - * Delete File - * - * @example - * ```ts - * const deletedFile = await client.files.delete('file_id'); - * ``` - */ - delete(fileID, params = {}, options) { - const { workspace_id } = params ?? {}; - return this._client.delete(path2`/v1/files/${fileID}`, { - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - /** - * Download File - * - * @example - * ```ts - * const response = await client.files.download('file_id'); - * - * const content = await response.blob(); - * console.log(content); - * ``` - */ - download(fileID, params = {}, options) { - const { workspace_id } = params ?? {}; - return this._client.get(path2`/v1/files/${fileID}/content`, { - ...options, - headers: buildHeaders([ - { - Accept: "application/binary", - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]), - __binaryResponse: true - }); - } - /** - * Get File Metadata - * - * @example - * ```ts - * const fileMetadata = await client.files.retrieveMetadata( - * 'file_id', - * ); - * ``` - */ - retrieveMetadata(fileID, params = {}, options) { - const { workspace_id } = params ?? {}; - return this._client.get(path2`/v1/files/${fileID}`, { - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - /** - * Upload File - * - * @example - * ```ts - * const fileMetadata = await client.files.upload({ - * file: fs.createReadStream('path/to/file'), - * }); - * ``` - */ - upload(params, options) { - const { workspace_id, ...body } = params; - return this._client.post("/v1/files", multipartFormRequestOptions({ - body, - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - stainlessHelperHeaderFromFile(body.file), - options?.headers - ]) - }, this._client)); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/lib/parser.mjs -function getOutputFormat2(params) { - return params?.output_config?.format; -} -function maybeParseMessage(message, params, opts) { - const outputFormat = getOutputFormat2(params); - if (!params || !("parse" in (outputFormat ?? {}))) { - return { - ...message, - content: message.content.map((block) => { - if (block.type === "text") { - const parsedBlock = Object.defineProperty({ ...block }, "parsed_output", { - value: null, - enumerable: false - }); - return parsedBlock; - } - return block; - }), - parsed_output: null - }; - } - return parseMessage(message, params, opts); -} -function parseMessage(message, params, opts) { - let firstParsedOutput = null; - const content = message.content.map((block) => { - if (block.type === "text") { - const parsedOutput = parseOutputFormat(params, block.text); - if (firstParsedOutput === null) { - firstParsedOutput = parsedOutput; - } - const parsedBlock = Object.defineProperty({ ...block }, "parsed_output", { - value: parsedOutput, - enumerable: false - }); - return parsedBlock; - } - return block; - }); - return { - ...message, - content, - parsed_output: firstParsedOutput - }; -} -function parseOutputFormat(params, content) { - const outputFormat = getOutputFormat2(params); - if (outputFormat?.type !== "json_schema") { - return null; - } - try { - if ("parse" in outputFormat) { - return outputFormat.parse(content); - } - return JSON.parse(content); - } catch (error) { - throw new AnthropicError(`Failed to parse structured output: ${error}`); - } -} -var init_parser2 = __esm({ - "node_modules/@anthropic-ai/sdk/lib/parser.mjs"() { - init_error(); - } -}); - -// node_modules/@anthropic-ai/sdk/lib/MessageStream.mjs -function tracksToolInput2(content) { - return content.type === "tool_use" || content.type === "server_tool_use"; -} -var _MessageStream_instances, _MessageStream_currentMessageSnapshot, _MessageStream_params, _MessageStream_connectedPromise, _MessageStream_resolveConnectedPromise, _MessageStream_rejectConnectedPromise, _MessageStream_endPromise, _MessageStream_resolveEndPromise, _MessageStream_rejectEndPromise, _MessageStream_listeners, _MessageStream_ended, _MessageStream_errored, _MessageStream_aborted, _MessageStream_catchingPromiseCreated, _MessageStream_response, _MessageStream_request_id, _MessageStream_workspace_id, _MessageStream_logger, _MessageStream_getFinalMessage, _MessageStream_getFinalText, _MessageStream_handleError, _MessageStream_beginRequest, _MessageStream_addStreamEvent, _MessageStream_endRequest, _MessageStream_accumulateMessage, MessageStream; -var init_MessageStream = __esm({ - "node_modules/@anthropic-ai/sdk/lib/MessageStream.mjs"() { - init_tslib(); - init_stainless_helper_header(); - init_errors(); - init_values(); - init_error2(); - init_streaming2(); - init_parser2(); - init_message_stream_utils(); - MessageStream = /* @__PURE__ */ (() => { - class MessageStream2 { - constructor(params, opts) { - _MessageStream_instances.add(this); - this.messages = []; - this.receivedMessages = []; - _MessageStream_currentMessageSnapshot.set(this, void 0); - _MessageStream_params.set(this, null); - this.controller = new AbortController(); - _MessageStream_connectedPromise.set(this, void 0); - _MessageStream_resolveConnectedPromise.set(this, () => { - }); - _MessageStream_rejectConnectedPromise.set(this, () => { - }); - _MessageStream_endPromise.set(this, void 0); - _MessageStream_resolveEndPromise.set(this, () => { - }); - _MessageStream_rejectEndPromise.set(this, () => { - }); - _MessageStream_listeners.set(this, {}); - _MessageStream_ended.set(this, false); - _MessageStream_errored.set(this, false); - _MessageStream_aborted.set(this, false); - _MessageStream_catchingPromiseCreated.set(this, false); - _MessageStream_response.set(this, void 0); - _MessageStream_request_id.set(this, void 0); - _MessageStream_workspace_id.set(this, void 0); - _MessageStream_logger.set(this, void 0); - _MessageStream_handleError.set(this, (error) => { - __classPrivateFieldSet(this, _MessageStream_errored, true, "f"); - if (isAbortError(error)) { - error = new APIUserAbortError(); - } - if (error instanceof APIUserAbortError) { - __classPrivateFieldSet(this, _MessageStream_aborted, true, "f"); - return this._emit("abort", error); - } - if (error instanceof AnthropicError) { - return this._emit("error", error); - } - if (error instanceof Error) { - const anthropicError = new AnthropicError(error.message); - anthropicError.cause = error; - return this._emit("error", anthropicError); - } - return this._emit("error", new AnthropicError(String(error))); - }); - __classPrivateFieldSet(this, _MessageStream_connectedPromise, new Promise((resolve2, reject2) => { - __classPrivateFieldSet(this, _MessageStream_resolveConnectedPromise, resolve2, "f"); - __classPrivateFieldSet(this, _MessageStream_rejectConnectedPromise, reject2, "f"); - }), "f"); - __classPrivateFieldSet(this, _MessageStream_endPromise, new Promise((resolve2, reject2) => { - __classPrivateFieldSet(this, _MessageStream_resolveEndPromise, resolve2, "f"); - __classPrivateFieldSet(this, _MessageStream_rejectEndPromise, reject2, "f"); - }), "f"); - __classPrivateFieldGet(this, _MessageStream_connectedPromise, "f").catch(() => { - }); - __classPrivateFieldGet(this, _MessageStream_endPromise, "f").catch(() => { - }); - __classPrivateFieldSet(this, _MessageStream_params, params, "f"); - __classPrivateFieldSet(this, _MessageStream_logger, opts?.logger ?? console, "f"); - } - get response() { - return __classPrivateFieldGet(this, _MessageStream_response, "f"); - } - get request_id() { - return __classPrivateFieldGet(this, _MessageStream_request_id, "f"); - } - get workspace_id() { - return __classPrivateFieldGet(this, _MessageStream_workspace_id, "f"); - } - /** - * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request, - * returned vie the `request-id` header which is useful for debugging requests and resporting - * issues to Anthropic. - * - * This is the same as the `APIPromise.withResponse()` method. - * - * This method will raise an error if you created the stream using `MessageStream.fromReadableStream` - * as no `Response` is available. - */ - async withResponse() { - __classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f"); - const response = await __classPrivateFieldGet(this, _MessageStream_connectedPromise, "f"); - if (!response) { - throw new Error("Could not resolve a `Response` object"); - } - return { - data: this, - response, - request_id: response.headers.get("request-id"), - workspace_id: response.headers.get("anthropic-workspace-id") - }; - } - /** - * Intended for use on the frontend, consuming a stream produced with - * `.toReadableStream()` on the backend. - * - * Note that messages sent to the model do not appear in `.on('message')` - * in this context. - */ - static fromReadableStream(stream5) { - const runner = new MessageStream2(null); - runner._run(() => runner._fromReadableStream(stream5)); - return runner; - } - static createMessage(messages, params, options, { logger } = {}) { - const runner = new MessageStream2(params, { logger }); - for (const message of params.messages) { - runner._addMessageParam(message); - } - __classPrivateFieldSet(runner, _MessageStream_params, { ...params, stream: true }, "f"); - runner._run(() => runner._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, [STAINLESS_HELPER_METHOD_HEADER]: "stream" } })); - return runner; - } - _run(executor) { - executor().then(() => { - this._emitFinal(); - this._emit("end"); - }, __classPrivateFieldGet(this, _MessageStream_handleError, "f")); - } - _addMessageParam(message) { - this.messages.push(message); - } - _addMessage(message, emit2 = true) { - this.receivedMessages.push(message); - if (emit2) { - this._emit("message", message); - } - } - async _createMessage(messages, params, options) { - const signal = options?.signal; - let abortHandler; - if (signal) { - if (signal.aborted) - this.controller.abort(); - abortHandler = this.controller.abort.bind(this.controller); - signal.addEventListener("abort", abortHandler); - } - try { - __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_beginRequest).call(this); - const { response, data: stream5 } = await messages.create({ ...params, stream: true }, { ...options, signal: this.controller.signal }).withResponse(); - this._connected(response); - for await (const event of stream5) { - __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event); - } - if (stream5.controller.signal?.aborted) { - throw new APIUserAbortError(); - } - __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this); - } finally { - if (signal && abortHandler) { - signal.removeEventListener("abort", abortHandler); - } - } - } - _connected(response) { - if (this.ended) - return; - __classPrivateFieldSet(this, _MessageStream_response, response, "f"); - __classPrivateFieldSet(this, _MessageStream_request_id, response?.headers.get("request-id"), "f"); - __classPrivateFieldSet(this, _MessageStream_workspace_id, response?.headers.get("anthropic-workspace-id"), "f"); - __classPrivateFieldGet(this, _MessageStream_resolveConnectedPromise, "f").call(this, response); - this._emit("connect"); - } - get ended() { - return __classPrivateFieldGet(this, _MessageStream_ended, "f"); - } - get errored() { - return __classPrivateFieldGet(this, _MessageStream_errored, "f"); - } - get aborted() { - return __classPrivateFieldGet(this, _MessageStream_aborted, "f"); - } - abort() { - this.controller.abort(); - } - /** - * Adds the listener function to the end of the listeners array for the event. - * No checks are made to see if the listener has already been added. Multiple calls passing - * the same combination of event and listener will result in the listener being added, and - * called, multiple times. - * @returns this MessageStream, so that calls can be chained - */ - on(event, listener) { - const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = []); - listeners.push({ listener }); - return this; - } - /** - * Removes the specified listener from the listener array for the event. - * off() will remove, at most, one instance of a listener from the listener array. If any single - * listener has been added multiple times to the listener array for the specified event, then - * off() must be called multiple times to remove each instance. - * @returns this MessageStream, so that calls can be chained - */ - off(event, listener) { - const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event]; - if (!listeners) - return this; - const index = listeners.findIndex((l) => l.listener === listener); - if (index >= 0) - listeners.splice(index, 1); - return this; - } - /** - * Adds a one-time listener function for the event. The next time the event is triggered, - * this listener is removed and then invoked. - * @returns this MessageStream, so that calls can be chained - */ - once(event, listener) { - const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = []); - listeners.push({ listener, once: true }); - return this; - } - /** - * This is similar to `.once()`, but returns a Promise that resolves the next time - * the event is triggered, instead of calling a listener callback. - * @returns a Promise that resolves the next time given event is triggered, - * or rejects if an error is emitted. (If you request the 'error' event, - * returns a promise that resolves with the error). - * - * Example: - * - * const message = await stream.emitted('message') // rejects if the stream errors - */ - emitted(event) { - return new Promise((resolve2, reject2) => { - __classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f"); - if (event !== "error") - this.once("error", reject2); - this.once(event, resolve2); - }); - } - async done() { - __classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f"); - await __classPrivateFieldGet(this, _MessageStream_endPromise, "f"); - } - get currentMessage() { - return __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f"); - } - /** - * @returns a promise that resolves with the the final assistant Message response, - * or rejects if an error occurred or the stream ended prematurely without producing a Message. - * If structured outputs were used, this will be a ParsedMessage with a `parsed_output` field. - */ - async finalMessage() { - await this.done(); - return __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this); - } - /** - * @returns a promise that resolves with the the final assistant Message's text response, concatenated - * together if there are more than one text blocks. - * Rejects if an error occurred or the stream ended prematurely without producing a Message. - */ - async finalText() { - await this.done(); - return __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalText).call(this); - } - _emit(event, ...args) { - if (__classPrivateFieldGet(this, _MessageStream_ended, "f")) - return; - if (event === "end") { - __classPrivateFieldSet(this, _MessageStream_ended, true, "f"); - __classPrivateFieldGet(this, _MessageStream_resolveEndPromise, "f").call(this); - } - const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event]; - if (listeners) { - __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = listeners.filter((l) => !l.once); - listeners.forEach(({ listener }) => listener(...args)); - } - if (event === "abort") { - const error = args[0]; - if (!__classPrivateFieldGet(this, _MessageStream_catchingPromiseCreated, "f") && !listeners?.length) { - Promise.reject(error); - } - __classPrivateFieldGet(this, _MessageStream_rejectConnectedPromise, "f").call(this, error); - __classPrivateFieldGet(this, _MessageStream_rejectEndPromise, "f").call(this, error); - this._emit("end"); - return; - } - if (event === "error") { - const error = args[0]; - if (!__classPrivateFieldGet(this, _MessageStream_catchingPromiseCreated, "f") && !listeners?.length) { - Promise.reject(error); - } - __classPrivateFieldGet(this, _MessageStream_rejectConnectedPromise, "f").call(this, error); - __classPrivateFieldGet(this, _MessageStream_rejectEndPromise, "f").call(this, error); - this._emit("end"); - } - } - _emitFinal() { - const finalMessage = this.receivedMessages.at(-1); - if (finalMessage) { - this._emit("finalMessage", __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this)); - } - } - async _fromReadableStream(readableStream, options) { - const signal = options?.signal; - let abortHandler; - if (signal) { - if (signal.aborted) - this.controller.abort(); - abortHandler = this.controller.abort.bind(this.controller); - signal.addEventListener("abort", abortHandler); - } - try { - __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_beginRequest).call(this); - this._connected(null); - const stream5 = Stream.fromReadableStream(readableStream, this.controller); - for await (const event of stream5) { - __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event); - } - if (stream5.controller.signal?.aborted) { - throw new APIUserAbortError(); - } - __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this); - } finally { - if (signal && abortHandler) { - signal.removeEventListener("abort", abortHandler); - } - } - } - [(_MessageStream_currentMessageSnapshot = /* @__PURE__ */ new WeakMap(), _MessageStream_params = /* @__PURE__ */ new WeakMap(), _MessageStream_connectedPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_resolveConnectedPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_rejectConnectedPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_endPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_resolveEndPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_rejectEndPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_listeners = /* @__PURE__ */ new WeakMap(), _MessageStream_ended = /* @__PURE__ */ new WeakMap(), _MessageStream_errored = /* @__PURE__ */ new WeakMap(), _MessageStream_aborted = /* @__PURE__ */ new WeakMap(), _MessageStream_catchingPromiseCreated = /* @__PURE__ */ new WeakMap(), _MessageStream_response = /* @__PURE__ */ new WeakMap(), _MessageStream_request_id = /* @__PURE__ */ new WeakMap(), _MessageStream_workspace_id = /* @__PURE__ */ new WeakMap(), _MessageStream_logger = /* @__PURE__ */ new WeakMap(), _MessageStream_handleError = /* @__PURE__ */ new WeakMap(), _MessageStream_instances = /* @__PURE__ */ new WeakSet(), _MessageStream_getFinalMessage = function _MessageStream_getFinalMessage2() { - if (this.receivedMessages.length === 0) { - throw new AnthropicError("stream ended without producing a Message with role=assistant"); - } - return this.receivedMessages.at(-1); - }, _MessageStream_getFinalText = function _MessageStream_getFinalText2() { - if (this.receivedMessages.length === 0) { - throw new AnthropicError("stream ended without producing a Message with role=assistant"); - } - const textBlocks = this.receivedMessages.at(-1).content.filter((block) => block.type === "text").map((block) => block.text); - if (textBlocks.length === 0) { - throw new AnthropicError("stream ended without producing a content block with type=text"); - } - return textBlocks.join(" "); - }, _MessageStream_beginRequest = function _MessageStream_beginRequest2() { - if (this.ended) - return; - __classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, void 0, "f"); - }, _MessageStream_addStreamEvent = function _MessageStream_addStreamEvent2(event) { - if (this.ended) - return; - const messageSnapshot = __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_accumulateMessage).call(this, event); - this._emit("streamEvent", event, messageSnapshot); - switch (event.type) { - case "content_block_delta": { - const content = messageSnapshot.content.at(-1); - switch (event.delta.type) { - case "text_delta": { - if (content.type === "text") { - this._emit("text", event.delta.text, content.text || ""); - } - break; - } - case "citations_delta": { - if (content.type === "text") { - this._emit("citation", event.delta.citation, content.citations ?? []); - } - break; - } - case "input_json_delta": { - if (tracksToolInput2(content) && __classPrivateFieldGet(this, _MessageStream_listeners, "f").inputJson?.length) { - this._emit("inputJson", event.delta.partial_json, content.input); - } - break; - } - case "thinking_delta": { - if (content.type === "thinking") { - this._emit("thinking", event.delta.thinking, content.thinking); - } - break; - } - case "signature_delta": { - if (content.type === "thinking") { - this._emit("signature", content.signature); - } - break; - } - default: - checkNever(event.delta); - } - break; - } - case "message_stop": { - this._addMessageParam(messageSnapshot); - this._addMessage(maybeParseMessage(messageSnapshot, __classPrivateFieldGet(this, _MessageStream_params, "f"), { logger: __classPrivateFieldGet(this, _MessageStream_logger, "f") }), true); - break; - } - case "content_block_stop": { - this._emit("contentBlock", messageSnapshot.content.at(-1)); - break; - } - case "message_start": { - __classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, messageSnapshot, "f"); - break; - } - case "content_block_start": - case "message_delta": - break; - } - }, _MessageStream_endRequest = function _MessageStream_endRequest2() { - if (this.ended) { - throw new AnthropicError(`stream has ended, this shouldn't happen`); - } - const snapshot = __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f"); - if (!snapshot) { - throw new AnthropicError(`request ended without sending any chunks`); - } - __classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, void 0, "f"); - return maybeParseMessage(snapshot, __classPrivateFieldGet(this, _MessageStream_params, "f"), { logger: __classPrivateFieldGet(this, _MessageStream_logger, "f") }); - }, _MessageStream_accumulateMessage = function _MessageStream_accumulateMessage2(event) { - let snapshot = __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f"); - if (event.type === "message_start") { - if (snapshot) { - throw new AnthropicError(`Unexpected event order, got ${event.type} before receiving "message_stop"`); - } - return event.message; - } - if (!snapshot) { - throw new AnthropicError(`Unexpected event order, got ${event.type} before "message_start"`); - } - switch (event.type) { - case "message_stop": - return snapshot; - case "message_delta": - snapshot.stop_reason = event.delta.stop_reason; - snapshot.stop_sequence = event.delta.stop_sequence; - snapshot.stop_details = event.delta.stop_details; - snapshot.usage.output_tokens = event.usage.output_tokens; - if (event.delta.container != null) { - snapshot.container = event.delta.container; - } - if (event.usage.input_tokens != null) { - snapshot.usage.input_tokens = event.usage.input_tokens; - } - if (event.usage.cache_creation_input_tokens != null) { - snapshot.usage.cache_creation_input_tokens = event.usage.cache_creation_input_tokens; - } - if (event.usage.cache_read_input_tokens != null) { - snapshot.usage.cache_read_input_tokens = event.usage.cache_read_input_tokens; - } - if (event.usage.server_tool_use != null) { - snapshot.usage.server_tool_use = event.usage.server_tool_use; - } - if (event.usage.output_tokens_details != null) { - snapshot.usage.output_tokens_details = event.usage.output_tokens_details; - } - return snapshot; - case "content_block_start": - snapshot.content.push({ ...event.content_block }); - return snapshot; - case "content_block_delta": { - const snapshotContent = snapshot.content.at(event.index); - switch (event.delta.type) { - case "text_delta": { - if (snapshotContent?.type === "text") { - snapshot.content[event.index] = { - ...snapshotContent, - text: (snapshotContent.text || "") + event.delta.text - }; - } - break; - } - case "citations_delta": { - if (snapshotContent?.type === "text") { - snapshot.content[event.index] = { - ...snapshotContent, - citations: [...snapshotContent.citations ?? [], event.delta.citation] - }; - } - break; - } - case "input_json_delta": { - if (snapshotContent && tracksToolInput2(snapshotContent)) { - const jsonBuf = (snapshotContent[JSON_BUF_PROPERTY] || "") + event.delta.partial_json; - snapshot.content[event.index] = withLazyInput(snapshotContent, jsonBuf); - } - break; - } - case "thinking_delta": { - if (snapshotContent?.type === "thinking") { - snapshot.content[event.index] = { - ...snapshotContent, - thinking: snapshotContent.thinking + event.delta.thinking - }; - } - break; - } - case "signature_delta": { - if (snapshotContent?.type === "thinking") { - snapshot.content[event.index] = { - ...snapshotContent, - signature: event.delta.signature - }; - } - break; - } - default: - checkNever(event.delta); - } - return snapshot; - } - case "content_block_stop": { - const snapshotContent = snapshot.content.at(event.index); - if (snapshotContent && tracksToolInput2(snapshotContent) && JSON_BUF_PROPERTY in snapshotContent) { - Object.defineProperty(snapshotContent, "input", { - value: snapshotContent.input, - enumerable: true, - configurable: true, - writable: true - }); - } - return snapshot; - } - } - }, Symbol.asyncIterator)]() { - const pushQueue = []; - const readQueue = []; - let done = false; - this.on("streamEvent", (event) => { - const reader = readQueue.shift(); - if (reader) { - reader.resolve(event); - } else { - pushQueue.push(event); - } - }); - this.on("end", () => { - done = true; - for (const reader of readQueue) { - reader.resolve(void 0); - } - readQueue.length = 0; - }); - this.on("abort", (err) => { - done = true; - for (const reader of readQueue) { - reader.reject(err); - } - readQueue.length = 0; - }); - this.on("error", (err) => { - done = true; - for (const reader of readQueue) { - reader.reject(err); - } - readQueue.length = 0; - }); - return { - next: async () => { - if (!pushQueue.length) { - if (done) { - return { value: void 0, done: true }; - } - return new Promise((resolve2, reject2) => readQueue.push({ resolve: resolve2, reject: reject2 })).then((chunk2) => chunk2 ? { value: chunk2, done: false } : { value: void 0, done: true }); - } - const chunk = pushQueue.shift(); - return { value: chunk, done: false }; - }, - return: async () => { - this.abort(); - return { value: void 0, done: true }; - } - }; - } - toReadableStream() { - const stream5 = new Stream(this[Symbol.asyncIterator].bind(this), this.controller); - return stream5.toReadableStream(); - } - } - return MessageStream2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/messages/batches.mjs -var Batches2; -var init_batches2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/messages/batches.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_jsonl(); - init_error2(); - init_path(); - Batches2 = class extends APIResource { - /** - * Send a batch of Message creation requests. - * - * The Message Batches API can be used to process multiple Messages API requests at - * once. Once a Message Batch is created, it begins processing immediately. Batches - * can take up to 24 hours to complete. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * const messageBatch = await client.messages.batches.create({ - * requests: [ - * { - * custom_id: 'my-custom-id-1', - * params: { - * max_tokens: 1024, - * messages: [ - * { content: 'Hello, world', role: 'user' }, - * ], - * model: 'claude-opus-5', - * }, - * }, - * ], - * }); - * ``` - */ - create(params, options) { - const { user_profile_id, workspace_id, ...body } = params; - return this._client.post("/v1/messages/batches", { - body, - ...options, - headers: buildHeaders([ - { - ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * This endpoint is idempotent and can be used to poll for Message Batch - * completion. To access the results of a Message Batch, make a request to the - * `results_url` field in the response. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * const messageBatch = await client.messages.batches.retrieve( - * 'message_batch_id', - * ); - * ``` - */ - retrieve(messageBatchID, params = {}, options) { - const { workspace_id } = params ?? {}; - return this._client.get(path2`/v1/messages/batches/${messageBatchID}`, { - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - /** - * List all Message Batches within a Workspace. Most recently created batches are - * returned first. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const messageBatch of client.messages.batches.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/messages/batches", Page, { - query, - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - /** - * Delete a Message Batch. - * - * Message Batches can only be deleted once they've finished processing. If you'd - * like to delete an in-progress batch, you must first cancel it. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * const deletedMessageBatch = - * await client.messages.batches.delete('message_batch_id'); - * ``` - */ - delete(messageBatchID, params = {}, options) { - const { workspace_id } = params ?? {}; - return this._client.delete(path2`/v1/messages/batches/${messageBatchID}`, { - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - /** - * Batches may be canceled any time before processing ends. Once cancellation is - * initiated, the batch enters a `canceling` state, at which time the system may - * complete any in-progress, non-interruptible requests before finalizing - * cancellation. - * - * The number of canceled requests is specified in `request_counts`. To determine - * which requests were canceled, check the individual results within the batch. - * Note that cancellation may not result in any canceled requests if they were - * non-interruptible. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * const messageBatch = await client.messages.batches.cancel( - * 'message_batch_id', - * ); - * ``` - */ - cancel(messageBatchID, params = {}, options) { - const { workspace_id } = params ?? {}; - return this._client.post(path2`/v1/messages/batches/${messageBatchID}/cancel`, { - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - /** - * Streams the results of a Message Batch as a `.jsonl` file. - * - * Each line in the file is a JSON object containing the result of a single request - * in the Message Batch. Results are not guaranteed to be in the same order as - * requests. Use the `custom_id` field to match results to requests. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * const messageBatchIndividualResponse = - * await client.messages.batches.results('message_batch_id'); - * ``` - */ - async results(messageBatchID, params = {}, options) { - const batch = await this.retrieve(messageBatchID, params, options); - if (!batch.results_url) { - throw new AnthropicError(`No batch \`results_url\`; Has it finished processing? ${batch.processing_status} - ${batch.id}`); - } - const { workspace_id } = params ?? {}; - return this._client.get(batch.results_url, { - ...options, - headers: buildHeaders([ - { - Accept: "application/binary", - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]), - stream: true, - __binaryResponse: true - })._thenUnwrap((_, props) => JSONLDecoder.fromResponse(props.response, props.controller)); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/messages/messages.mjs -var Messages2, DEPRECATED_MODELS2, MODELS_TO_WARN_WITH_THINKING_ENABLED2; -var init_messages2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/messages/messages.mjs"() { - init_resource(); - init_headers(); - init_stainless_helper_header(); - init_MessageStream(); - init_parser2(); - init_batches2(); - init_batches2(); - init_constants(); - Messages2 = /* @__PURE__ */ (() => { - class Messages5 extends APIResource { - constructor() { - super(...arguments); - this.batches = new Batches2(this._client); - } - create(params, options) { - const { user_profile_id, workspace_id, ...body } = params; - if (body.model in DEPRECATED_MODELS2) { - console.warn(`The model '${body.model}' is deprecated and will reach end-of-life on ${DEPRECATED_MODELS2[body.model]} -Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`); - } - if (MODELS_TO_WARN_WITH_THINKING_ENABLED2.includes(body.model) && body.thinking && body.thinking.type === "enabled") { - console.warn(`Using Claude with ${body.model} and 'thinking.type=enabled' is deprecated. Use 'thinking.type=adaptive' instead which results in better model performance in our testing: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking`); - } - let timeout = options?.timeout ?? this._client._options.timeout; - if (!body.stream && timeout == null) { - const maxNonstreamingTokens = MODEL_NONSTREAMING_TOKENS[body.model] ?? void 0; - timeout = this._client.calculateNonstreamingTimeout(body.max_tokens, maxNonstreamingTokens); - } - const helperHeader2 = stainlessHelperHeader(body.tools, body.messages); - return this._client.post("/v1/messages", { - body, - timeout: timeout ?? 6e5, - ...options, - headers: buildHeaders([ - { - ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - helperHeader2, - options?.headers - ]), - stream: params.stream ?? false - }); - } - /** - * Send a structured list of input messages with text and/or image content, along with an expected `output_config.format` and - * the response will be automatically parsed and available in the `parsed_output` property of the message. - * - * @example - * ```ts - * const message = await client.messages.parse({ - * model: 'claude-sonnet-4-5-20250929', - * max_tokens: 1024, - * messages: [{ role: 'user', content: 'What is 2+2?' }], - * output_config: { - * format: zodOutputFormat(z.object({ answer: z.number() })), - * }, - * }); - * - * console.log(message.parsed_output?.answer); // 4 - * ``` - */ - parse(params, options) { - return this.create(params, options).then((message) => parseMessage(message, params, { logger: this._client.logger ?? console })); - } - /** - * Create a Message stream. - * - * If `output_config.format` is provided with a parseable format (like `zodOutputFormat()`), - * the final message will include a `parsed_output` property with the parsed content. - * - * @example - * ```ts - * const stream = client.messages.stream({ - * model: 'claude-sonnet-4-5-20250929', - * max_tokens: 1024, - * messages: [{ role: 'user', content: 'What is 2+2?' }], - * output_config: { - * format: zodOutputFormat(z.object({ answer: z.number() })), - * }, - * }); - * - * const message = await stream.finalMessage(); - * console.log(message.parsed_output?.answer); // 4 - * ``` - */ - stream(body, options) { - return MessageStream.createMessage(this, body, options, { logger: this._client.logger ?? console }); - } - /** - * Count the number of tokens in a Message. - * - * The Token Count API can be used to count the number of tokens in a Message, - * including tools, images, and documents, without creating it. - * - * Learn more about token counting in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/token-counting) - * - * @example - * ```ts - * const messageTokensCount = - * await client.messages.countTokens({ - * messages: [{ content: 'Hello, world', role: 'user' }], - * model: 'claude-opus-5', - * }); - * ``` - */ - countTokens(params, options) { - const { user_profile_id, workspace_id, ...body } = params; - return this._client.post("/v1/messages/count_tokens", { - body, - ...options, - headers: buildHeaders([ - { - ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - } - Messages5.Batches = Batches2; - return Messages5; - })(); - DEPRECATED_MODELS2 = {}; - MODELS_TO_WARN_WITH_THINKING_ENABLED2 = ["claude-mythos-preview", "claude-opus-4-6"]; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/models.mjs -var Models2; -var init_models3 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/models.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Models2 = class extends APIResource { - /** - * Get a specific model. - * - * The Models API response can be used to determine information about a specific - * model or resolve a model alias to a model ID. - * - * @example - * ```ts - * const modelInfo = await client.models.retrieve('model_id'); - * ``` - */ - retrieve(modelID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/models/${modelID}`, { - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List available models. - * - * The Models API response can be used to determine which models are available for - * use in the API. More recently released models are listed first. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const modelInfo of client.models.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/models", Page, { - query, - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/skills/versions.mjs -var Versions3; -var init_versions3 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/skills/versions.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_uploads(); - init_path(); - Versions3 = class extends APIResource { - /** - * Create Skill Version - * - * @example - * ```ts - * const skillVersion = await client.skills.versions.create( - * 'skill_id', - * { files: [fs.createReadStream('path/to/file')] }, - * ); - * ``` - */ - create(skillID, params, options) { - const { workspace_id, ...body } = params; - return this._client.post(path2`/v1/skills/${skillID}/versions`, multipartFormRequestOptions({ - body, - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }, this._client, false)); - } - /** - * Get Skill Version - * - * @example - * ```ts - * const skillVersion = await client.skills.versions.retrieve( - * 'version', - * { skill_id: 'skill_id' }, - * ); - * ``` - */ - retrieve(version, params, options) { - const { skill_id, workspace_id } = params; - return this._client.get(path2`/v1/skills/${skill_id}/versions/${version}`, { - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - /** - * List Skill Versions - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const skillVersion of client.skills.versions.list( - * 'skill_id', - * )) { - * // ... - * } - * ``` - */ - list(skillID, params = {}, options) { - const { workspace_id, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/skills/${skillID}/versions`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - /** - * Delete Skill Version - * - * @example - * ```ts - * const deletedSkillVersion = - * await client.skills.versions.delete('version', { - * skill_id: 'skill_id', - * }); - * ``` - */ - delete(version, params, options) { - const { skill_id, workspace_id } = params; - return this._client.delete(path2`/v1/skills/${skill_id}/versions/${version}`, { - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/skills/skills.mjs -var Skills2; -var init_skills2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/skills/skills.mjs"() { - init_resource(); - init_versions3(); - init_versions3(); - init_pagination(); - init_headers(); - init_uploads(); - init_path(); - Skills2 = /* @__PURE__ */ (() => { - class Skills4 extends APIResource { - constructor() { - super(...arguments); - this.versions = new Versions3(this._client); - } - /** - * Create Skill - * - * @example - * ```ts - * const skill = await client.skills.create({ - * files: [fs.createReadStream('path/to/file')], - * }); - * ``` - */ - create(params, options) { - const { workspace_id, ...body } = params; - return this._client.post("/v1/skills", multipartFormRequestOptions({ - body, - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }, this._client, false)); - } - /** - * Get Skill - * - * @example - * ```ts - * const skill = await client.skills.retrieve('skill_id'); - * ``` - */ - retrieve(skillID, params = {}, options) { - const { workspace_id } = params ?? {}; - return this._client.get(path2`/v1/skills/${skillID}`, { - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - /** - * List Skills - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const skill of client.skills.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/skills", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - /** - * Delete Skill - * - * @example - * ```ts - * const deletedSkill = await client.skills.delete('skill_id'); - * ``` - */ - delete(skillID, params = {}, options) { - const { workspace_id } = params ?? {}; - return this._client.delete(path2`/v1/skills/${skillID}`, { - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - } - Skills4.Versions = Versions3; - return Skills4; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/index.mjs -var init_resources2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/index.mjs"() { - init_shared(); - init_beta(); - init_completions(); - init_files2(); - init_messages2(); - init_models3(); - init_skills2(); - } -}); - -// node_modules/@anthropic-ai/sdk/client.mjs -var _BaseAnthropic_instances, _a, _BaseAnthropic_encoder, _BaseAnthropic_baseURLOverridden, HUMAN_PROMPT, AI_PROMPT, BaseAnthropic, Anthropic; -var init_client = __esm({ - "node_modules/@anthropic-ai/sdk/client.mjs"() { - init_tslib(); - init_values(); - init_sleep(); - init_errors(); - init_detect_platform(); - init_request_signal(); - init_shims(); - init_request_options(); - init_query(); - init_version2(); - init_error(); - init_types(); - init_token_cache(); - init_credential_chain(); - init_middleware(); - init_pagination(); - init_uploads2(); - init_resources2(); - init_api_promise(); - init_completions(); - init_files2(); - init_models3(); - init_beta(); - init_messages2(); - init_skills2(); - init_detect_platform(); - init_headers(); - init_env(); - init_log(); - init_values(); - HUMAN_PROMPT = "\\n\\nHuman:"; - AI_PROMPT = "\\n\\nAssistant:"; - BaseAnthropic = /* @__PURE__ */ (() => { - class BaseAnthropic2 { - /** - * The active credential provider. Default credential resolution runs once - * at construction time. If it fails, the error is surfaced on every - * request and the client must be reconstructed — there is no retry path. - * - * Clones returned by {@link withOptions} share the parent's auth state - * (provider, token cache, pending resolution, and any resolution error) - * unless the caller passes an explicit `apiKey`, `authToken`, - * `credentials`, `config`, or `profile` override. - */ - get credentials() { - return this._authState.provider; - } - /** - * API Client for interfacing with the Anthropic API. - * - * @param {string | null | undefined} [opts.apiKey=process.env['ANTHROPIC_API_KEY'] ?? null] - * @param {string | null | undefined} [opts.authToken=process.env['ANTHROPIC_AUTH_TOKEN'] ?? null] - * @param {string | null | undefined} [opts.webhookKey=process.env['ANTHROPIC_WEBHOOK_SIGNING_KEY'] ?? null] - * @param {string} [opts.baseURL=process.env['ANTHROPIC_BASE_URL'] ?? https://api.anthropic.com] - Override the default base URL for the API. - * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out. - * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls. - * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation. - * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request. - * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API. - * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API. - * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers. - */ - constructor({ baseURL = readEnv("ANTHROPIC_BASE_URL"), apiKey, authToken, webhookKey = readEnv("ANTHROPIC_WEBHOOK_SIGNING_KEY") ?? null, ...opts } = {}) { - _BaseAnthropic_instances.add(this); - this._requestAuthFlags = /* @__PURE__ */ new WeakMap(); - _BaseAnthropic_encoder.set(this, void 0); - if (apiKey === void 0) { - apiKey = opts.profile != null ? null : readEnv("ANTHROPIC_API_KEY") ?? null; - } - if (authToken === void 0) { - authToken = opts.profile != null ? null : readEnv("ANTHROPIC_AUTH_TOKEN") ?? null; - } - if (opts.profile != null && (opts.credentials != null || opts.config != null)) { - throw new TypeError("Pass at most one of `profile`, `credentials`, or `config`."); - } - const options = { - apiKey, - authToken, - webhookKey, - ...opts, - baseURL: baseURL || `https://api.anthropic.com` - }; - if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) { - throw new AnthropicError("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew Anthropic({ apiKey, dangerouslyAllowBrowser: true });\n"); - } - this.baseURL = options.baseURL; - this._baseURLIsExplicit = opts.__baseURLIsExplicit ?? !!baseURL; - this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT; - this.logger = options.logger ?? console; - this.logLevel = defaultLogLevel; - this.logLevel = parseLogLevel(options.logLevel, "ClientOptions.logLevel", loggerFor(this)) ?? parseLogLevel(readEnv("ANTHROPIC_LOG"), "process.env['ANTHROPIC_LOG']", loggerFor(this)) ?? defaultLogLevel; - this.fetchOptions = options.fetchOptions; - this.maxRetries = validatePositiveInteger("maxRetries", options.maxRetries ?? 2); - this.fetch = options.fetch ?? getDefaultFetch(); - __classPrivateFieldSet(this, _BaseAnthropic_encoder, FallbackEncoder, "f"); - this.middleware = [...options.middleware ?? []]; - const customHeadersEnv = readEnv("ANTHROPIC_CUSTOM_HEADERS"); - if (customHeadersEnv) { - const parsed = {}; - for (const line of customHeadersEnv.split("\n")) { - const colon = line.indexOf(":"); - if (colon >= 0) { - parsed[line.substring(0, colon).trim()] = line.substring(colon + 1).trim(); - } - } - options.defaultHeaders = { ...parsed, ...options.defaultHeaders }; - } - const inherited = opts.__auth; - delete options.__auth; - delete options.__baseURLIsExplicit; - this._options = options; - this.apiKey = typeof apiKey === "string" ? apiKey : null; - this.authToken = authToken; - this.webhookKey = webhookKey; - if (inherited) { - this._authState = inherited; - if (!this._baseURLIsExplicit && inherited.baseURL) { - this.baseURL = inherited.baseURL; - } - } else { - this._authState = { provider: null, tokenCache: null, resolution: null, error: null, extraHeaders: {} }; - if (this.apiKey == null && this.authToken == null) { - const credentials = options.credentials ?? null; - if (credentials) { - this._authState.provider = credentials; - this._authState.tokenCache = this._makeTokenCache(credentials); - } else if (options.config != null) { - const result = resolveCredentialsFromConfig(options.config, this._credentialResolverOptions()); - this._authState.provider = result.provider; - this._authState.tokenCache = this._makeTokenCache(result.provider); - this._authState.extraHeaders = result.extraHeaders; - this._applyCredentialBaseURL(result.baseURL); - } else if (options.profile != null) { - this._authState.resolution = this._resolveDefaultCredentials(options.profile); - } else if (this._shouldResolveDefaultCredentials()) { - this._authState.resolution = this._resolveDefaultCredentials(); - } - } - } - } - /** - * Whether to lazily resolve auth from the default credential chain when no - * explicit auth is configured. Called once from the constructor, so - * overrides must not depend on subclass instance state. Subclasses that - * bring their own auth scheme return false so unrelated local credentials - * are never resolved or allowed to supply a base URL. - */ - _shouldResolveDefaultCredentials() { - return true; - } - /** - * Stores a profile/config-supplied base URL on the shared auth state and, if - * the caller did not pin `baseURL` via constructor option or env, adopts it - * as this client's outbound API host. Precedence: ctor opt > env > profile > - * hardcoded default. - */ - _applyCredentialBaseURL(baseURL) { - if (!baseURL) - return; - const normalized = baseURL.replace(/\/+$/, ""); - this._authState.baseURL = normalized; - if (!this._baseURLIsExplicit) { - this.baseURL = normalized; - } - } - /** - * Options bag passed into the credential chain. `baseURL` here is only the - * fallback host for the token-exchange POST when the config itself omits - * `base_url`; the chain returns the config's own `base_url` (if any) on - * {@link CredentialResult.baseURL}, which {@link _applyCredentialBaseURL} - * then adopts for outbound API requests. The two are deliberately decoupled - * so this fallback never round-trips into precedence. - */ - _credentialResolverOptions() { - return { - baseURL: this.baseURL, - fetch: this._credentialsFetch(), - userAgent: this.getUserAgent(), - onCacheWriteError: (err) => { - loggerFor(this).debug("credential cache write failed (best-effort)", err); - }, - onSafetyWarning: (msg) => { - loggerFor(this).warn(msg); - } - }; - } - /** - * A `Fetch` for first-party credential token-exchange requests (OIDC - * federation jwt-bearer grants, user-OAuth refresh grants) that routes - * through this client's middleware chain, so middleware observes token - * traffic like any other request. Only client-level middleware applies: - * a minted token is shared across requests, so attributing the exchange - * to any one request's per-request middleware would be arbitrary. For the - * same reason, `ctx.options` is undefined for these requests. - */ - _credentialsFetch() { - return wrapFetchWithMiddleware(this.fetch, this.middleware, void 0, this); - } - _makeTokenCache(provider2) { - return new TokenCache(provider2, (err) => { - loggerFor(this).debug("advisory token refresh failed; serving cached token", err); - }); - } - /** - * Create a new client instance re-using the same options given to the - * current client with optional overriding. - */ - withOptions(options) { - const overridesStructuredAuth = "credentials" in options || "config" in options || "profile" in options; - const overridesAuth = "apiKey" in options || "authToken" in options || overridesStructuredAuth; - const internal = { - ...this._options, - // Only forward baseURL when the caller (or env) explicitly chose it. - // For a non-explicit parent, this.baseURL may have been mutated to the - // profile-resolved host; pinning that as the clone's options.baseURL - // would make _options on the clone misreport caller intent and would - // leave the clone stuck on the parent's host across an auth override. - // The clone instead receives the construction-time value via - // ...this._options above and re-adopts the profile host through the - // shared _authState.baseURL + __baseURLIsExplicit=false path. - ...this._baseURLIsExplicit ? { baseURL: this.baseURL } : {}, - maxRetries: this.maxRetries, - timeout: this.timeout, - logger: this.logger, - logLevel: this.logLevel, - fetch: this.fetch, - fetchOptions: this.fetchOptions, - middleware: this.middleware, - apiKey: this.apiKey, - authToken: this.authToken, - webhookKey: this.webhookKey, - // credentials: this.credentials is a no-op when __auth is shared (the - // ctor takes the inherited path and ignores options.credentials); when - // overridesAuth is true via apiKey/authToken only, it lets the clone - // build a fresh TokenCache around the parent's provider. - credentials: this.credentials, - // When the caller passes a structured-credential override, drop inherited - // structured-credential options so only `...options` supplies them — - // otherwise an inherited `credentials`/`config`/`profile` would trip the - // mutual-exclusion check or precedence over the override. - ...overridesStructuredAuth ? { credentials: void 0, config: void 0, profile: void 0 } : {}, - ...options, - // Always set __auth so any stale value from ...this._options is - // overwritten. undefined means "build fresh auth from these options". - __auth: overridesAuth ? void 0 : this._authState, - __baseURLIsExplicit: "baseURL" in options ? true : this._baseURLIsExplicit - }; - return new this.constructor(internal); - } - /** - * Lazily resolves credentials from config files or environment variables. - * Called once from the constructor when no explicit auth is provided, or - * when an explicit `profile` was passed (in which case a missing/unresolved - * profile is surfaced as an error instead of falling through to "no auth"). - * The returned promise is stored and awaited on the first request. - */ - async _resolveDefaultCredentials(profile) { - try { - const result = await defaultCredentials(this._credentialResolverOptions(), profile); - if (result) { - this._authState.provider = result.provider; - this._authState.tokenCache = this._makeTokenCache(result.provider); - this._authState.extraHeaders = result.extraHeaders; - this._applyCredentialBaseURL(result.baseURL); - } else if (profile != null) { - throw new AnthropicError(`Profile "${profile}" could not be resolved (no /configs/${profile}.json found).`); - } - } catch (err) { - this._authState.error = err; - } finally { - this._authState.resolution = null; - } - } - defaultQuery() { - return this._options.defaultQuery; - } - validateHeaders({ values, nulls }) { - if (values.get("x-api-key") || values.get("authorization")) { - return; - } - if (this._authState.error) { - throw this._authState.error; - } - if (this._authState.tokenCache || this._authState.resolution) { - return; - } - if (this.apiKey && values.get("x-api-key")) { - return; - } - if (nulls.has("x-api-key")) { - return; - } - if (this.authToken && values.get("authorization")) { - return; - } - if (nulls.has("authorization")) { - return; - } - throw new Error('Could not resolve authentication method. Expected one of apiKey, authToken, credentials, config, or profile to be set. Or for one of the "X-Api-Key" or "Authorization" headers to be explicitly omitted'); - } - _authFlags(opts) { - let flags = this._requestAuthFlags.get(opts); - if (!flags) { - flags = { usedTokenCache: false, didRefreshFor401: false }; - this._requestAuthFlags.set(opts, flags); - } - return flags; - } - async authHeaders(opts) { - if (this._authState.resolution) { - await this._authState.resolution; - } - if (this._authState.error) { - return void 0; - } - if (this._authState.tokenCache && this.apiKey == null) { - const token = await this._authState.tokenCache.getToken(); - this._authFlags(opts).usedTokenCache = true; - return buildHeaders([{ Authorization: `Bearer ${token}` }]); - } - return buildHeaders([await this.apiKeyAuth(opts), await this.bearerAuth(opts)]); - } - async apiKeyAuth(opts) { - if (this.apiKey == null) { - return void 0; - } - return buildHeaders([{ "X-Api-Key": this.apiKey }]); - } - async bearerAuth(opts) { - if (this.authToken == null) { - return void 0; - } - return buildHeaders([{ Authorization: `Bearer ${this.authToken}` }]); - } - stringifyQuery(query) { - return stringifyQuery(query); - } - getUserAgent() { - return `Anthropic/JS ${VERSION}`; - } - makeStatusError(status, error, message, headers) { - return APIError.generate(status, error, message, headers); - } - buildURL(path5, query, defaultBaseURL) { - const baseURL = !__classPrivateFieldGet(this, _BaseAnthropic_instances, "m", _BaseAnthropic_baseURLOverridden).call(this) && defaultBaseURL || this.baseURL; - const url = isAbsoluteURL(path5) ? new URL(path5) : new URL(baseURL + (baseURL.endsWith("/") && path5.startsWith("/") ? path5.slice(1) : path5)); - const defaultQuery = this.defaultQuery(); - const pathQuery = Object.fromEntries(url.searchParams); - if (!isEmptyObj(defaultQuery) || !isEmptyObj(pathQuery)) { - query = { ...pathQuery, ...defaultQuery, ...query }; - } - if (typeof query === "object" && query && !Array.isArray(query)) { - url.search = this.stringifyQuery(query); - } - return url.toString(); - } - _calculateNonstreamingTimeout(maxTokens) { - const defaultTimeout = 10 * 60; - const expectedTimeout = 60 * 60 * maxTokens / 128e3; - if (expectedTimeout > defaultTimeout) { - throw new AnthropicError("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#streaming-responses for more details"); - } - return defaultTimeout * 1e3; - } - /** - * Used as a callback for mutating the given `FinalRequestOptions` object. - */ - async prepareOptions(options) { - } - /** - * Used as a callback for mutating the given `RequestInit` object. - * - * This is useful for cases where you want to add certain headers based off of - * the request properties, e.g. `method` or `url`. - * - * Runs after all middleware (including {@link backendMiddleware}), - * immediately before each underlying fetch call, so it sees exactly what - * goes over the wire. Middleware may replay a request by calling `next()` - * more than once, so this hook can run multiple times per attempt: - * overrides must be idempotent and overwrite headers from a previous - * invocation rather than append to them. - */ - async prepareRequest(request2, { url, options }) { - if (this._authState.tokenCache && this.apiKey == null) { - const headers = request2.headers instanceof Headers ? request2.headers : new Headers(request2.headers); - for (const [k, v] of Object.entries(this._authState.extraHeaders)) { - if (!headers.has(k)) - headers.set(k, v); - } - const existing = headers.get("anthropic-beta")?.split(",").map((s) => s.trim()); - if (!existing?.includes(OAUTH_API_BETA_HEADER)) { - headers.set("anthropic-beta", [...existing ?? [], OAUTH_API_BETA_HEADER].join(",")); - } - request2.headers = headers; - } - } - /** - * Internal {@link Middleware} composed innermost in the chain — inside both - * client-level and per-request middleware, immediately around the underlying - * `fetch`. Subclasses for third-party backends override this to adapt the - * canonical Anthropic-shaped request to the backend's wire shape (URL/body - * rewriting, request signing) and to normalize the wire response back to the - * canonical shape (e.g. AWS EventStream to SSE). - * - * Running inside the user's middleware means user middleware always observes - * canonical Anthropic-shaped traffic, and the adaptation re-runs (e.g. - * re-signs) on every `next()` invocation, covering whatever the middleware - * mutated. - * - * Errors thrown here follow the middleware error policy: they propagate to - * the caller as-is — no retries, no `APIConnectionError` wrapping — unless - * retryable (see {@link Middleware}); throw a `RetryableError` to opt into - * the retry path. - */ - backendMiddleware() { - return []; - } - get(path5, opts) { - return this.methodRequest("get", path5, opts); - } - post(path5, opts) { - return this.methodRequest("post", path5, opts); - } - patch(path5, opts) { - return this.methodRequest("patch", path5, opts); - } - put(path5, opts) { - return this.methodRequest("put", path5, opts); - } - delete(path5, opts) { - return this.methodRequest("delete", path5, opts); - } - methodRequest(method2, path5, opts) { - return this.request(Promise.resolve(opts).then((opts2) => { - return { method: method2, path: path5, ...opts2 }; - })); - } - request(options, remainingRetries = null) { - return new APIPromise(this, this.makeRequest(options, remainingRetries, void 0)); - } - async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) { - const options = await optionsInput; - let maxRetries = validatePositiveInteger("maxRetries", options.maxRetries ?? this.maxRetries); - if (this.isStreamBody(options.body)) { - maxRetries = 0; - } - if (retriesRemaining == null) { - retriesRemaining = maxRetries; - this._requestAuthFlags.delete(options); - } - await this.prepareOptions(options); - const { req, url, timeout } = await this.buildRequest(options, { - retryCount: maxRetries - retriesRemaining - }); - const requestLogID = "log_" + (Math.random() * (1 << 24) | 0).toString(16).padStart(6, "0"); - const retryLogStr = retryOfRequestLogID === void 0 ? "" : `, retryOf: ${retryOfRequestLogID}`; - const startTime = Date.now(); - if (options.signal?.aborted) { - throw new APIUserAbortError(); - } - const controller = new AbortController(); - const response = await this.fetchWithTimeout(url, req, timeout, controller, options, { - requestLogID, - retryOfRequestLogID - }).catch(castToError); - const headersTime = Date.now(); - if (response instanceof globalThis.Error) { - releaseRequestSignal(controller); - const retryMessage = `retrying, ${retriesRemaining} attempts remaining`; - if (options.signal?.aborted) { - throw new APIUserAbortError(); - } - const isTimeout = isAbortError(response) || /timed? ?out/i.test(String(response) + ("cause" in response ? String(response.cause) : "")); - const hasMiddleware = this.middleware.length > 0 || !!options.middleware?.length || this.backendMiddleware().length > 0; - if (hasMiddleware && !isTimeout && !isRetryableError(response)) { - loggerFor(this).info(`[${requestLogID}] middleware error (not retryable)`); - debugLogRequestDetails(loggerFor(this), `[${requestLogID}] middleware error (not retryable)`, { - retryOfRequestLogID, - url, - durationMs: headersTime - startTime, - message: response.message - }); - throw response; - } - if (retriesRemaining) { - loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} - ${retryMessage}`); - debugLogRequestDetails(loggerFor(this), `[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} (${retryMessage})`, { - retryOfRequestLogID, - url, - durationMs: headersTime - startTime, - message: response.message - }); - return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID); - } - loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} - error; no more retries left`); - debugLogRequestDetails(loggerFor(this), `[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} (error; no more retries left)`, { - retryOfRequestLogID, - url, - durationMs: headersTime - startTime, - message: response.message - }); - if (isTimeout) { - throw new APIConnectionTimeoutError(); - } - if (hasMiddleware && !isFetchOriginError(response)) { - throw response; - } - throw new APIConnectionError({ cause: response }); - } - const specialHeaders = [...response.headers.entries()].filter(([name]) => name === "request-id" || name === "anthropic-workspace-id").map(([name, value2]) => ", " + name + ": " + JSON.stringify(value2)).join(""); - const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? "succeeded" : "failed"} with status ${response.status} in ${headersTime - startTime}ms`; - if (!response.ok) { - const shouldRetry = await this.shouldRetry(response, options); - if (retriesRemaining && shouldRetry) { - const retryMessage2 = `retrying, ${retriesRemaining} attempts remaining`; - await CancelReadableStream(response.body); - releaseRequestSignal(controller); - loggerFor(this).info(`${responseInfo} - ${retryMessage2}`); - debugLogRequestDetails(loggerFor(this), `[${requestLogID}] response error (${retryMessage2})`, { - retryOfRequestLogID, - url: response.url, - status: response.status, - headers: response.headers, - durationMs: headersTime - startTime - }); - return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers); - } - const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`; - loggerFor(this).info(`${responseInfo} - ${retryMessage}`); - const errText = await response.text().catch((err2) => castToError(err2).message); - const errJSON = safeJSON(errText); - const errMessage = errJSON ? void 0 : errText; - debugLogRequestDetails(loggerFor(this), `[${requestLogID}] response error (${retryMessage})`, { - retryOfRequestLogID, - url: response.url, - status: response.status, - headers: response.headers, - message: errMessage, - durationMs: Date.now() - startTime - }); - releaseRequestSignal(controller); - const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers); - throw err; - } - loggerFor(this).info(responseInfo); - debugLogRequestDetails(loggerFor(this), `[${requestLogID}] response start`, { - retryOfRequestLogID, - url: response.url, - status: response.status, - headers: response.headers, - durationMs: headersTime - startTime - }); - armAbandonmentBackstop(response.body ?? response, controller); - return { response, options, controller, requestLogID, retryOfRequestLogID, startTime }; - } - getAPIList(path5, Page3, opts) { - return this.requestAPIList(Page3, opts && "then" in opts ? opts.then((opts2) => ({ method: "get", path: path5, ...opts2 })) : { method: "get", path: path5, ...opts }); - } - requestAPIList(Page3, options) { - const request2 = this.makeRequest(options, null, void 0); - return new PagePromise(this, request2, Page3); - } - async fetchWithTimeout(url, init, ms, controller, requestOptions, logCtx) { - const { signal, method: method2, ...options } = init || {}; - const abort = this._makeAbort(controller); - if (signal) { - signal.addEventListener("abort", abort, { once: true }); - registerRequestSignalCleanup(controller, signal, abort); - } - const isReadableBody = globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream || typeof options.body === "object" && options.body !== null && Symbol.asyncIterator in options.body; - const fetchOptions = { - signal: controller.signal, - ...isReadableBody ? { duplex: "half" } : {}, - method: "GET", - ...options - }; - if (method2) { - fetchOptions.method = method2.toUpperCase(); - } - const baseFetch = this.fetch; - const timedFetch = async (innerUrl, innerInit) => { - const timeout = setTimeout(abort, ms); - try { - return await baseFetch.call(void 0, innerUrl, innerInit); - } finally { - clearTimeout(timeout); - } - }; - const innerFetch = requestOptions === void 0 ? timedFetch : (async (innerUrl, innerInit = {}) => { - const innerUrlStr = typeof innerUrl === "string" ? innerUrl : innerUrl instanceof URL ? innerUrl.href : innerUrl.url; - innerInit.headers = innerInit.headers instanceof Headers ? innerInit.headers : new Headers(innerInit.headers); - await this.prepareRequest(innerInit, { url: innerUrlStr, options: requestOptions }); - if (logCtx) { - debugLogRequestDetails(loggerFor(this), `[${logCtx.requestLogID}] sending request`, { - retryOfRequestLogID: logCtx.retryOfRequestLogID, - method: innerInit.method, - url: innerUrlStr, - options: requestOptions, - headers: innerInit.headers - }); - } - return timedFetch(innerUrl, innerInit); - }); - const requestMiddleware = requestOptions?.middleware; - const backendMiddleware = this.backendMiddleware(); - const allMiddleware = requestMiddleware?.length || backendMiddleware.length ? [...this.middleware, ...requestMiddleware ?? [], ...backendMiddleware] : this.middleware; - return await wrapFetchWithMiddleware(innerFetch, allMiddleware, requestOptions, this)(url, fetchOptions); - } - async shouldRetry(response, options) { - const flags = this._authFlags(options); - if (response.status === 401 && this._authState.tokenCache && flags.usedTokenCache && !flags.didRefreshFor401) { - flags.didRefreshFor401 = true; - this._authState.tokenCache.invalidate(); - return true; - } - const shouldRetryHeader = response.headers.get("x-should-retry"); - if (shouldRetryHeader === "true") - return true; - if (shouldRetryHeader === "false") - return false; - if (response.status === 408) - return true; - if (response.status === 409) - return true; - if (response.status === 429) - return true; - if (response.status >= 500) - return true; - return false; - } - async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) { - let timeoutMillis; - const retryAfterMillisHeader = responseHeaders?.get("retry-after-ms"); - if (retryAfterMillisHeader) { - const timeoutMs = parseFloat(retryAfterMillisHeader); - if (!Number.isNaN(timeoutMs)) { - timeoutMillis = timeoutMs; - } - } - const retryAfterHeader = responseHeaders?.get("retry-after"); - if (retryAfterHeader && !timeoutMillis) { - const timeoutSeconds = parseFloat(retryAfterHeader); - if (!Number.isNaN(timeoutSeconds)) { - timeoutMillis = timeoutSeconds * 1e3; - } else { - timeoutMillis = Date.parse(retryAfterHeader) - Date.now(); - } - } - if (timeoutMillis === void 0 || !(timeoutMillis > 0 && timeoutMillis <= 2 ** 31 - 1)) { - const maxRetries = options.maxRetries ?? this.maxRetries; - timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries); - } - await sleep(timeoutMillis, options.signal ?? void 0); - return this.makeRequest(options, retriesRemaining - 1, requestLogID); - } - calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) { - const initialRetryDelay = 0.5; - const maxRetryDelay = 8; - const numRetries = maxRetries - retriesRemaining; - const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay); - const jitter2 = 1 - Math.random() * 0.25; - return sleepSeconds * jitter2 * 1e3; - } - calculateNonstreamingTimeout(maxTokens, maxNonstreamingTokens) { - const maxTime = 60 * 60 * 1e3; - const defaultTime = 60 * 10 * 1e3; - const expectedTime = maxTime * maxTokens / 128e3; - if (expectedTime > defaultTime || maxNonstreamingTokens != null && maxTokens > maxNonstreamingTokens) { - throw new AnthropicError("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#long-requests for more details"); - } - return defaultTime; - } - async buildRequest(inputOptions, { retryCount = 0 } = {}) { - const options = { ...inputOptions }; - const { method: method2, path: path5, query, defaultBaseURL } = options; - if (this._authState.resolution) { - await this._authState.resolution; - } - if (!this._baseURLIsExplicit && this._authState.baseURL && this.baseURL !== this._authState.baseURL) { - this.baseURL = this._authState.baseURL; - } - const url = this.buildURL(path5, query, defaultBaseURL); - if ("timeout" in options) - validatePositiveInteger("timeout", options.timeout); - options.timeout = options.timeout ?? this.timeout; - const { bodyHeaders, body } = this.buildBody({ options }); - const reqHeaders = await this.buildHeaders({ - options: inputOptions, - method: method2, - bodyHeaders, - retryCount, - timeout: options.timeout - }); - const req = { - method: method2, - headers: reqHeaders, - ...options.signal && { signal: options.signal }, - ...globalThis.ReadableStream && body instanceof globalThis.ReadableStream && { duplex: "half" }, - ...body && { body }, - ...this.fetchOptions ?? {}, - ...options.fetchOptions ?? {} - }; - return { req, url, timeout: options.timeout }; - } - async buildHeaders({ options, method: method2, bodyHeaders, retryCount, timeout }) { - const headers = buildHeaders([ - { - Accept: "application/json", - "User-Agent": this.getUserAgent(), - "X-Stainless-Retry-Count": String(retryCount), - "X-Stainless-Timeout": String(Math.trunc(timeout / 1e3)), - ...getPlatformHeaders(), - ...this._options.dangerouslyAllowBrowser ? { "anthropic-dangerous-direct-browser-access": "true" } : void 0, - "anthropic-version": "2023-06-01" - }, - await this.authHeaders(options), - this._options.defaultHeaders, - bodyHeaders, - options.headers - ]); - this.validateHeaders(headers); - return headers.values; - } - _makeAbort(controller) { - return () => controller.abort(); - } - buildBody({ options: { body, headers: rawHeaders } }) { - if (!body) { - return { bodyHeaders: void 0, body: void 0 }; - } - const headers = buildHeaders([rawHeaders]); - if ( - // Pass raw type verbatim - ArrayBuffer.isView(body) || body instanceof ArrayBuffer || body instanceof DataView || typeof body === "string" && // Preserve legacy string encoding behavior for now - headers.values.has("content-type") || // `Blob` is superset of `File` - globalThis.Blob && body instanceof globalThis.Blob || // `FormData` -> `multipart/form-data` - body instanceof FormData || // `URLSearchParams` -> `application/x-www-form-urlencoded` - body instanceof URLSearchParams || // Send chunked stream (each chunk has own `length`) - globalThis.ReadableStream && body instanceof globalThis.ReadableStream - ) { - return { bodyHeaders: void 0, body }; - } else if (this.isStreamBody(body)) { - return { bodyHeaders: void 0, body: ReadableStreamFrom(body) }; - } else if (typeof body === "object" && headers.values.get("content-type") === "application/x-www-form-urlencoded") { - return { - bodyHeaders: { "content-type": "application/x-www-form-urlencoded" }, - body: this.stringifyQuery(body) - }; - } else { - return __classPrivateFieldGet(this, _BaseAnthropic_encoder, "f").call(this, { body, headers }); - } - } - /** - * Whether `body` is sent as a stream, which can be read only once: - * a `ReadableStream`, an async iterable or an iterator. - */ - isStreamBody(body) { - if (globalThis.ReadableStream && body instanceof globalThis.ReadableStream) { - return true; - } - return typeof body === "object" && body !== null && (Symbol.asyncIterator in body || Symbol.iterator in body && "next" in body && typeof body.next === "function"); - } - } - _a = BaseAnthropic2, _BaseAnthropic_encoder = /* @__PURE__ */ new WeakMap(), _BaseAnthropic_instances = /* @__PURE__ */ new WeakSet(), _BaseAnthropic_baseURLOverridden = function _BaseAnthropic_baseURLOverridden2() { - return this.baseURL !== "https://api.anthropic.com"; - }; - BaseAnthropic2.Anthropic = _a; - BaseAnthropic2.DEFAULT_TIMEOUT = 6e5; - BaseAnthropic2.AnthropicError = AnthropicError; - BaseAnthropic2.APIError = APIError; - BaseAnthropic2.APIConnectionError = APIConnectionError; - BaseAnthropic2.APIConnectionTimeoutError = APIConnectionTimeoutError; - BaseAnthropic2.APIUserAbortError = APIUserAbortError; - BaseAnthropic2.NotFoundError = NotFoundError; - BaseAnthropic2.ConflictError = ConflictError; - BaseAnthropic2.RateLimitError = RateLimitError; - BaseAnthropic2.BadRequestError = BadRequestError; - BaseAnthropic2.AuthenticationError = AuthenticationError; - BaseAnthropic2.InternalServerError = InternalServerError; - BaseAnthropic2.PermissionDeniedError = PermissionDeniedError; - BaseAnthropic2.UnprocessableEntityError = UnprocessableEntityError; - BaseAnthropic2.toFile = toFile; - BaseAnthropic2.HUMAN_PROMPT = HUMAN_PROMPT; - BaseAnthropic2.AI_PROMPT = AI_PROMPT; - return BaseAnthropic2; - })(); - Anthropic = /* @__PURE__ */ (() => { - class Anthropic2 extends BaseAnthropic { - constructor() { - super(...arguments); - this.completions = new Completions(this); - this.messages = new Messages2(this); - this.models = new Models2(this); - this.files = new Files2(this); - this.skills = new Skills2(this); - this.beta = new Beta(this); - } - } - Anthropic2.Completions = Completions; - Anthropic2.Messages = Messages2; - Anthropic2.Models = Models2; - Anthropic2.Files = Files2; - Anthropic2.Skills = Skills2; - Anthropic2.Beta = Beta; - return Anthropic2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/index.mjs -var init_sdk = __esm({ - "node_modules/@anthropic-ai/sdk/index.mjs"() { - init_client(); - } -}); - -// node_modules/@earendil-works/pi-ai/dist/utils/provider-env.js -function getBunSandboxEnvValue(name) { - if (typeof process === "undefined" || !process.versions?.bun || Object.keys(process.env).length > 0) { - return void 0; - } - if (procEnvCache === null) { - procEnvCache = /* @__PURE__ */ new Map(); - try { - const { readFileSync } = __require("node:fs"); - const data = readFileSync("/proc/self/environ", "utf-8"); - for (const entry2 of data.split("\0")) { - const idx = entry2.indexOf("="); - if (idx > 0) { - procEnvCache.set(entry2.slice(0, idx), entry2.slice(idx + 1)); - } - } - } catch { - } - } - return procEnvCache.get(name); -} -function getProviderEnvValue(name, env) { - return env?.[name] || (typeof process !== "undefined" ? process.env[name] : void 0) || getBunSandboxEnvValue(name) || void 0; -} -var procEnvCache; -var init_provider_env = __esm({ - "node_modules/@earendil-works/pi-ai/dist/utils/provider-env.js"() { - procEnvCache = null; - } -}); - -// node_modules/@earendil-works/pi-ai/dist/env-api-keys.js -var __rewriteRelativeImportExtension2, _existsSync, _homedir, _join, dynamicImport, NODE_FS_SPECIFIER, NODE_OS_SPECIFIER, NODE_PATH_SPECIFIER, ANTHROPIC_FEDERATION_RULE_ID_ENV, ANTHROPIC_ORGANIZATION_ID_ENV, ANTHROPIC_SERVICE_ACCOUNT_ID_ENV, ANTHROPIC_IDENTITY_TOKEN_FILE_ENV, ANTHROPIC_WORKSPACE_ID_ENV; -var init_env_api_keys = __esm({ - "node_modules/@earendil-works/pi-ai/dist/env-api-keys.js"() { - __rewriteRelativeImportExtension2 = function(path5, preserveJsx) { - if (typeof path5 === "string" && /^\.\.?\//.test(path5)) { - return path5.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function(m, tsx, d, ext, cm) { - return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : d + ext + "." + cm.toLowerCase() + "js"; - }); - } - return path5; - }; - _existsSync = null; - _homedir = null; - _join = null; - dynamicImport = (specifier) => import(__rewriteRelativeImportExtension2(specifier)); - NODE_FS_SPECIFIER = "node:fs"; - NODE_OS_SPECIFIER = "node:os"; - NODE_PATH_SPECIFIER = "node:path"; - if (typeof process !== "undefined" && (process.versions?.node || process.versions?.bun)) { - dynamicImport(NODE_FS_SPECIFIER).then((m) => { - _existsSync = m.existsSync; - }); - dynamicImport(NODE_OS_SPECIFIER).then((m) => { - _homedir = m.homedir; - }); - dynamicImport(NODE_PATH_SPECIFIER).then((m) => { - _join = m.join; - }); - } - ANTHROPIC_FEDERATION_RULE_ID_ENV = "ANTHROPIC_FEDERATION_RULE_ID"; - ANTHROPIC_ORGANIZATION_ID_ENV = "ANTHROPIC_ORGANIZATION_ID"; - ANTHROPIC_SERVICE_ACCOUNT_ID_ENV = "ANTHROPIC_SERVICE_ACCOUNT_ID"; - ANTHROPIC_IDENTITY_TOKEN_FILE_ENV = "ANTHROPIC_IDENTITY_TOKEN_FILE"; - ANTHROPIC_WORKSPACE_ID_ENV = "ANTHROPIC_WORKSPACE_ID"; - } -}); - -// node_modules/@earendil-works/pi-ai/dist/utils/headers.js -function headersToRecord(headers) { - const result = {}; - for (const [key, value2] of headers.entries()) { - result[key] = value2; - } - return result; -} -var init_headers2 = __esm({ - "node_modules/@earendil-works/pi-ai/dist/utils/headers.js"() { - } -}); - -// node_modules/partial-json/dist/options.js -var require_options = __commonJS({ - "node_modules/partial-json/dist/options.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Allow = exports.ALL = exports.COLLECTION = exports.ATOM = exports.SPECIAL = exports.INF = exports._INFINITY = exports.INFINITY = exports.NAN = exports.BOOL = exports.NULL = exports.OBJ = exports.ARR = exports.NUM = exports.STR = void 0; - exports.STR = 1; - exports.NUM = 2; - exports.ARR = 4; - exports.OBJ = 8; - exports.NULL = 16; - exports.BOOL = 32; - exports.NAN = 64; - exports.INFINITY = 128; - exports._INFINITY = 256; - exports.INF = exports.INFINITY | exports._INFINITY; - exports.SPECIAL = exports.NULL | exports.BOOL | exports.INF | exports.NAN; - exports.ATOM = exports.STR | exports.NUM | exports.SPECIAL; - exports.COLLECTION = exports.ARR | exports.OBJ; - exports.ALL = exports.ATOM | exports.COLLECTION; - exports.Allow = { STR: exports.STR, NUM: exports.NUM, ARR: exports.ARR, OBJ: exports.OBJ, NULL: exports.NULL, BOOL: exports.BOOL, NAN: exports.NAN, INFINITY: exports.INFINITY, _INFINITY: exports._INFINITY, INF: exports.INF, SPECIAL: exports.SPECIAL, ATOM: exports.ATOM, COLLECTION: exports.COLLECTION, ALL: exports.ALL }; - exports.default = exports.Allow; - } -}); - -// node_modules/partial-json/dist/index.js -var require_dist2 = __commonJS({ - "node_modules/partial-json/dist/index.js"(exports) { - "use strict"; - var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) { - if (k2 === void 0) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - }) : (function(o, m, k, k2) { - if (k2 === void 0) k2 = k; - o[k2] = m[k]; - })); - var __exportStar = exports && exports.__exportStar || function(m, exports2) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) __createBinding(exports2, m, p); - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Allow = exports.MalformedJSON = exports.PartialJSON = exports.parseJSON = exports.parse = void 0; - var options_1 = require_options(); - Object.defineProperty(exports, "Allow", { enumerable: true, get: function() { - return options_1.Allow; - } }); - __exportStar(require_options(), exports); - var PartialJSON2 = class extends Error { - }; - exports.PartialJSON = PartialJSON2; - var MalformedJSON2 = class extends Error { - }; - exports.MalformedJSON = MalformedJSON2; - function parseJSON2(jsonString, allowPartial = options_1.Allow.ALL) { - if (typeof jsonString !== "string") { - throw new TypeError(`expecting str, got ${typeof jsonString}`); - } - if (!jsonString.trim()) { - throw new Error(`${jsonString} is empty`); - } - return _parseJSON2(jsonString.trim(), allowPartial); - } - exports.parseJSON = parseJSON2; - var _parseJSON2 = (jsonString, allow) => { - const length = jsonString.length; - let index = 0; - const markPartialJSON = (msg) => { - throw new PartialJSON2(`${msg} at position ${index}`); - }; - const throwMalformedError = (msg) => { - throw new MalformedJSON2(`${msg} at position ${index}`); - }; - const parseAny = () => { - skipBlank(); - if (index >= length) - markPartialJSON("Unexpected end of input"); - if (jsonString[index] === '"') - return parseStr(); - if (jsonString[index] === "{") - return parseObj(); - if (jsonString[index] === "[") - return parseArr(); - if (jsonString.substring(index, index + 4) === "null" || options_1.Allow.NULL & allow && length - index < 4 && "null".startsWith(jsonString.substring(index))) { - index += 4; - return null; - } - if (jsonString.substring(index, index + 4) === "true" || options_1.Allow.BOOL & allow && length - index < 4 && "true".startsWith(jsonString.substring(index))) { - index += 4; - return true; - } - if (jsonString.substring(index, index + 5) === "false" || options_1.Allow.BOOL & allow && length - index < 5 && "false".startsWith(jsonString.substring(index))) { - index += 5; - return false; - } - if (jsonString.substring(index, index + 8) === "Infinity" || options_1.Allow.INFINITY & allow && length - index < 8 && "Infinity".startsWith(jsonString.substring(index))) { - index += 8; - return Infinity; - } - if (jsonString.substring(index, index + 9) === "-Infinity" || options_1.Allow._INFINITY & allow && 1 < length - index && length - index < 9 && "-Infinity".startsWith(jsonString.substring(index))) { - index += 9; - return -Infinity; - } - if (jsonString.substring(index, index + 3) === "NaN" || options_1.Allow.NAN & allow && length - index < 3 && "NaN".startsWith(jsonString.substring(index))) { - index += 3; - return NaN; - } - return parseNum(); - }; - const parseStr = () => { - const start = index; - let escape2 = false; - index++; - while (index < length && (jsonString[index] !== '"' || escape2 && jsonString[index - 1] === "\\")) { - escape2 = jsonString[index] === "\\" ? !escape2 : false; - index++; - } - if (jsonString.charAt(index) == '"') { - try { - return JSON.parse(jsonString.substring(start, ++index - Number(escape2))); - } catch (e) { - throwMalformedError(String(e)); - } - } else if (options_1.Allow.STR & allow) { - try { - return JSON.parse(jsonString.substring(start, index - Number(escape2)) + '"'); - } catch (e) { - return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf("\\")) + '"'); - } - } - markPartialJSON("Unterminated string literal"); - }; - const parseObj = () => { - index++; - skipBlank(); - const obj2 = {}; - try { - while (jsonString[index] !== "}") { - skipBlank(); - if (index >= length && options_1.Allow.OBJ & allow) - return obj2; - const key = parseStr(); - skipBlank(); - index++; - try { - const value2 = parseAny(); - obj2[key] = value2; - } catch (e) { - if (options_1.Allow.OBJ & allow) - return obj2; - else - throw e; - } - skipBlank(); - if (jsonString[index] === ",") - index++; - } - } catch (e) { - if (options_1.Allow.OBJ & allow) - return obj2; - else - markPartialJSON("Expected '}' at end of object"); - } - index++; - return obj2; - }; - const parseArr = () => { - index++; - const arr2 = []; - try { - while (jsonString[index] !== "]") { - arr2.push(parseAny()); - skipBlank(); - if (jsonString[index] === ",") { - index++; - } - } - } catch (e) { - if (options_1.Allow.ARR & allow) { - return arr2; - } - markPartialJSON("Expected ']' at end of array"); - } - index++; - return arr2; - }; - const parseNum = () => { - if (index === 0) { - if (jsonString === "-") - throwMalformedError("Not sure what '-' is"); - try { - return JSON.parse(jsonString); - } catch (e) { - if (options_1.Allow.NUM & allow) - try { - return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf("e"))); - } catch (e2) { - } - throwMalformedError(String(e)); - } - } - const start = index; - if (jsonString[index] === "-") - index++; - while (jsonString[index] && ",]}".indexOf(jsonString[index]) === -1) - index++; - if (index == length && !(options_1.Allow.NUM & allow)) - markPartialJSON("Unterminated number literal"); - try { - return JSON.parse(jsonString.substring(start, index)); - } catch (e) { - if (jsonString.substring(start, index) === "-") - markPartialJSON("Not sure what '-' is"); - try { - return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf("e"))); - } catch (e2) { - throwMalformedError(String(e2)); - } - } - }; - const skipBlank = () => { - while (index < length && " \n\r ".includes(jsonString[index])) { - index++; - } - }; - return parseAny(); - }; - var parse2 = parseJSON2; - exports.parse = parse2; - } -}); - -// node_modules/@earendil-works/pi-ai/dist/utils/json-parse.js -function isControlCharacter(char) { - const codePoint = char.codePointAt(0); - return codePoint !== void 0 && codePoint >= 0 && codePoint <= 31; -} -function escapeControlCharacter(char) { - switch (char) { - case "\b": - return "\\b"; - case "\f": - return "\\f"; - case "\n": - return "\\n"; - case "\r": - return "\\r"; - case " ": - return "\\t"; - default: - return `\\u${char.codePointAt(0)?.toString(16).padStart(4, "0") ?? "0000"}`; - } -} -function repairJson(json) { - let repaired = ""; - let inString = false; - for (let index = 0; index < json.length; index++) { - const char = json[index]; - if (!inString) { - repaired += char; - if (char === '"') { - inString = true; - } - continue; - } - if (char === '"') { - repaired += char; - inString = false; - continue; - } - if (char === "\\") { - const nextChar = json[index + 1]; - if (nextChar === void 0) { - repaired += "\\\\"; - continue; - } - if (nextChar === "u") { - const unicodeDigits = json.slice(index + 2, index + 6); - if (/^[0-9a-fA-F]{4}$/.test(unicodeDigits)) { - repaired += `\\u${unicodeDigits}`; - index += 5; - continue; - } - } - if (VALID_JSON_ESCAPES.has(nextChar)) { - repaired += `\\${nextChar}`; - index += 1; - continue; - } - repaired += "\\\\"; - continue; - } - repaired += isControlCharacter(char) ? escapeControlCharacter(char) : char; - } - return repaired; -} -function parseJsonWithRepair(json) { - try { - return JSON.parse(json); - } catch (error) { - const repairedJson = repairJson(json); - if (repairedJson !== json) { - return JSON.parse(repairedJson); - } - throw error; - } -} -function parseToolCallArguments(json) { - if (!json?.trim()) - return { arguments: {} }; - try { - const parsed = parseJsonWithRepair(json); - if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) { - throw new Error("Tool arguments must be a JSON object"); - } - return { arguments: parsed }; - } catch (error) { - return { - arguments: {}, - argumentsError: `${error instanceof Error ? error.message : String(error)} - -Received arguments: -${json}` - }; - } -} -function parseStreamingJson(partialJson) { - if (!partialJson || partialJson.trim() === "") { - return {}; - } - try { - return parseJsonWithRepair(partialJson); - } catch { - try { - const result = (0, import_partial_json.parse)(partialJson); - return result ?? {}; - } catch { - try { - const result = (0, import_partial_json.parse)(repairJson(partialJson)); - return result ?? {}; - } catch { - return {}; - } - } - } -} -var import_partial_json, VALID_JSON_ESCAPES; -var init_json_parse = __esm({ - "node_modules/@earendil-works/pi-ai/dist/utils/json-parse.js"() { - import_partial_json = __toESM(require_dist2(), 1); - VALID_JSON_ESCAPES = /* @__PURE__ */ new Set(['"', "\\", "/", "b", "f", "n", "r", "t"]); - } -}); - -// node_modules/@earendil-works/pi-ai/dist/utils/openrouter-cost.js -function isValidCost(value2) { - return typeof value2 === "number" && Number.isFinite(value2) && value2 >= 0; -} -function isOpenRouterModel(model2) { - return model2.provider === "openrouter" || model2.baseUrl.includes("openrouter.ai"); -} -function applyOpenRouterReportedCost(usage, reported) { - if (!isValidCost(reported.cost)) - return; - if (reported.is_byok === false) { - usage.cost.total = reported.cost; - usage.cost.totalFromProvider = true; - return; - } - if (reported.is_byok === true) { - const details = reported.cost_details; - if (!details) - return; - let upstreamCost = details.upstream_inference_cost; - if (upstreamCost === null) { - if (!isValidCost(details.upstream_inference_prompt_cost) || !isValidCost(details.upstream_inference_completions_cost)) { - return; - } - upstreamCost = details.upstream_inference_prompt_cost + details.upstream_inference_completions_cost; - } - if (!isValidCost(upstreamCost)) - return; - usage.cost.total = reported.cost + upstreamCost; - usage.cost.totalFromProvider = true; - } -} -var init_openrouter_cost = __esm({ - "node_modules/@earendil-works/pi-ai/dist/utils/openrouter-cost.js"() { - } -}); - -// node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js -function isProviderError(error) { - if (!(error instanceof Error) || !("status" in error) || !("headers" in error)) - return false; - return (error.status === void 0 || typeof error.status === "number") && (error.headers === void 0 || error.headers instanceof Headers); -} -function isRetryableProviderError(error) { - const shouldRetry = error.headers?.get("x-should-retry"); - if (shouldRetry === "true") - return true; - if (shouldRetry === "false") - return false; - if (error.status === void 0) - return true; - return error.status === 408 || error.status === 409 || error.status === 429 || typeof error.status === "number" && error.status >= 500; -} -function validateServerRetryDelayMs(delayMs, maxRetryDelayMs, providerErrorMessage) { - const maxDelayMs = maxRetryDelayMs ?? DEFAULT_MAX_RETRY_DELAY_MS; - if (maxDelayMs > 0 && delayMs > maxDelayMs) { - throw new Error(`Server requested ${Math.ceil(delayMs / 1e3)}s retry delay (max: ${Math.ceil(maxDelayMs / 1e3)}s). ${providerErrorMessage}`); - } - return delayMs; -} -function getRetryDelayMs(error, retryIndex, maxRetryDelayMs) { - const retryAfterMs = error.headers?.get("retry-after-ms"); - if (retryAfterMs) { - const value2 = Number.parseFloat(retryAfterMs); - if (Number.isFinite(value2)) - return validateServerRetryDelayMs(value2, maxRetryDelayMs, error.message); - } - const retryAfter = error.headers?.get("retry-after"); - if (retryAfter) { - const seconds = Number.parseFloat(retryAfter); - const delayMs = Number.isNaN(seconds) ? Date.parse(retryAfter) - Date.now() : seconds * 1e3; - if (Number.isFinite(delayMs)) - return validateServerRetryDelayMs(delayMs, maxRetryDelayMs, error.message); - } - const exponentialDelay = Math.min(0.5 * 2 ** retryIndex, 8) * 1e3; - return exponentialDelay * (1 - Math.random() * 0.25); -} -function createAbortError() { - const error = new Error("Request aborted"); - error.name = "AbortError"; - return error; -} -function abortableSleep(ms, signal) { - return new Promise((resolve2, reject2) => { - if (signal?.aborted) { - reject2(createAbortError()); - return; - } - const onAbort = () => { - clearTimeout(timeout); - reject2(createAbortError()); - }; - const timeout = setTimeout(() => { - signal?.removeEventListener("abort", onAbort); - resolve2(); - }, Math.max(0, ms)); - signal?.addEventListener("abort", onAbort, { once: true }); - }); -} -async function retryProviderRequest(request2, options = {}) { - const maxRetries = options.maxRetries ?? 0; - let retriesRemaining = maxRetries; - for (; ; ) { - try { - return await request2(); - } catch (error) { - if (options.signal?.aborted) - throw createAbortError(); - if (retriesRemaining <= 0 || !isProviderError(error) || !isRetryableProviderError(error)) - throw error; - if (error.status !== void 0 && options.noRetryStatuses?.includes(error.status)) - throw error; - const retryIndex = maxRetries - retriesRemaining; - retriesRemaining--; - await abortableSleep(getRetryDelayMs(error, retryIndex, options.maxRetryDelayMs), options.signal); - } - } -} -var DEFAULT_MAX_RETRY_DELAY_MS; -var init_provider_retry = __esm({ - "node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js"() { - DEFAULT_MAX_RETRY_DELAY_MS = 6e4; - } -}); - -// node_modules/@earendil-works/pi-ai/dist/utils/sanitize-unicode.js -function sanitizeSurrogates(text2) { - return text2.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?= "0" && char <= "9" || char >= "a" && char <= "f" || char >= "A" && char <= "F"; -} -function scalarValue(token) { - for (const [literal, value2] of LITERALS) - if (token === literal) - return value2; - return NUMBER.test(token) ? Number(token) : void 0; -} -function pendingScalarValue(token) { - for (const [literal, value2] of LITERALS) - if (literal.startsWith(token)) - return value2; - if (NUMBER.test(token)) - return Number(token); - const mantissa = NUMBER_WITHOUT_EXPONENT_DIGITS.exec(token); - return mantissa === null ? void 0 : Number(mantissa[1]); -} -function setSlot(container, slot, value2) { - if (slot.kind === "element") - container[slot.index] = value2; - else if (slot.kind === "member") - setMember(container, slot.key, value2); -} -function setMember(members, key, value2) { - if (key === "__proto__") { - Object.defineProperty(members, key, { value: value2, writable: true, enumerable: true, configurable: true }); - } else { - members[key] = value2; - } -} -var MAX_REPORTED_DEPTH, ROOT_SLOT, CREDIT_PER_APPEND, CREDIT_PER_CHARACTER, MAX_PENDING_SCALAR_LENGTH, NUMBER, NUMBER_WITHOUT_EXPONENT_DIGITS, LITERALS, QUOTE, BACKSLASH, StreamingJsonParser, ToolCallArgumentsStream, SIMPLE_ESCAPES; -var init_streaming_json = __esm({ - "node_modules/@earendil-works/pi-ai/dist/utils/streaming-json.js"() { - init_json_parse(); - MAX_REPORTED_DEPTH = 32; - ROOT_SLOT = { kind: "root" }; - CREDIT_PER_APPEND = 256; - CREDIT_PER_CHARACTER = 8; - MAX_PENDING_SCALAR_LENGTH = 64; - NUMBER = /^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?$/; - NUMBER_WITHOUT_EXPONENT_DIGITS = /^(-?(?:0|[1-9]\d*)(?:\.\d+)?)[eE][+-]?$/; - LITERALS = [ - ["true", true], - ["false", false], - ["null", null] - ]; - QUOTE = 34; - BACKSLASH = 92; - StreamingJsonParser = class { - #root = void 0; - #done = false; - #stack = []; - #string = void 0; - #scalar = ""; - #scalarSlot = void 0; - /** Sum of `size + 1` over the open path: what a fresh snapshot copies. */ - #pathCost = 0; - #credit = 0; - #dirty = false; - #snapshot = void 0; - /** Changes of the piece being read. */ - #changes = []; - /** - * Read the next piece of text; returns the changes it made, in order. Costs time linear in `text.length`. - */ - append(text2) { - this.#credit += CREDIT_PER_APPEND + CREDIT_PER_CHARACTER * text2.length; - this.#changes = []; - if (this.#string !== void 0) - this.#string.change = void 0; - let index = 0; - while (index < text2.length && !this.#done) { - const open = this.#string; - if (open !== void 0) - index = this.#readString(open, text2, index); - else if (this.#scalar !== "") - index = this.#readScalar(text2, index); - else - this.#structural(text2[index++]); - } - return this.#changes; - } - /** - * The value of the text read so far: `undefined` before a value starts, otherwise a plain JSON value that never - * changes afterwards. Returns the previous snapshot while the text read since did not change the value, or while a - * fresh copy of the open path is not yet paid for (see the module comment). - */ - snapshot() { - if (!this.#dirty) - return this.#snapshot; - const pending = this.#pendingScalar(); - const cost = this.#pathCost + (pending === void 0 ? 0 : 1); - if (cost > this.#credit) - return this.#snapshot; - this.#credit -= cost; - this.#dirty = false; - this.#snapshot = this.#copyOpenPath(pending); - return this.#snapshot; - } - /** Read string characters from `start` until the string ends or the text does; returns the next index. */ - #readString(open, text2, start) { - let runStart = start; - for (let index = start; index < text2.length; index++) { - const code = text2.charCodeAt(index); - if (open.escape !== "") { - if (this.#continueEscape(open, text2[index])) { - runStart = index + 1; - continue; - } - runStart = index; - } - if (code === QUOTE) { - if (index > runStart) - this.#appendString(open, text2.slice(runStart, index)); - this.#endString(open); - return index + 1; - } - if (code === BACKSLASH) { - if (index > runStart) - this.#appendString(open, text2.slice(runStart, index)); - open.escape = "\\"; - runStart = index + 1; - } - } - if (text2.length > runStart) - this.#appendString(open, text2.slice(runStart)); - return text2.length; - } - /** Read number or literal characters from `start` up to the next delimiter; returns the delimiter's index. */ - #readScalar(text2, start) { - let end = start; - while (end < text2.length && !isDelimiter(text2[end])) - end++; - if (end > start) { - this.#scalar += text2.slice(start, end); - if (this.#scalarSlot !== void 0) - this.#dirty = true; - } - if (end < text2.length) - this.#endScalar(); - return end; - } - /** Handle one character outside strings. */ - #structural(char) { - switch (char) { - case " ": - case " ": - case "\n": - case "\r": - return; - case '"': - this.#startString(); - return; - case "{": - case "[": - this.#openContainer(char === "{" ? {} : []); - return; - case "}": - case "]": - this.#closeContainer(); - return; - case ":": { - const frame = this.#stack.at(-1); - if (frame !== void 0 && !Array.isArray(frame.container) && frame.phase === "colon") - frame.phase = "value"; - return; - } - case ",": { - const frame = this.#stack.at(-1); - if (frame !== void 0) - frame.phase = Array.isArray(frame.container) ? "value" : "key"; - return; - } - default: - this.#scalar = char; - this.#scalarSlot = this.#valueSlot(); - if (this.#scalarSlot !== void 0) - this.#dirty = true; - } - } - /** Where a value starting now goes, or `undefined` when this position takes no value. */ - #valueSlot() { - const frame = this.#stack.at(-1); - if (frame === void 0) - return this.#root === void 0 ? ROOT_SLOT : void 0; - if (Array.isArray(frame.container)) - return { kind: "element", index: frame.container.length }; - if ((frame.phase === "value" || frame.phase === "colon") && frame.key !== void 0) { - return { kind: "member", key: frame.key }; - } - return void 0; - } - #startString() { - const frame = this.#stack.at(-1); - if (frame !== void 0 && !Array.isArray(frame.container) && (frame.phase === "key" || frame.phase === "comma")) { - this.#string = { target: "key", slot: void 0, text: "", escape: "", path: void 0, change: void 0 }; - return; - } - const slot = this.#valueSlot(); - const path5 = this.#reportedPath(slot); - this.#string = { target: "value", slot, text: "", escape: "", path: path5, change: void 0 }; - this.#place(slot, ""); - if (path5 !== void 0) - this.#string.change = this.#report({ kind: "set", path: path5, value: "" }); - } - /** The path of a value at `slot` in the innermost open container, when its changes are reported. */ - #reportedPath(slot) { - if (slot === void 0) - return void 0; - if (slot.kind === "root") - return []; - const frame = this.#stack.at(-1); - if (!frame.reportsInside) - return void 0; - return [...frame.path, slot.kind === "member" ? slot.key : slot.index]; - } - #report(change) { - this.#changes.push(change); - return change; - } - /** Continue an escape with `char`; returns false when `char` is not part of it and must be read normally. */ - #continueEscape(open, char) { - if (open.escape === "\\") { - const decoded = SIMPLE_ESCAPES[char]; - if (decoded !== void 0) { - open.escape = ""; - this.#appendString(open, decoded); - return true; - } - if (char === "u") { - open.escape = "\\u"; - return true; - } - open.escape = ""; - this.#appendString(open, "\\"); - return false; - } - if (isHexDigit(char)) { - open.escape += char; - if (open.escape.length < 6) - return true; - const decoded = String.fromCharCode(Number.parseInt(open.escape.slice(2), 16)); - open.escape = ""; - this.#appendString(open, decoded); - return true; - } - const literal = open.escape; - open.escape = ""; - this.#appendString(open, literal); - return false; - } - #appendString(open, text2) { - open.text += text2; - if (open.target !== "value") - return; - this.#place(open.slot, open.text); - if (open.path === void 0) - return; - const change = open.change; - if (change !== void 0 && this.#changes.at(-1) === change) { - if (change.kind === "set") - change.value = change.value + text2; - else - change.text += text2; - return; - } - open.change = this.#report({ kind: "append", path: open.path, text: text2 }); - } - #endString(open) { - this.#string = void 0; - const frame = this.#stack.at(-1); - if (open.target === "key") { - if (frame === void 0) - return; - frame.key = open.text; - frame.phase = "colon"; - return; - } - this.#valueEnded(frame); - } - #endScalar() { - const token = this.#scalar; - const slot = this.#scalarSlot; - this.#scalar = ""; - this.#scalarSlot = void 0; - const value2 = scalarValue(token); - if (value2 !== void 0) { - this.#place(slot, value2); - const path5 = this.#reportedPath(slot); - if (path5 !== void 0) - this.#report({ kind: "set", path: path5, value: value2 }); - } - this.#valueEnded(this.#stack.at(-1)); - } - /** The value of the unterminated scalar at the end of the text, if it shows. */ - #pendingScalar() { - const slot = this.#scalarSlot; - const token = this.#scalar; - if (slot === void 0 || token === "" || token.length > MAX_PENDING_SCALAR_LENGTH) - return void 0; - const value2 = pendingScalarValue(token); - return value2 === void 0 ? void 0 : { slot, value: value2 }; - } - #openContainer(container) { - const slot = this.#valueSlot(); - const path5 = this.#reportedPath(slot); - this.#place(slot, container); - this.#stack.push({ - container, - slot, - path: path5, - reportsInside: path5 !== void 0 && path5.length < MAX_REPORTED_DEPTH, - size: 0, - key: void 0, - phase: Array.isArray(container) ? "value" : "key" - }); - this.#pathCost += 1; - this.#dirty = true; - if (path5 !== void 0) - this.#report({ kind: "set", path: path5, value: Array.isArray(container) ? [] : {} }); - } - #closeContainer() { - const frame = this.#stack.pop(); - if (frame === void 0) - return; - this.#pathCost -= frame.size + 1; - this.#dirty = true; - if (frame.path !== void 0 && !frame.reportsInside) { - this.#report({ kind: "set", path: frame.path, value: frame.container }); - } - this.#valueEnded(this.#stack.at(-1)); - } - /** A value in `frame`, or the root value when there is no frame, has ended. */ - #valueEnded(frame) { - if (frame === void 0) { - if (this.#root !== void 0) - this.#done = true; - return; - } - frame.phase = "comma"; - } - /** Set the value at `slot` in the open path; nothing for a value in an invalid position. */ - #place(slot, value2) { - if (slot === void 0) - return; - this.#dirty = true; - if (slot.kind === "root") { - this.#root = value2; - return; - } - const frame = this.#stack.at(-1); - if (slot.kind === "element") { - const elements = frame.container; - if (slot.index === elements.length) { - frame.size++; - this.#pathCost++; - } - elements[slot.index] = value2; - return; - } - const members = frame.container; - if (!Object.hasOwn(members, slot.key)) { - frame.size++; - this.#pathCost++; - } - setMember(members, slot.key, value2); - } - /** A fresh snapshot: copies of the open containers, innermost first, each holding the copy of its open child. */ - #copyOpenPath(pending) { - if (this.#stack.length === 0) - return pending?.slot.kind === "root" ? pending.value : this.#root; - let child; - let childSlot; - for (let depth = this.#stack.length - 1; depth >= 0; depth--) { - const frame = this.#stack[depth]; - const copy2 = Array.isArray(frame.container) ? frame.container.slice() : { ...frame.container }; - if (depth === this.#stack.length - 1 && pending !== void 0) - setSlot(copy2, pending.slot, pending.value); - if (child !== void 0 && childSlot !== void 0) - setSlot(copy2, childSlot, child); - child = copy2; - childSlot = frame.slot; - } - return childSlot?.kind === "root" ? child : this.#root; - } - }; - ToolCallArgumentsStream = class { - #text = ""; - #parser = new StreamingJsonParser(); - #snapshot = void 0; - #arguments = {}; - /** The raw argument text received so far. */ - get text() { - return this.#text; - } - /** Append a piece of argument text; returns the partial arguments, a new object whenever they changed. */ - append(delta) { - this.#text += delta; - this.#parser.append(delta); - return this.#partial(); - } - /** - * Take the provider's complete argument text. When it continues the text so far, returns the missing piece as - * `delta`; otherwise starts over with `text`. Either way returns the partial arguments of `text`. - */ - replace(text2) { - if (text2.startsWith(this.#text)) { - const delta = text2.slice(this.#text.length); - return { delta, arguments: delta === "" ? this.#partial() : this.append(delta) }; - } - this.#text = ""; - this.#parser = new StreamingJsonParser(); - return { delta: void 0, arguments: this.append(text2) }; - } - /** The final arguments: one full parse of the complete text, which reports malformed arguments. */ - finish() { - return parseToolCallArguments(this.#text); - } - #partial() { - const snapshot = this.#parser.snapshot(); - if (snapshot === this.#snapshot) - return this.#arguments; - this.#snapshot = snapshot; - this.#arguments = typeof snapshot === "object" && snapshot !== null && !Array.isArray(snapshot) ? snapshot : {}; - return this.#arguments; - } - }; - SIMPLE_ESCAPES = { - '"': '"', - "\\": "\\", - "/": "/", - b: "\b", - f: "\f", - n: "\n", - r: "\r", - t: " " - }; - } -}); - -// node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js -function isJsonSchemaObject(value2) { - return typeof value2 === "object" && value2 !== null && !Array.isArray(value2); -} -function isStructuredSchema(schema4) { - if (!isJsonSchemaObject(schema4)) - return false; - const types = typeof schema4.type === "string" ? [schema4.type] : Array.isArray(schema4.type) ? schema4.type : []; - return types.includes("object") || types.includes("array") || schema4.properties !== void 0 || schema4.items !== void 0; -} -function schemaAllowsNull(schema4) { - if (!isJsonSchemaObject(schema4)) - return false; - if (schema4.type === "null" || Array.isArray(schema4.type) && schema4.type.includes("null")) - return true; - if (schema4.const === null || Array.isArray(schema4.enum) && schema4.enum.includes(null)) - return true; - return Array.isArray(schema4.anyOf) && schema4.anyOf.some((variant) => schemaAllowsNull(variant)); -} -function makeJsonSchemaNodeStrict(schema4, isUnsupportedKeyword) { - if (!isJsonSchemaObject(schema4)) { - throw new UnsupportedStrictJsonSchemaError("boolean schemas are unsupported"); - } - for (const key of UNSUPPORTED_STRICT_SCHEMA_KEYS) { - if (schema4[key] !== void 0) { - throw new UnsupportedStrictJsonSchemaError(`${key} schemas are unsupported`); - } - } - if (isUnsupportedKeyword) { - for (const [key, value2] of Object.entries(schema4)) { - if (isUnsupportedKeyword(key, value2)) { - throw new UnsupportedStrictJsonSchemaError(`${key}: ${JSON.stringify(value2)} is unsupported`); - } - } - } - if (schema4.anyOf !== void 0) { - if (!Array.isArray(schema4.anyOf) || schema4.anyOf.length === 0) { - throw new UnsupportedStrictJsonSchemaError("anyOf must contain at least one schema"); - } - for (const variant of schema4.anyOf) { - if (isStructuredSchema(variant)) { - throw new UnsupportedStrictJsonSchemaError("object and array unions are unsupported"); - } - makeJsonSchemaNodeStrict(variant, isUnsupportedKeyword); - } - } - if (schema4.items !== void 0) { - if (Array.isArray(schema4.items)) { - throw new UnsupportedStrictJsonSchemaError("tuple schemas are unsupported"); - } - makeJsonSchemaNodeStrict(schema4.items, isUnsupportedKeyword); - } - const isObjectSchema = schema4.type === "object"; - if (schema4.properties !== void 0 && !isObjectSchema) { - throw new UnsupportedStrictJsonSchemaError("properties require type object"); - } - if (!isObjectSchema) - return; - if (schema4.additionalProperties !== void 0 && schema4.additionalProperties !== false) { - throw new UnsupportedStrictJsonSchemaError("schema-valued or true additionalProperties is unsupported"); - } - if (schema4.properties !== void 0 && !isJsonSchemaObject(schema4.properties)) { - throw new UnsupportedStrictJsonSchemaError("object properties must be a schema map"); - } - if (schema4.required !== void 0 && (!Array.isArray(schema4.required) || schema4.required.some((key) => typeof key !== "string"))) { - throw new UnsupportedStrictJsonSchemaError("object required must be a string array"); - } - const properties = schema4.properties ?? {}; - const propertyNames = Object.keys(properties); - const required = new Set(Array.isArray(schema4.required) ? schema4.required : []); - if ([...required].some((key) => !propertyNames.includes(key))) { - throw new UnsupportedStrictJsonSchemaError("required contains an unknown property"); - } - for (const [key, property] of Object.entries(properties)) { - makeJsonSchemaNodeStrict(property, isUnsupportedKeyword); - if (!required.has(key) && !schemaAllowsNull(property)) { - properties[key] = { anyOf: [property, { type: "null" }] }; - } - } - schema4.required = propertyNames; - schema4.additionalProperties = false; -} -function makeStrictJsonSchema(schema4, isUnsupportedKeyword) { - const cloned = structuredClone(schema4); - if (!isJsonSchemaObject(cloned)) { - throw new UnsupportedStrictJsonSchemaError("root schema must have type object"); - } - makeJsonSchemaNodeStrict(cloned, isUnsupportedKeyword); - if (cloned.type !== "object") { - throw new UnsupportedStrictJsonSchemaError("root schema must have type object"); - } - return cloned; -} -function prefersJsonSchemaStrictSampling(tool) { - const config = tool.constrainedSampling; - return !!config && config.type === "json_schema" && config.strict === "prefer"; -} -function isStrictToolLimitErrorMessage(message) { - return STRICT_TOOL_LIMIT_ERROR_MESSAGES.some((limitMessage) => message.includes(limitMessage)); -} -function getJsonSchemaToolParameters(tool, strict) { - return strict === true ? makeStrictJsonSchema(tool.parameters) : tool.parameters; -} -function getGrammarToolInput(toolName2, arguments_, inputProperty) { - const input = arguments_[inputProperty]; - if (typeof input !== "string") { - throw new Error(`Grammar tool call "${toolName2}" requires argument "${inputProperty}" to be a string.`); - } - return input; -} -function appendGrammarToolInputJsonDelta(buffer, inputProperty, inputDelta) { - if (buffer.closed) { - throw new Error(`grammar tool input for property "${inputProperty}" changed after it was closed`); - } - if (inputDelta.length === 0) - return void 0; - buffer.input += inputDelta; - return grammarToolInputJsonStart(buffer, inputProperty) + JSON.stringify(inputDelta).slice(1, -1); -} -function closeGrammarToolInputJson(buffer, inputProperty, finalInput) { - if (buffer.closed) { - if (finalInput === void 0 || finalInput === buffer.input) - return void 0; - throw new Error(`grammar tool input for property "${inputProperty}" changed after it was closed`); - } - if (finalInput !== void 0 && !finalInput.startsWith(buffer.input)) { - throw new Error(`grammar tool input for property "${inputProperty}" changed non-monotonically`); - } - const rest = finalInput === void 0 ? "" : finalInput.slice(buffer.input.length); - if (finalInput !== void 0) - buffer.input = finalInput; - buffer.closed = true; - return `${grammarToolInputJsonStart(buffer, inputProperty)}${JSON.stringify(rest).slice(1, -1)}"}`; -} -function grammarToolInputJsonStart(buffer, inputProperty) { - if (buffer.started) - return ""; - buffer.started = true; - return `{${JSON.stringify(inputProperty)}:"`; -} -function inferGrammarInputProperty(tool) { - const schema4 = tool.parameters; - if (schema4.type !== "object") { - throw new Error("grammar constrained sampling requires an object parameter schema"); - } - if (!Array.isArray(schema4.required) || schema4.required.length !== 1 || typeof schema4.required[0] !== "string") { - throw new Error("grammar constrained sampling requires exactly one required string property"); - } - const inputProperty = schema4.required[0]; - if (!schema4.properties?.[inputProperty]) { - throw new Error(`grammar constrained sampling requires a properties entry for ${inputProperty}`); - } - if (schema4.properties[inputProperty]?.type !== "string") { - throw new Error(`grammar constrained sampling property ${inputProperty} must have type string`); - } - return inputProperty; -} -function resolveJsonSchemaStrictSampling(tool, supportsStrictMode, isUnsupportedKeyword) { - const config = tool.constrainedSampling; - if (!config || config.type !== "json_schema") - return void 0; - if (supportsStrictMode) { - try { - makeStrictJsonSchema(tool.parameters, isUnsupportedKeyword); - return true; - } catch (error) { - if (!(error instanceof UnsupportedStrictJsonSchemaError)) - throw error; - if (config.strict !== "require") - return void 0; - throw new Error(`Tool "${tool.name}" requires JSON-schema constrained sampling, but ${error.message}.`); - } - } - if (config.strict === "require") { - throw new Error(`Tool "${tool.name}" requires JSON-schema constrained sampling, but strict tools are unsupported.`); - } - return void 0; -} -function resolveGrammarConstrainedSampling(tool, supportsOpenAIGrammarTools) { - const config = tool.constrainedSampling; - if (!config || config.type !== "grammar") { - return void 0; - } - if (!supportsOpenAIGrammarTools) { - return void 0; - } - const larkDefinition = config.variants.openai_lark; - const regexDefinition = config.variants.openai_regex; - const hasLarkDefinition = typeof larkDefinition === "string" && larkDefinition.trim().length > 0; - const hasRegexDefinition = typeof regexDefinition === "string" && regexDefinition.trim().length > 0; - if (!hasLarkDefinition && !hasRegexDefinition) { - throw new Error(`Tool "${tool.name}" cannot use grammar constrained sampling: no supported grammar variant was provided.`); - } - try { - return { - format: hasLarkDefinition ? "lark" : "regex", - definition: hasLarkDefinition ? larkDefinition : regexDefinition, - inputProperty: inferGrammarInputProperty(tool) - }; - } catch (error) { - const message = error instanceof Error ? error.message : String(error); - throw new Error(`Tool "${tool.name}" cannot use grammar constrained sampling: ${message}.`); - } -} -function createGrammarToolInputProperties(tools, supportsOpenAIGrammarTools) { - const properties = /* @__PURE__ */ new Map(); - for (const tool of tools ?? []) { - const grammar = resolveGrammarConstrainedSampling(tool, supportsOpenAIGrammarTools); - if (grammar) { - properties.set(tool.name, grammar.inputProperty); - } - } - return properties; -} -var UnsupportedStrictJsonSchemaError, UNSUPPORTED_STRICT_SCHEMA_KEYS, STRICT_TOOL_LIMIT_ERROR_MESSAGES; -var init_constrained_sampling = __esm({ - "node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js"() { - UnsupportedStrictJsonSchemaError = class extends Error { - }; - UNSUPPORTED_STRICT_SCHEMA_KEYS = [ - "$ref", - "$defs", - "definitions", - "allOf", - "oneOf", - "patternProperties", - "dependentSchemas", - "dependencies", - "unevaluatedProperties", - "propertyNames", - "contains", - "prefixItems", - "not", - "if", - "then", - "else" - ]; - STRICT_TOOL_LIMIT_ERROR_MESSAGES = [ - "The compiled grammar is too large", - "Too many strict tools (", - "Schemas contains too many parameters with union types (" - ]; - } -}); - -// node_modules/@earendil-works/pi-ai/dist/api/github-copilot-headers.js -function inferCopilotInitiator(messages) { - const last = messages[messages.length - 1]; - return last && last.role !== "user" ? "agent" : "user"; -} -function hasCopilotVisionInput(messages) { - return messages.some((msg) => { - if (msg.role === "user" && Array.isArray(msg.content)) { - return msg.content.some((c) => c.type === "image"); - } - if (msg.role === "toolResult" && Array.isArray(msg.content)) { - return msg.content.some((c) => c.type === "image"); - } - return false; - }); -} -function buildCopilotDynamicHeaders(params) { - const headers = { - "X-Initiator": inferCopilotInitiator(params.messages), - "Openai-Intent": "conversation-edits" - }; - if (params.hasImages) { - headers["Copilot-Vision-Request"] = "true"; - } - return headers; -} -var init_github_copilot_headers = __esm({ - "node_modules/@earendil-works/pi-ai/dist/api/github-copilot-headers.js"() { - } -}); - -// node_modules/@earendil-works/pi-ai/dist/utils/estimate.js -function calculateContextTokens(usage) { - return usage.totalTokens || usage.input + usage.output + usage.cacheRead + usage.cacheWrite; -} -function safeJsonStringify(value2) { - try { - return JSON.stringify(value2) ?? "undefined"; - } catch { - return "[unserializable]"; - } -} -function estimateTextAndImageContentChars(content) { - if (typeof content === "string") - return content.length; - let chars = 0; - for (const block of content) - chars += block.type === "text" ? block.text.length : ESTIMATED_IMAGE_CHARS; - return chars; -} -function estimateTextTokens(text2) { - return Math.ceil(text2.length / CHARS_PER_TOKEN); -} -function estimateTextAndImageContentTokens(content) { - return Math.ceil(estimateTextAndImageContentChars(content) / CHARS_PER_TOKEN); -} -function estimateMessageTokens(message) { - let chars = 0; - if (message.role === "system") { - return estimateTextTokens(getSystemMessageText(message)) + estimateToolsTokens(message.toolsAdded) + estimateToolsTokens(message.toolsRemoved); - } - if (message.role === "user") - return estimateTextAndImageContentTokens(message.content); - if (message.role === "toolResult") - return estimateTextAndImageContentTokens(message.content); - for (const block of message.content) { - if (block.type === "text") { - chars += block.text.length; - } else if (block.type === "thinking") { - chars += block.thinking.length; - } else { - chars += block.name.length + safeJsonStringify(block.arguments).length; - } - } - return Math.ceil(chars / CHARS_PER_TOKEN); -} -function getLastAssistantUsageInfo(messages) { - let latestPrefixTimestamp = Number.NEGATIVE_INFINITY; - let usageInfo; - for (let i = 0; i < messages.length; i++) { - const message = messages[i]; - if (message.role === "assistant") { - const assistant = message; - const usageAppliesToPrefix = assistant.timestamp >= latestPrefixTimestamp; - if (usageAppliesToPrefix && assistant.stopReason !== "aborted" && assistant.stopReason !== "error" && calculateContextTokens(assistant.usage) > 0) { - usageInfo = { usage: assistant.usage, index: i }; - } - } - latestPrefixTimestamp = Math.max(latestPrefixTimestamp, message.timestamp); - } - return usageInfo; -} -function estimateContextTokens(context) { - const messages = "messages" in context ? context.messages : context; - const usageInfo = getLastAssistantUsageInfo(messages); - if (usageInfo) { - const usageTokens = calculateContextTokens(usageInfo.usage); - let trailingTokens = 0; - for (let i = usageInfo.index + 1; i < messages.length; i++) { - trailingTokens += estimateMessageTokens(messages[i]); - } - return { tokens: usageTokens + trailingTokens, usageTokens, trailingTokens, lastUsageIndex: usageInfo.index }; - } - let tokens = 0; - for (const message of messages) - tokens += estimateMessageTokens(message); - return { tokens, usageTokens: 0, trailingTokens: tokens, lastUsageIndex: null }; -} -function estimateToolsTokens(tools) { - if (!tools || tools.length === 0) - return 0; - return estimateTextTokens(safeJsonStringify(tools)); -} -var CHARS_PER_TOKEN, ESTIMATED_IMAGE_CHARS; -var init_estimate = __esm({ - "node_modules/@earendil-works/pi-ai/dist/utils/estimate.js"() { - init_text(); - CHARS_PER_TOKEN = 3.5; - ESTIMATED_IMAGE_CHARS = 4800; - } -}); - -// node_modules/@earendil-works/pi-ai/dist/api/simple-options.js -function clampMaxTokensToContext(model2, context, maxTokens) { - if (model2.contextWindow <= 0) - return Math.max(MIN_MAX_TOKENS, maxTokens); - const available = model2.contextWindow - estimateContextTokens(context).tokens - CONTEXT_SAFETY_TOKENS; - return Math.min(maxTokens, Math.max(MIN_MAX_TOKENS, available)); -} -function resolveSamplingParams(model2, thinkingLevel, requestParams) { - const effectiveThinkingLevel = clampThinkingLevel(model2, thinkingLevel); - const thinkingLevelParams = model2.samplingParamsByThinkingLevel?.[effectiveThinkingLevel]; - return model2.samplingParams || thinkingLevelParams || requestParams ? { ...model2.samplingParams, ...thinkingLevelParams, ...requestParams } : void 0; -} -function buildBaseOptions(model2, context, options, apiKey) { - const samplingParams = resolveSamplingParams(model2, options?.reasoning ?? "off", options?.samplingParams); - return { - temperature: options?.temperature, - samplingParams, - maxTokens: clampMaxTokensToContext(model2, context, options?.maxTokens ?? model2.maxTokens), - signal: options?.signal, - telemetry: options?.telemetry, - apiKey: apiKey || options?.apiKey, - fetch: options?.fetch, - transport: options?.transport, - cacheRetention: options?.cacheRetention, - sessionId: options?.sessionId, - headers: options?.headers, - identity: options?.identity, - onPayload: options?.onPayload, - onResponse: options?.onResponse, - onProviderStreamEvent: options?.onProviderStreamEvent, - timeoutMs: options?.timeoutMs, - websocketConnectTimeoutMs: options?.websocketConnectTimeoutMs, - maxRetries: options?.maxRetries, - maxRetryDelayMs: options?.maxRetryDelayMs, - metadata: options?.metadata, - env: options?.env - }; -} -function clampReasoning(effort) { - return effort === "xhigh" || effort === "max" ? "high" : effort; -} -function thinkingBudgetForLevel(reasoningLevel, customBudgets) { - const budgets = { ...DEFAULT_THINKING_BUDGETS, ...customBudgets }; - const level = clampReasoning(reasoningLevel); - return budgets[level]; -} -function clampThinkingBudgetToAnswerRoom(thinkingBudget, ceiling) { - return Math.min(thinkingBudget, Math.max(0, ceiling - MIN_ANSWER_TOKENS)); -} -function adjustMaxTokensForThinking(baseMaxTokens, modelMaxTokens, reasoningLevel, customBudgets) { - let thinkingBudget = thinkingBudgetForLevel(reasoningLevel, customBudgets); - const maxTokens = baseMaxTokens === void 0 ? modelMaxTokens : Math.min(baseMaxTokens + thinkingBudget, modelMaxTokens); - if (maxTokens <= thinkingBudget) { - thinkingBudget = clampThinkingBudgetToAnswerRoom(thinkingBudget, maxTokens); - } - return { maxTokens, thinkingBudget }; -} -var CONTEXT_SAFETY_TOKENS, MIN_MAX_TOKENS, MIN_ANSWER_TOKENS, DEFAULT_THINKING_BUDGETS; -var init_simple_options = __esm({ - "node_modules/@earendil-works/pi-ai/dist/api/simple-options.js"() { - init_models(); - init_estimate(); - CONTEXT_SAFETY_TOKENS = 4096; - MIN_MAX_TOKENS = 1; - MIN_ANSWER_TOKENS = 1024; - DEFAULT_THINKING_BUDGETS = { - minimal: 1024, - low: 2048, - medium: 8192, - high: 16384 - }; - } -}); - -// node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js -function splitErrorToolResultImages(msg) { - if (!msg.isError) - return void 0; - const images = msg.content.filter((block) => block.type === "image"); - if (images.length === 0) - return void 0; - return { - content: replaceImagesWithPlaceholder(msg.content, ERROR_TOOL_IMAGE_PLACEHOLDER), - caption: `Images from the error result of tool call ${msg.toolCallId} (${msg.toolName}):`, - images - }; -} -function replaceImagesWithPlaceholder(content, placeholder) { - const result = []; - let previousWasPlaceholder = false; - for (const block of content) { - if (block.type === "image") { - if (!previousWasPlaceholder) { - result.push({ type: "text", text: placeholder }); - } - previousWasPlaceholder = true; - continue; - } - result.push(block); - previousWasPlaceholder = block.text === placeholder; - } - return result; -} -function downgradeUnsupportedImages(messages, model2) { - if (model2.input.includes("image")) { - return messages; - } - return messages.map((msg) => { - if (msg.role === "user" && Array.isArray(msg.content)) { - return { - ...msg, - content: replaceImagesWithPlaceholder(msg.content, NON_VISION_USER_IMAGE_PLACEHOLDER) - }; - } - if (msg.role === "toolResult") { - return { - ...msg, - content: replaceImagesWithPlaceholder(msg.content, NON_VISION_TOOL_IMAGE_PLACEHOLDER) - }; - } - return msg; - }); -} -function transformMessages(messages, model2, normalizeToolCallId2) { - const toolCallIdMap = /* @__PURE__ */ new Map(); - const normalizedMessages = messages.map((msg) => msg.content == null ? { ...msg, content: [] } : msg); - const imageAwareMessages = downgradeUnsupportedImages(normalizedMessages, model2); - const transformed = imageAwareMessages.map((msg) => { - if (msg.role === "system" || msg.role === "user") { - return msg; - } - if (msg.role === "toolResult") { - const normalizedId = toolCallIdMap.get(msg.toolCallId); - if (normalizedId && normalizedId !== msg.toolCallId) { - return { ...msg, toolCallId: normalizedId }; - } - return msg; - } - if (msg.role === "assistant") { - const assistantMsg = msg; - const isSameModel = assistantMsg.provider === model2.provider && assistantMsg.api === model2.api && assistantMsg.model === model2.id; - const transformedContent = assistantMsg.content.flatMap((block) => { - if (block.type === "thinking") { - if (!isSameModel) - return []; - if (block.redacted || block.thinkingSignature) - return block; - if (!block.thinking || block.thinking.trim() === "") - return []; - return block; - } - if (block.type === "text") { - if (isSameModel) - return block; - return { - type: "text", - text: block.text - }; - } - if (block.type === "toolCall") { - const toolCall = block; - let normalizedToolCall = toolCall; - if (!isSameModel && toolCall.thoughtSignature) { - normalizedToolCall = { ...toolCall }; - delete normalizedToolCall.thoughtSignature; - } - if (!isSameModel && normalizeToolCallId2) { - const normalizedId = normalizeToolCallId2(toolCall.id, model2, assistantMsg); - if (normalizedId !== toolCall.id) { - toolCallIdMap.set(toolCall.id, normalizedId); - normalizedToolCall = { ...normalizedToolCall, id: normalizedId }; - } - } - return normalizedToolCall; - } - return block; - }); - return { - ...assistantMsg, - content: transformedContent - }; - } - return msg; - }); - const result = []; - let pendingToolCalls = []; - let existingToolResultIds = /* @__PURE__ */ new Set(); - const heldSystemMessages = []; - const closePendingToolCalls = () => { - if (pendingToolCalls.length > 0) { - for (const tc of pendingToolCalls) { - if (!existingToolResultIds.has(tc.id)) { - result.push({ - role: "toolResult", - toolCallId: tc.id, - toolName: tc.name, - content: [{ type: "text", text: "No result provided" }], - isError: true, - timestamp: Date.now() - }); - } - } - pendingToolCalls = []; - existingToolResultIds = /* @__PURE__ */ new Set(); - } - result.push(...heldSystemMessages); - heldSystemMessages.length = 0; - }; - for (let i = 0; i < transformed.length; i++) { - const msg = transformed[i]; - if (msg.role === "assistant") { - closePendingToolCalls(); - const assistantMsg = msg; - if (assistantMsg.stopReason === "error" || assistantMsg.stopReason === "aborted") { - continue; - } - const toolCalls = assistantMsg.content.filter((b) => b.type === "toolCall"); - if (toolCalls.length > 0) { - pendingToolCalls = toolCalls; - existingToolResultIds = /* @__PURE__ */ new Set(); - } - result.push(msg); - } else if (msg.role === "toolResult") { - existingToolResultIds.add(msg.toolCallId); - result.push(msg); - } else if (msg.role === "system") { - if (pendingToolCalls.length > 0) { - heldSystemMessages.push(msg); - } else { - result.push(msg); - } - } else if (msg.role === "user") { - closePendingToolCalls(); - result.push(msg); - } else { - result.push(msg); - } - } - closePendingToolCalls(); - return result; -} -var NON_VISION_USER_IMAGE_PLACEHOLDER, NON_VISION_TOOL_IMAGE_PLACEHOLDER, ERROR_TOOL_IMAGE_PLACEHOLDER; -var init_transform_messages = __esm({ - "node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js"() { - NON_VISION_USER_IMAGE_PLACEHOLDER = "(image omitted: model does not support images)"; - NON_VISION_TOOL_IMAGE_PLACEHOLDER = "(tool image omitted: model does not support images)"; - ERROR_TOOL_IMAGE_PLACEHOLDER = "(image attached after the tool results)"; - } -}); - -// node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js -var anthropic_messages_exports = {}; -__export(anthropic_messages_exports, { - stream: () => stream2, - streamSimple: () => streamSimple -}); -function resolveCacheRetention(cacheRetention, env) { - if (cacheRetention) { - return cacheRetention; - } - if (getProviderEnvValue("PI_CACHE_RETENTION", env) === "long") { - return "long"; - } - return "short"; -} -function getCacheControl(model2, cacheRetention, env) { - const retention = resolveCacheRetention(cacheRetention, env); - if (retention === "none") { - return { retention }; - } - const ttl = retention === "long" && getAnthropicCompat(model2).supportsLongCacheRetention ? "1h" : void 0; - return { - retention, - cacheControl: { type: "ephemeral", ...ttl && { ttl } } - }; -} -function convertImageBlock(image) { - return { - type: "image", - source: { - type: "base64", - media_type: image.mimeType, - data: image.data - } - }; -} -function convertContentBlocks(content) { - const hasImages = content.some((c) => c.type === "image"); - if (!hasImages) { - return sanitizeSurrogates(content.map((c) => c.text).join("\n")); - } - const blocks = content.map((block) => { - if (block.type === "text") { - return { - type: "text", - text: sanitizeSurrogates(block.text) - }; - } - return convertImageBlock(block); - }); - const hasText = blocks.some((b) => b.type === "text"); - if (!hasText) { - blocks.unshift({ - type: "text", - text: "(see attached image)" - }); - } - return blocks; -} -function shouldUseServerSideFallbackBeta(model2) { - return (model2.compat?.allowedFallbackModels?.length ?? 0) > 0; -} -function getAnthropicCompat(model2) { - const isOpenRouter2 = model2.provider === "openrouter" || model2.baseUrl.includes("openrouter.ai"); - return { - supportsEagerToolInputStreaming: model2.compat?.supportsEagerToolInputStreaming ?? true, - supportsLongCacheRetention: model2.compat?.supportsLongCacheRetention ?? true, - sendSessionAffinityHeaders: model2.compat?.sendSessionAffinityHeaders ?? isOpenRouter2, - sessionAffinityFormat: model2.compat?.sessionAffinityFormat ?? (isOpenRouter2 ? "openrouter" : void 0), - supportsCacheControlOnTools: model2.compat?.supportsCacheControlOnTools ?? true, - supportsTemperature: model2.compat?.supportsTemperature ?? true, - allowEmptySignature: model2.compat?.allowEmptySignature ?? false, - supportsStrictTools: model2.compat?.supportsStrictTools ?? false, - supportsMidConvoSystemMessages: model2.compat?.supportsMidConvoSystemMessages ?? false, - supportsMidConvoToolChanges: model2.compat?.supportsMidConvoToolChanges ?? false - }; -} -function mergeHeaders2(...headerSources) { - const merged = {}; - for (const headers of headerSources) { - if (headers) { - Object.assign(merged, headers); - } - } - return merged; -} -function hasHeader(headers, name) { - if (!headers) - return false; - const expected = name.toLowerCase(); - for (const [key, value2] of Object.entries(headers)) { - if (key.toLowerCase() === expected && value2 !== null && value2.trim().length > 0) - return true; - } - return false; -} -function hasRequestAuth(apiKey, headers) { - return !!apiKey || hasHeader(headers, "authorization") || hasHeader(headers, "x-api-key") || hasHeader(headers, "cf-aig-authorization"); -} -function assertRequestAuth(provider2, apiKey, headers) { - if (!hasRequestAuth(apiKey, headers)) - throw new Error(`No API key for provider: ${provider2}`); -} -function getAnthropicFederation(model2, apiKey, headers, env) { - if (model2.provider !== "anthropic" || hasRequestAuth(apiKey, headers)) - return void 0; - const federationRuleId = getProviderEnvValue(ANTHROPIC_FEDERATION_RULE_ID_ENV, env); - const organizationId = getProviderEnvValue(ANTHROPIC_ORGANIZATION_ID_ENV, env); - const identityTokenFile = getProviderEnvValue(ANTHROPIC_IDENTITY_TOKEN_FILE_ENV, env); - if (!federationRuleId || !organizationId || !identityTokenFile) - return void 0; - return { - organization_id: organizationId, - workspace_id: getProviderEnvValue(ANTHROPIC_WORKSPACE_ID_ENV, env), - authentication: { - type: "oidc_federation", - federation_rule_id: federationRuleId, - service_account_id: getProviderEnvValue(ANTHROPIC_SERVICE_ACCOUNT_ID_ENV, env), - identity_token: { source: "file", path: identityTokenFile } - } - }; -} -function flushSseEvent(state2) { - if (!state2.event && state2.data.length === 0) { - return null; - } - const event = { - event: state2.event, - data: state2.data.join("\n"), - raw: [...state2.raw] - }; - state2.event = null; - state2.data = []; - state2.raw = []; - return event; -} -function decodeSseLine(line, state2) { - if (line === "") { - return flushSseEvent(state2); - } - state2.raw.push(line); - if (line.startsWith(":")) { - return null; - } - const delimiterIndex = line.indexOf(":"); - const fieldName = delimiterIndex === -1 ? line : line.slice(0, delimiterIndex); - let value2 = delimiterIndex === -1 ? "" : line.slice(delimiterIndex + 1); - if (value2.startsWith(" ")) { - value2 = value2.slice(1); - } - if (fieldName === "event") { - state2.event = value2; - } else if (fieldName === "data") { - state2.data.push(value2); - } - return null; -} -function nextLineBreakIndex(text2) { - const carriageReturnIndex = text2.indexOf("\r"); - const newlineIndex = text2.indexOf("\n"); - if (carriageReturnIndex === -1) { - return newlineIndex; - } - if (newlineIndex === -1) { - return carriageReturnIndex; - } - return Math.min(carriageReturnIndex, newlineIndex); -} -function consumeLine(text2) { - const lineBreakIndex = nextLineBreakIndex(text2); - if (lineBreakIndex === -1) { - return null; - } - let nextIndex = lineBreakIndex + 1; - if (text2[lineBreakIndex] === "\r" && text2[nextIndex] === "\n") { - nextIndex += 1; - } - return { - line: text2.slice(0, lineBreakIndex), - rest: text2.slice(nextIndex) - }; -} -async function* iterateSseMessages(body, signal) { - const reader = body.getReader(); - const decoder5 = new TextDecoder(); - const state2 = { event: null, data: [], raw: [] }; - let buffer = ""; - try { - while (true) { - if (signal?.aborted) { - throw new Error("Request was aborted"); - } - const { value: value2, done } = await reader.read(); - if (done) { - break; - } - buffer += decoder5.decode(value2, { stream: true }); - let consumed2 = consumeLine(buffer); - while (consumed2) { - buffer = consumed2.rest; - const event = decodeSseLine(consumed2.line, state2); - if (event) { - yield event; - } - consumed2 = consumeLine(buffer); - } - } - buffer += decoder5.decode(); - let consumed = consumeLine(buffer); - while (consumed) { - buffer = consumed.rest; - const event = decodeSseLine(consumed.line, state2); - if (event) { - yield event; - } - consumed = consumeLine(buffer); - } - if (buffer.length > 0) { - const event = decodeSseLine(buffer, state2); - if (event) { - yield event; - } - } - const trailingEvent = flushSseEvent(state2); - if (trailingEvent) { - yield trailingEvent; - } - } finally { - reader.releaseLock(); - } -} -async function* iterateAnthropicEvents(response, signal) { - if (!response.body) { - throw new Error("Attempted to iterate over an Anthropic response with no body"); - } - let sawMessageStart = false; - let sawMessageEnd = false; - for await (const sse of iterateSseMessages(response.body, signal)) { - if (sse.event === "error") { - throw new Error(sse.data); - } - if (!ANTHROPIC_MESSAGE_EVENTS.has(sse.event ?? "")) { - continue; - } - try { - const event = parseJsonWithRepair(sse.data); - if (event.type === "message_start") { - sawMessageStart = true; - } else if (event.type === "message_stop") { - sawMessageEnd = true; - } - yield event; - } catch (error) { - const message = error instanceof Error ? error.message : String(error); - throw new Error(`Could not parse Anthropic SSE event ${sse.event}: ${message}; data=${sse.data}; raw=${sse.raw.join("\\n")}`); - } - } - if (sawMessageStart && !sawMessageEnd) { - throw new Error("Anthropic stream ended before message_stop"); - } -} -function mapThinkingLevelToEffort(model2, level) { - const mapped = level ? model2.thinkingLevelMap?.[level] : void 0; - if (typeof mapped === "string") - return mapped; - switch (level) { - case "minimal": - case "low": - return "low"; - case "medium": - return "medium"; - case "high": - return "high"; - default: - return "high"; - } -} -function isOAuthToken(apiKey) { - return apiKey.includes("sk-ant-oat"); -} -function createClient(model2, apiKey, optionsHeaders, fetch2, dynamicHeaders, sessionId, federation, identity) { - if (model2.provider === "github-copilot") { - const client2 = new PiAnthropic({ - apiKey: null, - authToken: apiKey ?? null, - baseURL: model2.baseUrl, - dangerouslyAllowBrowser: true, - fetch: fetch2, - defaultHeaders: mergeHeaders2(getIdentityHeaders(model2, identity), { - accept: "application/json", - "anthropic-dangerous-direct-browser-access": "true" - }, model2.headers, dynamicHeaders, optionsHeaders) - }); - return { client: client2, isOAuthToken: false }; - } - if (apiKey && isOAuthToken(apiKey)) { - const client2 = new PiAnthropic({ - apiKey: null, - authToken: apiKey, - baseURL: model2.baseUrl, - dangerouslyAllowBrowser: true, - fetch: fetch2, - defaultHeaders: mergeHeaders2({ - accept: "application/json", - "anthropic-dangerous-direct-browser-access": "true", - "user-agent": `claude-cli/${claudeCodeVersion}`, - "x-app": "cli" - }, model2.headers, optionsHeaders) - }); - return { client: client2, isOAuthToken: true }; - } - const compat = getAnthropicCompat(model2); - const sessionAffinityHeaders = {}; - if (sessionId && compat.sendSessionAffinityHeaders) { - const header = compat.sessionAffinityFormat === "openrouter" ? "x-session-id" : "x-session-affinity"; - sessionAffinityHeaders[header] = sessionId; - } - const defaultHeaders = mergeHeaders2(getIdentityHeaders(model2, identity), { - accept: "application/json", - "anthropic-dangerous-direct-browser-access": "true" - }, sessionAffinityHeaders, model2.headers, optionsHeaders); - if (federation) { - const key = JSON.stringify([model2.baseUrl, federation]); - if (federationClient?.key !== key || federationClient.fetch !== fetch2) { - const client2 = new PiAnthropic({ - apiKey: null, - authToken: null, - config: federation, - baseURL: model2.baseUrl, - dangerouslyAllowBrowser: true, - fetch: fetch2 - }); - federationClient = { key, fetch: fetch2, client: client2 }; - } - return { client: federationClient.client.withOptions({ defaultHeaders }), isOAuthToken: false }; - } - const client = new PiAnthropic({ - apiKey: apiKey ?? null, - authToken: null, - baseURL: model2.baseUrl, - dangerouslyAllowBrowser: true, - fetch: fetch2, - defaultHeaders - }); - return { client, isOAuthToken: false }; -} -function getBetaFeatures(model2, context, isOAuthToken2, nativeToolChanges, options) { - let configuredFeatures; - for (const headers of [model2.headers, options?.headers]) { - for (const [name, value2] of Object.entries(headers ?? {})) { - if (name.toLowerCase() === "anthropic-beta") - configuredFeatures = value2; - } - } - if (configuredFeatures === null) - return []; - if (configuredFeatures !== void 0) { - return [ - ...new Set(configuredFeatures.split(",").map((feature) => feature.trim()).filter((feature) => feature.length > 0)) - ]; - } - const features = []; - if (isOAuthToken2) - features.push("claude-code-20250219", "oauth-2025-04-20"); - if (shouldUseFineGrainedToolStreamingBeta(model2, context)) - features.push(FINE_GRAINED_TOOL_STREAMING_BETA); - if (model2.reasoning && options?.thinkingEnabled === true && (options.interleavedThinking ?? true) && model2.compat?.forceAdaptiveThinking !== true) { - features.push(INTERLEAVED_THINKING_BETA); - } - if (shouldUseServerSideFallbackBeta(model2)) - features.push(SERVER_SIDE_FALLBACK_BETA); - if (model2.compat?.supportsMidConvoEffort === true) { - features.push(MID_CONVERSATION_OUTPUT_CONFIG_BETA, THINKING_BINDING_CONTROLS_BETA); - } - if (nativeToolChanges) - features.push(INLINE_TOOLS_BETA); - return [...new Set(features)]; -} -function buildParams(model2, context, isOAuthToken2, options, disablePreferredStrictTools = false) { - const { cacheControl } = getCacheControl(model2, options?.cacheRetention, options?.env); - const compat = getAnthropicCompat(model2); - const initialSystemMessage = getInitialSystemMessage(context.messages); - const initialSystemText = initialSystemMessage ? getSystemMessageText(initialSystemMessage) : ""; - const transformedMessages = transformMessages(context.messages, model2, normalizeToolCallId); - const conversationMessages = initialSystemMessage ? transformedMessages.slice(1) : transformedMessages; - let hasPreferredStrictTools = false; - const convertToolDefinitions = (tools, toolCacheControl2) => { - const definitions = convertTools(tools, isOAuthToken2, compat.supportsEagerToolInputStreaming, compat.supportsStrictTools, toolCacheControl2, disablePreferredStrictTools); - if (definitions.some((definition, index) => definition.strict === true && prefersJsonSchemaStrictSampling(tools[index]))) { - hasPreferredStrictTools = true; - } - return definitions; - }; - const initialTools = initialSystemMessage?.toolsAdded ?? []; - const nativeToolChanges = compat.supportsMidConvoSystemMessages && compat.supportsMidConvoToolChanges && initialTools.length > 0; - const thinkingDisabled = model2.reasoning && options?.thinkingEnabled === false && model2.thinkingLevelMap?.off !== null; - const effortMessages = model2.compat?.supportsMidConvoEffort === true && !thinkingDisabled; - const converted = convertMessages(conversationMessages, isOAuthToken2, cacheControl, compat.allowEmptySignature, effortMessages ? model2.provider : void 0, nativeToolChanges ? convertToolDefinitions : void 0); - const activeEffort = options?.effort ?? "high"; - const betaFeatures = getBetaFeatures(model2, context, isOAuthToken2, nativeToolChanges, options); - const params = { - model: model2.id, - messages: effortMessages ? insertThinkingLevelMessages(converted, activeEffort) : converted.messages, - max_tokens: options?.maxTokens ?? model2.maxTokens, - stream: true, - ...betaFeatures.length > 0 ? { betas: betaFeatures } : {} - }; - if (isOAuthToken2) { - params.system = [ - { - type: "text", - text: "You are Claude Code, Anthropic's official CLI for Claude.", - ...cacheControl ? { cache_control: cacheControl } : {} - } - ]; - if (initialSystemText) { - params.system.push({ - type: "text", - text: sanitizeSurrogates(initialSystemText), - ...cacheControl ? { cache_control: cacheControl } : {} - }); - } - } else if (initialSystemText) { - params.system = [ - { - type: "text", - text: sanitizeSurrogates(initialSystemText), - ...cacheControl ? { cache_control: cacheControl } : {} - } - ]; - } - if (options?.temperature !== void 0 && !options?.thinkingEnabled && model2.compat?.supportsMidConvoEffort !== true && compat.supportsTemperature) { - params.temperature = options.temperature; - } - const toolCacheControl = compat.supportsCacheControlOnTools ? cacheControl : void 0; - if (nativeToolChanges) { - params.tools = [...convertToolDefinitions(initialTools, toolCacheControl), DEFERRED_TOOL_PLACEHOLDER]; - } else { - const tools = getCurrentTools(context.messages); - if (tools.length > 0) { - params.tools = convertToolDefinitions(tools, toolCacheControl); - } - } - if (thinkingDisabled) { - params.thinking = { type: "disabled" }; - } else if (effortMessages) { - params.thinking = { - type: "adaptive", - display: options?.thinkingDisplay ?? "summarized", - block_binding: { prefix_mismatch_behavior: "drop_block" } - }; - params.output_config = { effort: "low" }; - } else if (model2.reasoning && options?.thinkingEnabled) { - const display = options.thinkingDisplay ?? "summarized"; - if (model2.compat?.forceAdaptiveThinking === true) { - params.thinking = { type: "adaptive", display }; - if (options.effort) { - params.output_config = { effort: options.effort }; - } - } else { - params.thinking = { - type: "enabled", - budget_tokens: options.thinkingBudgetTokens || 1024, - display - }; - } - } - if (options?.metadata) { - const userId = options.metadata.user_id; - if (typeof userId === "string") { - params.metadata = { user_id: userId }; - } - } - if (options?.toolChoice) { - if (typeof options.toolChoice === "string") { - params.tool_choice = { type: options.toolChoice }; - } else { - params.tool_choice = options.toolChoice; - } - } - const allowedFallbackModels = model2.compat?.allowedFallbackModels; - if (allowedFallbackModels && allowedFallbackModels.length > 0) { - params.fallbacks = allowedFallbackModels.map((fallback) => ({ model: fallback.model })); - } - return { params, hasPreferredStrictTools, providerThinkingLevel: effortMessages ? activeEffort : void 0 }; -} -function normalizeToolCallId(id) { - return id.replace(/[^a-zA-Z0-9_-]/g, "_").slice(0, 64); -} -function convertToolResult(msg, content = msg.content) { - return { - type: "tool_result", - tool_use_id: msg.toolCallId, - content: convertContentBlocks(content), - is_error: msg.isError - }; -} -function convertMessages(transformedMessages, isOAuthToken2, cacheControl, allowEmptySignature = false, managedProvider, convertToolDefinitions) { - const params = []; - const assistantLevels = /* @__PURE__ */ new Map(); - const pendingSystemMessages = []; - const flushPendingSystemMessages = () => { - params.push(...pendingSystemMessages); - pendingSystemMessages.length = 0; - }; - for (let i = 0; i < transformedMessages.length; i++) { - const msg = transformedMessages[i]; - if (msg.role === "system") { - const text2 = renderSystemMessageUpdate(msg); - const blocks = []; - if (text2.length > 0) - blocks.push({ type: "text", text: sanitizeSurrogates(text2) }); - if (convertToolDefinitions) { - const added = msg.toolsAdded ?? []; - const redefined = new Set(added.map((tool) => tool.name)); - for (const tool of msg.toolsRemoved ?? []) { - if (redefined.has(tool.name)) - continue; - blocks.push({ - type: "tool_removal", - tool: { type: "tool_reference", name: isOAuthToken2 ? toClaudeCodeName(tool.name) : tool.name } - }); - } - for (const definition of convertToolDefinitions(added)) { - blocks.push({ type: "tool_addition", tool: { type: "tool_definition", definition } }); - } - } - if (blocks.length > 0) - pendingSystemMessages.push({ role: "system", content: blocks }); - } else if (msg.role === "user") { - if (typeof msg.content === "string") { - if (msg.content.trim().length > 0) { - params.push({ - role: "user", - content: sanitizeSurrogates(msg.content) - }); - } - } else { - const blocks = msg.content.map((item) => { - if (item.type === "text") { - return { - type: "text", - text: sanitizeSurrogates(item.text) - }; - } else { - return convertImageBlock(item); - } - }); - const filteredBlocks = blocks.filter((b) => { - if (b.type === "text") { - return b.text.trim().length > 0; - } - return true; - }); - if (filteredBlocks.length === 0) - continue; - params.push({ - role: "user", - content: filteredBlocks - }); - } - } else if (msg.role === "assistant") { - const blocks = []; - for (const block of msg.content) { - if (block.type === "text") { - if (block.text.trim().length === 0) - continue; - blocks.push({ - type: "text", - text: sanitizeSurrogates(block.text) - }); - } else if (block.type === "thinking") { - if (block.redacted) { - blocks.push({ - type: "redacted_thinking", - data: block.thinkingSignature - }); - continue; - } - const thinkingSignature = block.thinkingSignature; - const hasThinkingSignature = !!thinkingSignature && thinkingSignature.trim().length > 0; - if (block.thinking.trim().length === 0 && !hasThinkingSignature) - continue; - if (!hasThinkingSignature) { - blocks.push(allowEmptySignature ? { - type: "thinking", - thinking: sanitizeSurrogates(block.thinking), - signature: "" - } : { - type: "text", - text: sanitizeSurrogates(block.thinking) - }); - } else { - blocks.push({ - type: "thinking", - thinking: sanitizeSurrogates(block.thinking), - signature: thinkingSignature - }); - } - } else if (block.type === "toolCall") { - blocks.push({ - type: "tool_use", - id: block.id, - name: isOAuthToken2 ? toClaudeCodeName(block.name) : block.name, - input: block.arguments ?? {} - }); - } - } - if (blocks.length === 0) - continue; - flushPendingSystemMessages(); - const messageIndex = params.length; - params.push({ - role: "assistant", - content: blocks - }); - if (managedProvider !== void 0 && msg.api === "anthropic-messages" && msg.provider === managedProvider && isAnthropicEffort(msg.providerThinkingLevel)) { - assistantLevels.set(messageIndex, msg.providerThinkingLevel); - } - } else if (msg.role === "toolResult") { - const toolResults = []; - const errorImages = []; - let j = i; - while (j < transformedMessages.length && transformedMessages[j].role === "toolResult") { - const toolMsg = transformedMessages[j]; - const split = splitErrorToolResultImages(toolMsg); - toolResults.push(convertToolResult(toolMsg, split?.content)); - if (split) { - errorImages.push({ type: "text", text: split.caption }, ...split.images.map(convertImageBlock)); - } - j++; - } - i = j - 1; - params.push({ - role: "user", - content: [...toolResults, ...errorImages] - }); - } - } - flushPendingSystemMessages(); - if (cacheControl && params.length > 0) { - const lastMessage = params[params.length - 1]; - if (lastMessage.role === "user" || lastMessage.role === "system") { - if (Array.isArray(lastMessage.content)) { - const lastBlock = lastMessage.content[lastMessage.content.length - 1]; - if (lastBlock && (lastBlock.type === "text" || lastBlock.type === "image" || lastBlock.type === "tool_result" || lastBlock.type === "tool_addition" || lastBlock.type === "tool_removal")) { - lastBlock.cache_control = cacheControl; - } - } else if (typeof lastMessage.content === "string") { - lastMessage.content = [ - { - type: "text", - text: lastMessage.content, - cache_control: cacheControl - } - ]; - } - } - } - return { messages: params, assistantLevels }; -} -function isAnthropicEffort(value2) { - return value2 === "low" || value2 === "medium" || value2 === "high" || value2 === "xhigh" || value2 === "max"; -} -function insertThinkingLevelMessages(converted, activeEffort) { - const messages = []; - for (let index = 0; index < converted.messages.length; index++) { - const historicalEffort = converted.assistantLevels.get(index); - if (historicalEffort !== void 0) { - messages.push({ role: "system", content: [], output_config: { effort: historicalEffort } }); - } - messages.push(converted.messages[index]); - } - messages.push({ role: "system", content: [], output_config: { effort: activeEffort } }); - return messages; -} -function shouldUseFineGrainedToolStreamingBeta(model2, context) { - return getCurrentTools(context.messages).length > 0 && !getAnthropicCompat(model2).supportsEagerToolInputStreaming; -} -function convertTools(tools, isOAuthToken2, supportsEagerToolInputStreaming, supportsStrictTools, cacheControl, disablePreferredStrictTools = false) { - if (!tools) - return []; - return tools.map((tool, index) => { - const strict = disablePreferredStrictTools && prefersJsonSchemaStrictSampling(tool) ? void 0 : resolveJsonSchemaStrictSampling(tool, supportsStrictTools, isAnthropicStrictUnsupportedKeyword); - const parameters = getJsonSchemaToolParameters(tool, strict); - const schema4 = parameters; - const legacyInputSchema = { - type: "object", - properties: schema4.properties ?? {}, - required: schema4.required ?? [] - }; - const inputSchema = strict === true ? { - ...parameters, - ...legacyInputSchema - } : legacyInputSchema; - return { - name: isOAuthToken2 ? toClaudeCodeName(tool.name) : tool.name, - description: tool.description, - ...supportsEagerToolInputStreaming ? { eager_input_streaming: true } : {}, - ...strict === true ? { strict: true } : {}, - input_schema: inputSchema, - ...cacheControl && index === tools.length - 1 ? { cache_control: cacheControl } : {} - }; - }); -} -function mapStopReason(reason, stopDetails) { - switch (reason) { - case "end_turn": - return { stopReason: "stop" }; - case "max_tokens": - return { stopReason: "length" }; - case "tool_use": - return { stopReason: "toolUse" }; - case "refusal": - return { - stopReason: "error", - errorMessage: stopDetails?.explanation || `The model refused to complete the request` - }; - case "pause_turn": - return { stopReason: "stop" }; - case "stop_sequence": - return { stopReason: "stop" }; - // We don't supply stop sequences, so this should never happen - case "sensitive": - return { stopReason: "error", errorMessage: "Provider stopped with: sensitive" }; - default: - throw new Error(`Unhandled stop reason: ${reason}`); - } -} -var claudeCodeVersion, claudeCodeTools, ccToolLookup, toClaudeCodeName, fromClaudeCodeName, FINE_GRAINED_TOOL_STREAMING_BETA, INTERLEAVED_THINKING_BETA, SERVER_SIDE_FALLBACK_BETA, MID_CONVERSATION_OUTPUT_CONFIG_BETA, THINKING_BINDING_CONTROLS_BETA, INLINE_TOOLS_BETA, DEFERRED_TOOL_PLACEHOLDER, PiAnthropic, federationClient, ANTHROPIC_MESSAGE_EVENTS, stream2, streamSimple, ANTHROPIC_STRICT_UNSUPPORTED_KEYWORDS, ANTHROPIC_STRICT_STRING_FORMATS, isAnthropicStrictUnsupportedKeyword; -var init_anthropic_messages = __esm({ - "node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js"() { - init_sdk(); - init_env_api_keys(); - init_models(); - init_diagnostics(); - init_event_stream(); - init_headers2(); - init_identity(); - init_json_parse(); - init_openrouter_cost(); - init_provider_env(); - init_provider_retry(); - init_sanitize_unicode(); - init_streaming_json(); - init_text(); - init_transcript(); - init_constrained_sampling(); - init_github_copilot_headers(); - init_simple_options(); - init_transform_messages(); - claudeCodeVersion = "2.1.280"; - claudeCodeTools = [ - "Read", - "Write", - "Edit", - "Bash", - "Grep", - "Glob", - "AskUserQuestion", - "EnterPlanMode", - "ExitPlanMode", - "KillShell", - "NotebookEdit", - "Skill", - "Task", - "TaskOutput", - "TodoWrite", - "WebFetch", - "WebSearch" - ]; - ccToolLookup = new Map(claudeCodeTools.map((t) => [t.toLowerCase(), t])); - toClaudeCodeName = (name) => ccToolLookup.get(name.toLowerCase()) ?? name; - fromClaudeCodeName = (name, tools) => { - if (tools && tools.length > 0) { - const lowerName = name.toLowerCase(); - const matchedTool = tools.find((tool) => tool.name.toLowerCase() === lowerName); - if (matchedTool) - return matchedTool.name; - } - return name; - }; - FINE_GRAINED_TOOL_STREAMING_BETA = "fine-grained-tool-streaming-2025-05-14"; - INTERLEAVED_THINKING_BETA = "interleaved-thinking-2025-05-14"; - SERVER_SIDE_FALLBACK_BETA = "server-side-fallback-2026-07-01"; - MID_CONVERSATION_OUTPUT_CONFIG_BETA = "mid-conversation-output-config-2026-07-01"; - THINKING_BINDING_CONTROLS_BETA = "thinking-binding-controls-2026-08-01"; - INLINE_TOOLS_BETA = "inline-tools-2026-09-15"; - DEFERRED_TOOL_PLACEHOLDER = { - name: "__pi_deferred_placeholder__", - description: "Reserved placeholder. Never available. Never call this.", - input_schema: { type: "object", properties: {}, required: [] }, - defer_loading: true - }; - PiAnthropic = class extends Anthropic { - _shouldResolveDefaultCredentials() { - return false; - } - }; - ANTHROPIC_MESSAGE_EVENTS = /* @__PURE__ */ new Set([ - "message_start", - "message_delta", - "message_stop", - "content_block_start", - "content_block_delta", - "content_block_stop" - ]); - stream2 = (model2, context, options) => { - const stream5 = new AssistantMessageEventStream(); - const normalizedContext = resolveTranscript(context, getAnthropicCompat(model2).supportsMidConvoSystemMessages); - const currentTools = getCurrentTools(normalizedContext.messages); - (async () => { - const output = { - role: "assistant", - content: [], - api: model2.api, - provider: model2.provider, - model: model2.id, - usage: { - input: 0, - output: 0, - cacheRead: 0, - cacheWrite: 0, - totalTokens: 0, - cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 } - }, - stopReason: "pending", - timestamp: Date.now() - }; - try { - let client; - let isOAuth; - let usageModel = model2; - let inputTransformations; - if (options?.client) { - client = options.client; - isOAuth = false; - } else { - const apiKey = options?.apiKey; - const federation = getAnthropicFederation(model2, apiKey, options?.headers, options?.env); - if (!federation) - assertRequestAuth(model2.provider, apiKey, options?.headers); - let copilotDynamicHeaders; - if (model2.provider === "github-copilot") { - const hasImages = hasCopilotVisionInput(normalizedContext.messages); - copilotDynamicHeaders = buildCopilotDynamicHeaders({ - messages: normalizedContext.messages, - hasImages - }); - } - const cacheRetention = resolveCacheRetention(options?.cacheRetention, options?.env); - const cacheSessionId = cacheRetention === "none" ? void 0 : options?.sessionId; - const created = createClient(model2, apiKey, options?.headers, options?.fetch, copilotDynamicHeaders, cacheSessionId, federation, options?.identity); - client = created.client; - isOAuth = created.isOAuthToken; - } - const requestOptions = { - ...options?.signal ? { signal: options.signal } : {}, - ...options?.timeoutMs !== void 0 ? { timeout: options.timeoutMs } : {}, - maxRetries: 0 - }; - let disablePreferredStrictTools = false; - let response; - for (; ; ) { - options?.signal?.throwIfAborted(); - const built = buildParams(model2, normalizedContext, isOAuth, options, disablePreferredStrictTools); - if (built.providerThinkingLevel) - output.providerThinkingLevel = built.providerThinkingLevel; - let params = built.params; - const nextParams = await options?.onPayload?.(params, model2); - if (nextParams !== void 0) { - params = { ...nextParams, stream: true }; - } - try { - response = await retryProviderRequest(() => client.beta.messages.create(params, requestOptions).asResponse(), { - maxRetries: options?.maxRetries, - maxRetryDelayMs: options?.maxRetryDelayMs, - signal: options?.signal - }); - break; - } catch (error) { - if (options?.signal?.aborted || disablePreferredStrictTools || !built.hasPreferredStrictTools || !(error instanceof Anthropic.APIError) || error.status !== 400 || error.type !== "invalid_request_error" || !isStrictToolLimitErrorMessage(error.message)) { - throw error; - } - disablePreferredStrictTools = true; - appendAssistantMessageDiagnostic(output, { - type: "anthropic_strict_tools_fallback", - timestamp: Date.now(), - error: { message: error.message }, - details: { reason: "strict_tool_limits_exceeded" } - }); - } - } - await options?.onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model2); - stream5.push({ type: "start", partial: output }); - const openBlocks = /* @__PURE__ */ new Map(); - const openBlock = (anthropicIndex) => { - const open = openBlocks.get(anthropicIndex); - return open === void 0 ? void 0 : { ...open, block: output.content[open.contentIndex] }; - }; - for await (const event of iterateAnthropicEvents(response, options?.signal)) { - await options?.onProviderStreamEvent?.(event, model2); - if (event.type === "message_start") { - output.responseId = event.message.id; - const transformations = event.message.input_transformations; - if (Array.isArray(transformations)) - inputTransformations = transformations; - const responseModel = event.message.model; - if (responseModel !== model2.id) - output.responseModel = responseModel; - const fallbackCost = responseModel === model2.id ? void 0 : model2.compat?.allowedFallbackModels?.find((fallback) => fallback.provider === model2.provider && fallback.model === responseModel)?.cost; - usageModel = fallbackCost ? { ...model2, id: responseModel, cost: fallbackCost } : model2; - output.usage.input = event.message.usage.input_tokens || 0; - output.usage.output = event.message.usage.output_tokens || 0; - output.usage.cacheRead = event.message.usage.cache_read_input_tokens || 0; - output.usage.cacheWrite = event.message.usage.cache_creation_input_tokens || 0; - output.usage.cacheWrite1h = event.message.usage.cache_creation?.ephemeral_1h_input_tokens || 0; - output.usage.totalTokens = output.usage.input + output.usage.output + output.usage.cacheRead + output.usage.cacheWrite; - calculateCost(usageModel, output.usage); - } else if (event.type === "content_block_start") { - if (event.content_block.type === "fallback") { - if (output.content.length > 0) { - throw new Error("Anthropic performed an unsupported mid-output model fallback"); - } - continue; - } - if (event.content_block.type === "text") { - output.content.push({ type: "text", text: event.content_block.text ?? "" }); - openBlocks.set(event.index, { contentIndex: output.content.length - 1 }); - stream5.push({ type: "text_start", contentIndex: output.content.length - 1, partial: output }); - } else if (event.content_block.type === "thinking") { - output.content.push({ - type: "thinking", - thinking: event.content_block.thinking ?? "", - thinkingSignature: event.content_block.signature ?? "" - }); - openBlocks.set(event.index, { contentIndex: output.content.length - 1 }); - stream5.push({ type: "thinking_start", contentIndex: output.content.length - 1, partial: output }); - } else if (event.content_block.type === "redacted_thinking") { - output.content.push({ - type: "thinking", - thinking: "[Reasoning redacted]", - thinkingSignature: event.content_block.data, - redacted: true - }); - openBlocks.set(event.index, { contentIndex: output.content.length - 1 }); - stream5.push({ type: "thinking_start", contentIndex: output.content.length - 1, partial: output }); - } else if (event.content_block.type === "tool_use") { - output.content.push({ - type: "toolCall", - id: event.content_block.id, - name: isOAuth ? fromClaudeCodeName(event.content_block.name, currentTools) : event.content_block.name, - arguments: event.content_block.input ?? {} - }); - openBlocks.set(event.index, { - contentIndex: output.content.length - 1, - arguments: new ToolCallArgumentsStream() - }); - stream5.push({ type: "toolcall_start", contentIndex: output.content.length - 1, partial: output }); - } - } else if (event.type === "content_block_delta") { - const open = openBlock(event.index); - if (event.delta.type === "text_delta") { - if (open?.block.type === "text") { - open.block.text += event.delta.text; - stream5.push({ - type: "text_delta", - contentIndex: open.contentIndex, - delta: event.delta.text, - partial: output - }); - } - } else if (event.delta.type === "thinking_delta") { - if (open?.block.type === "thinking") { - open.block.thinking += event.delta.thinking; - stream5.push({ - type: "thinking_delta", - contentIndex: open.contentIndex, - delta: event.delta.thinking, - partial: output - }); - } - } else if (event.delta.type === "input_json_delta") { - if (open?.block.type === "toolCall" && open.arguments !== void 0) { - open.block.arguments = open.arguments.append(event.delta.partial_json); - stream5.push({ - type: "toolcall_delta", - contentIndex: open.contentIndex, - delta: event.delta.partial_json, - partial: output - }); - } - } else if (event.delta.type === "signature_delta") { - if (open?.block.type === "thinking") { - open.block.thinkingSignature = open.block.thinkingSignature || ""; - open.block.thinkingSignature += event.delta.signature; - } - } - } else if (event.type === "content_block_stop") { - const open = openBlock(event.index); - openBlocks.delete(event.index); - if (open) { - const { block, contentIndex: index } = open; - if (block.type === "text") { - stream5.push({ - type: "text_end", - contentIndex: index, - content: block.text, - partial: output - }); - } else if (block.type === "thinking") { - stream5.push({ - type: "thinking_end", - contentIndex: index, - content: block.thinking, - partial: output - }); - } else if (block.type === "toolCall" && open.arguments !== void 0) { - Object.assign(block, open.arguments.finish()); - stream5.push({ - type: "toolcall_end", - contentIndex: index, - toolCall: block, - partial: output - }); - } - } - } else if (event.type === "message_delta") { - const transformations = event.input_transformations; - if (Array.isArray(transformations)) - inputTransformations = transformations; - if (event.delta.stop_reason) { - output.rawStopReason = event.delta.stop_reason; - const stopReasonResult = mapStopReason(event.delta.stop_reason, event.delta.stop_details); - output.stopReason = stopReasonResult.stopReason; - if (stopReasonResult.errorMessage) { - output.errorMessage = stopReasonResult.errorMessage; - } - } - if (event.usage) { - if (event.usage.input_tokens != null) { - output.usage.input = event.usage.input_tokens; - } - if (event.usage.output_tokens != null) { - output.usage.output = event.usage.output_tokens; - } - if (event.usage.cache_read_input_tokens != null) { - output.usage.cacheRead = event.usage.cache_read_input_tokens; - } - if (event.usage.cache_creation_input_tokens != null) { - output.usage.cacheWrite = event.usage.cache_creation_input_tokens; - } - const cacheCreation = event.usage.cache_creation; - if (cacheCreation?.ephemeral_1h_input_tokens != null) { - output.usage.cacheWrite1h = cacheCreation.ephemeral_1h_input_tokens; - } - const thinkingTokens = event.usage.output_tokens_details?.thinking_tokens; - if (thinkingTokens != null) { - output.usage.reasoning = thinkingTokens; - } - } - output.usage.totalTokens = output.usage.input + output.usage.output + output.usage.cacheRead + output.usage.cacheWrite; - calculateCost(usageModel, output.usage); - if (isOpenRouterModel(model2) && event.usage) { - applyOpenRouterReportedCost(output.usage, event.usage); - } - } - } - if (options?.signal?.aborted) { - throw new Error("Request was aborted"); - } - if (output.stopReason === "pending") { - throw new Error("Anthropic stream ended without a stop reason"); - } - if (output.stopReason === "aborted" || output.stopReason === "error") { - throw new Error(output.errorMessage || "An unknown error occurred"); - } - if (inputTransformations && inputTransformations.length > 0) { - appendAssistantMessageDiagnostic(output, { - type: "anthropic_input_transformations", - timestamp: Date.now(), - details: { - transformations: inputTransformations.map((transformation) => ({ - type: transformation.type ?? void 0, - path: transformation.path ?? void 0, - reason: transformation.reason ?? void 0 - })) - } - }); - } - stream5.push({ type: "done", reason: output.stopReason, message: output }); - stream5.end(); - } catch (error) { - output.stopReason = options?.signal?.aborted ? "aborted" : "error"; - output.errorMessage = error instanceof Error ? error.message : JSON.stringify(error); - stream5.push({ type: "error", reason: output.stopReason, error: output }); - stream5.end(); - } - })(); - return stream5; - }; - streamSimple = (model2, context, options) => { - if (!getAnthropicFederation(model2, options?.apiKey, options?.headers, options?.env)) { - assertRequestAuth(model2.provider, options?.apiKey, options?.headers); - } - const base = { - ...buildBaseOptions(model2, context, options, options?.apiKey), - toolChoice: options?.toolChoice - }; - if (!options?.reasoning) { - return stream2(model2, context, { - ...base, - thinkingEnabled: false - }); - } - if (model2.compat?.forceAdaptiveThinking === true) { - const effort = mapThinkingLevelToEffort(model2, options.reasoning); - return stream2(model2, context, { - ...base, - thinkingEnabled: true, - effort - }); - } - const adjusted = adjustMaxTokensForThinking(base.maxTokens, model2.maxTokens, options.reasoning, options.thinkingBudgets); - const maxTokens = clampMaxTokensToContext(model2, context, adjusted.maxTokens); - return stream2(model2, context, { - ...base, - maxTokens, - thinkingEnabled: true, - thinkingBudgetTokens: Math.min(adjusted.thinkingBudget, Math.max(0, maxTokens - 1024)) - }); - }; - ANTHROPIC_STRICT_UNSUPPORTED_KEYWORDS = /* @__PURE__ */ new Set([ - "minimum", - "maximum", - "exclusiveMinimum", - "exclusiveMaximum", - "multipleOf", - "maxItems", - "uniqueItems", - "minContains", - "maxContains", - "minProperties", - "maxProperties" - ]); - ANTHROPIC_STRICT_STRING_FORMATS = /* @__PURE__ */ new Set([ - "date-time", - "time", - "date", - "duration", - "email", - "hostname", - "uri", - "ipv4", - "ipv6", - "uuid" - ]); - isAnthropicStrictUnsupportedKeyword = (key, value2) => { - if (ANTHROPIC_STRICT_UNSUPPORTED_KEYWORDS.has(key)) - return true; - if (key === "minItems") - return value2 !== 0 && value2 !== 1; - if (key === "format") - return typeof value2 !== "string" || !ANTHROPIC_STRICT_STRING_FORMATS.has(value2); - return false; - }; - } -}); - -// node_modules/openai/internal/tslib.mjs -function __classPrivateFieldSet2(receiver, state2, value2, kind, f) { - if (kind === "m") - throw new TypeError("Private method is not writable"); - if (kind === "a" && !f) - throw new TypeError("Private accessor was defined without a setter"); - if (typeof state2 === "function" ? receiver !== state2 || !f : !state2.has(receiver)) - throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return kind === "a" ? f.call(receiver, value2) : f ? f.value = value2 : state2.set(receiver, value2), value2; -} -function __classPrivateFieldGet2(receiver, state2, kind, f) { - if (kind === "a" && !f) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state2 === "function" ? receiver !== state2 || !f : !state2.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state2.get(receiver); -} -var init_tslib2 = __esm({ - "node_modules/openai/internal/tslib.mjs"() { - } -}); - -// node_modules/openai/internal/utils/uuid.mjs -var uuid42; -var init_uuid2 = __esm({ - "node_modules/openai/internal/utils/uuid.mjs"() { - uuid42 = function() { - const { crypto: crypto3 } = globalThis; - if (crypto3?.randomUUID) { - uuid42 = crypto3.randomUUID.bind(crypto3); - return crypto3.randomUUID(); - } - const u8 = new Uint8Array(1); - const randomByte = crypto3 ? () => crypto3.getRandomValues(u8)[0] : () => Math.random() * 255 & 255; - return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, (c) => (+c ^ randomByte() & 15 >> +c / 4).toString(16)); - }; - } -}); - // node_modules/openai/internal/errors.mjs -function isAbortError2(err) { +function isAbortError(err) { return typeof err === "object" && err !== null && // Spec-compliant fetch implementations ("name" in err && err.name === "AbortError" || // Expo fetch "message" in err && String(err.message).includes("FetchRequestCanceledException")); } -var castToError2; -var init_errors2 = __esm({ +var castToError; +var init_errors = __esm({ "node_modules/openai/internal/errors.mjs"() { - castToError2 = (err) => { + castToError = (err) => { if (err instanceof Error) return err; if (typeof err === "object" && err !== null) { @@ -19849,13 +2028,13 @@ var init_errors2 = __esm({ }); // node_modules/openai/core/error.mjs -var OpenAIError, APIError2, APIUserAbortError2, APIConnectionError2, APIConnectionTimeoutError2, BadRequestError2, AuthenticationError2, PermissionDeniedError2, NotFoundError2, ConflictError2, UnprocessableEntityError2, RateLimitError2, InternalServerError2, LengthFinishReasonError, ContentFilterFinishReasonError, InvalidWebhookSignatureError, OAuthError, SubjectTokenProviderError; -var init_error3 = __esm({ +var OpenAIError, APIError, APIUserAbortError, APIConnectionError, APIConnectionTimeoutError, BadRequestError, AuthenticationError, PermissionDeniedError, NotFoundError, ConflictError, UnprocessableEntityError, RateLimitError, InternalServerError, LengthFinishReasonError, ContentFilterFinishReasonError, InvalidWebhookSignatureError, OAuthError, SubjectTokenProviderError; +var init_error = __esm({ "node_modules/openai/core/error.mjs"() { - init_errors2(); + init_errors(); OpenAIError = class extends Error { }; - APIError2 = class _APIError extends OpenAIError { + APIError = class _APIError extends OpenAIError { constructor(status, error, message, headers) { super(`${_APIError.makeMessage(status, error, message)}`); this.status = status; @@ -19882,68 +2061,68 @@ var init_error3 = __esm({ } static generate(status, errorResponse, message, headers) { if (!status || !headers) { - return new APIConnectionError2({ message, cause: castToError2(errorResponse) }); + return new APIConnectionError({ message, cause: castToError(errorResponse) }); } const error = errorResponse?.["error"]; if (status === 400) { - return new BadRequestError2(status, error, message, headers); + return new BadRequestError(status, error, message, headers); } if (status === 401) { - return new AuthenticationError2(status, error, message, headers); + return new AuthenticationError(status, error, message, headers); } if (status === 403) { - return new PermissionDeniedError2(status, error, message, headers); + return new PermissionDeniedError(status, error, message, headers); } if (status === 404) { - return new NotFoundError2(status, error, message, headers); + return new NotFoundError(status, error, message, headers); } if (status === 409) { - return new ConflictError2(status, error, message, headers); + return new ConflictError(status, error, message, headers); } if (status === 422) { - return new UnprocessableEntityError2(status, error, message, headers); + return new UnprocessableEntityError(status, error, message, headers); } if (status === 429) { - return new RateLimitError2(status, error, message, headers); + return new RateLimitError(status, error, message, headers); } if (status >= 500) { - return new InternalServerError2(status, error, message, headers); + return new InternalServerError(status, error, message, headers); } return new _APIError(status, error, message, headers); } }; - APIUserAbortError2 = class extends APIError2 { + APIUserAbortError = class extends APIError { constructor({ message } = {}) { super(void 0, void 0, message || "Request was aborted.", void 0); } }; - APIConnectionError2 = class extends APIError2 { + APIConnectionError = class extends APIError { constructor({ message, cause }) { super(void 0, void 0, message || "Connection error.", void 0); if (cause) this.cause = cause; } }; - APIConnectionTimeoutError2 = class extends APIConnectionError2 { + APIConnectionTimeoutError = class extends APIConnectionError { constructor({ message } = {}) { super({ message: message ?? "Request timed out." }); } }; - BadRequestError2 = class extends APIError2 { + BadRequestError = class extends APIError { }; - AuthenticationError2 = class extends APIError2 { + AuthenticationError = class extends APIError { }; - PermissionDeniedError2 = class extends APIError2 { + PermissionDeniedError = class extends APIError { }; - NotFoundError2 = class extends APIError2 { + NotFoundError = class extends APIError { }; - ConflictError2 = class extends APIError2 { + ConflictError = class extends APIError { }; - UnprocessableEntityError2 = class extends APIError2 { + UnprocessableEntityError = class extends APIError { }; - RateLimitError2 = class extends APIError2 { + RateLimitError = class extends APIError { }; - InternalServerError2 = class extends APIError2 { + InternalServerError = class extends APIError { }; LengthFinishReasonError = class extends OpenAIError { constructor() { @@ -19960,7 +2139,7 @@ var init_error3 = __esm({ super(message); } }; - OAuthError = class extends APIError2 { + OAuthError = class extends APIError { constructor(status, error, headers) { let finalMessage = "OAuth2 authentication error"; let error_code = void 0; @@ -19989,36 +2168,36 @@ var init_error3 = __esm({ }); // node_modules/openai/internal/utils/values.mjs -function maybeObj2(x) { +function maybeObj(x) { if (typeof x !== "object") { return {}; } return x ?? {}; } -function isEmptyObj2(obj2) { +function isEmptyObj(obj2) { if (!obj2) return true; for (const _k in obj2) return false; return true; } -function hasOwn2(obj2, key) { +function hasOwn(obj2, key) { return Object.prototype.hasOwnProperty.call(obj2, key); } -function isObj2(obj2) { +function isObj(obj2) { return obj2 != null && typeof obj2 === "object" && !Array.isArray(obj2); } -var startsWithSchemeRegexp2, isAbsoluteURL2, isArray2, isReadonlyArray2, validatePositiveInteger2, safeJSON2; -var init_values2 = __esm({ +var startsWithSchemeRegexp, isAbsoluteURL, isArray, isReadonlyArray, validatePositiveInteger, safeJSON; +var init_values = __esm({ "node_modules/openai/internal/utils/values.mjs"() { - init_error3(); - startsWithSchemeRegexp2 = /^[a-z][a-z0-9+.-]*:/i; - isAbsoluteURL2 = (url) => { - return startsWithSchemeRegexp2.test(url); + init_error(); + startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i; + isAbsoluteURL = (url) => { + return startsWithSchemeRegexp.test(url); }; - isArray2 = (val) => (isArray2 = Array.isArray, isArray2(val)); - isReadonlyArray2 = isArray2; - validatePositiveInteger2 = (name, n) => { + isArray = (val) => (isArray = Array.isArray, isArray(val)); + isReadonlyArray = isArray; + validatePositiveInteger = (name, n) => { if (typeof n !== "number" || !Number.isInteger(n)) { throw new OpenAIError(`${name} must be an integer`); } @@ -20027,7 +2206,7 @@ var init_values2 = __esm({ } return n; }; - safeJSON2 = (text2) => { + safeJSON = (text2) => { try { return JSON.parse(text2); } catch (err) { @@ -20038,10 +2217,10 @@ var init_values2 = __esm({ }); // node_modules/openai/internal/utils/sleep.mjs -var sleep2; -var init_sleep2 = __esm({ +var sleep; +var init_sleep = __esm({ "node_modules/openai/internal/utils/sleep.mjs"() { - sleep2 = (ms, ...signals) => new Promise((resolve2, reject2) => { + sleep = (ms, ...signals) => new Promise((resolve2, reject2) => { const activeSignals = [...new Set(signals.filter((signal) => signal != null))]; let timeout; let settled = false; @@ -20153,7 +2332,7 @@ function addRequestAbortListener(signal, abort, requestSignal) { return cleanup; } var weakGlobals, finalizer, callbackOwners, subscriptions; -var init_abort3 = __esm({ +var init_abort2 = __esm({ "node_modules/openai/internal/utils/abort.mjs"() { weakGlobals = globalThis; finalizer = // oxlint-disable-next-line anti-slop/no-runtime-typeof -- Weak references and finalizers are optional host capabilities, so probe them before constructing either. @@ -20169,22 +2348,22 @@ var init_abort3 = __esm({ }); // node_modules/openai/internal/shims.mjs -function getDefaultFetch2() { +function getDefaultFetch() { if (typeof fetch !== "undefined") { return fetch; } throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`"); } -function makeReadableStream2(...args) { +function makeReadableStream(...args) { const ReadableStream2 = globalThis.ReadableStream; if (typeof ReadableStream2 === "undefined") { throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`"); } return new ReadableStream2(...args); } -function ReadableStreamFrom2(iterable) { +function ReadableStreamFrom(iterable) { let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator](); - return makeReadableStream2({ + return makeReadableStream({ start() { }, async pull(controller) { @@ -20200,7 +2379,7 @@ function ReadableStreamFrom2(iterable) { } }); } -function ReadableStreamToAsyncIterable2(stream5) { +function ReadableStreamToAsyncIterable(stream5) { if (stream5[Symbol.asyncIterator]) return stream5; const reader = stream5.getReader(); @@ -20227,7 +2406,7 @@ function ReadableStreamToAsyncIterable2(stream5) { } }; } -async function CancelReadableStream2(stream5) { +async function CancelReadableStream(stream5) { if (stream5 === null || typeof stream5 !== "object") return; if (stream5[Symbol.asyncIterator]) { @@ -20239,28 +2418,28 @@ async function CancelReadableStream2(stream5) { reader.releaseLock(); await cancelPromise; } -var init_shims2 = __esm({ +var init_shims = __esm({ "node_modules/openai/internal/shims.mjs"() { } }); // node_modules/openai/internal/utils/bytes.mjs -function encodeUTF82(str2) { +function encodeUTF8(str2) { let encoder6; - return (encodeUTF8_2 ?? (encoder6 = new globalThis.TextEncoder(), encodeUTF8_2 = encoder6.encode.bind(encoder6)))(str2); + return (encodeUTF8_ ?? (encoder6 = new globalThis.TextEncoder(), encodeUTF8_ = encoder6.encode.bind(encoder6)))(str2); } -function decodeUTF82(bytes2) { +function decodeUTF8(bytes2) { let decoder5; - return (decodeUTF8_2 ?? (decoder5 = new globalThis.TextDecoder(), decodeUTF8_2 = decoder5.decode.bind(decoder5)))(bytes2); + return (decodeUTF8_ ?? (decoder5 = new globalThis.TextDecoder(), decodeUTF8_ = decoder5.decode.bind(decoder5)))(bytes2); } -var encodeUTF8_2, decodeUTF8_2; -var init_bytes2 = __esm({ +var encodeUTF8_, decodeUTF8_; +var init_bytes = __esm({ "node_modules/openai/internal/utils/bytes.mjs"() { } }); // node_modules/openai/internal/decoders/line.mjs -function findNewlineIndex2(buffer, start, end) { +function findNewlineIndex(buffer, start, end) { const newline = 10; const carriage = 13; for (let i = start; i < end; i++) { @@ -20297,26 +2476,26 @@ function lineEndingLength(buffer, index) { } return 0; } -var _LineDecoder_instances, _LineDecoder_buffer2, _LineDecoder_start, _LineDecoder_end, _LineDecoder_searchIndex, _LineDecoder_skipLeadingLF, _LineDecoder_append, MAX_RETAINED_BUFFER_BYTES, LineDecoder2; -var init_line2 = __esm({ +var _LineDecoder_instances, _LineDecoder_buffer, _LineDecoder_start, _LineDecoder_end, _LineDecoder_searchIndex, _LineDecoder_skipLeadingLF, _LineDecoder_append, MAX_RETAINED_BUFFER_BYTES, LineDecoder; +var init_line = __esm({ "node_modules/openai/internal/decoders/line.mjs"() { - init_tslib2(); - init_bytes2(); + init_tslib(); + init_bytes(); MAX_RETAINED_BUFFER_BYTES = 64 * 1024; - LineDecoder2 = class { + LineDecoder = class { /** Creates a decoder with no buffered bytes or pending newline continuation. */ constructor() { _LineDecoder_instances.add(this); - _LineDecoder_buffer2.set(this, void 0); + _LineDecoder_buffer.set(this, void 0); _LineDecoder_start.set(this, void 0); _LineDecoder_end.set(this, void 0); _LineDecoder_searchIndex.set(this, void 0); _LineDecoder_skipLeadingLF.set(this, void 0); - __classPrivateFieldSet2(this, _LineDecoder_buffer2, new Uint8Array(), "f"); - __classPrivateFieldSet2(this, _LineDecoder_start, 0, "f"); - __classPrivateFieldSet2(this, _LineDecoder_end, 0, "f"); - __classPrivateFieldSet2(this, _LineDecoder_searchIndex, 0, "f"); - __classPrivateFieldSet2(this, _LineDecoder_skipLeadingLF, false, "f"); + __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), "f"); + __classPrivateFieldSet(this, _LineDecoder_start, 0, "f"); + __classPrivateFieldSet(this, _LineDecoder_end, 0, "f"); + __classPrivateFieldSet(this, _LineDecoder_searchIndex, 0, "f"); + __classPrivateFieldSet(this, _LineDecoder_skipLeadingLF, false, "f"); } /** * Appends a text or UTF-8 byte chunk and returns every newly completed line. @@ -20334,15 +2513,15 @@ var init_line2 = __esm({ if (chunk instanceof ArrayBuffer) { binaryChunk = new Uint8Array(chunk); } else if (typeof chunk === "string") { - binaryChunk = encodeUTF82(chunk); + binaryChunk = encodeUTF8(chunk); } else { binaryChunk = chunk; } if (binaryChunk.length === 0) { return []; } - if (__classPrivateFieldGet2(this, _LineDecoder_skipLeadingLF, "f")) { - __classPrivateFieldSet2(this, _LineDecoder_skipLeadingLF, false, "f"); + if (__classPrivateFieldGet(this, _LineDecoder_skipLeadingLF, "f")) { + __classPrivateFieldSet(this, _LineDecoder_skipLeadingLF, false, "f"); if (binaryChunk[0] === 10) { binaryChunk = binaryChunk.subarray(1); } @@ -20350,103 +2529,103 @@ var init_line2 = __esm({ return []; } } - __classPrivateFieldGet2(this, _LineDecoder_instances, "m", _LineDecoder_append).call(this, binaryChunk); + __classPrivateFieldGet(this, _LineDecoder_instances, "m", _LineDecoder_append).call(this, binaryChunk); const lines2 = []; let patternIndex; - while ((patternIndex = findNewlineIndex2(__classPrivateFieldGet2(this, _LineDecoder_buffer2, "f"), __classPrivateFieldGet2(this, _LineDecoder_searchIndex, "f"), __classPrivateFieldGet2(this, _LineDecoder_end, "f"))) != null) { - const line = decodeUTF82(__classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").subarray(__classPrivateFieldGet2(this, _LineDecoder_start, "f"), patternIndex.preceding)); + while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, "f"), __classPrivateFieldGet(this, _LineDecoder_searchIndex, "f"), __classPrivateFieldGet(this, _LineDecoder_end, "f"))) != null) { + const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, "f").subarray(__classPrivateFieldGet(this, _LineDecoder_start, "f"), patternIndex.preceding)); lines2.push(line); - __classPrivateFieldSet2(this, _LineDecoder_start, patternIndex.index, "f"); + __classPrivateFieldSet(this, _LineDecoder_start, patternIndex.index, "f"); if (patternIndex.carriage) { - if (__classPrivateFieldGet2(this, _LineDecoder_start, "f") < __classPrivateFieldGet2(this, _LineDecoder_end, "f") && __classPrivateFieldGet2(this, _LineDecoder_buffer2, "f")[__classPrivateFieldGet2(this, _LineDecoder_start, "f")] === 10) { - __classPrivateFieldSet2(this, _LineDecoder_start, __classPrivateFieldGet2(this, _LineDecoder_start, "f") + 1, "f"); - } else if (__classPrivateFieldGet2(this, _LineDecoder_start, "f") === __classPrivateFieldGet2(this, _LineDecoder_end, "f")) { - __classPrivateFieldSet2(this, _LineDecoder_skipLeadingLF, true, "f"); + if (__classPrivateFieldGet(this, _LineDecoder_start, "f") < __classPrivateFieldGet(this, _LineDecoder_end, "f") && __classPrivateFieldGet(this, _LineDecoder_buffer, "f")[__classPrivateFieldGet(this, _LineDecoder_start, "f")] === 10) { + __classPrivateFieldSet(this, _LineDecoder_start, __classPrivateFieldGet(this, _LineDecoder_start, "f") + 1, "f"); + } else if (__classPrivateFieldGet(this, _LineDecoder_start, "f") === __classPrivateFieldGet(this, _LineDecoder_end, "f")) { + __classPrivateFieldSet(this, _LineDecoder_skipLeadingLF, true, "f"); } } - __classPrivateFieldSet2(this, _LineDecoder_searchIndex, __classPrivateFieldGet2(this, _LineDecoder_start, "f"), "f"); + __classPrivateFieldSet(this, _LineDecoder_searchIndex, __classPrivateFieldGet(this, _LineDecoder_start, "f"), "f"); } - __classPrivateFieldSet2(this, _LineDecoder_searchIndex, __classPrivateFieldGet2(this, _LineDecoder_end, "f"), "f"); - if (__classPrivateFieldGet2(this, _LineDecoder_start, "f") === __classPrivateFieldGet2(this, _LineDecoder_end, "f")) { - __classPrivateFieldSet2(this, _LineDecoder_start, 0, "f"); - __classPrivateFieldSet2(this, _LineDecoder_end, 0, "f"); - __classPrivateFieldSet2(this, _LineDecoder_searchIndex, 0, "f"); - if (__classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").length > MAX_RETAINED_BUFFER_BYTES) { - __classPrivateFieldSet2(this, _LineDecoder_buffer2, new Uint8Array(), "f"); + __classPrivateFieldSet(this, _LineDecoder_searchIndex, __classPrivateFieldGet(this, _LineDecoder_end, "f"), "f"); + if (__classPrivateFieldGet(this, _LineDecoder_start, "f") === __classPrivateFieldGet(this, _LineDecoder_end, "f")) { + __classPrivateFieldSet(this, _LineDecoder_start, 0, "f"); + __classPrivateFieldSet(this, _LineDecoder_end, 0, "f"); + __classPrivateFieldSet(this, _LineDecoder_searchIndex, 0, "f"); + if (__classPrivateFieldGet(this, _LineDecoder_buffer, "f").length > MAX_RETAINED_BUFFER_BYTES) { + __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), "f"); } - } else if (lines2.length > 0 && __classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").length > MAX_RETAINED_BUFFER_BYTES) { - const length = __classPrivateFieldGet2(this, _LineDecoder_end, "f") - __classPrivateFieldGet2(this, _LineDecoder_start, "f"); - if (length <= MAX_RETAINED_BUFFER_BYTES || __classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").length > length * 4) { + } else if (lines2.length > 0 && __classPrivateFieldGet(this, _LineDecoder_buffer, "f").length > MAX_RETAINED_BUFFER_BYTES) { + const length = __classPrivateFieldGet(this, _LineDecoder_end, "f") - __classPrivateFieldGet(this, _LineDecoder_start, "f"); + if (length <= MAX_RETAINED_BUFFER_BYTES || __classPrivateFieldGet(this, _LineDecoder_buffer, "f").length > length * 4) { const capacity = length <= MAX_RETAINED_BUFFER_BYTES ? Math.min(Math.max(length * 2, 256), MAX_RETAINED_BUFFER_BYTES) : length * 2; const buffer = new Uint8Array(capacity); - buffer.set(__classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").subarray(__classPrivateFieldGet2(this, _LineDecoder_start, "f"), __classPrivateFieldGet2(this, _LineDecoder_end, "f"))); - __classPrivateFieldSet2(this, _LineDecoder_buffer2, buffer, "f"); - __classPrivateFieldSet2(this, _LineDecoder_start, 0, "f"); - __classPrivateFieldSet2(this, _LineDecoder_end, length, "f"); - __classPrivateFieldSet2(this, _LineDecoder_searchIndex, length, "f"); + buffer.set(__classPrivateFieldGet(this, _LineDecoder_buffer, "f").subarray(__classPrivateFieldGet(this, _LineDecoder_start, "f"), __classPrivateFieldGet(this, _LineDecoder_end, "f"))); + __classPrivateFieldSet(this, _LineDecoder_buffer, buffer, "f"); + __classPrivateFieldSet(this, _LineDecoder_start, 0, "f"); + __classPrivateFieldSet(this, _LineDecoder_end, length, "f"); + __classPrivateFieldSet(this, _LineDecoder_searchIndex, length, "f"); } } return lines2; } /** Emits the remaining unterminated line, or returns an empty array when idle. */ flush() { - __classPrivateFieldSet2(this, _LineDecoder_skipLeadingLF, false, "f"); - if (__classPrivateFieldGet2(this, _LineDecoder_start, "f") === __classPrivateFieldGet2(this, _LineDecoder_end, "f")) { + __classPrivateFieldSet(this, _LineDecoder_skipLeadingLF, false, "f"); + if (__classPrivateFieldGet(this, _LineDecoder_start, "f") === __classPrivateFieldGet(this, _LineDecoder_end, "f")) { return []; } return this.decode("\n"); } }; - _LineDecoder_buffer2 = /* @__PURE__ */ new WeakMap(), _LineDecoder_start = /* @__PURE__ */ new WeakMap(), _LineDecoder_end = /* @__PURE__ */ new WeakMap(), _LineDecoder_searchIndex = /* @__PURE__ */ new WeakMap(), _LineDecoder_skipLeadingLF = /* @__PURE__ */ new WeakMap(), _LineDecoder_instances = /* @__PURE__ */ new WeakSet(), _LineDecoder_append = function _LineDecoder_append2(chunk) { - if (__classPrivateFieldGet2(this, _LineDecoder_end, "f") + chunk.length > __classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").length) { - const length = __classPrivateFieldGet2(this, _LineDecoder_end, "f") - __classPrivateFieldGet2(this, _LineDecoder_start, "f"); - if (__classPrivateFieldGet2(this, _LineDecoder_start, "f") >= __classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").length / 2 && length + chunk.length <= __classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").length) { - __classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").copyWithin(0, __classPrivateFieldGet2(this, _LineDecoder_start, "f"), __classPrivateFieldGet2(this, _LineDecoder_end, "f")); + _LineDecoder_buffer = /* @__PURE__ */ new WeakMap(), _LineDecoder_start = /* @__PURE__ */ new WeakMap(), _LineDecoder_end = /* @__PURE__ */ new WeakMap(), _LineDecoder_searchIndex = /* @__PURE__ */ new WeakMap(), _LineDecoder_skipLeadingLF = /* @__PURE__ */ new WeakMap(), _LineDecoder_instances = /* @__PURE__ */ new WeakSet(), _LineDecoder_append = function _LineDecoder_append2(chunk) { + if (__classPrivateFieldGet(this, _LineDecoder_end, "f") + chunk.length > __classPrivateFieldGet(this, _LineDecoder_buffer, "f").length) { + const length = __classPrivateFieldGet(this, _LineDecoder_end, "f") - __classPrivateFieldGet(this, _LineDecoder_start, "f"); + if (__classPrivateFieldGet(this, _LineDecoder_start, "f") >= __classPrivateFieldGet(this, _LineDecoder_buffer, "f").length / 2 && length + chunk.length <= __classPrivateFieldGet(this, _LineDecoder_buffer, "f").length) { + __classPrivateFieldGet(this, _LineDecoder_buffer, "f").copyWithin(0, __classPrivateFieldGet(this, _LineDecoder_start, "f"), __classPrivateFieldGet(this, _LineDecoder_end, "f")); } else { - const capacity = Math.max(__classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").length * 2, length + chunk.length, 256); + const capacity = Math.max(__classPrivateFieldGet(this, _LineDecoder_buffer, "f").length * 2, length + chunk.length, 256); const buffer = new Uint8Array(capacity); - buffer.set(__classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").subarray(__classPrivateFieldGet2(this, _LineDecoder_start, "f"), __classPrivateFieldGet2(this, _LineDecoder_end, "f"))); - __classPrivateFieldSet2(this, _LineDecoder_buffer2, buffer, "f"); + buffer.set(__classPrivateFieldGet(this, _LineDecoder_buffer, "f").subarray(__classPrivateFieldGet(this, _LineDecoder_start, "f"), __classPrivateFieldGet(this, _LineDecoder_end, "f"))); + __classPrivateFieldSet(this, _LineDecoder_buffer, buffer, "f"); } - __classPrivateFieldSet2(this, _LineDecoder_searchIndex, __classPrivateFieldGet2(this, _LineDecoder_searchIndex, "f") - __classPrivateFieldGet2(this, _LineDecoder_start, "f"), "f"); - __classPrivateFieldSet2(this, _LineDecoder_end, length, "f"); - __classPrivateFieldSet2(this, _LineDecoder_start, 0, "f"); + __classPrivateFieldSet(this, _LineDecoder_searchIndex, __classPrivateFieldGet(this, _LineDecoder_searchIndex, "f") - __classPrivateFieldGet(this, _LineDecoder_start, "f"), "f"); + __classPrivateFieldSet(this, _LineDecoder_end, length, "f"); + __classPrivateFieldSet(this, _LineDecoder_start, 0, "f"); } - __classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").set(chunk, __classPrivateFieldGet2(this, _LineDecoder_end, "f")); - __classPrivateFieldSet2(this, _LineDecoder_end, __classPrivateFieldGet2(this, _LineDecoder_end, "f") + chunk.length, "f"); + __classPrivateFieldGet(this, _LineDecoder_buffer, "f").set(chunk, __classPrivateFieldGet(this, _LineDecoder_end, "f")); + __classPrivateFieldSet(this, _LineDecoder_end, __classPrivateFieldGet(this, _LineDecoder_end, "f") + chunk.length, "f"); }; - LineDecoder2.NEWLINE_CHARS = /* @__PURE__ */ new Set(["\n", "\r"]); - LineDecoder2.NEWLINE_REGEXP = /\r\n|[\n\r]/g; + LineDecoder.NEWLINE_CHARS = /* @__PURE__ */ new Set(["\n", "\r"]); + LineDecoder.NEWLINE_REGEXP = /\r\n|[\n\r]/g; } }); // node_modules/openai/internal/utils/log.mjs -function noop2() { +function noop() { } -function makeLogFn2(fnLevel, logger, logLevel) { - if (!logger || levelNumbers2[fnLevel] > levelNumbers2[logLevel]) { - return noop2; +function makeLogFn(fnLevel, logger, logLevel) { + if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) { + return noop; } else { return logger[fnLevel].bind(logger); } } -function loggerFor2(client) { +function loggerFor(client) { const logger = client.logger; const logLevel = client.logLevel ?? "off"; if (!logger) { - return noopLogger2; + return noopLogger; } - const cachedLogger = cachedLoggers2.get(logger); + const cachedLogger = cachedLoggers.get(logger); if (cachedLogger && cachedLogger[0] === logLevel) { return cachedLogger[1]; } const levelLogger = { - error: makeLogFn2("error", logger, logLevel), - warn: makeLogFn2("warn", logger, logLevel), - info: makeLogFn2("info", logger, logLevel), - debug: makeLogFn2("debug", logger, logLevel) + error: makeLogFn("error", logger, logLevel), + warn: makeLogFn("warn", logger, logLevel), + info: makeLogFn("info", logger, logLevel), + debug: makeLogFn("debug", logger, logLevel) }; - cachedLoggers2.set(logger, [logLevel, levelLogger]); + cachedLoggers.set(logger, [logLevel, levelLogger]); return levelLogger; } function isSensitiveQueryParameter(name) { @@ -20468,34 +2647,34 @@ function redactURL(value2) { } return url.href; } -var levelNumbers2, parseLogLevel2, noopLogger2, cachedLoggers2, sensitiveQueryNames, sensitiveHeaderNames, formatRequestDetails2; -var init_log2 = __esm({ +var levelNumbers, parseLogLevel, noopLogger, cachedLoggers, sensitiveQueryNames, sensitiveHeaderNames, formatRequestDetails; +var init_log = __esm({ "node_modules/openai/internal/utils/log.mjs"() { - init_values2(); - levelNumbers2 = { + init_values(); + levelNumbers = { off: 0, error: 200, warn: 300, info: 400, debug: 500 }; - parseLogLevel2 = (maybeLevel, sourceName, client) => { + parseLogLevel = (maybeLevel, sourceName, client) => { if (!maybeLevel) { return void 0; } - if (hasOwn2(levelNumbers2, maybeLevel)) { + if (hasOwn(levelNumbers, maybeLevel)) { return maybeLevel; } - loggerFor2(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers2))}`); + loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`); return void 0; }; - noopLogger2 = { - error: noop2, - warn: noop2, - info: noop2, - debug: noop2 + noopLogger = { + error: noop, + warn: noop, + info: noop, + debug: noop }; - cachedLoggers2 = /* @__PURE__ */ new WeakMap(); + cachedLoggers = /* @__PURE__ */ new WeakMap(); sensitiveQueryNames = /* @__PURE__ */ new Set([ "apikey", "accesstoken", @@ -20526,7 +2705,7 @@ var init_log2 = __esm({ "x-auth-token", "x-id-token" ]); - formatRequestDetails2 = (details) => { + formatRequestDetails = (details) => { if (details.options) { details.options = { ...details.options }; delete details.options["headers"]; @@ -20561,7 +2740,7 @@ var init_log2 = __esm({ // node_modules/openai/core/streaming.mjs function isTransportAbortError(error) { - return !(error instanceof APIError2) && isAbortError2(error); + return !(error instanceof APIError) && isAbortError(error); } function createStreamTeeQueue() { let entries2 = []; @@ -20607,7 +2786,7 @@ function createAbortableSSESource(body, signal) { const source = reader ? { next: () => reader.read(), return: () => reader.cancel() - } : ReadableStreamToAsyncIterable2(body)[Symbol.asyncIterator](); + } : ReadableStreamToAsyncIterable(body)[Symbol.asyncIterator](); const ended = { value: void 0, done: true }; let closed = false; let canceled = false; @@ -20655,7 +2834,7 @@ function createAbortableSSESource(body, signal) { } return { value: result.value, done: false }; } catch (error) { - if (signal.aborted && (isAbortError2(error) || error === signal.reason)) { + if (signal.aborted && (isAbortError(error) || error === signal.reason)) { return ended; } throw error; @@ -20719,7 +2898,7 @@ function createAbortableSSESource(body, signal) { } }; } -async function* _iterSSEMessages2(response, controller) { +async function* _iterSSEMessages(response, controller) { if (!response.body) { controller.abort(); if (globalThis.navigator !== void 0 && globalThis.navigator.product === "ReactNative") { @@ -20727,8 +2906,8 @@ async function* _iterSSEMessages2(response, controller) { } throw new OpenAIError(`Attempted to iterate over a response with no body`); } - const sseDecoder = new SSEDecoder2(); - const lineDecoder = new LineDecoder2(); + const sseDecoder = new SSEDecoder(); + const lineDecoder = new LineDecoder(); const { signal } = controller; const source = createAbortableSSESource(response.body, signal); let failed = false; @@ -20769,7 +2948,7 @@ async function* _iterSSEMessages2(response, controller) { } } catch (error) { failed = true; - if (!signal.aborted || !isAbortError2(error) && error !== signal.reason) { + if (!signal.aborted || !isAbortError(error) && error !== signal.reason) { throw error; } } finally { @@ -20789,7 +2968,7 @@ async function* iterSSEChunks(iterator) { if (chunk instanceof ArrayBuffer) { binaryChunk = new Uint8Array(chunk); } else if (typeof chunk === "string") { - binaryChunk = encodeUTF82(chunk); + binaryChunk = encodeUTF8(chunk); } else { binaryChunk = chunk; } @@ -20821,32 +3000,32 @@ async function* iterSSEChunks(iterator) { yield data.slice(dataStart, dataEnd); } } -function partition2(str2, delimiter) { +function partition(str2, delimiter) { const index = str2.indexOf(delimiter); if (index !== -1) { return [str2.slice(0, index), delimiter, str2.slice(index + delimiter.length)]; } return [str2, "", ""]; } -var _Stream_instances, _Stream_client2, _Stream_isTeeBranch, _Stream_cancelIterator, Stream2, DOUBLE_NEWLINE_DELIMITER_MAX_OVERLAP_BYTES, SSEDecoder2; -var init_streaming3 = __esm({ +var _Stream_instances, _Stream_client, _Stream_isTeeBranch, _Stream_cancelIterator, Stream, DOUBLE_NEWLINE_DELIMITER_MAX_OVERLAP_BYTES, SSEDecoder; +var init_streaming = __esm({ "node_modules/openai/core/streaming.mjs"() { - init_tslib2(); - init_error3(); - init_shims2(); - init_line2(); - init_errors2(); - init_bytes2(); - init_log2(); - Stream2 = class _Stream { + init_tslib(); + init_error(); + init_shims(); + init_line(); + init_errors(); + init_bytes(); + init_log(); + Stream = class _Stream { /** Wraps an asynchronous event iterator and the controller that owns its request. */ constructor(iterator, controller, client) { _Stream_instances.add(this); - _Stream_client2.set(this, void 0); + _Stream_client.set(this, void 0); _Stream_isTeeBranch.set(this, false); this.iterator = iterator; this.controller = controller; - __classPrivateFieldSet2(this, _Stream_client2, client, "f"); + __classPrivateFieldSet(this, _Stream_client, client, "f"); } /** * Decodes an SSE response into parsed JSON events. @@ -20857,7 +3036,7 @@ var init_streaming3 = __esm({ */ static fromSSEResponse(response, controller, client, synthesizeEventData) { let consumed = false; - const logger = client ? loggerFor2(client) : console; + const logger = client ? loggerFor(client) : console; async function* iterator() { if (consumed) { throw new OpenAIError("Cannot iterate over a consumed stream, use `.tee()` to split the stream."); @@ -20865,7 +3044,7 @@ var init_streaming3 = __esm({ consumed = true; let done = false; let receivedCompletionSentinel = false; - const messages = _iterSSEMessages2(response, controller); + const messages = _iterSSEMessages(response, controller); const closeMessages = messages.return.bind(messages); messages.return = (value2) => { if (!receivedCompletionSentinel) { @@ -20889,10 +3068,10 @@ var init_streaming3 = __esm({ throw new SyntaxError("Error reading response: malformed server-sent event JSON."); } if (sse.event === "error") { - throw new APIError2(void 0, data?.error ?? data, void 0, response.headers); + throw new APIError(void 0, data?.error ?? data, void 0, response.headers); } if (data && data.error) { - throw new APIError2(void 0, data.error, void 0, response.headers); + throw new APIError(void 0, data.error, void 0, response.headers); } yield synthesizeEventData ? { event: sse.event, data } : data; } else { @@ -20928,7 +3107,7 @@ var init_streaming3 = __esm({ static fromReadableStream(readableStream, controller, client) { let consumed = false; async function* iterLines() { - const lineDecoder = new LineDecoder2(); + const lineDecoder = new LineDecoder(); const reader = readableStream.getReader(); let closed = false; let cancelPromise; @@ -20998,7 +3177,7 @@ var init_streaming3 = __esm({ } done = true; } catch (e) { - if (controller.signal.aborted || isAbortError2(e)) { + if (controller.signal.aborted || isAbortError(e)) { return; } throw e; @@ -21011,7 +3190,7 @@ var init_streaming3 = __esm({ return new _Stream(iterator, controller, client); } /** Starts consuming this stream; attempting to consume it again throws. */ - [(_Stream_client2 = /* @__PURE__ */ new WeakMap(), _Stream_isTeeBranch = /* @__PURE__ */ new WeakMap(), _Stream_instances = /* @__PURE__ */ new WeakSet(), Symbol.asyncIterator)]() { + [(_Stream_client = /* @__PURE__ */ new WeakMap(), _Stream_isTeeBranch = /* @__PURE__ */ new WeakMap(), _Stream_instances = /* @__PURE__ */ new WeakSet(), Symbol.asyncIterator)]() { return this.iterator(); } /** @@ -21045,15 +3224,15 @@ var init_streaming3 = __esm({ if (!queue2.canceled) { queue2.cancel(); if (left.canceled && right.canceled) { - await __classPrivateFieldGet2(this, _Stream_instances, "m", _Stream_cancelIterator).call(this, iterator, controller); + await __classPrivateFieldGet(this, _Stream_instances, "m", _Stream_cancelIterator).call(this, iterator, controller); } } return { value: void 0, done: true }; } }); const branch = (queue2) => { - const stream5 = new _Stream(() => teeIterator(queue2), controller, __classPrivateFieldGet2(this, _Stream_client2, "f")); - __classPrivateFieldSet2(stream5, _Stream_isTeeBranch, true, "f"); + const stream5 = new _Stream(() => teeIterator(queue2), controller, __classPrivateFieldGet(this, _Stream_client, "f")); + __classPrivateFieldSet(stream5, _Stream_isTeeBranch, true, "f"); return stream5; }; return [branch(left), branch(right)]; @@ -21070,8 +3249,8 @@ var init_streaming3 = __esm({ const { controller } = this; let iter; let cancellation; - const cancel = () => cancellation ?? (cancellation = __classPrivateFieldGet2(this, _Stream_instances, "m", _Stream_cancelIterator).call(this, iter, controller)); - return makeReadableStream2({ + const cancel = () => cancellation ?? (cancellation = __classPrivateFieldGet(this, _Stream_instances, "m", _Stream_cancelIterator).call(this, iter, controller)); + return makeReadableStream({ start: async () => { iter = this[Symbol.asyncIterator](); }, @@ -21081,7 +3260,7 @@ var init_streaming3 = __esm({ if (done) { return ctrl.close(); } - const bytes2 = encodeUTF82(JSON.stringify(value2) + "\n"); + const bytes2 = encodeUTF8(JSON.stringify(value2) + "\n"); ctrl.enqueue(bytes2); } catch (err) { ctrl.error(err); @@ -21095,14 +3274,14 @@ var init_streaming3 = __esm({ _Stream_cancelIterator = async function _Stream_cancelIterator2(iterator, controller) { const returnMethod = iterator.return; if (returnMethod) { - if (!__classPrivateFieldGet2(this, _Stream_isTeeBranch, "f")) { + if (!__classPrivateFieldGet(this, _Stream_isTeeBranch, "f")) { controller.abort(); } await Reflect.apply(returnMethod, iterator, []); } }; DOUBLE_NEWLINE_DELIMITER_MAX_OVERLAP_BYTES = 3; - SSEDecoder2 = class { + SSEDecoder = class { constructor() { this.event = null; this.data = []; @@ -21130,7 +3309,7 @@ var init_streaming3 = __esm({ if (line.startsWith(":")) { return null; } - const [fieldname, , initialValue] = partition2(line, ":"); + const [fieldname, , initialValue] = partition(line, ":"); let value2 = initialValue; if (value2.startsWith(" ")) { value2 = value2.slice(1); @@ -21155,16 +3334,16 @@ var init_streaming3 = __esm({ }); // node_modules/openai/internal/parse.mjs -async function defaultParseResponse2(client, props) { +async function defaultParseResponse(client, props) { const { response, requestLogID, retryOfRequestLogID, startTime } = props; let jsonBodyLength; const body = await (async () => { if (props.options.stream) { - loggerFor2(client).debug("response", response.status, response.url, response.headers, response.body); + loggerFor(client).debug("response", response.status, response.url, response.headers, response.body); if (props.options.__streamClass) { return props.options.__streamClass.fromSSEResponse(response, props.controller, client, props.options.__synthesizeEventData); } - return Stream2.fromSSEResponse(response, props.controller, client, props.options.__synthesizeEventData); + return Stream.fromSSEResponse(response, props.controller, client, props.options.__synthesizeEventData); } if (response.status === 204) { return null; @@ -21194,7 +3373,7 @@ async function defaultParseResponse2(client, props) { throw asAbortError(error, props.controller.signal); }); if (client.logLevel === "debug") { - loggerFor2(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails2({ + loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({ retryOfRequestLogID, url: response.url, status: response.status, @@ -21205,7 +3384,7 @@ async function defaultParseResponse2(client, props) { return body; } function asAbortError(error, signal) { - if (!signal.aborted || error !== signal.reason || isAbortError2(error)) { + if (!signal.aborted || error !== signal.reason || isAbortError(error)) { return error; } const message = "This operation was aborted"; @@ -21221,24 +3400,24 @@ function addRequestID(value2, response) { enumerable: false }); } -var init_parse2 = __esm({ +var init_parse = __esm({ "node_modules/openai/internal/parse.mjs"() { - init_streaming3(); - init_errors2(); - init_log2(); + init_streaming(); + init_errors(); + init_log(); } }); // node_modules/openai/version.mjs -var VERSION2; -var init_version3 = __esm({ +var VERSION; +var init_version2 = __esm({ "node_modules/openai/version.mjs"() { - VERSION2 = "7.19.0"; + VERSION = "7.19.0"; } }); // node_modules/openai/internal/detect-platform.mjs -function getDetectedPlatform2() { +function getDetectedPlatform() { if (typeof Deno !== "undefined" && Deno.build != null) { return "deno"; } @@ -21250,7 +3429,7 @@ function getDetectedPlatform2() { } return "unknown"; } -function getBrowserInfo2() { +function getBrowserInfo() { if (typeof navigator === "undefined" || !navigator) { return null; } @@ -21273,11 +3452,11 @@ function getBrowserInfo2() { } return null; } -var isRunningInBrowser2, getPlatformProperties2, normalizeArch2, normalizePlatform2, _platformHeaders2, getPlatformHeaders2; -var init_detect_platform2 = __esm({ +var isRunningInBrowser, getPlatformProperties, normalizeArch, normalizePlatform, _platformHeaders, getPlatformHeaders; +var init_detect_platform = __esm({ "node_modules/openai/internal/detect-platform.mjs"() { - init_version3(); - isRunningInBrowser2 = () => { + init_version2(); + isRunningInBrowser = () => { return ( // @ts-ignore typeof window !== "undefined" && // @ts-ignore @@ -21285,14 +3464,14 @@ var init_detect_platform2 = __esm({ typeof navigator !== "undefined" ); }; - getPlatformProperties2 = () => { - const detectedPlatform = getDetectedPlatform2(); + getPlatformProperties = () => { + const detectedPlatform = getDetectedPlatform(); if (detectedPlatform === "deno") { return { "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION2, - "X-Stainless-OS": normalizePlatform2(Deno.build.os), - "X-Stainless-Arch": normalizeArch2(Deno.build.arch), + "X-Stainless-Package-Version": VERSION, + "X-Stainless-OS": normalizePlatform(Deno.build.os), + "X-Stainless-Arch": normalizeArch(Deno.build.arch), "X-Stainless-Runtime": "deno", "X-Stainless-Runtime-Version": typeof Deno.version === "string" ? Deno.version : Deno.version?.deno ?? "unknown" }; @@ -21300,7 +3479,7 @@ var init_detect_platform2 = __esm({ if (typeof EdgeRuntime !== "undefined") { return { "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION2, + "X-Stainless-Package-Version": VERSION, "X-Stainless-OS": "Unknown", "X-Stainless-Arch": `other:${EdgeRuntime}`, "X-Stainless-Runtime": "edge", @@ -21310,18 +3489,18 @@ var init_detect_platform2 = __esm({ if (detectedPlatform === "node") { return { "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION2, - "X-Stainless-OS": normalizePlatform2(globalThis.process.platform ?? "unknown"), - "X-Stainless-Arch": normalizeArch2(globalThis.process.arch ?? "unknown"), + "X-Stainless-Package-Version": VERSION, + "X-Stainless-OS": normalizePlatform(globalThis.process.platform ?? "unknown"), + "X-Stainless-Arch": normalizeArch(globalThis.process.arch ?? "unknown"), "X-Stainless-Runtime": "node", "X-Stainless-Runtime-Version": globalThis.process.version ?? "unknown" }; } - const browserInfo = getBrowserInfo2(); + const browserInfo = getBrowserInfo(); if (browserInfo) { return { "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION2, + "X-Stainless-Package-Version": VERSION, "X-Stainless-OS": "Unknown", "X-Stainless-Arch": "unknown", "X-Stainless-Runtime": `browser:${browserInfo.browser}`, @@ -21330,14 +3509,14 @@ var init_detect_platform2 = __esm({ } return { "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION2, + "X-Stainless-Package-Version": VERSION, "X-Stainless-OS": "Unknown", "X-Stainless-Arch": "unknown", "X-Stainless-Runtime": "unknown", "X-Stainless-Runtime-Version": "unknown" }; }; - normalizeArch2 = (arch) => { + normalizeArch = (arch) => { if (arch === "x32") return "x32"; if (arch === "x86_64" || arch === "x64") @@ -21350,7 +3529,7 @@ var init_detect_platform2 = __esm({ return `other:${arch}`; return "unknown"; }; - normalizePlatform2 = (platform) => { + normalizePlatform = (platform) => { platform = platform.toLowerCase(); if (platform.includes("ios")) return "iOS"; @@ -21370,8 +3549,8 @@ var init_detect_platform2 = __esm({ return `Other:${platform}`; return "Unknown"; }; - getPlatformHeaders2 = () => { - return _platformHeaders2 ?? (_platformHeaders2 = getPlatformProperties2()); + getPlatformHeaders = () => { + return _platformHeaders ?? (_platformHeaders = getPlatformProperties()); }; } }); @@ -21395,11 +3574,11 @@ function observeJSONRequestBody(body, observer) { } }; } -var jsonRequestBodyObservers, FallbackEncoder2; -var init_request_options2 = __esm({ +var jsonRequestBodyObservers, FallbackEncoder; +var init_request_options = __esm({ "node_modules/openai/internal/request-options.mjs"() { jsonRequestBodyObservers = /* @__PURE__ */ new WeakMap(); - FallbackEncoder2 = ({ headers, body }) => { + FallbackEncoder = ({ headers, body }) => { const observers = typeof body === "object" && body !== null ? jsonRequestBodyObservers.get(body) : void 0; let encoded; if (!observers || observers.size === 0) { @@ -21431,28 +3610,28 @@ var init_request_options2 = __esm({ }); // node_modules/openai/internal/qs/formats.mjs -var default_format2, default_formatter2, formatters2, RFC17382; -var init_formats2 = __esm({ +var default_format, default_formatter, formatters, RFC1738; +var init_formats = __esm({ "node_modules/openai/internal/qs/formats.mjs"() { - default_format2 = "RFC3986"; - default_formatter2 = String; - formatters2 = { + default_format = "RFC3986"; + default_formatter = String; + formatters = { RFC1738: (v) => String(v).replace(/%20/g, "+"), - RFC3986: default_formatter2 + RFC3986: default_formatter }; - RFC17382 = "RFC1738"; + RFC1738 = "RFC1738"; } }); // node_modules/openai/internal/qs/utils.mjs -function is_buffer2(obj2) { +function is_buffer(obj2) { if (!obj2 || typeof obj2 !== "object") { return false; } return !!(obj2.constructor && obj2.constructor.isBuffer && obj2.constructor.isBuffer(obj2)); } -function maybe_map2(val, fn) { - if (isArray2(val)) { +function maybe_map(val, fn) { + if (isArray(val)) { const mapped = []; for (const item of val) { mapped.push(fn(item)); @@ -21461,25 +3640,25 @@ function maybe_map2(val, fn) { } return fn(val); } -var cachedHas, has2, hex_table2, limit2, encode2; -var init_utils3 = __esm({ +var cachedHas, has, hex_table, limit, encode; +var init_utils = __esm({ "node_modules/openai/internal/qs/utils.mjs"() { - init_formats2(); - init_values2(); - has2 = (obj2, key) => { + init_formats(); + init_values(); + has = (obj2, key) => { const resolvedHas = cachedHas ?? Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty); cachedHas = resolvedHas; return resolvedHas(obj2, key); }; - hex_table2 = /* @__PURE__ */ (() => { + hex_table = /* @__PURE__ */ (() => { const array = []; for (let i = 0; i < 256; ++i) { array.push("%" + ((i < 16 ? "0" : "") + i.toString(16)).toUpperCase()); } return array; })(); - limit2 = 1024; - encode2 = (str2, _defaultEncoder, charset, _kind, format) => { + limit = 1024; + encode = (str2, _defaultEncoder, charset, _kind, format) => { if (str2.length === 0) { return str2; } @@ -21494,11 +3673,11 @@ var init_utils3 = __esm({ } let out = ""; for (let j = 0; j < string2.length; ) { - let segmentEnd = Math.min((Math.floor(j / limit2) + 1) * limit2, string2.length); + let segmentEnd = Math.min((Math.floor(j / limit) + 1) * limit, string2.length); if (segmentEnd < string2.length && string2.codePointAt(segmentEnd - 1) > 65535) { segmentEnd += 1; } - const segment = string2.length >= limit2 ? string2.slice(j, segmentEnd) : string2; + const segment = string2.length >= limit ? string2.slice(j, segmentEnd) : string2; const arr2 = []; for (let i = 0; i < segment.length; ++i) { let c = segment.charCodeAt(i); @@ -21509,25 +3688,25 @@ var init_utils3 = __esm({ c >= 48 && c <= 57 || // 0-9 c >= 65 && c <= 90 || // a-z c >= 97 && c <= 122 || // A-Z - format === RFC17382 && (c === 40 || c === 41)) { + format === RFC1738 && (c === 40 || c === 41)) { arr2[arr2.length] = segment.charAt(i); continue; } if (c < 128) { - arr2[arr2.length] = hex_table2[c]; + arr2[arr2.length] = hex_table[c]; continue; } if (c < 2048) { - arr2[arr2.length] = hex_table2[192 | c >> 6] + hex_table2[128 | c & 63]; + arr2[arr2.length] = hex_table[192 | c >> 6] + hex_table[128 | c & 63]; continue; } if (c < 55296 || c >= 57344) { - arr2[arr2.length] = hex_table2[224 | c >> 12] + hex_table2[128 | c >> 6 & 63] + hex_table2[128 | c & 63]; + arr2[arr2.length] = hex_table[224 | c >> 12] + hex_table[128 | c >> 6 & 63] + hex_table[128 | c & 63]; continue; } i += 1; c = 65536 + ((c & 1023) << 10 | segment.charCodeAt(i) & 1023); - arr2[arr2.length] = hex_table2[240 | c >> 18] + hex_table2[128 | c >> 12 & 63] + hex_table2[128 | c >> 6 & 63] + hex_table2[128 | c & 63]; + arr2[arr2.length] = hex_table[240 | c >> 18] + hex_table[128 | c >> 12 & 63] + hex_table[128 | c >> 6 & 63] + hex_table[128 | c & 63]; } out += arr2.join(""); j = segmentEnd; @@ -21538,15 +3717,15 @@ var init_utils3 = __esm({ }); // node_modules/openai/internal/qs/stringify.mjs -function is_non_nullish_primitive2(v) { +function is_non_nullish_primitive(v) { return typeof v === "string" || typeof v === "number" || typeof v === "boolean" || typeof v === "symbol" || typeof v === "bigint"; } -function inner_stringify2(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder6, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) { +function inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder6, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) { let obj2 = object; let tmp_sc = sideChannel; let step = 0; let find_flag = false; - while ((tmp_sc = tmp_sc.get(sentinel2)) !== void 0 && !find_flag) { + while ((tmp_sc = tmp_sc.get(sentinel)) !== void 0 && !find_flag) { const pos = tmp_sc.get(object); step += 1; if (pos !== void 0) { @@ -21556,7 +3735,7 @@ function inner_stringify2(object, prefix, generateArrayPrefix, commaRoundTrip, a find_flag = true; } } - if (tmp_sc.get(sentinel2) === void 0) { + if (tmp_sc.get(sentinel) === void 0) { step = 0; } } @@ -21564,8 +3743,8 @@ function inner_stringify2(object, prefix, generateArrayPrefix, commaRoundTrip, a obj2 = filter(prefix, obj2); } else if (obj2 instanceof Date) { obj2 = serializeDate?.(obj2); - } else if (generateArrayPrefix === "comma" && isArray2(obj2)) { - obj2 = maybe_map2(obj2, (value2) => { + } else if (generateArrayPrefix === "comma" && isArray(obj2)) { + obj2 = maybe_map(obj2, (value2) => { if (value2 instanceof Date) { return serializeDate?.(value2); } @@ -21576,20 +3755,20 @@ function inner_stringify2(object, prefix, generateArrayPrefix, commaRoundTrip, a if (strictNullHandling) { return encoder6 && !encodeValuesOnly ? ( // @ts-expect-error - encoder6(prefix, defaults2.encoder, charset, "key", format) + encoder6(prefix, defaults.encoder, charset, "key", format) ) : prefix; } obj2 = ""; } - if (is_non_nullish_primitive2(obj2) || is_buffer2(obj2)) { + if (is_non_nullish_primitive(obj2) || is_buffer(obj2)) { if (encoder6) { const key_value = encodeValuesOnly ? prefix : ( // @ts-expect-error - encoder6(prefix, defaults2.encoder, charset, "key", format) + encoder6(prefix, defaults.encoder, charset, "key", format) ); return [ formatter?.(key_value) + "=" + // @ts-expect-error - formatter?.(encoder6(obj2, defaults2.encoder, charset, "value", format)) + formatter?.(encoder6(obj2, defaults.encoder, charset, "value", format)) ]; } return [formatter?.(prefix) + "=" + formatter?.(String(obj2))]; @@ -21599,12 +3778,12 @@ function inner_stringify2(object, prefix, generateArrayPrefix, commaRoundTrip, a return values; } let obj_keys; - if (generateArrayPrefix === "comma" && isArray2(obj2)) { + if (generateArrayPrefix === "comma" && isArray(obj2)) { if (encodeValuesOnly && encoder6) { - obj2 = maybe_map2(obj2, encoder6); + obj2 = maybe_map(obj2, encoder6); } obj_keys = [{ value: obj2.length > 0 ? obj2.join(",") || null : void 0 }]; - } else if (isArray2(filter)) { + } else if (isArray(filter)) { obj_keys = filter; } else { const keys = Object.keys(obj2); @@ -21614,8 +3793,8 @@ function inner_stringify2(object, prefix, generateArrayPrefix, commaRoundTrip, a obj_keys = keys; } const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\./g, "%2E") : String(prefix); - const adjusted_prefix = commaRoundTrip && isArray2(obj2) && obj2.length === 1 ? encoded_prefix + "[]" : encoded_prefix; - if (allowEmptyArrays && isArray2(obj2) && obj2.length === 0) { + const adjusted_prefix = commaRoundTrip && isArray(obj2) && obj2.length === 1 ? encoded_prefix + "[]" : encoded_prefix; + if (allowEmptyArrays && isArray(obj2) && obj2.length === 0) { return adjusted_prefix + "[]"; } for (const key of obj_keys) { @@ -21628,14 +3807,14 @@ function inner_stringify2(object, prefix, generateArrayPrefix, commaRoundTrip, a } const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\./g, "%2E") : key; let key_prefix; - if (isArray2(obj2)) { + if (isArray(obj2)) { key_prefix = typeof generateArrayPrefix === "function" ? generateArrayPrefix(adjusted_prefix, encoded_key) : adjusted_prefix; } else { key_prefix = adjusted_prefix + (allowDots ? "." + encoded_key : "[" + encoded_key + "]"); } sideChannel.set(object, step); - const valueSideChannel = new WeakMap([[sentinel2, sideChannel]]); - push_to_array2(values, inner_stringify2( + const valueSideChannel = new WeakMap([[sentinel, sideChannel]]); + push_to_array(values, inner_stringify( value2, key_prefix, generateArrayPrefix, @@ -21645,7 +3824,7 @@ function inner_stringify2(object, prefix, generateArrayPrefix, commaRoundTrip, a skipNulls, encodeDotInKeys, // @ts-ignore - generateArrayPrefix === "comma" && encodeValuesOnly && isArray2(obj2) ? null : encoder6, + generateArrayPrefix === "comma" && encodeValuesOnly && isArray(obj2) ? null : encoder6, filter, sort, allowDots, @@ -21659,7 +3838,7 @@ function inner_stringify2(object, prefix, generateArrayPrefix, commaRoundTrip, a } return values; } -function normalize_stringify_options2(opts = defaults2) { +function normalize_stringify_options(opts = defaults) { if (opts.allowEmptyArrays !== void 0 && typeof opts.allowEmptyArrays !== "boolean") { throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided"); } @@ -21669,72 +3848,72 @@ function normalize_stringify_options2(opts = defaults2) { if (opts.encoder !== null && opts.encoder !== void 0 && typeof opts.encoder !== "function") { throw new TypeError("Encoder has to be a function."); } - const charset = opts.charset || defaults2.charset; + const charset = opts.charset || defaults.charset; if (opts.charset !== void 0 && opts.charset !== "utf-8" && opts.charset !== "iso-8859-1") { throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined"); } - let format = default_format2; + let format = default_format; if (opts.format !== void 0) { - if (!has2(formatters2, opts.format)) { + if (!has(formatters, opts.format)) { throw new TypeError("Unknown format option provided."); } format = opts.format; } - const formatter = formatters2[format]; - let filter = defaults2.filter; - if (typeof opts.filter === "function" || isArray2(opts.filter)) { + const formatter = formatters[format]; + let filter = defaults.filter; + if (typeof opts.filter === "function" || isArray(opts.filter)) { filter = opts.filter; } let arrayFormat; - if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators2) { + if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) { arrayFormat = opts.arrayFormat; } else if ("indices" in opts) { arrayFormat = opts.indices ? "indices" : "repeat"; } else { - arrayFormat = defaults2.arrayFormat; + arrayFormat = defaults.arrayFormat; } if ("commaRoundTrip" in opts && typeof opts.commaRoundTrip !== "boolean") { throw new TypeError("`commaRoundTrip` must be a boolean, or absent"); } let allowDots; if (opts.allowDots === void 0) { - allowDots = !!opts.encodeDotInKeys === true ? true : defaults2.allowDots; + allowDots = !!opts.encodeDotInKeys === true ? true : defaults.allowDots; } else { allowDots = !!opts.allowDots; } return { - addQueryPrefix: typeof opts.addQueryPrefix === "boolean" ? opts.addQueryPrefix : defaults2.addQueryPrefix, + addQueryPrefix: typeof opts.addQueryPrefix === "boolean" ? opts.addQueryPrefix : defaults.addQueryPrefix, // @ts-ignore allowDots, - allowEmptyArrays: typeof opts.allowEmptyArrays === "boolean" ? !!opts.allowEmptyArrays : defaults2.allowEmptyArrays, + allowEmptyArrays: typeof opts.allowEmptyArrays === "boolean" ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays, arrayFormat, charset, - charsetSentinel: typeof opts.charsetSentinel === "boolean" ? opts.charsetSentinel : defaults2.charsetSentinel, + charsetSentinel: typeof opts.charsetSentinel === "boolean" ? opts.charsetSentinel : defaults.charsetSentinel, commaRoundTrip: !!opts.commaRoundTrip, - delimiter: opts.delimiter === void 0 ? defaults2.delimiter : opts.delimiter, - encode: typeof opts.encode === "boolean" ? opts.encode : defaults2.encode, - encodeDotInKeys: typeof opts.encodeDotInKeys === "boolean" ? opts.encodeDotInKeys : defaults2.encodeDotInKeys, - encoder: typeof opts.encoder === "function" ? opts.encoder : defaults2.encoder, - encodeValuesOnly: typeof opts.encodeValuesOnly === "boolean" ? opts.encodeValuesOnly : defaults2.encodeValuesOnly, + delimiter: opts.delimiter === void 0 ? defaults.delimiter : opts.delimiter, + encode: typeof opts.encode === "boolean" ? opts.encode : defaults.encode, + encodeDotInKeys: typeof opts.encodeDotInKeys === "boolean" ? opts.encodeDotInKeys : defaults.encodeDotInKeys, + encoder: typeof opts.encoder === "function" ? opts.encoder : defaults.encoder, + encodeValuesOnly: typeof opts.encodeValuesOnly === "boolean" ? opts.encodeValuesOnly : defaults.encodeValuesOnly, filter, format, formatter, - serializeDate: typeof opts.serializeDate === "function" ? opts.serializeDate : defaults2.serializeDate, - skipNulls: typeof opts.skipNulls === "boolean" ? opts.skipNulls : defaults2.skipNulls, + serializeDate: typeof opts.serializeDate === "function" ? opts.serializeDate : defaults.serializeDate, + skipNulls: typeof opts.skipNulls === "boolean" ? opts.skipNulls : defaults.skipNulls, // @ts-ignore sort: typeof opts.sort === "function" ? opts.sort : null, - strictNullHandling: typeof opts.strictNullHandling === "boolean" ? opts.strictNullHandling : defaults2.strictNullHandling + strictNullHandling: typeof opts.strictNullHandling === "boolean" ? opts.strictNullHandling : defaults.strictNullHandling }; } -function stringify2(object, opts = {}) { +function stringify(object, opts = {}) { let obj2 = object; - const options = normalize_stringify_options2(opts); + const options = normalize_stringify_options(opts); let obj_keys; let filter; if (typeof options.filter === "function") { filter = options.filter; obj2 = filter("", obj2); - } else if (isArray2(options.filter)) { + } else if (isArray(options.filter)) { filter = options.filter; obj_keys = filter; } @@ -21742,7 +3921,7 @@ function stringify2(object, opts = {}) { if (typeof obj2 !== "object" || obj2 === null) { return ""; } - const generateArrayPrefix = array_prefix_generators2[options.arrayFormat]; + const generateArrayPrefix = array_prefix_generators[options.arrayFormat]; const commaRoundTrip = generateArrayPrefix === "comma" && options.commaRoundTrip; if (!obj_keys) { obj_keys = Object.keys(obj2); @@ -21755,7 +3934,7 @@ function stringify2(object, opts = {}) { if (options.skipNulls && obj2[key] === null) { continue; } - push_to_array2(keys, inner_stringify2( + push_to_array(keys, inner_stringify( obj2[key], key, // @ts-expect-error @@ -21790,13 +3969,13 @@ function stringify2(object, opts = {}) { } return joined.length > 0 ? prefix + joined : ""; } -var array_prefix_generators2, push_to_array2, toISOString2, defaults2, sentinel2; -var init_stringify2 = __esm({ +var array_prefix_generators, push_to_array, toISOString, defaults, sentinel; +var init_stringify = __esm({ "node_modules/openai/internal/qs/stringify.mjs"() { - init_utils3(); - init_formats2(); - init_values2(); - array_prefix_generators2 = { + init_utils(); + init_formats(); + init_values(); + array_prefix_generators = { brackets(prefix) { return String(prefix) + "[]"; }, @@ -21808,10 +3987,10 @@ var init_stringify2 = __esm({ return String(prefix); } }; - push_to_array2 = function push_to_array3(arr2, value_or_array) { - Array.prototype.push.apply(arr2, isArray2(value_or_array) ? value_or_array : [value_or_array]); + push_to_array = function push_to_array2(arr2, value_or_array) { + Array.prototype.push.apply(arr2, isArray(value_or_array) ? value_or_array : [value_or_array]); }; - defaults2 = { + defaults = { addQueryPrefix: false, allowDots: false, allowEmptyArrays: false, @@ -21821,29 +4000,29 @@ var init_stringify2 = __esm({ delimiter: "&", encode: true, encodeDotInKeys: false, - encoder: encode2, + encoder: encode, encodeValuesOnly: false, - format: default_format2, - formatter: default_formatter2, + format: default_format, + formatter: default_formatter, /** @deprecated */ indices: false, serializeDate(date) { - return (toISOString2 ?? (toISOString2 = Function.prototype.call.bind(Date.prototype.toISOString)))(date); + return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date); }, skipNulls: false, strictNullHandling: false }; - sentinel2 = {}; + sentinel = {}; } }); // node_modules/openai/internal/utils/query.mjs -function stringifyQuery2(query) { - return stringify2(query, { arrayFormat: "brackets" }); +function stringifyQuery(query) { + return stringify(query, { arrayFormat: "brackets" }); } -var init_query2 = __esm({ +var init_query = __esm({ "node_modules/openai/internal/utils/query.mjs"() { - init_stringify2(); + init_stringify(); } }); @@ -21852,7 +4031,7 @@ function resolveDataResidency(options) { if (options.dataResidency === null || options.dataResidency === void 0) { return void 0; } - if (hasOwn2(options, "baseURL")) { + if (hasOwn(options, "baseURL")) { throw new OpenAIError("The `dataResidency` and `baseURL` options are mutually exclusive."); } const endpoint = endpoints.get(options.dataResidency); @@ -21864,8 +4043,8 @@ function resolveDataResidency(options) { var endpoints; var init_data_residency = __esm({ "node_modules/openai/internal/data-residency.mjs"() { - init_error3(); - init_values2(); + init_error(); + init_values(); endpoints = /* @__PURE__ */ new Map([ ["global", "https://api.openai.com/v1"], ["us", "https://us.api.openai.com/v1"], @@ -21876,23 +4055,23 @@ var init_data_residency = __esm({ }); // node_modules/openai/core/api-promise.mjs -var _APIPromise_client2, APIPromise2; -var init_api_promise2 = __esm({ +var _APIPromise_client, APIPromise; +var init_api_promise = __esm({ "node_modules/openai/core/api-promise.mjs"() { - init_tslib2(); - init_parse2(); - APIPromise2 = class _APIPromise extends Promise { - constructor(client, responsePromise, parseResponse2 = defaultParseResponse2) { + init_tslib(); + init_parse(); + APIPromise = class _APIPromise extends Promise { + constructor(client, responsePromise, parseResponse2 = defaultParseResponse) { super((resolve2) => { resolve2(null); }); this.responsePromise = responsePromise; this.parseResponse = parseResponse2; - _APIPromise_client2.set(this, void 0); - __classPrivateFieldSet2(this, _APIPromise_client2, client, "f"); + _APIPromise_client.set(this, void 0); + __classPrivateFieldSet(this, _APIPromise_client, client, "f"); } _thenUnwrap(transform) { - return new _APIPromise(__classPrivateFieldGet2(this, _APIPromise_client2, "f"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response)); + return new _APIPromise(__classPrivateFieldGet(this, _APIPromise_client, "f"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response)); } /** * Gets the raw `Response` instance instead of parsing the response @@ -21926,7 +4105,7 @@ var init_api_promise2 = __esm({ } parse() { if (!this.parsedPromise) { - this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet2(this, _APIPromise_client2, "f"), data)); + this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, "f"), data)); } return this.parsedPromise; } @@ -21940,23 +4119,23 @@ var init_api_promise2 = __esm({ return this.parse().finally(onfinally); } }; - _APIPromise_client2 = /* @__PURE__ */ new WeakMap(); + _APIPromise_client = /* @__PURE__ */ new WeakMap(); } }); // node_modules/openai/core/pagination.mjs -var _AbstractPage_client2, AbstractPage2, PagePromise2, Page2, CursorPage, ConversationCursorPage, NextCursorPage, TokenPage; -var init_pagination2 = __esm({ +var _AbstractPage_client, AbstractPage, PagePromise, Page, CursorPage, ConversationCursorPage, NextCursorPage, TokenPage; +var init_pagination = __esm({ "node_modules/openai/core/pagination.mjs"() { - init_tslib2(); - init_error3(); - init_parse2(); - init_api_promise2(); - init_values2(); - AbstractPage2 = class { + init_tslib(); + init_error(); + init_parse(); + init_api_promise(); + init_values(); + AbstractPage = class { constructor(client, response, body, options) { - _AbstractPage_client2.set(this, void 0); - __classPrivateFieldSet2(this, _AbstractPage_client2, client, "f"); + _AbstractPage_client.set(this, void 0); + __classPrivateFieldSet(this, _AbstractPage_client, client, "f"); this.options = options; this.response = response; this.body = body; @@ -21972,7 +4151,7 @@ var init_pagination2 = __esm({ if (!nextOptions) { throw new OpenAIError("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`."); } - return await __classPrivateFieldGet2(this, _AbstractPage_client2, "f").requestAPIList(this.constructor, nextOptions); + return await __classPrivateFieldGet(this, _AbstractPage_client, "f").requestAPIList(this.constructor, nextOptions); } async *iterPages() { let page3 = this; @@ -21982,7 +4161,7 @@ var init_pagination2 = __esm({ yield page3; } } - async *[(_AbstractPage_client2 = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() { + async *[(_AbstractPage_client = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() { for await (const page3 of this.iterPages()) { for (const item of page3.getPaginatedItems()) { yield item; @@ -21990,9 +4169,9 @@ var init_pagination2 = __esm({ } } }; - PagePromise2 = class extends APIPromise2 { + PagePromise = class extends APIPromise { constructor(client, request2, Page3) { - super(client, request2, async (client2, props) => new Page3(client2, props.response, await defaultParseResponse2(client2, props), props.options)); + super(client, request2, async (client2, props) => new Page3(client2, props.response, await defaultParseResponse(client2, props), props.options)); } /** * Allow auto-paginating iteration on an unawaited list call, eg: @@ -22008,7 +4187,7 @@ var init_pagination2 = __esm({ } } }; - Page2 = class extends AbstractPage2 { + Page = class extends AbstractPage { constructor(client, response, body, options) { super(client, response, body, options); this.data = body.data || []; @@ -22021,7 +4200,7 @@ var init_pagination2 = __esm({ return null; } }; - CursorPage = class extends AbstractPage2 { + CursorPage = class extends AbstractPage { constructor(client, response, body, options) { super(client, response, body, options); this.data = body.data || []; @@ -22045,13 +4224,13 @@ var init_pagination2 = __esm({ return { ...this.options, query: { - ...maybeObj2(this.options.query), + ...maybeObj(this.options.query), after: id } }; } }; - ConversationCursorPage = class extends AbstractPage2 { + ConversationCursorPage = class extends AbstractPage { constructor(client, response, body, options) { super(client, response, body, options); this.data = body.data || []; @@ -22075,13 +4254,13 @@ var init_pagination2 = __esm({ return { ...this.options, query: { - ...maybeObj2(this.options.query), + ...maybeObj(this.options.query), after: cursor } }; } }; - NextCursorPage = class extends AbstractPage2 { + NextCursorPage = class extends AbstractPage { constructor(client, response, body, options) { super(client, response, body, options); this.data = body.data || []; @@ -22105,13 +4284,13 @@ var init_pagination2 = __esm({ return { ...this.options, query: { - ...maybeObj2(this.options.query), + ...maybeObj(this.options.query), after: cursor } }; } }; - TokenPage = class extends AbstractPage2 { + TokenPage = class extends AbstractPage { constructor(client, response, body, options) { super(client, response, body, options); this.data = body.data || []; @@ -22135,7 +4314,7 @@ var init_pagination2 = __esm({ return { ...this.options, query: { - ...maybeObj2(this.options.query), + ...maybeObj(this.options.query), page: cursor } }; @@ -22225,8 +4404,8 @@ function isUnsafeAccessToken(accessToken) { var SUBJECT_TOKEN_TYPES, TOKEN_EXCHANGE_GRANT_TYPE, MAX_REFRESH_BUFFER_FRACTION, NATIVE_RESPONSE_PROTOTYPE, READ_NATIVE_RESPONSE_BODY, WorkloadIdentityAuth; var init_workload_identity_auth = __esm({ "node_modules/openai/auth/workload-identity-auth.mjs"() { - init_shims2(); - init_error3(); + init_shims(); + init_error(); SUBJECT_TOKEN_TYPES = { jwt: "urn:ietf:params:oauth:token-type:jwt", id: "urn:ietf:params:oauth:token-type:id_token" @@ -22260,7 +4439,7 @@ var init_workload_identity_auth = __esm({ getToken: provider2.getToken.bind(provider2) } }; - this.fetch = fetch2 ?? getDefaultFetch2(); + this.fetch = fetch2 ?? getDefaultFetch(); } /** * Returns a valid OpenAI access token, exchanging or refreshing credentials as needed. @@ -22329,7 +4508,7 @@ var init_workload_identity_auth = __esm({ if (response.status === 400 || response.status === 401 || response.status === 403) { throw new OAuthError(response.status, body2, response.headers); } - throw APIError2.generate(response.status, body2, `Token exchange failed with status ${response.status}`, response.headers); + throw APIError.generate(response.status, body2, `Token exchange failed with status ${response.status}`, response.headers); } const tokenResponse = await parseOAuthTokenResponse(response); const accessToken = typeof tokenResponse === "object" && tokenResponse !== null && "access_token" in tokenResponse ? tokenResponse.access_token : void 0; @@ -22384,17 +4563,17 @@ function assertX509APIOrigin(value2) { var X509_API_BASE_URL; var init_x509_api_origin = __esm({ "node_modules/openai/internal/auth/x509-api-origin.mjs"() { - init_error3(); - init_log2(); + init_error(); + init_log(); X509_API_BASE_URL = "https://mtls.api.openai.com/v1"; } }); // node_modules/openai/internal/headers.mjs -function* iterateHeaders2(headers) { +function* iterateHeaders(headers) { if (!headers) return; - if (brand_privateNullableHeaders2 in headers) { + if (brand_privateNullableHeaders in headers) { const { values, nulls } = headers; yield* values.entries(); for (const name of nulls) { @@ -22415,7 +4594,7 @@ function* iterateHeaders2(headers) { const name = row[0]; if (typeof name !== "string") throw new TypeError("expected header name to be a string"); - const values = isReadonlyArray2(row[1]) ? row[1] : [row[1]]; + const values = isReadonlyArray(row[1]) ? row[1] : [row[1]]; let didClear = false; for (const value2 of values) { if (value2 === void 0) @@ -22428,18 +4607,18 @@ function* iterateHeaders2(headers) { } } } -var brand_privateNullableHeaders2, httpTokenHeaderName, buildHeaders2; -var init_headers3 = __esm({ +var brand_privateNullableHeaders, httpTokenHeaderName, buildHeaders; +var init_headers = __esm({ "node_modules/openai/internal/headers.mjs"() { - init_values2(); - brand_privateNullableHeaders2 = /* @__PURE__ */ Symbol("brand.privateNullableHeaders"); + init_values(); + brand_privateNullableHeaders = /* @__PURE__ */ Symbol("brand.privateNullableHeaders"); httpTokenHeaderName = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/; - buildHeaders2 = (newHeaders) => { + buildHeaders = (newHeaders) => { const targetHeaders = new Headers(); const nullHeaders = /* @__PURE__ */ new Set(); for (const headers of newHeaders) { const seenHeaders = /* @__PURE__ */ new Set(); - for (const [name, value2] of iterateHeaders2(headers)) { + for (const [name, value2] of iterateHeaders(headers)) { if (!httpTokenHeaderName.test(name)) { throw new TypeError(`Header name must be a valid HTTP token ["${name}"]`); } @@ -22457,7 +4636,7 @@ var init_headers3 = __esm({ } } } - return { [brand_privateNullableHeaders2]: true, values: targetHeaders, nulls: nullHeaders }; + return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders }; }; } }); @@ -22568,7 +4747,7 @@ function resolveX509Transport(value2) { } var init_x509_transport_registry = __esm({ "node_modules/openai/internal/auth/x509-transport-registry.mjs"() { - init_error3(); + init_error(); init_x509_transport_state(); } }); @@ -22584,7 +4763,7 @@ function assertSafeHeaders(headers) { } function exchangeDeadline(timeout, callerSignal) { const deadline = new AbortController(); - const timer = timeout === void 0 ? void 0 : setTimeout(() => deadline.abort(new APIConnectionTimeoutError2()), timeout); + const timer = timeout === void 0 ? void 0 : setTimeout(() => deadline.abort(new APIConnectionTimeoutError()), timeout); const timerHandle = timer; if (typeof timerHandle === "object" && timerHandle !== null && "unref" in timerHandle && typeof timerHandle.unref === "function") { timerHandle.unref(); @@ -22655,7 +4834,7 @@ function assertX509FetchOptions(options) { return; } for (const name of FORBIDDEN_TRANSPORT_OPTIONS) { - if (hasOwn2(options, name)) { + if (hasOwn(options, name)) { throw new OpenAIError("X.509 workload identity cannot override its approved transport capability."); } } @@ -22666,7 +4845,7 @@ function assertX509FetchOptions(options) { } function assertX509RequestOptions(options) { assertX509FetchOptions(options); - if (options && ["body", "headers", "method", "signal"].some((name) => hasOwn2(options, name))) { + if (options && ["body", "headers", "method", "signal"].some((name) => hasOwn(options, name))) { throw new OpenAIError("X.509 workload identity cannot override its request body, headers, method, or signal through fetch options."); } } @@ -22676,15 +4855,15 @@ function snapshotX509RequestOptions(options) { assertX509RequestOptions(snapshot); return snapshot; } -var _X509WorkloadIdentityAuth_instances, _a2, _X509WorkloadIdentityAuth_identityProviderId, _X509WorkloadIdentityAuth_serviceAccountId, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, _X509WorkloadIdentityAuth_organization, _X509WorkloadIdentityAuth_project, _X509WorkloadIdentityAuth_transport, _X509WorkloadIdentityAuth_refreshBufferMs, _X509WorkloadIdentityAuth_cachedToken, _X509WorkloadIdentityAuth_refresh, _X509WorkloadIdentityAuth_tokenGeneration, _X509WorkloadIdentityAuth_cancelRequestBody, _X509WorkloadIdentityAuth_assignToken, _X509WorkloadIdentityAuth_recoverRefreshFailure, _X509WorkloadIdentityAuth_fallbackToken, _X509WorkloadIdentityAuth_retireRefresh, _X509WorkloadIdentityAuth_beginRefresh, _X509WorkloadIdentityAuth_refreshToken, _X509WorkloadIdentityAuth_preflight, _X509WorkloadIdentityAuth_scope, _X509WorkloadIdentityAuth_assertTenantHeaders, FORBIDDEN_TRANSPORT_OPTIONS, headerValue, DEFAULT_REFRESH_BUFFER_MS, FAILED_REFRESH_COOLDOWN_MS, userAbortError, X509WorkloadIdentityAuth; +var _X509WorkloadIdentityAuth_instances, _a, _X509WorkloadIdentityAuth_identityProviderId, _X509WorkloadIdentityAuth_serviceAccountId, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, _X509WorkloadIdentityAuth_organization, _X509WorkloadIdentityAuth_project, _X509WorkloadIdentityAuth_transport, _X509WorkloadIdentityAuth_refreshBufferMs, _X509WorkloadIdentityAuth_cachedToken, _X509WorkloadIdentityAuth_refresh, _X509WorkloadIdentityAuth_tokenGeneration, _X509WorkloadIdentityAuth_cancelRequestBody, _X509WorkloadIdentityAuth_assignToken, _X509WorkloadIdentityAuth_recoverRefreshFailure, _X509WorkloadIdentityAuth_fallbackToken, _X509WorkloadIdentityAuth_retireRefresh, _X509WorkloadIdentityAuth_beginRefresh, _X509WorkloadIdentityAuth_refreshToken, _X509WorkloadIdentityAuth_preflight, _X509WorkloadIdentityAuth_scope, _X509WorkloadIdentityAuth_assertTenantHeaders, FORBIDDEN_TRANSPORT_OPTIONS, headerValue, DEFAULT_REFRESH_BUFFER_MS, FAILED_REFRESH_COOLDOWN_MS, userAbortError, X509WorkloadIdentityAuth; var init_x509_workload_identity_auth = __esm({ "node_modules/openai/internal/auth/x509-workload-identity-auth.mjs"() { - init_tslib2(); - init_error3(); - init_headers3(); - init_shims2(); - init_log2(); - init_values2(); + init_tslib(); + init_error(); + init_headers(); + init_shims(); + init_log(); + init_values(); init_x509_api_origin(); init_x509_transport_registry(); init_x509_transport_state(); @@ -22693,7 +4872,7 @@ var init_x509_workload_identity_auth = __esm({ DEFAULT_REFRESH_BUFFER_MS = 20 * 60 * 1e3; FAILED_REFRESH_COOLDOWN_MS = 1e3; userAbortError = (signal) => { - const error = new APIUserAbortError2(); + const error = new APIUserAbortError(); Object.defineProperty(error, "cause", { value: signal.reason, writable: true, configurable: true }); return error; }; @@ -22712,50 +4891,50 @@ var init_x509_workload_identity_auth = __esm({ _X509WorkloadIdentityAuth_cachedToken.set(this, void 0); _X509WorkloadIdentityAuth_refresh.set(this, void 0); _X509WorkloadIdentityAuth_tokenGeneration.set(this, 0); - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_transport, resolveX509Transport(transport), "f"); - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_identityProviderId, identity.identityProviderId, "f"); - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_serviceAccountId, identity.serviceAccountId, "f"); - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, identity.refreshBufferMs, "f"); - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, identity.refreshBufferSeconds, "f"); - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_organization, organization, "f"); - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_project, project, "f"); - if (__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") !== void 0 && __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") !== void 0) { + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_transport, resolveX509Transport(transport), "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_identityProviderId, identity.identityProviderId, "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_serviceAccountId, identity.serviceAccountId, "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, identity.refreshBufferMs, "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, identity.refreshBufferSeconds, "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_organization, organization, "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_project, project, "f"); + if (__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") !== void 0 && __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") !== void 0) { throw new OpenAIError("X.509 workload identity cannot combine refreshBufferSeconds and refreshBufferMs."); } - if (__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") !== void 0 && (!Number.isSafeInteger(__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f")) || __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") < 0)) { + if (__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") !== void 0 && (!Number.isSafeInteger(__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f")) || __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") < 0)) { throw new OpenAIError("X.509 workload identity requires a nonnegative integer refreshBufferMs."); } - if (__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") !== void 0 && (!Number.isSafeInteger(__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f")) || __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") < 0 || !Number.isSafeInteger(__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") * 1e3))) { + if (__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") !== void 0 && (!Number.isSafeInteger(__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f")) || __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") < 0 || !Number.isSafeInteger(__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") * 1e3))) { throw new OpenAIError("X.509 workload identity requires a nonnegative integer refreshBufferSeconds."); } - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_refreshBufferMs, __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") === void 0 ? __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") ?? DEFAULT_REFRESH_BUFFER_MS : __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") * 1e3, "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_refreshBufferMs, __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") === void 0 ? __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") ?? DEFAULT_REFRESH_BUFFER_MS : __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") * 1e3, "f"); } /** Reconstructs the immutable selectors captured before caller-owned identity mutation. */ identitySnapshot() { return { type: "x509", - identityProviderId: __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_identityProviderId, "f"), - serviceAccountId: __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_serviceAccountId, "f"), + identityProviderId: __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_identityProviderId, "f"), + serviceAccountId: __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_serviceAccountId, "f"), // Spread creates an own data property without invoking inherited setters or changing the object prototype. - ...__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") === void 0 ? {} : { refreshBufferMs: __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") }, + ...__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") === void 0 ? {} : { refreshBufferMs: __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") }, // Spread creates an own data property without invoking inherited setters or changing the object prototype. - ...__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") === void 0 ? {} : { refreshBufferSeconds: __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") } + ...__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") === void 0 ? {} : { refreshBufferSeconds: __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") } }; } /** Preserves explicitly headerless requests without presenting a certificate to the issuer. */ static shouldAuthenticate(options, defaultHeaders, requestHeaders = options.headers) { - return !buildHeaders2([defaultHeaders, requestHeaders]).nulls.has("authorization"); + return !buildHeaders([defaultHeaders, requestHeaders]).nulls.has("authorization"); } /** Snapshots each caller-owned header layer once while preserving nulls and precedence. */ snapshotHeaders(defaultHeaders, requestHeaders) { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); - scope.defaultHeaders ?? (scope.defaultHeaders = buildHeaders2([defaultHeaders])); - scope.requestHeaders ?? (scope.requestHeaders = buildHeaders2([requestHeaders])); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + scope.defaultHeaders ?? (scope.defaultHeaders = buildHeaders([defaultHeaders])); + scope.requestHeaders ?? (scope.requestHeaders = buildHeaders([requestHeaders])); return this.headerSnapshots(); } /** Returns the already rendered caller headers without touching mutable inputs again. */ headerSnapshots() { - const { defaultHeaders, requestHeaders } = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const { defaultHeaders, requestHeaders } = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); if (!defaultHeaders || !requestHeaders) { throw new OpenAIError("X.509 workload identity requires snapshotted request headers."); } @@ -22763,16 +4942,16 @@ var init_x509_workload_identity_auth = __esm({ } /** Captures enrolled public tenant selectors once before certificate presentation. */ snapshotTenant(organization, project) { - if (organization !== __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_organization, "f") || project !== __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_project, "f")) { + if (organization !== __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_organization, "f") || project !== __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_project, "f")) { throw new OpenAIError("X.509 workload identity cannot override its enrolled organization or project."); } - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); scope.tenant = { organization, project }; return scope.tenant; } /** Returns the tenant selectors already approved for this logical request. */ tenantSnapshot() { - const { tenant } = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const { tenant } = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); if (!tenant) { throw new OpenAIError("X.509 workload identity requires snapshotted tenant selectors."); } @@ -22781,11 +4960,11 @@ var init_x509_workload_identity_auth = __esm({ /** Validates and retains the exact destination that authenticated dispatch will use. */ snapshotAPIURL(value2) { assertX509APIOrigin(value2); - __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).apiURL = value2; + __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).apiURL = value2; } /** Reads the already-approved destination without rerendering caller-owned request options. */ requestAPIURL() { - const { apiURL } = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const { apiURL } = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); if (apiURL === void 0) { throw new OpenAIError("X.509 workload identity requires a snapshotted API destination."); } @@ -22794,11 +4973,11 @@ var init_x509_workload_identity_auth = __esm({ /** Captures the exact caller settings approved for authenticated dispatch. */ snapshotRequest(signal, timeout, fetchOptions) { var _b; - (_b = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this)).request ?? (_b.request = { signal, timeout, fetchOptions }); + (_b = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this)).request ?? (_b.request = { signal, timeout, fetchOptions }); } /** Returns immutable request settings without invoking caller-owned accessors again. */ requestSnapshot() { - const { request: request2 } = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const { request: request2 } = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); if (!request2) { throw new OpenAIError("X.509 workload identity requires snapshotted request settings."); } @@ -22806,7 +4985,7 @@ var init_x509_workload_identity_auth = __esm({ } /** Suspends an already-running network budget during retry-local asynchronous preparation. */ beginRequestPreparation() { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); if (scope.deadlineArmed && scope.preparationStartedAt === void 0) { scope.preparationStartedAt = performance.now(); scope.preparationWallStartedAt = Date.now(); @@ -22814,11 +4993,11 @@ var init_x509_workload_identity_auth = __esm({ } /** Begins local request construction without charging protected hook latency to the network. */ beginRequestPlanning() { - __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).phase = "planning"; + __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).phase = "planning"; } /** Arms one absolute network deadline only after all local request preparation completes. */ beginRequestNetwork() { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); if (!scope.deadlineArmed) { scope.wallStartedAt = Date.now(); scope.monotonicStartedAt = performance.now(); @@ -22832,11 +5011,11 @@ var init_x509_workload_identity_auth = __esm({ } /** Keeps certificate authentication outside overridable request construction. */ isPlanningRequest() { - return __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).phase === "planning"; + return __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).phase === "planning"; } /** Approves the final overridden destination and transport before minting a bearer. */ authorizePlannedRequest(url, request2, timeout, allowHookSignal = false) { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); const headers = Object.getOwnPropertyDescriptor(request2, "headers"); const body = Object.getOwnPropertyDescriptor(request2, "body"); const signal = Object.getOwnPropertyDescriptor(request2, "signal"); @@ -22854,7 +5033,7 @@ var init_x509_workload_identity_auth = __esm({ if (headerValue(headers.value, "Authorization") !== null) { throw new OpenAIError("X.509 workload identity cannot use caller-supplied authorization credentials."); } - __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_assertTenantHeaders).call(this, headers.value); + __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_assertTenantHeaders).call(this, headers.value); if (!allowHookSignal && (signal?.value ?? void 0) !== (this.requestSnapshot().signal ?? void 0)) { throw new OpenAIError("X.509 workload identity must preserve its approved request signal."); } @@ -22865,7 +5044,7 @@ var init_x509_workload_identity_auth = __esm({ /** Owns only SDK-created iterator adapters until authenticated dispatch takes responsibility. */ ownRequestBody(body, source) { if (body instanceof ReadableStream && body !== source) { - __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).materializedBody = body; + __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).materializedBody = body; } } /** Recognizes every one-shot upload before issuer authentication or request replay. */ @@ -22874,16 +5053,16 @@ var init_x509_workload_identity_auth = __esm({ } /** Retires abandoned upload adapters without masking or blocking their authentication failure. */ retireRequestBody() { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); const body = scope.materializedBody; delete scope.materializedBody; if (body) { - void __classPrivateFieldGet2(_a2, _a2, "m", _X509WorkloadIdentityAuth_cancelRequestBody).call(_a2, body); + void __classPrivateFieldGet(_a, _a, "m", _X509WorkloadIdentityAuth_cancelRequestBody).call(_a, body); } } /** Transfers the dispatched upload while retiring any SDK-owned body replaced by a hook. */ releaseRequestBody(body) { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); if (scope.materializedBody === body) { delete scope.materializedBody; } else { @@ -22893,21 +5072,21 @@ var init_x509_workload_identity_auth = __esm({ /** Retains caller-only cancellation separately from SDK-created deadline controllers. */ setEffectiveSignal(signal) { if (signal) { - __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).effectiveSignal = signal; + __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).effectiveSignal = signal; } else { - delete __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).effectiveSignal; + delete __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).effectiveSignal; } } /** Uses protected-hook cancellation when an authenticated attempt enters retry backoff. */ effectiveSignal() { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); return scope.effectiveSignal ?? scope.request?.signal; } /** Establishes an independent scope even when concurrent requests share caller options. */ // oxlint-disable-next-line anti-slop/no-object-parameters -- Logical request owners are opaque identity tokens; their properties are never read. runRequest(operation, requestOwner) { - return __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").run(async () => { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").current(); + return __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").run(async () => { + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").current(); if (!scope) { throw new OpenAIError("X.509 workload identity requires an active certificate request scope."); } @@ -22926,16 +5105,16 @@ var init_x509_workload_identity_auth = __esm({ /** Reports whether a public request-building call already belongs to an active logical operation. */ // oxlint-disable-next-line anti-slop/no-object-parameters -- Request scope membership compares the opaque caller token by identity only. inRequest(requestOwner) { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").current(); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").current(); return scope?.owner === this && scope.requestOwner === requestOwner && scope.phase !== "authorizing"; } /** Shares a cache only when the complete, privately snapshotted credential identity matches. */ matches(other) { - return __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f") === __classPrivateFieldGet2(other, _X509WorkloadIdentityAuth_transport, "f") && __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_identityProviderId, "f") === __classPrivateFieldGet2(other, _X509WorkloadIdentityAuth_identityProviderId, "f") && __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_serviceAccountId, "f") === __classPrivateFieldGet2(other, _X509WorkloadIdentityAuth_serviceAccountId, "f") && __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_organization, "f") === __classPrivateFieldGet2(other, _X509WorkloadIdentityAuth_organization, "f") && __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_project, "f") === __classPrivateFieldGet2(other, _X509WorkloadIdentityAuth_project, "f") && __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_refreshBufferMs, "f") === __classPrivateFieldGet2(other, _X509WorkloadIdentityAuth_refreshBufferMs, "f"); + return __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f") === __classPrivateFieldGet(other, _X509WorkloadIdentityAuth_transport, "f") && __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_identityProviderId, "f") === __classPrivateFieldGet(other, _X509WorkloadIdentityAuth_identityProviderId, "f") && __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_serviceAccountId, "f") === __classPrivateFieldGet(other, _X509WorkloadIdentityAuth_serviceAccountId, "f") && __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_organization, "f") === __classPrivateFieldGet(other, _X509WorkloadIdentityAuth_organization, "f") && __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_project, "f") === __classPrivateFieldGet(other, _X509WorkloadIdentityAuth_project, "f") && __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_refreshBufferMs, "f") === __classPrivateFieldGet(other, _X509WorkloadIdentityAuth_refreshBufferMs, "f"); } /** Binds deferred response parsing to the original logical request and its unchanged deadline. */ continuation() { - const { wallStartedAt, monotonicStartedAt, deadlineArmed, request: request2, requestOwner, effectiveSignal } = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const { wallStartedAt, monotonicStartedAt, deadlineArmed, request: request2, requestOwner, effectiveSignal } = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); const scope = { wallStartedAt, monotonicStartedAt, @@ -22949,7 +5128,7 @@ var init_x509_workload_identity_auth = __esm({ // Spread creates an own data property without invoking inherited setters or changing the object prototype. ...requestOwner ? { requestOwner } : {} }; - return (operation) => __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").resume(scope, async () => { + return (operation) => __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").resume(scope, async () => { try { return await operation(); } finally { @@ -22961,7 +5140,7 @@ var init_x509_workload_identity_auth = __esm({ } /** Removes dispatched bearer material before settled request promises can retain their scope. */ releaseRequestCredentials() { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); delete scope.request; delete scope.phase; delete scope.deadlineArmed; @@ -22980,28 +5159,28 @@ var init_x509_workload_identity_auth = __esm({ } /** Returns the original authentication start so response consumption shares its request deadline. */ requestStartedAt(_options) { - return __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").current()?.wallStartedAt; + return __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").current()?.wallStartedAt; } /** Distinguishes issued workload credentials from independent admin or headerless requests. */ usedWorkloadToken(_options) { - return __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").current()?.token !== void 0; + return __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").current()?.token !== void 0; } /** Returns the budget left after certificate authentication without starting another timeout. */ remainingTimeout(_options, timeout) { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").current(); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").current(); if (scope === void 0) { return timeout; } const remaining = timeout - (performance.now() - scope.monotonicStartedAt); if (remaining <= 0) { - throw new APIConnectionTimeoutError2(); + throw new APIConnectionTimeoutError(); } return remaining; } /** Cancels active retry timers promptly without changing public caller-abort semantics. */ async waitForRetry(duration, signal) { try { - await __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").sleep(duration, signal); + await __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").sleep(duration, signal); } catch (error) { if (signal?.aborted) { throw userAbortError(signal); @@ -23030,11 +5209,11 @@ var init_x509_workload_identity_auth = __esm({ if (options) { assertX509RequestOptions(context ? context.fetchOptions : options.fetchOptions); } - __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_preflight).call(this, context); - const scope = options ? __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this) : void 0; - const cached = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_cachedToken, "f"); + __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_preflight).call(this, context); + const scope = options ? __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this) : void 0; + const cached = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_cachedToken, "f"); if (cached && performance.now() < cached.refreshAt && Date.now() < cached.wallRefreshAt) { - return __classPrivateFieldGet2(_a2, _a2, "m", _X509WorkloadIdentityAuth_assignToken).call(_a2, scope, cached); + return __classPrivateFieldGet(_a, _a, "m", _X509WorkloadIdentityAuth_assignToken).call(_a, scope, cached); } const remaining = context && options ? this.remainingTimeout(options, context.timeout) : context?.timeout; const { signal, dispose } = exchangeDeadline(remaining, callerSignal); @@ -23042,43 +5221,43 @@ var init_x509_workload_identity_auth = __esm({ dispose(); throw userAbortError(callerSignal); } - const attempt = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_refresh, "f") ?? __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_beginRefresh).call(this); + const attempt = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_refresh, "f") ?? __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_beginRefresh).call(this); attempt.waiters += 1; const waiter = waitForRefresh(attempt, signal); try { const exchanged = await waiter.result; - const refreshed = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_cachedToken, "f"); + const refreshed = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_cachedToken, "f"); if (!refreshed || refreshed.accessToken !== exchanged.accessToken) { - throw new APIUserAbortError2(); + throw new APIUserAbortError(); } - return __classPrivateFieldGet2(_a2, _a2, "m", _X509WorkloadIdentityAuth_assignToken).call(_a2, scope, refreshed); + return __classPrivateFieldGet(_a, _a, "m", _X509WorkloadIdentityAuth_assignToken).call(_a, scope, refreshed); } catch (error) { - return await __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_recoverRefreshFailure).call(this, error, attempt, cached, scope, options, context); + return await __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_recoverRefreshFailure).call(this, error, attempt, cached, scope, options, context); } finally { waiter.dispose(); dispose(); attempt.waiters -= 1; - __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_retireRefresh).call(this, attempt); + __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_retireRefresh).call(this, attempt); } } /** Invalidates only the workload-token generation actually rejected by the current request. */ invalidateToken() { - const rejected = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").current(); - if (!rejected?.token || __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_cachedToken, "f")?.accessToken !== rejected.token || __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_cachedToken, "f").generation !== rejected.tokenGeneration) { + const rejected = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").current(); + if (!rejected?.token || __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_cachedToken, "f")?.accessToken !== rejected.token || __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_cachedToken, "f").generation !== rejected.tokenGeneration) { return; } - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_tokenGeneration, __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_tokenGeneration, "f") + 1, "f"); - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_cachedToken, void 0, "f"); - const refresh = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_refresh, "f"); - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_refresh, void 0, "f"); - refresh?.controller.abort(new APIUserAbortError2()); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_tokenGeneration, __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_tokenGeneration, "f") + 1, "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_cachedToken, void 0, "f"); + const refresh = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_refresh, "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_refresh, void 0, "f"); + refresh?.controller.abort(new APIUserAbortError()); } /** Binds the minted credential to the original headers before protected request hooks run. */ bindRequest(options, request2, adminAPIKey) { if (!(request2.headers instanceof Headers)) { throw new OpenAIError("X.509 workload identity requires the original workload authorization headers."); } - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); const { token } = scope; const security = options.__security ?? { bearerAuth: true }; let approvedAuthorization = token ? `Bearer ${token}` : null; @@ -23091,7 +5270,7 @@ var init_x509_workload_identity_auth = __esm({ } /** Rebinds an equivalent protected-hook container without relaxing final dispatch identity checks. */ adoptRequestHeaders(request2) { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); const original = scope.headers; if (!(original instanceof Headers) || !(request2.headers instanceof Headers)) { throw new OpenAIError("X.509 workload identity must preserve its issued workload authorization."); @@ -23110,11 +5289,11 @@ var init_x509_workload_identity_auth = __esm({ if (!(headers instanceof Headers)) { throw new OpenAIError("X.509 workload identity must preserve its issued workload authorization."); } - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").current(); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").current(); if (!scope || scope.headers !== headers || scope.authorization === void 0 || headerValue(headers, "Authorization") !== scope.authorization) { throw new OpenAIError("X.509 workload identity must preserve its issued workload authorization."); } - __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_assertTenantHeaders).call(this, headers); + __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_assertTenantHeaders).call(this, headers); assertSafeHeaders(headers); } /** Returns a guarded final dispatcher while preserving all existing request hook object identities. */ @@ -23131,13 +5310,13 @@ var init_x509_workload_identity_auth = __esm({ assertSafeHeaders(headers); init.headers = headers; init.redirect = "manual"; - return await __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").dispatch(target, init); + return await __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").dispatch(target, init); }; } }; - _a2 = X509WorkloadIdentityAuth, _X509WorkloadIdentityAuth_identityProviderId = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_serviceAccountId = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_configuredRefreshBufferMs = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_organization = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_project = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_transport = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_refreshBufferMs = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_cachedToken = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_refresh = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_tokenGeneration = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_instances = /* @__PURE__ */ new WeakSet(), _X509WorkloadIdentityAuth_cancelRequestBody = async function _X509WorkloadIdentityAuth_cancelRequestBody2(body) { + _a = X509WorkloadIdentityAuth, _X509WorkloadIdentityAuth_identityProviderId = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_serviceAccountId = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_configuredRefreshBufferMs = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_organization = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_project = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_transport = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_refreshBufferMs = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_cachedToken = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_refresh = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_tokenGeneration = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_instances = /* @__PURE__ */ new WeakSet(), _X509WorkloadIdentityAuth_cancelRequestBody = async function _X509WorkloadIdentityAuth_cancelRequestBody2(body) { try { - await CancelReadableStream2(body); + await CancelReadableStream(body); } catch { } }, _X509WorkloadIdentityAuth_assignToken = function _X509WorkloadIdentityAuth_assignToken2(scope, token) { @@ -23151,10 +5330,10 @@ var init_x509_workload_identity_auth = __esm({ if (callerSignal?.aborted) { throw userAbortError(callerSignal); } - if (attempt.controller.signal.aborted && attempt.generation !== __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_tokenGeneration, "f")) { + if (attempt.controller.signal.aborted && attempt.generation !== __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_tokenGeneration, "f")) { return await this.getToken(options, context); } - const fallback = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_fallbackToken).call(this, error, cached, scope); + const fallback = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_fallbackToken).call(this, error, cached, scope); if (fallback !== void 0) { return fallback; } @@ -23166,10 +5345,10 @@ var init_x509_workload_identity_auth = __esm({ } throw error; }, _X509WorkloadIdentityAuth_fallbackToken = function _X509WorkloadIdentityAuth_fallbackToken2(error, cached, scope) { - if (!cached || cached !== __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_cachedToken, "f") || performance.now() >= cached.expiresAt || Date.now() >= cached.wallExpiresAt || !_a2.isRetryableFailure(error)) { + if (!cached || cached !== __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_cachedToken, "f") || performance.now() >= cached.expiresAt || Date.now() >= cached.wallExpiresAt || !_a.isRetryableFailure(error)) { return void 0; } - const headers = _a2.retryHeaders(error); + const headers = _a.retryHeaders(error); const milliseconds = headers?.get("retry-after-ms"); let requested = milliseconds ? Number(milliseconds) : void 0; const retryAfter = headers?.get("retry-after"); @@ -23180,68 +5359,68 @@ var init_x509_workload_identity_auth = __esm({ const cooldown = requested !== void 0 && Number.isFinite(requested) && requested >= 0 && requested <= 6e4 ? Math.max(FAILED_REFRESH_COOLDOWN_MS, requested) : FAILED_REFRESH_COOLDOWN_MS; cached.refreshAt = Math.min(cached.expiresAt, performance.now() + cooldown); cached.wallRefreshAt = Math.min(cached.wallExpiresAt, Date.now() + cooldown); - return __classPrivateFieldGet2(_a2, _a2, "m", _X509WorkloadIdentityAuth_assignToken).call(_a2, scope, cached); + return __classPrivateFieldGet(_a, _a, "m", _X509WorkloadIdentityAuth_assignToken).call(_a, scope, cached); }, _X509WorkloadIdentityAuth_retireRefresh = function _X509WorkloadIdentityAuth_retireRefresh2(attempt) { - if (attempt.waiters !== 0 || __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_refresh, "f") !== attempt) { + if (attempt.waiters !== 0 || __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_refresh, "f") !== attempt) { return; } queueMicrotask(() => { - if (attempt.waiters === 0 && __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_refresh, "f") === attempt) { - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_refresh, void 0, "f"); - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_tokenGeneration, __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_tokenGeneration, "f") + 1, "f"); - attempt.controller.abort(new APIUserAbortError2()); + if (attempt.waiters === 0 && __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_refresh, "f") === attempt) { + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_refresh, void 0, "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_tokenGeneration, __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_tokenGeneration, "f") + 1, "f"); + attempt.controller.abort(new APIUserAbortError()); } }); }, _X509WorkloadIdentityAuth_beginRefresh = function _X509WorkloadIdentityAuth_beginRefresh2() { const controller = new AbortController(); - const generation = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_tokenGeneration, "f"); + const generation = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_tokenGeneration, "f"); const attempt = { controller, generation, waiters: 0, - promise: __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_refreshToken).call(this, controller, generation) + promise: __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_refreshToken).call(this, controller, generation) }; - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_refresh, attempt, "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_refresh, attempt, "f"); return attempt; }, _X509WorkloadIdentityAuth_refreshToken = async function _X509WorkloadIdentityAuth_refreshToken2(controller, generation) { const startedAt = performance.now(); const wallStartedAt = Date.now(); try { - const token = await __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").exchange(__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_identityProviderId, "f"), __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_serviceAccountId, "f"), controller.signal); + const token = await __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").exchange(__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_identityProviderId, "f"), __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_serviceAccountId, "f"), controller.signal); const lifetime = token.expiresIn * 1e3; const expiresAt = startedAt + lifetime; const wallExpiresAt = wallStartedAt + lifetime; if (performance.now() >= expiresAt || Date.now() >= wallExpiresAt) { throw new OpenAIError("X.509 workload identity token expired before its exchange completed."); } - if (__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_tokenGeneration, "f") !== generation || controller.signal.aborted || __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_refresh, "f")?.controller !== controller) { - throw new APIUserAbortError2(); + if (__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_tokenGeneration, "f") !== generation || controller.signal.aborted || __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_refresh, "f")?.controller !== controller) { + throw new APIUserAbortError(); } - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_tokenGeneration, __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_tokenGeneration, "f") + 1, "f"); - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_cachedToken, { + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_tokenGeneration, __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_tokenGeneration, "f") + 1, "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_cachedToken, { accessToken: token.accessToken, - generation: __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_tokenGeneration, "f"), + generation: __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_tokenGeneration, "f"), expiresAt, - refreshAt: expiresAt - Math.min(__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_refreshBufferMs, "f"), lifetime / 2), + refreshAt: expiresAt - Math.min(__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_refreshBufferMs, "f"), lifetime / 2), wallExpiresAt, - wallRefreshAt: wallExpiresAt - Math.min(__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_refreshBufferMs, "f"), lifetime / 2) + wallRefreshAt: wallExpiresAt - Math.min(__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_refreshBufferMs, "f"), lifetime / 2) }, "f"); return token; } finally { - if (__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_refresh, "f")?.controller === controller) { - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_refresh, void 0, "f"); + if (__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_refresh, "f")?.controller === controller) { + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_refresh, void 0, "f"); } } }, _X509WorkloadIdentityAuth_preflight = function _X509WorkloadIdentityAuth_preflight2(context) { if (!context) { return; } - if (context.organization !== __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_organization, "f") || context.project !== __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_project, "f")) { + if (context.organization !== __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_organization, "f") || context.project !== __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_project, "f")) { throw new OpenAIError("X.509 workload identity cannot override its enrolled organization or project."); } assertX509APIOrigin(context.apiURL); - const supplied = buildHeaders2([context.defaultHeaders, context.requestHeaders]); - if (__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_organization, "f") !== null && supplied.nulls.has("openai-organization") || __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_project, "f") !== null && supplied.nulls.has("openai-project")) { + const supplied = buildHeaders([context.defaultHeaders, context.requestHeaders]); + if (__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_organization, "f") !== null && supplied.nulls.has("openai-organization") || __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_project, "f") !== null && supplied.nulls.has("openai-project")) { throw new OpenAIError("X.509 workload identity cannot omit its enrolled organization or project."); } for (const name of supplied.values.keys()) { @@ -23254,13 +5433,13 @@ var init_x509_workload_identity_auth = __esm({ } } }, _X509WorkloadIdentityAuth_scope = function _X509WorkloadIdentityAuth_scope2() { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").current(); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").current(); if (!scope || scope.owner !== this) { throw new OpenAIError("X.509 workload identity requires an active certificate request scope."); } return scope; }, _X509WorkloadIdentityAuth_assertTenantHeaders = function _X509WorkloadIdentityAuth_assertTenantHeaders2(headers) { - if (headerValue(headers, "OpenAI-Organization") !== __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_organization, "f") || headerValue(headers, "OpenAI-Project") !== __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_project, "f")) { + if (headerValue(headers, "OpenAI-Organization") !== __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_organization, "f") || headerValue(headers, "OpenAI-Project") !== __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_project, "f")) { throw new OpenAIError("X.509 workload identity cannot override its enrolled organization or project."); } for (const name of Headers.prototype.keys.call(headers)) { @@ -23331,12 +5510,12 @@ function prepareProviderClone(inherited, overrides) { return provider2; } function prepareX509ClientClone(inherited, overrides, credential, currentlyX509) { - const nextIdentity = hasOwn2(overrides, "workloadIdentity") ? overrides.workloadIdentity : inherited.workloadIdentity; + const nextIdentity = hasOwn(overrides, "workloadIdentity") ? overrides.workloadIdentity : inherited.workloadIdentity; const dropping = credential !== void 0 && (overridesOrdinaryAuthentication(overrides) && overrides.workloadIdentity === void 0 || overrides.provider !== void 0); - if (credential !== void 0 && hasOwn2(overrides, "workloadIdentity")) { + if (credential !== void 0 && hasOwn(overrides, "workloadIdentity")) { delete inherited.x509Transport; } - const inheritedCredential = credential !== void 0 && !dropping && overrides.credential === void 0 && !hasOwn2(overrides, "workloadIdentity") && !hasOwn2(overrides, "x509Transport") ? credential : void 0; + const inheritedCredential = credential !== void 0 && !dropping && overrides.credential === void 0 && !hasOwn(overrides, "workloadIdentity") && !hasOwn(overrides, "x509Transport") ? credential : void 0; const nextCredential = overrides.credential === void 0 ? inheritedCredential : overrides.credential; const nextX509 = nextCredential !== void 0 || !dropping && isX509WorkloadIdentity(nextIdentity); if (currentlyX509 !== nextX509) { @@ -23374,8 +5553,8 @@ function prepareX509ClientClone(inherited, overrides, credential, currentlyX509) } var init_x509_credential_options = __esm({ "node_modules/openai/internal/auth/x509-credential-options.mjs"() { - init_error3(); - init_values2(); + init_error(); + init_values(); init_x509_workload_identity_auth(); init_x509_transport_state(); } @@ -23397,11 +5576,11 @@ function toStreamingFile(data, name, options) { ...type ? { type } : {} }; } -function makeFile2(fileBits, fileName, options) { - checkFileSupport2(); +function makeFile(fileBits, fileName, options) { + checkFileSupport(); return new File(fileBits, fileName ?? "unknown_file", options); } -function getName2(value2, options) { +function getName(value2, options) { if (typeof value2 !== "object" || value2 === null) { return void 0; } @@ -23438,9 +5617,9 @@ function isArrayBuffer(value2) { return false; } } -function supportsFormData2(fetchObject) { +function supportsFormData(fetchObject) { const fetch2 = typeof fetchObject === "function" ? fetchObject : fetchObject.fetch; - const cached = supportsFormDataMap2.get(fetch2); + const cached = supportsFormDataMap.get(fetch2); if (cached) { return cached; } @@ -23463,7 +5642,7 @@ function supportsFormData2(fetchObject) { return true; } })(); - supportsFormDataMap2.set(fetch2, promise); + supportsFormDataMap.set(fetch2, promise); return promise; } async function* iterateMultipartBody(entries2, boundary, options, preservedFilenames) { @@ -23471,23 +5650,23 @@ async function* iterateMultipartBody(entries2, boundary, options, preservedFilen if (isUploadable(value2)) { const filename = preservedFilenames?.get(value2) ?? getStreamingFileName(value2, options); const type = getStreamingFileType(value2); - yield encodeUTF82(`--${boundary}\r + yield encodeUTF8(`--${boundary}\r `); - yield encodeUTF82(`Content-Disposition: form-data; name="${escapeHeaderValue(key)}"; filename="${escapeHeaderValue(filename)}"\r + yield encodeUTF8(`Content-Disposition: form-data; name="${escapeHeaderValue(key)}"; filename="${escapeHeaderValue(filename)}"\r Content-Type: ${type}\r \r `); yield* iterateBytes(getStreamingFileData(value2)); } else { - yield encodeUTF82(`--${boundary}\r + yield encodeUTF8(`--${boundary}\r `); - yield encodeUTF82(`Content-Disposition: form-data; name="${escapeHeaderValue(key)}"\r + yield encodeUTF8(`Content-Disposition: form-data; name="${escapeHeaderValue(key)}"\r \r ${String(value2)}`); } - yield encodeUTF82("\r\n"); + yield encodeUTF8("\r\n"); } - yield encodeUTF82(`--${boundary}--\r + yield encodeUTF8(`--${boundary}--\r `); } function* iterateFormEntries(body) { @@ -23527,7 +5706,7 @@ function getStreamingFileName(value2, options) { } return options.stripFilenames === false ? normalizeFilenamePath(name) : basename(name) ?? "unknown_file"; } - return getName2(value2, { stripFilename: options.stripFilenames }) ?? "unknown_file"; + return getName(value2, { stripFilename: options.stripFilenames }) ?? "unknown_file"; } function getStreamingFileType(value2) { let type; @@ -23558,7 +5737,7 @@ function getStreamingFileData(value2) { } async function* iterateBytes(value2) { if (typeof value2 === "string") { - yield encodeUTF82(value2); + yield encodeUTF8(value2); } else if (ArrayBuffer.isView(value2)) { yield new Uint8Array(value2.buffer, value2.byteOffset, value2.byteLength); } else if (isArrayBuffer(value2)) { @@ -23572,10 +5751,10 @@ async function* iterateBytes(value2) { yield new Uint8Array(await value2.arrayBuffer()); } } else if (isReadableStream(value2)) { - for await (const chunk of ReadableStreamToAsyncIterable2(value2)) { + for await (const chunk of ReadableStreamToAsyncIterable(value2)) { yield* iterateBytes(chunk); } - } else if (isAsyncIterable2(value2)) { + } else if (isAsyncIterable(value2)) { for await (const chunk of value2) { yield* iterateBytes(chunk); } @@ -23589,14 +5768,14 @@ function escapeHeaderValue(value2) { return codePoint <= 31 || codePoint === 127 || character === '"' || character === "\\" ? encodeURIComponent(character) : character; }).join(""); } -var brand_privateStreamingFile, checkFileSupport2, arrayBufferByteLengthGetter, isAsyncIterable2, maybeMultipartFormRequestOptions, multipartFormRequestOptions2, supportsFormDataMap2, createForm2, isBlob, isReadableStream, isStreamingFile, isUploadable, hasStreamingUploadableValue, hasUploadableValue, snapshotPreservedUploadEntries, createStreamingFormRequestOptions, addFormValue2; -var init_uploads3 = __esm({ +var brand_privateStreamingFile, checkFileSupport, arrayBufferByteLengthGetter, isAsyncIterable, maybeMultipartFormRequestOptions, multipartFormRequestOptions, supportsFormDataMap, createForm, isBlob, isReadableStream, isStreamingFile, isUploadable, hasStreamingUploadableValue, hasUploadableValue, snapshotPreservedUploadEntries, createStreamingFormRequestOptions, addFormValue; +var init_uploads = __esm({ "node_modules/openai/internal/uploads.mjs"() { - init_headers3(); - init_shims2(); - init_bytes2(); + init_headers(); + init_shims(); + init_bytes(); brand_privateStreamingFile = /* @__PURE__ */ Symbol("brand.privateStreamingFile"); - checkFileSupport2 = () => { + checkFileSupport = () => { if (typeof File === "undefined") { const { process: process2 } = globalThis; const isOldNode = typeof process2?.versions?.node === "string" && Number.parseInt(process2.versions.node.split("."), 10) < 20; @@ -23604,7 +5783,7 @@ var init_uploads3 = __esm({ } }; arrayBufferByteLengthGetter = Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, "byteLength")?.get; - isAsyncIterable2 = (value2) => value2 != null && typeof value2 === "object" && typeof value2[Symbol.asyncIterator] === "function"; + isAsyncIterable = (value2) => value2 != null && typeof value2 === "object" && typeof value2[Symbol.asyncIterator] === "function"; maybeMultipartFormRequestOptions = async (opts, fetch2, formOptions) => { if (!hasUploadableValue(opts.body)) { return opts; @@ -23612,29 +5791,29 @@ var init_uploads3 = __esm({ if (hasStreamingUploadableValue(opts.body)) { return createStreamingFormRequestOptions(opts, formOptions); } - return { ...opts, body: await createForm2(opts.body, fetch2, formOptions) }; + return { ...opts, body: await createForm(opts.body, fetch2, formOptions) }; }; - multipartFormRequestOptions2 = async (opts, fetch2, formOptions) => { + multipartFormRequestOptions = async (opts, fetch2, formOptions) => { if (hasStreamingUploadableValue(opts.body)) { return createStreamingFormRequestOptions(opts, formOptions); } - return { ...opts, body: await createForm2(opts.body, fetch2, formOptions) }; + return { ...opts, body: await createForm(opts.body, fetch2, formOptions) }; }; - supportsFormDataMap2 = /* @__PURE__ */ new WeakMap(); - createForm2 = async (body, fetch2, options = {}) => { - if (!await supportsFormData2(fetch2)) { + supportsFormDataMap = /* @__PURE__ */ new WeakMap(); + createForm = async (body, fetch2, options = {}) => { + if (!await supportsFormData(fetch2)) { throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class."); } const form = new FormData(); - await Promise.all(Object.entries(body || {}).map(([key, value2]) => addFormValue2(form, key, value2, options))); + await Promise.all(Object.entries(body || {}).map(([key, value2]) => addFormValue(form, key, value2, options))); return form; }; isBlob = (value2) => value2 instanceof Blob; isReadableStream = (value2) => typeof value2 === "object" && value2 !== null && "getReader" in value2 && typeof value2.getReader === "function"; isStreamingFile = (value2) => typeof value2 === "object" && value2 !== null && brand_privateStreamingFile in value2; - isUploadable = (value2) => typeof value2 === "object" && value2 !== null && (value2 instanceof Response || isAsyncIterable2(value2) || isReadableStream(value2) || isStreamingFile(value2) || isBlob(value2)); + isUploadable = (value2) => typeof value2 === "object" && value2 !== null && (value2 instanceof Response || isAsyncIterable(value2) || isReadableStream(value2) || isStreamingFile(value2) || isBlob(value2)); hasStreamingUploadableValue = (value2) => { - if (isStreamingFile(value2) || isAsyncIterable2(value2) || isReadableStream(value2)) { + if (isStreamingFile(value2) || isAsyncIterable(value2) || isReadableStream(value2)) { return true; } if (Array.isArray(value2)) { @@ -23680,14 +5859,14 @@ var init_uploads3 = __esm({ const preservedFilenames = options.stripFilenames === false ? /* @__PURE__ */ new WeakMap() : void 0; const multipartEntries = preservedFilenames ? snapshotPreservedUploadEntries(entries2, preservedFilenames) : entries2; const boundary = `openai-${Math.random().toString(36).slice(2)}`; - const body = ReadableStreamFrom2(iterateMultipartBody(multipartEntries, boundary, options, preservedFilenames)); + const body = ReadableStreamFrom(iterateMultipartBody(multipartEntries, boundary, options, preservedFilenames)); return { ...opts, body, - headers: buildHeaders2([{ "content-type": `multipart/form-data; boundary=${boundary}` }, opts.headers]) + headers: buildHeaders([{ "content-type": `multipart/form-data; boundary=${boundary}` }, opts.headers]) }; }; - addFormValue2 = async (form, key, value2, options) => { + addFormValue = async (form, key, value2, options) => { if (value2 === void 0) { return; } @@ -23698,11 +5877,11 @@ var init_uploads3 = __esm({ form.append(key, String(value2)); } else if (value2 instanceof Response) { const blob = await value2.blob(); - form.append(key, makeFile2([blob], getName2(value2, { stripFilename: options.stripFilenames }), { type: blob.type })); - } else if (isAsyncIterable2(value2)) { - form.append(key, makeFile2([await new Response(ReadableStreamFrom2(value2)).blob()], getName2(value2, { stripFilename: options.stripFilenames }))); + form.append(key, makeFile([blob], getName(value2, { stripFilename: options.stripFilenames }), { type: blob.type })); + } else if (isAsyncIterable(value2)) { + form.append(key, makeFile([await new Response(ReadableStreamFrom(value2)).blob()], getName(value2, { stripFilename: options.stripFilenames }))); } else if (isBlob(value2)) { - const filename = getName2(value2, { stripFilename: options.stripFilenames }); + const filename = getName(value2, { stripFilename: options.stripFilenames }); if (filename === void 0) { form.append(key, value2); } else { @@ -23711,7 +5890,7 @@ var init_uploads3 = __esm({ } else if (Array.isArray(value2)) { const entries2 = await Promise.all(value2.map(async (entry2) => { const entryForm = new FormData(); - await addFormValue2(entryForm, key + "[]", entry2, options); + await addFormValue(entryForm, key + "[]", entry2, options); return entryForm; })); for (const entryForm of entries2) { @@ -23723,7 +5902,7 @@ var init_uploads3 = __esm({ } } } else if (typeof value2 === "object") { - await Promise.all(Object.entries(value2).map(([name, prop]) => addFormValue2(form, `${key}[${name}]`, prop, options))); + await Promise.all(Object.entries(value2).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop, options))); } else { throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value2} instead`); } @@ -23732,10 +5911,10 @@ var init_uploads3 = __esm({ }); // node_modules/openai/internal/to-file.mjs -async function toFile2(value2, name, options) { - checkFileSupport2(); +async function toFile(value2, name, options) { + checkFileSupport(); value2 = await value2; - if (isFileLike2(value2)) { + if (isFileLike(value2)) { const fileOptions = { ...options, type: options?.type ?? value2.type, @@ -23745,75 +5924,75 @@ async function toFile2(value2, name, options) { if (canReuseNativeFile(value2, name, options)) { return value2; } - return makeFile2([value2], name ?? value2.name, fileOptions); + return makeFile([value2], name ?? value2.name, fileOptions); } - return makeFile2([await value2.arrayBuffer()], name ?? value2.name, fileOptions); + return makeFile([await value2.arrayBuffer()], name ?? value2.name, fileOptions); } - if (isResponseLike2(value2)) { + if (isResponseLike(value2)) { const blob = await value2.blob(); - name ?? (name = getName2(value2)); + name ?? (name = getName(value2)); const responseOptions = options?.type === void 0 && blob.type ? { ...options, type: blob.type } : options; - return makeFile2(await getBytes2(blob), name, responseOptions); + return makeFile(await getBytes(blob), name, responseOptions); } - const parts = await getBytes2(value2); - name ?? (name = getName2(value2)); + const parts = await getBytes(value2); + name ?? (name = getName(value2)); if (options?.type === void 0) { const typedPart = parts.find((part) => typeof part === "object" && "type" in part && !!part.type); if (typedPart) { options = { ...options, type: typedPart.type }; } } - return makeFile2(parts, name, options); + return makeFile(parts, name, options); } -async function getBytes2(value2) { +async function getBytes(value2) { const parts = []; if (typeof value2 === "string" || ArrayBuffer.isView(value2) || // includes Uint8Array, Buffer, etc. isArrayBuffer(value2)) { parts.push(value2); - } else if (isBlobLike2(value2)) { + } else if (isBlobLike(value2)) { parts.push(value2 instanceof Blob ? value2 : new Blob([await value2.arrayBuffer()], { type: value2.type })); - } else if (isAsyncIterable2(value2)) { + } else if (isAsyncIterable(value2)) { for await (const chunk of value2) { - parts.push(...await getBytes2(chunk)); + parts.push(...await getBytes(chunk)); } } else { const constructor = value2?.constructor?.name; - throw new Error(`Unexpected data type: ${typeof value2}${constructor ? `; constructor: ${constructor}` : ""}${propsForError2(value2)}`); + throw new Error(`Unexpected data type: ${typeof value2}${constructor ? `; constructor: ${constructor}` : ""}${propsForError(value2)}`); } return parts; } -function propsForError2(value2) { +function propsForError(value2) { if (typeof value2 !== "object" || value2 === null) { return ""; } const props = Object.getOwnPropertyNames(value2); return `; props: [${props.map((p) => `"${p}"`).join(", ")}]`; } -var isBlobLike2, isFileLike2, isResponseLike2, hasFilePropertyOverrides, canReuseNativeFile; -var init_to_file2 = __esm({ +var isBlobLike, isFileLike, isResponseLike, hasFilePropertyOverrides, canReuseNativeFile; +var init_to_file = __esm({ "node_modules/openai/internal/to-file.mjs"() { - init_uploads3(); - isBlobLike2 = (value2) => value2 != null && typeof value2 === "object" && typeof value2.size === "number" && typeof value2.type === "string" && typeof value2.text === "function" && typeof value2.slice === "function" && typeof value2.arrayBuffer === "function"; - isFileLike2 = (value2) => value2 != null && typeof value2 === "object" && typeof value2.name === "string" && typeof value2.lastModified === "number" && isBlobLike2(value2); - isResponseLike2 = (value2) => value2 != null && typeof value2 === "object" && typeof value2.url === "string" && typeof value2.blob === "function"; + init_uploads(); + isBlobLike = (value2) => value2 != null && typeof value2 === "object" && typeof value2.size === "number" && typeof value2.type === "string" && typeof value2.text === "function" && typeof value2.slice === "function" && typeof value2.arrayBuffer === "function"; + isFileLike = (value2) => value2 != null && typeof value2 === "object" && typeof value2.name === "string" && typeof value2.lastModified === "number" && isBlobLike(value2); + isResponseLike = (value2) => value2 != null && typeof value2 === "object" && typeof value2.url === "string" && typeof value2.blob === "function"; hasFilePropertyOverrides = (value2, options) => options?.type != null && options.type !== value2.type || options?.lastModified != null && options.lastModified !== value2.lastModified || options?.endings != null; canReuseNativeFile = (value2, name, options) => (name == null || name === value2.name) && !hasFilePropertyOverrides(value2, options); } }); // node_modules/openai/core/uploads.mjs -var init_uploads4 = __esm({ +var init_uploads2 = __esm({ "node_modules/openai/core/uploads.mjs"() { - init_uploads3(); - init_to_file2(); + init_uploads(); + init_to_file(); } }); // node_modules/openai/core/resource.mjs -var APIResource2; -var init_resource2 = __esm({ +var APIResource; +var init_resource = __esm({ "node_modules/openai/core/resource.mjs"() { - APIResource2 = class { + APIResource = class { constructor(client) { this._client = client; } @@ -23822,15 +6001,15 @@ var init_resource2 = __esm({ }); // node_modules/openai/internal/utils/path.mjs -function encodeURIPath2(str2) { +function encodeURIPath(str2) { return str2.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g, encodeURIComponent); } -var EMPTY2, createPathTagFunction2, path3; -var init_path2 = __esm({ +var EMPTY, createPathTagFunction, path; +var init_path = __esm({ "node_modules/openai/internal/utils/path.mjs"() { - init_error3(); - EMPTY2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null)); - createPathTagFunction2 = (pathEncoder = encodeURIPath2) => function path5(statics, ...params) { + init_error(); + EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null)); + createPathTagFunction = (pathEncoder = encodeURIPath) => function path5(statics, ...params) { if (statics.length === 1) { return statics[0]; } @@ -23847,7 +6026,7 @@ var init_path2 = __esm({ let encoded = (postPath ? encodeURIComponent : pathEncoder)("" + value2); if (index !== params.length && (value2 == null || // oxlint-disable-next-line anti-slop/no-runtime-typeof -- Path parameters may arrive from JavaScript callers and require runtime validation before URL encoding. typeof value2 === "object" && // handle values from other realms - value2.toString === Object.getPrototypeOf(Object.getPrototypeOf(value2.hasOwnProperty ?? EMPTY2) ?? EMPTY2)?.toString)) { + value2.toString === Object.getPrototypeOf(Object.getPrototypeOf(value2.hasOwnProperty ?? EMPTY) ?? EMPTY)?.toString)) { encoded = value2 + ""; invalidSegments.push({ start: path6.length + currentValue.length, @@ -23885,18 +6064,18 @@ ${underline}`); } return path6; }; - path3 = /* @__PURE__ */ createPathTagFunction2(encodeURIPath2); + path = /* @__PURE__ */ createPathTagFunction(encodeURIPath); } }); // node_modules/openai/resources/chat/completions/messages.mjs -var Messages3; -var init_messages3 = __esm({ +var Messages; +var init_messages = __esm({ "node_modules/openai/resources/chat/completions/messages.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Messages3 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Messages = class extends APIResource { /** * Get the messages in a stored chat completion. Only Chat Completions that have * been created with the `store` parameter set to `true` will be returned. @@ -23912,16 +6091,16 @@ var init_messages3 = __esm({ * ``` */ list(completionID, query = {}, options) { - return this._client.getAPIList(path3`/chat/completions/${completionID}/messages`, CursorPage, { query, ...options, __security: { bearerAuth: true } }); + return this._client.getAPIList(path`/chat/completions/${completionID}/messages`, CursorPage, { query, ...options, __security: { bearerAuth: true } }); } }; } }); // node_modules/openai/error.mjs -var init_error4 = __esm({ +var init_error2 = __esm({ "node_modules/openai/error.mjs"() { - init_error3(); + init_error(); } }); @@ -24046,9 +6225,9 @@ function validateInputTools(tools) { } } } -var init_parser3 = __esm({ +var init_parser = __esm({ "node_modules/openai/lib/parser.mjs"() { - init_error4(); + init_error2(); } }); @@ -24822,8 +7001,8 @@ function createBufferedEventLedger() { var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_abortListeners, _EventStream_emittedListenerRegistrations, _EventStream_pendingListenerCleanup, _EventStream_pendingBufferedEventChecks, _EventStream_listenerDispatchDepth, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_terminalFailure, _EventStream_abortFromSignal, _EventStream_removeAbortListeners, _EventStream_onceForEmitted, _EventStream_removeEmittedListener, _EventStream_cleanupEmittedListeners, _EventStream_handleError, _EventStream_settleTerminalEvent, MAX_BUFFERED_ITERATOR_EVENTS, MAX_BUFFERED_ITERATOR_BYTES, MAX_INSPECTABLE_TYPED_ARRAY_ELEMENTS, MAX_BUFFERED_EVENT_DEPTH, bufferedJSONStringify, bufferedJSONParse, sdkOwnedBufferedEventArguments, typedArrayBufferGetter, typedArrayLengthGetter, dataViewBufferGetter, symbolDescriptionGetter, dateTimestampGetter, arrayBufferByteLengthGetter2, sharedArrayBufferByteLengthGetter, errorStackDescriptor, functionToString, objectToString, errorBrandDescriptor, nativeErrorBrand, nativeErrorConstructorSource, nativeDateConstructorSource, nativeFunctionConstructorSource, trustedIntrinsicPrototypes, trustedNativeConstructorSources, canonicalIntrinsicDescriptors, foreignErrorStackDescriptors, nativeProxyDetector, typedArrayConstructorDescriptor, blobInternalHandlePrototype, mapEntries, setValues, headersEntriesDescriptor, headersEntries, retainedStorageBrands, BUFFERED_LEDGER_ENTRY_BYTES, BUFFERED_LEDGER_NODE_BYTES, BUFFERED_LEDGER_EDGE_BYTES, BUFFERED_LEDGER_OWNER_BYTES, MAX_BUFFERED_LEDGER_RECONCILIATION_WORK, EventStream2; var init_EventStream = __esm({ "node_modules/openai/lib/EventStream.mjs"() { - init_tslib2(); - init_error4(); + init_tslib(); + init_error2(); MAX_BUFFERED_ITERATOR_EVENTS = 4096; MAX_BUFFERED_ITERATOR_BYTES = 8 * 1024 * 1024; MAX_INSPECTABLE_TYPED_ARRAY_ELEMENTS = 4096; @@ -24847,24 +7026,24 @@ var init_EventStream = __esm({ nativeDateConstructorSource = functionToString.call(Date); nativeFunctionConstructorSource = functionToString.call(Function); trustedIntrinsicPrototypes = /* @__PURE__ */ new Set([ - APIConnectionError2.prototype, - APIConnectionTimeoutError2.prototype, - APIError2.prototype, + APIConnectionError.prototype, + APIConnectionTimeoutError.prototype, + APIError.prototype, OpenAIError.prototype, - APIUserAbortError2.prototype, - AuthenticationError2.prototype, - BadRequestError2.prototype, - ConflictError2.prototype, + APIUserAbortError.prototype, + AuthenticationError.prototype, + BadRequestError.prototype, + ConflictError.prototype, ContentFilterFinishReasonError.prototype, - InternalServerError2.prototype, + InternalServerError.prototype, InvalidWebhookSignatureError.prototype, LengthFinishReasonError.prototype, - NotFoundError2.prototype, + NotFoundError.prototype, OAuthError.prototype, - PermissionDeniedError2.prototype, - RateLimitError2.prototype, + PermissionDeniedError.prototype, + RateLimitError.prototype, SubjectTokenProviderError.prototype, - UnprocessableEntityError2.prototype + UnprocessableEntityError.prototype ]); trustedNativeConstructorSources = /* @__PURE__ */ new Set(); canonicalIntrinsicDescriptors = /* @__PURE__ */ new Map(); @@ -24978,23 +7157,23 @@ var init_EventStream = __esm({ _EventStream_aborted.set(this, false); _EventStream_catchingPromiseCreated.set(this, false); _EventStream_terminalFailure.set(this, void 0); - __classPrivateFieldSet2(this, _EventStream_connectedPromise, new Promise((resolve2, reject2) => { - __classPrivateFieldSet2(this, _EventStream_resolveConnectedPromise, resolve2, "f"); - __classPrivateFieldSet2(this, _EventStream_rejectConnectedPromise, reject2, "f"); + __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve2, reject2) => { + __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve2, "f"); + __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject2, "f"); }), "f"); - __classPrivateFieldSet2(this, _EventStream_endPromise, new Promise((resolve2, reject2) => { - __classPrivateFieldSet2(this, _EventStream_resolveEndPromise, resolve2, "f"); - __classPrivateFieldSet2(this, _EventStream_rejectEndPromise, reject2, "f"); + __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve2, reject2) => { + __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve2, "f"); + __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject2, "f"); }), "f"); - __classPrivateFieldGet2(this, _EventStream_connectedPromise, "f").catch(() => void 0); - __classPrivateFieldGet2(this, _EventStream_endPromise, "f").catch(() => void 0); + __classPrivateFieldGet(this, _EventStream_connectedPromise, "f").catch(() => void 0); + __classPrivateFieldGet(this, _EventStream_endPromise, "f").catch(() => void 0); } _run(executor) { setTimeout(() => { let failed = false; Promise.resolve().then(executor).catch((error) => { failed = true; - __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_handleError).call(this, error); + __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_handleError).call(this, error); }).then(() => { if (failed) { return; @@ -25002,7 +7181,7 @@ var init_EventStream = __esm({ try { this._emitFinal(); } catch (error) { - __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_handleError).call(this, error); + __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_handleError).call(this, error); return; } this._emit("end"); @@ -25013,20 +7192,20 @@ var init_EventStream = __esm({ if (this.ended) { return; } - __classPrivateFieldGet2(this, _EventStream_resolveConnectedPromise, "f").call(this); + __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, "f").call(this); this._emit("connect"); } /** Whether the stream has finished successfully, failed, or been aborted. */ get ended() { - return __classPrivateFieldGet2(this, _EventStream_ended, "f"); + return __classPrivateFieldGet(this, _EventStream_ended, "f"); } /** Whether an error or user cancellation has been observed. */ get errored() { - return __classPrivateFieldGet2(this, _EventStream_errored, "f"); + return __classPrivateFieldGet(this, _EventStream_errored, "f"); } /** Whether the stream ended because its request was cancelled. */ get aborted() { - return __classPrivateFieldGet2(this, _EventStream_aborted, "f"); + return __classPrivateFieldGet(this, _EventStream_aborted, "f"); } /** * Cancels the underlying request; {@link done} and {@link events} observe cancellation. @@ -25037,7 +7216,7 @@ var init_EventStream = __esm({ } /** Creates a user-abort error retaining this runner's cancellation reason. */ _userAbortError() { - const error = new APIUserAbortError2(); + const error = new APIUserAbortError(); Object.defineProperty(error, "cause", { value: this.controller.signal.reason, writable: true, @@ -25050,15 +7229,15 @@ var init_EventStream = __esm({ return; } if (signal.aborted) { - __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_abortFromSignal).call(this, signal); + __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_abortFromSignal).call(this, signal); return; } - if (__classPrivateFieldGet2(this, _EventStream_abortListeners, "f").some((registration) => registration.signal === signal)) { + if (__classPrivateFieldGet(this, _EventStream_abortListeners, "f").some((registration) => registration.signal === signal)) { return; } - const listener = () => __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_abortFromSignal).call(this, signal); + const listener = () => __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_abortFromSignal).call(this, signal); signal.addEventListener("abort", listener, { once: true }); - __classPrivateFieldGet2(this, _EventStream_abortListeners, "f").push({ signal, listener }); + __classPrivateFieldGet(this, _EventStream_abortListeners, "f").push({ signal, listener }); } /** * Adds the listener function to the end of the listeners array for the event. @@ -25069,7 +7248,7 @@ var init_EventStream = __esm({ */ on(event, listener) { var _a6; - const listeners = (_a6 = __classPrivateFieldGet2(this, _EventStream_listeners, "f"))[event] || (_a6[event] = []); + const listeners = (_a6 = __classPrivateFieldGet(this, _EventStream_listeners, "f"))[event] || (_a6[event] = []); listeners.push({ listener }); return this; } @@ -25081,13 +7260,13 @@ var init_EventStream = __esm({ * @returns This stream, so that listener registration calls can be chained. */ off(event, listener) { - const listeners = __classPrivateFieldGet2(this, _EventStream_listeners, "f")[event]; + const listeners = __classPrivateFieldGet(this, _EventStream_listeners, "f")[event]; if (!listeners) { return this; } - const emittedRegistration = __classPrivateFieldGet2(this, _EventStream_emittedListenerRegistrations, "f").get(listener); + const emittedRegistration = __classPrivateFieldGet(this, _EventStream_emittedListenerRegistrations, "f").get(listener); if (emittedRegistration?.event === event && !emittedRegistration.registration.removed && !emittedRegistration.registration.detached) { - __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_removeEmittedListener).call(this, event, emittedRegistration.registration); + __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_removeEmittedListener).call(this, event, emittedRegistration.registration); return this; } const index = listeners.findIndex((l) => !l.removed && l.listener === listener); @@ -25103,7 +7282,7 @@ var init_EventStream = __esm({ */ once(event, listener) { var _a6; - const listeners = (_a6 = __classPrivateFieldGet2(this, _EventStream_listeners, "f"))[event] || (_a6[event] = []); + const listeners = (_a6 = __classPrivateFieldGet(this, _EventStream_listeners, "f"))[event] || (_a6[event] = []); listeners.push({ listener, once: true }); return this; } @@ -25122,7 +7301,7 @@ var init_EventStream = __esm({ */ emitted(event) { return new Promise((resolve2, reject2) => { - __classPrivateFieldSet2(this, _EventStream_catchingPromiseCreated, true, "f"); + __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, "f"); const onError = (error) => { this.off(event, onEvent); reject2(error); @@ -25134,9 +7313,9 @@ var init_EventStream = __esm({ resolve2(values.length > 1 ? values : values[0]); }; if (event !== "error") { - __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_onceForEmitted).call(this, "error", onError); + __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_onceForEmitted).call(this, "error", onError); } - __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_onceForEmitted).call(this, event, onEvent); + __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_onceForEmitted).call(this, event, onEvent); }); } /** @@ -25218,7 +7397,7 @@ var init_EventStream = __esm({ const deactivateBufferedEvent = (entry2) => { entry2.active = false; if (entry2.check) { - __classPrivateFieldGet2(this, _EventStream_pendingBufferedEventChecks, "f").delete(entry2.check); + __classPrivateFieldGet(this, _EventStream_pendingBufferedEventChecks, "f").delete(entry2.check); entry2.check = void 0; } }; @@ -25232,14 +7411,14 @@ var init_EventStream = __esm({ } const error = new OpenAIError(`Event stream iterator buffer limit exceeded (${MAX_BUFFERED_ITERATOR_EVENTS} events or ${MAX_BUFFERED_ITERATOR_BYTES} bytes); consume events as they arrive.`); try { - __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_handleError).call(this, error); + __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_handleError).call(this, error); } finally { this.controller.abort(); } return error; }; const revalidateBufferedEvent = (value2, entry2) => { - if (!entry2.active || __classPrivateFieldGet2(this, _EventStream_ended, "f")) { + if (!entry2.active || __classPrivateFieldGet(this, _EventStream_ended, "f")) { return; } const graph = inspectBufferedEventGraph(value2, MAX_BUFFERED_ITERATOR_BYTES); @@ -25282,7 +7461,7 @@ var init_EventStream = __esm({ revalidateBufferedEvent(value2, entry2); }; entry2.check = check2; - __classPrivateFieldGet2(this, _EventStream_pendingBufferedEventChecks, "f").add(check2); + __classPrivateFieldGet(this, _EventStream_pendingBufferedEventChecks, "f").add(check2); } }; const onFailure = (error) => { @@ -25295,7 +7474,7 @@ var init_EventStream = __esm({ if (failure) { return; } - const terminal = __classPrivateFieldGet2(this, _EventStream_terminalFailure, "f"); + const terminal = __classPrivateFieldGet(this, _EventStream_terminalFailure, "f"); if (!terminal) { return; } @@ -25374,35 +7553,35 @@ var init_EventStream = __esm({ } /** Resolves when the stream ends successfully or rejects when it fails or is aborted. */ async done() { - __classPrivateFieldSet2(this, _EventStream_catchingPromiseCreated, true, "f"); - await __classPrivateFieldGet2(this, _EventStream_endPromise, "f"); + __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, "f"); + await __classPrivateFieldGet(this, _EventStream_endPromise, "f"); } /** Returns whether an event currently has one or more registered listeners. */ _hasListeners(event) { - return Boolean(__classPrivateFieldGet2(this, _EventStream_listeners, "f")[event]?.some((listener) => !listener.removed)); + return Boolean(__classPrivateFieldGet(this, _EventStream_listeners, "f")[event]?.some((listener) => !listener.removed)); } /** Dispatches a stream event and performs the associated lifecycle transitions. */ _emit(event, ...args) { - if (__classPrivateFieldGet2(this, _EventStream_ended, "f")) { + if (__classPrivateFieldGet(this, _EventStream_ended, "f")) { return; } if (event === "end") { - __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_removeAbortListeners).call(this); - __classPrivateFieldSet2(this, _EventStream_ended, true, "f"); - __classPrivateFieldGet2(this, _EventStream_resolveEndPromise, "f").call(this); + __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_removeAbortListeners).call(this); + __classPrivateFieldSet(this, _EventStream_ended, true, "f"); + __classPrivateFieldGet(this, _EventStream_resolveEndPromise, "f").call(this); } - const listeners = __classPrivateFieldGet2(this, _EventStream_listeners, "f")[event]; + const listeners = __classPrivateFieldGet(this, _EventStream_listeners, "f")[event]; let dispatchError; let dispatchThrew = false; try { if (listeners) { - __classPrivateFieldGet2(this, _EventStream_listeners, "f")[event] = listeners.filter((listener) => { + __classPrivateFieldGet(this, _EventStream_listeners, "f")[event] = listeners.filter((listener) => { if (listener.once) { listener.detached = true; } return !listener.once && !listener.removed; }); - __classPrivateFieldSet2(this, _EventStream_listenerDispatchDepth, __classPrivateFieldGet2(this, _EventStream_listenerDispatchDepth, "f") + 1, "f"); + __classPrivateFieldSet(this, _EventStream_listenerDispatchDepth, __classPrivateFieldGet(this, _EventStream_listenerDispatchDepth, "f") + 1, "f"); try { for (const registration of listeners) { if (!registration.removed) { @@ -25411,12 +7590,12 @@ var init_EventStream = __esm({ } } } finally { - __classPrivateFieldSet2(this, _EventStream_listenerDispatchDepth, __classPrivateFieldGet2(this, _EventStream_listenerDispatchDepth, "f") - 1, "f"); - if (__classPrivateFieldGet2(this, _EventStream_listenerDispatchDepth, "f") === 0) { - __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_cleanupEmittedListeners).call(this); - for (const check2 of __classPrivateFieldGet2(this, _EventStream_pendingBufferedEventChecks, "f")) { - __classPrivateFieldGet2(this, _EventStream_pendingBufferedEventChecks, "f").delete(check2); - if (!__classPrivateFieldGet2(this, _EventStream_ended, "f")) { + __classPrivateFieldSet(this, _EventStream_listenerDispatchDepth, __classPrivateFieldGet(this, _EventStream_listenerDispatchDepth, "f") - 1, "f"); + if (__classPrivateFieldGet(this, _EventStream_listenerDispatchDepth, "f") === 0) { + __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_cleanupEmittedListeners).call(this); + for (const check2 of __classPrivateFieldGet(this, _EventStream_pendingBufferedEventChecks, "f")) { + __classPrivateFieldGet(this, _EventStream_pendingBufferedEventChecks, "f").delete(check2); + if (!__classPrivateFieldGet(this, _EventStream_ended, "f")) { check2(); } } @@ -25428,7 +7607,7 @@ var init_EventStream = __esm({ dispatchThrew = true; } try { - __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_settleTerminalEvent).call(this, event, args, Boolean(listeners?.length)); + __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_settleTerminalEvent).call(this, event, args, Boolean(listeners?.length)); } catch (error) { if (!dispatchThrew) { dispatchError = error; @@ -25450,44 +7629,44 @@ var init_EventStream = __esm({ this.controller.abort(); } }, _EventStream_removeAbortListeners = function _EventStream_removeAbortListeners2() { - for (const { signal, listener } of __classPrivateFieldGet2(this, _EventStream_abortListeners, "f").splice(0)) { + for (const { signal, listener } of __classPrivateFieldGet(this, _EventStream_abortListeners, "f").splice(0)) { signal.removeEventListener("abort", listener); } }, _EventStream_onceForEmitted = function _EventStream_onceForEmitted2(event, listener) { - const previousListeners = __classPrivateFieldGet2(this, _EventStream_listeners, "f")[event]; + const previousListeners = __classPrivateFieldGet(this, _EventStream_listeners, "f")[event]; const previousLength = previousListeners?.length ?? 0; this.once(event, listener); - const listeners = __classPrivateFieldGet2(this, _EventStream_listeners, "f")[event]; + const listeners = __classPrivateFieldGet(this, _EventStream_listeners, "f")[event]; const [registration] = listeners?.slice(-1) ?? []; if ((previousListeners === void 0 || listeners === previousListeners) && listeners?.length === previousLength + 1 && registration?.listener === listener && registration.once) { - __classPrivateFieldGet2(this, _EventStream_emittedListenerRegistrations, "f").set(listener, { event, registration }); + __classPrivateFieldGet(this, _EventStream_emittedListenerRegistrations, "f").set(listener, { event, registration }); } }, _EventStream_removeEmittedListener = function _EventStream_removeEmittedListener2(event, registration) { if (registration.removed) { return; } registration.removed = true; - __classPrivateFieldGet2(this, _EventStream_emittedListenerRegistrations, "f").delete(registration.listener); - __classPrivateFieldGet2(this, _EventStream_pendingListenerCleanup, "f").add(event); - if (__classPrivateFieldGet2(this, _EventStream_listenerDispatchDepth, "f") === 0) { - __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_cleanupEmittedListeners).call(this); + __classPrivateFieldGet(this, _EventStream_emittedListenerRegistrations, "f").delete(registration.listener); + __classPrivateFieldGet(this, _EventStream_pendingListenerCleanup, "f").add(event); + if (__classPrivateFieldGet(this, _EventStream_listenerDispatchDepth, "f") === 0) { + __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_cleanupEmittedListeners).call(this); } }, _EventStream_cleanupEmittedListeners = function _EventStream_cleanupEmittedListeners2() { - for (const event of __classPrivateFieldGet2(this, _EventStream_pendingListenerCleanup, "f")) { + for (const event of __classPrivateFieldGet(this, _EventStream_pendingListenerCleanup, "f")) { const eventType = event; - const listeners = __classPrivateFieldGet2(this, _EventStream_listeners, "f")[eventType]; + const listeners = __classPrivateFieldGet(this, _EventStream_listeners, "f")[eventType]; if (listeners) { - __classPrivateFieldGet2(this, _EventStream_listeners, "f")[eventType] = listeners.filter((listener) => !listener.removed); + __classPrivateFieldGet(this, _EventStream_listeners, "f")[eventType] = listeners.filter((listener) => !listener.removed); } } - __classPrivateFieldGet2(this, _EventStream_pendingListenerCleanup, "f").clear(); + __classPrivateFieldGet(this, _EventStream_pendingListenerCleanup, "f").clear(); }, _EventStream_handleError = function _EventStream_handleError2(error) { - __classPrivateFieldSet2(this, _EventStream_errored, true, "f"); + __classPrivateFieldSet(this, _EventStream_errored, true, "f"); if (error instanceof Error && error.name === "AbortError") { error = this._userAbortError(); } - if (error instanceof APIUserAbortError2) { - __classPrivateFieldSet2(this, _EventStream_aborted, true, "f"); + if (error instanceof APIUserAbortError) { + __classPrivateFieldSet(this, _EventStream_aborted, true, "f"); return this._emit("abort", error); } if (error instanceof OpenAIError) { @@ -25502,23 +7681,23 @@ var init_EventStream = __esm({ }, _EventStream_settleTerminalEvent = function _EventStream_settleTerminalEvent2(event, args, hasListeners) { if (event === "abort") { const error = args[0]; - __classPrivateFieldSet2(this, _EventStream_terminalFailure, __classPrivateFieldGet2(this, _EventStream_terminalFailure, "f") ?? { kind: "abort", error }, "f"); - if (!__classPrivateFieldGet2(this, _EventStream_catchingPromiseCreated, "f") && !hasListeners) { + __classPrivateFieldSet(this, _EventStream_terminalFailure, __classPrivateFieldGet(this, _EventStream_terminalFailure, "f") ?? { kind: "abort", error }, "f"); + if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, "f") && !hasListeners) { Promise.reject(error); } - __classPrivateFieldGet2(this, _EventStream_rejectConnectedPromise, "f").call(this, error); - __classPrivateFieldGet2(this, _EventStream_rejectEndPromise, "f").call(this, error); + __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, "f").call(this, error); + __classPrivateFieldGet(this, _EventStream_rejectEndPromise, "f").call(this, error); this._emit("end"); return; } if (event === "error") { const error = args[0]; - __classPrivateFieldSet2(this, _EventStream_terminalFailure, __classPrivateFieldGet2(this, _EventStream_terminalFailure, "f") ?? { kind: "error", error }, "f"); - if (!__classPrivateFieldGet2(this, _EventStream_catchingPromiseCreated, "f") && !hasListeners) { + __classPrivateFieldSet(this, _EventStream_terminalFailure, __classPrivateFieldGet(this, _EventStream_terminalFailure, "f") ?? { kind: "error", error }, "f"); + if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, "f") && !hasListeners) { Promise.reject(error); } - __classPrivateFieldGet2(this, _EventStream_rejectConnectedPromise, "f").call(this, error); - __classPrivateFieldGet2(this, _EventStream_rejectEndPromise, "f").call(this, error); + __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, "f").call(this, error); + __classPrivateFieldGet(this, _EventStream_rejectEndPromise, "f").call(this, error); this._emit("end"); } }; @@ -25539,7 +7718,7 @@ function normalizeToolCallIds(chatCompletion) { for (const choice of chatCompletion.choices) { for (const toolCall of choice.message.tool_calls ?? []) { if (!toolCall.id) { - toolCall.id = `call_${uuid42()}`; + toolCall.id = `call_${uuid4()}`; } } } @@ -25588,13 +7767,13 @@ function toRequestMessage(message) { } return requestMessage; } -var _AbstractChatCompletionRunner_instances, _a3, _AbstractChatCompletionRunner_completionArrivedBeforeAbort, _AbstractChatCompletionRunner_afterCompletionInvoked, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_throwIfAborted, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult, DEFAULT_MAX_CHAT_COMPLETIONS, AbstractChatCompletionRunner; +var _AbstractChatCompletionRunner_instances, _a2, _AbstractChatCompletionRunner_completionArrivedBeforeAbort, _AbstractChatCompletionRunner_afterCompletionInvoked, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_throwIfAborted, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult, DEFAULT_MAX_CHAT_COMPLETIONS, AbstractChatCompletionRunner; var init_AbstractChatCompletionRunner = __esm({ "node_modules/openai/lib/AbstractChatCompletionRunner.mjs"() { - init_tslib2(); - init_error4(); - init_uuid2(); - init_parser3(); + init_tslib(); + init_error2(); + init_uuid(); + init_parser(); init_chatCompletionUtils(); init_EventStream(); init_RunnableFunction(); @@ -25609,7 +7788,7 @@ var init_AbstractChatCompletionRunner = __esm({ this.messages = []; } _addChatCompletion(chatCompletion) { - __classPrivateFieldSet2(this, _AbstractChatCompletionRunner_completionArrivedBeforeAbort, !this.controller.signal.aborted, "f"); + __classPrivateFieldSet(this, _AbstractChatCompletionRunner_completionArrivedBeforeAbort, !this.controller.signal.aborted, "f"); normalizeToolCallIds(chatCompletion); this._chatCompletions.push(chatCompletion); this._emit("chatCompletion", chatCompletion); @@ -25655,7 +7834,7 @@ var init_AbstractChatCompletionRunner = __esm({ */ async finalContent() { await this.done(); - return __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalContent).call(this); + return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalContent).call(this); } /** * @returns a promise that resolves with the final assistant ChatCompletionMessage response, @@ -25663,7 +7842,7 @@ var init_AbstractChatCompletionRunner = __esm({ */ async finalMessage() { await this.done(); - return __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalMessage).call(this); + return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalMessage).call(this); } /** * Waits for completion and returns the last function-tool call, or `undefined` @@ -25671,53 +7850,53 @@ var init_AbstractChatCompletionRunner = __esm({ */ async finalFunctionToolCall() { await this.done(); - return __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this); + return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this); } /** Waits for completion and returns the last matching function-tool result, if any. */ async finalFunctionToolCallResult() { await this.done(); - return __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this); + return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this); } /** Waits for completion and sums token usage across every chat completion in the run. */ async totalUsage() { await this.done(); - return __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_calculateTotalUsage).call(this); + return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_calculateTotalUsage).call(this); } /** Returns a copy of the chat completions received so far, in request order. */ allChatCompletions() { return [...this._chatCompletions]; } _emitFinal() { - if (__classPrivateFieldGet2(this, _AbstractChatCompletionRunner_afterCompletionInvoked, "f")) { - __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_throwIfAborted).call(this); + if (__classPrivateFieldGet(this, _AbstractChatCompletionRunner_afterCompletionInvoked, "f")) { + __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_throwIfAborted).call(this); } const completion = this._chatCompletions[this._chatCompletions.length - 1]; if (completion) { this._emit("finalChatCompletion", completion); } - const finalMessage = __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalMessage).call(this); + const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalMessage).call(this); if (finalMessage) { this._emit("finalMessage", finalMessage); } - const finalContent = __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalContent).call(this); + const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalContent).call(this); if (finalContent) { this._emit("finalContent", finalContent); } - const finalFunctionCall = __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this); + const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this); if (finalFunctionCall) { this._emit("finalFunctionToolCall", finalFunctionCall); } - const finalFunctionCallResult = __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this); + const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this); if (finalFunctionCallResult != null) { this._emit("finalFunctionToolCallResult", finalFunctionCallResult); } if (this._chatCompletions.some((c) => c.usage)) { - this._emit("totalUsage", __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_calculateTotalUsage).call(this)); + this._emit("totalUsage", __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_calculateTotalUsage).call(this)); } } async _createChatCompletion(client, params, options) { this._listenForAbort(options?.signal); - __classPrivateFieldGet2(_a3, _a3, "m", _AbstractChatCompletionRunner_validateParams).call(_a3, params); + __classPrivateFieldGet(_a2, _a2, "m", _AbstractChatCompletionRunner_validateParams).call(_a2, params); const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal }); this._connected(); return this._addChatCompletion(parseChatCompletion(chatCompletion, params)); @@ -25741,9 +7920,9 @@ var init_AbstractChatCompletionRunner = __esm({ if (afterCompletion == null) { return; } - __classPrivateFieldSet2(this, _AbstractChatCompletionRunner_afterCompletionInvoked, true, "f"); + __classPrivateFieldSet(this, _AbstractChatCompletionRunner_afterCompletionInvoked, true, "f"); await afterCompletion(completion, runner); - __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_throwIfAborted).call(this); + __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_throwIfAborted).call(this); }; const inputTools = params.tools.map((tool) => { if (isAutoParsableTool(tool)) { @@ -25840,7 +8019,7 @@ var init_AbstractChatCompletionRunner = __esm({ throw error; } } - const content = __classPrivateFieldGet2(_a3, _a3, "m", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(_a3, rawContent); + const content = __classPrivateFieldGet(_a2, _a2, "m", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(_a2, rawContent); return { message: { role, tool_call_id, content }, functionCalled: true }; }; for (let i = 0; i < maxChatCompletions; ++i) { @@ -25850,7 +8029,7 @@ var init_AbstractChatCompletionRunner = __esm({ tools, messages: this.messages.map(toRequestMessage) }, options); - allowBufferedToolCall = this.controller.signal.aborted && __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_completionArrivedBeforeAbort, "f"); + allowBufferedToolCall = this.controller.signal.aborted && __classPrivateFieldGet(this, _AbstractChatCompletionRunner_completionArrivedBeforeAbort, "f"); const message = chatCompletion.choices[0]?.message; if (!message) { throw new OpenAIError(`missing message in ChatCompletion response`); @@ -25895,8 +8074,8 @@ var init_AbstractChatCompletionRunner = __esm({ } } }; - _a3 = AbstractChatCompletionRunner, _AbstractChatCompletionRunner_completionArrivedBeforeAbort = /* @__PURE__ */ new WeakMap(), _AbstractChatCompletionRunner_afterCompletionInvoked = /* @__PURE__ */ new WeakMap(), _AbstractChatCompletionRunner_instances = /* @__PURE__ */ new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent2() { - return __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null; + _a2 = AbstractChatCompletionRunner, _AbstractChatCompletionRunner_completionArrivedBeforeAbort = /* @__PURE__ */ new WeakMap(), _AbstractChatCompletionRunner_afterCompletionInvoked = /* @__PURE__ */ new WeakMap(), _AbstractChatCompletionRunner_instances = /* @__PURE__ */ new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent2() { + return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null; }, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage2() { let i = this.messages.length; while (i-- > 0) { @@ -26008,8 +8187,8 @@ function parseJSON(jsonString, allowPartial = Allow.ALL) { } return _parseJSON(jsonString.trim(), allowPartial); } -var STR, NUM, ARR, OBJ, NULL, BOOL, NAN, INFINITY, MINUS_INFINITY, INF, SPECIAL, ATOM, COLLECTION, ALL, Allow, PartialJSON, MalformedJSON, _parseJSON, partialParse3; -var init_parser4 = __esm({ +var STR, NUM, ARR, OBJ, NULL, BOOL, NAN, INFINITY, MINUS_INFINITY, INF, SPECIAL, ATOM, COLLECTION, ALL, Allow, PartialJSON, MalformedJSON, _parseJSON, partialParse; +var init_parser2 = __esm({ "node_modules/openai/_vendor/partial-json-parser/parser.mjs"() { STR = 1; NUM = 2; @@ -26224,21 +8403,21 @@ var init_parser4 = __esm({ }; return parseAny(); }; - partialParse3 = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM); + partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM); } }); // node_modules/openai/streaming.mjs -var init_streaming4 = __esm({ +var init_streaming2 = __esm({ "node_modules/openai/streaming.mjs"() { - init_streaming3(); + init_streaming(); } }); // node_modules/openai/lib/ChatCompletionStream.mjs function parseStructuredStreamingJSON(content) { try { - return partialParse3(content); + return partialParse(content); } catch (error) { if (error instanceof MalformedJSON || error instanceof SyntaxError) { return parseResponseFormatContent({ type: "json_schema", $parseRaw: void 0 }, content); @@ -26478,7 +8657,7 @@ function assertBoundToolCallIdentity(toolCall, identity) { } } function assignOwnProperties(target, source) { - if (Object.prototype.propertyIsEnumerable.call(source, "__proto__") && !hasOwn2(target, "__proto__")) { + if (Object.prototype.propertyIsEnumerable.call(source, "__proto__") && !hasOwn(target, "__proto__")) { Object.defineProperty(target, "__proto__", { value: void 0, writable: true, @@ -27027,7 +9206,7 @@ function finalizeChatCompletion(snapshot, params, audioDoneChoiceIndexes, valida } return { ...toolRest2, - id: id3 || `call_${uuid42()}`, + id: id3 || `call_${uuid4()}`, type: type2, custom: { ...customRest, name: name2, input } }; @@ -27042,7 +9221,7 @@ function finalizeChatCompletion(snapshot, params, audioDoneChoiceIndexes, valida } return { ...toolRest, - id: id2 || `call_${uuid42()}`, + id: id2 || `call_${uuid4()}`, type, function: { ...fnRest, name, arguments: args } }; @@ -27078,14 +9257,14 @@ function assertNever(_x) { var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_rejectsUnfinishedTurns, _ChatCompletionStream_audioDoneChoiceIndexes, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_hasAutoParseableTool, _ChatCompletionStream_partialJSONParseBudget, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_validateStructuredSnapshots, _ChatCompletionStream_endRequest, _ChatCompletionStream_accumulateChatCompletion, CHAT_COMPLETION_READABLE_STREAM_MESSAGE_PREFIX, MAX_STREAM_CHOICES, MAX_STREAM_TOOL_CALLS, MAX_PARTIAL_JSON_BYTES, MAX_PARTIAL_JSON_FRAGMENTS, MAX_PARTIAL_JSON_DEPTH, MAX_PARTIAL_JSON_PARSE_WORK, EAGER_PARTIAL_JSON_BYTES, MAX_SERIALIZED_PARSER_SCHEMA_NODES, stringifyParserSchemaValue, MAX_SERIALIZED_PARSER_SCHEMA_BYTES, MAX_SERIALIZED_PARSER_SCHEMA_DEPTH, OMITTED_SERIALIZED_PARSER_VALUE, UNSAFE_SERIALIZED_PARSER_VALUE, ChatCompletionStream; var init_ChatCompletionStream = __esm({ "node_modules/openai/lib/ChatCompletionStream.mjs"() { - init_tslib2(); - init_parser4(); - init_error4(); - init_request_options2(); - init_uuid2(); - init_values2(); - init_parser3(); - init_streaming4(); + init_tslib(); + init_parser2(); + init_error2(); + init_request_options(); + init_uuid(); + init_values(); + init_parser(); + init_streaming2(); init_AbstractChatCompletionRunner(); CHAT_COMPLETION_READABLE_STREAM_MESSAGE_PREFIX = "chat.completion.chunk.message:"; MAX_STREAM_CHOICES = 128; @@ -27113,10 +9292,10 @@ var init_ChatCompletionStream = __esm({ _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0); _ChatCompletionStream_hasAutoParseableTool.set(this, void 0); _ChatCompletionStream_partialJSONParseBudget.set(this, void 0); - __classPrivateFieldSet2(this, _ChatCompletionStream_params, params, "f"); - __classPrivateFieldSet2(this, _ChatCompletionStream_audioDoneChoiceIndexes, /* @__PURE__ */ new Set(), "f"); - __classPrivateFieldSet2(this, _ChatCompletionStream_choiceEventStates, [], "f"); - __classPrivateFieldSet2(this, _ChatCompletionStream_hasAutoParseableTool, false, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_params, params, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_audioDoneChoiceIndexes, /* @__PURE__ */ new Set(), "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_hasAutoParseableTool, false, "f"); const tools = params?.tools; const lengthDescriptor = tools && Object.getOwnPropertyDescriptor(tools, "length"); const length = lengthDescriptor && "value" in lengthDescriptor ? lengthDescriptor.value : void 0; @@ -27128,16 +9307,16 @@ var init_ChatCompletionStream = __esm({ } const tool = descriptor.value; if (isChatCompletionFunctionTool(tool) && (isAutoParsableTool(tool) || tool.function.strict === true)) { - __classPrivateFieldSet2(this, _ChatCompletionStream_hasAutoParseableTool, true, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_hasAutoParseableTool, true, "f"); break; } } } - __classPrivateFieldSet2(this, _ChatCompletionStream_partialJSONParseBudget, { bytes: 0, fragments: 0, work: 0 }, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_partialJSONParseBudget, { bytes: 0, fragments: 0, work: 0 }, "f"); } /** The latest accumulated completion, or `undefined` before a chunk arrives or after finalization. */ get currentChatCompletionSnapshot() { - return __classPrivateFieldGet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f"); + return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f"); } /** * Intended for use on the frontend, consuming a stream produced with @@ -27159,20 +9338,20 @@ var init_ChatCompletionStream = __esm({ } /** Rejects unfinished turns before tool callbacks while preserving ordinary stream and replay behavior. */ _runTools(client, params, runner, options) { - __classPrivateFieldSet2(this, _ChatCompletionStream_rejectsUnfinishedTurns, true, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_rejectsUnfinishedTurns, true, "f"); return super._runTools(client, params, runner, options); } async _createChatCompletion(client, params, options) { this._listenForAbort(options?.signal); const requestParams = { ...params, stream: true }; - __classPrivateFieldSet2(this, _ChatCompletionStream_params, requestParams, "f"); - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_beginRequest).call(this); + __classPrivateFieldSet(this, _ChatCompletionStream_params, requestParams, "f"); + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_beginRequest).call(this); const parserParams = snapshotChatCompletionParserParams(requestParams); - __classPrivateFieldSet2(this, _ChatCompletionStream_params, parserParams, "f"); - __classPrivateFieldSet2(this, _ChatCompletionStream_hasAutoParseableTool, parserParams.tools?.some((tool) => isChatCompletionFunctionTool(tool) && (isAutoParsableTool(tool) || tool.function.strict === true)) ?? false, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_params, parserParams, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_hasAutoParseableTool, parserParams.tools?.some((tool) => isChatCompletionFunctionTool(tool) && (isAutoParsableTool(tool) || tool.function.strict === true)) ?? false, "f"); const stopObserving = requestParams.tools || requestParams.response_format ? observeSerializedChatCompletionParserParams(requestParams, parserParams, (serialized) => { - __classPrivateFieldSet2(this, _ChatCompletionStream_params, serialized, "f"); - __classPrivateFieldSet2(this, _ChatCompletionStream_hasAutoParseableTool, serialized.tools?.some((tool) => isChatCompletionFunctionTool(tool) && (isAutoParsableTool(tool) || tool.function.strict === true)) ?? false, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_params, serialized, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_hasAutoParseableTool, serialized.tools?.some((tool) => isChatCompletionFunctionTool(tool) && (isAutoParsableTool(tool) || tool.function.strict === true)) ?? false, "f"); }) : void 0; const stream5 = await client.chat.completions.create(requestParams, { ...options, @@ -27180,34 +9359,34 @@ var init_ChatCompletionStream = __esm({ }).finally(stopObserving); this._connected(); for await (const chunk of stream5) { - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_addChunk).call(this, chunk); + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_addChunk).call(this, chunk); } if (stream5.controller.signal?.aborted) { throw this._userAbortError(); } - return this._addChatCompletion(__classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_endRequest).call(this)); + return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_endRequest).call(this)); } async _fromReadableStream(readableStream, options) { this._listenForAbort(options?.signal); - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_beginRequest).call(this); + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_beginRequest).call(this); this._connected(); - const stream5 = Stream2.fromReadableStream(readableStream, this.controller); + const stream5 = Stream.fromReadableStream(readableStream, this.controller); let chatId; for await (const item of stream5) { - if ("error" in item && hasOwn2(item, "error") && typeof item.error === "object" && item.error !== null) { - throw new APIError2(void 0, item.error, void 0, void 0); + if ("error" in item && hasOwn(item, "error") && typeof item.error === "object" && item.error !== null) { + throw new APIError(void 0, item.error, void 0, void 0); } if (isChatCompletionReadableStreamMessage(item)) { const message = getChatCompletionReadableStreamMessage(item); - if (__classPrivateFieldGet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")) { - const toolCalls = __classPrivateFieldGet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f").choices[0]?.message.tool_calls; + if (__classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")) { + const toolCalls = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f").choices[0]?.message.tool_calls; for (const [index, id] of message.tool_call_ids?.entries() ?? []) { const toolCall = toolCalls?.[index]; if (toolCall && id) { toolCall.id = id; } } - this._addChatCompletion(__classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_endRequest).call(this)); + this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_endRequest).call(this)); chatId = void 0; } this._addMessage(message.message); @@ -27215,9 +9394,9 @@ var init_ChatCompletionStream = __esm({ } const chunk = item; if (chatId && chunk.id && chatId !== chunk.id) { - this._addChatCompletion(__classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_endRequest).call(this)); + this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_endRequest).call(this)); } - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_addChunk).call(this, chunk); + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_addChunk).call(this, chunk); if (chunk.id) { chatId = chunk.id; } @@ -27225,8 +9404,8 @@ var init_ChatCompletionStream = __esm({ if (stream5.controller.signal?.aborted) { throw this._userAbortError(); } - if (__classPrivateFieldGet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")) { - return this._addChatCompletion(__classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_endRequest).call(this)); + if (__classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")) { + return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_endRequest).call(this)); } const lastChatCompletion = this._chatCompletions[this._chatCompletions.length - 1]; if (lastChatCompletion) { @@ -27239,11 +9418,11 @@ var init_ChatCompletionStream = __esm({ if (this.ended) { return; } - __classPrivateFieldSet2(this, _ChatCompletionStream_audioDoneChoiceIndexes, /* @__PURE__ */ new Set(), "f"); - __classPrivateFieldSet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, void 0, "f"); - __classPrivateFieldSet2(this, _ChatCompletionStream_partialJSONParseBudget, { bytes: 0, fragments: 0, work: 0 }, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_audioDoneChoiceIndexes, /* @__PURE__ */ new Set(), "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, void 0, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_partialJSONParseBudget, { bytes: 0, fragments: 0, work: 0 }, "f"); }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState2(choice) { - let state2 = __classPrivateFieldGet2(this, _ChatCompletionStream_choiceEventStates, "f")[choice.index]; + let state2 = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, "f")[choice.index]; if (state2) { return state2; } @@ -27258,22 +9437,22 @@ var init_ChatCompletionStream = __esm({ tool_call_parse_states: /* @__PURE__ */ new Map(), tool_call_identities: /* @__PURE__ */ new Map() }; - __classPrivateFieldGet2(this, _ChatCompletionStream_choiceEventStates, "f")[choice.index] = state2; + __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, "f")[choice.index] = state2; return state2; }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk2(chunk) { if (this.ended) { return; } const capturedChoiceFrames = /* @__PURE__ */ new WeakMap(); - const completion = __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk, capturedChoiceFrames); + const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk, capturedChoiceFrames); this._emit("chunk", chunk, completion); for (const choice of chunk.choices) { const capturedChoice = capturedChoiceFrames.get(choice); const choiceSnapshot = completion.choices[capturedChoice?.index ?? choice.index]; const capturedToolCalls = capturedChoice?.tool_calls ?? []; const { delta } = choice; - const structuredResponse = isParseableResponseFormat(__classPrivateFieldGet2(this, _ChatCompletionStream_params, "f")?.response_format); - const boundedSnapshot = structuredResponse || __classPrivateFieldGet2(this, _ChatCompletionStream_hasAutoParseableTool, "f"); + const structuredResponse = isParseableResponseFormat(__classPrivateFieldGet(this, _ChatCompletionStream_params, "f")?.response_format); + const boundedSnapshot = structuredResponse || __classPrivateFieldGet(this, _ChatCompletionStream_hasAutoParseableTool, "f"); const messageSnapshot = boundedSnapshot ? captureStructuredMessageSnapshot(choiceSnapshot) : choiceSnapshot.message; const refusal = boundedSnapshot ? captureStructuredJSONSnapshot(messageSnapshot, "refusal") : messageSnapshot.refusal; const parseableContent = !refusal && structuredResponse; @@ -27304,18 +9483,18 @@ var init_ChatCompletionStream = __esm({ snapshot: choiceSnapshot.logprobs?.refusal ?? [] }); } - const state2 = __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot); + const state2 = __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot); if (choiceSnapshot.finish_reason) { - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot); + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot); if (state2.current_tool_call_index != null) { - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state2.current_tool_call_index); + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state2.current_tool_call_index); } } for (const toolCall of capturedToolCalls) { if (state2.current_tool_call_index !== toolCall.index) { - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot); + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot); if (state2.current_tool_call_index != null) { - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state2.current_tool_call_index); + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state2.current_tool_call_index); } } state2.current_tool_call_index = toolCall.index; @@ -27350,11 +9529,11 @@ var init_ChatCompletionStream = __esm({ } } }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent2(choiceSnapshot, toolCallIndex) { - const state2 = __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot); + const state2 = __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot); if (state2.done_tool_calls.has(toolCallIndex)) { return; } - const messageSnapshot = __classPrivateFieldGet2(this, _ChatCompletionStream_hasAutoParseableTool, "f") ? captureStructuredMessageSnapshot(choiceSnapshot) : choiceSnapshot.message; + const messageSnapshot = __classPrivateFieldGet(this, _ChatCompletionStream_hasAutoParseableTool, "f") ? captureStructuredMessageSnapshot(choiceSnapshot) : choiceSnapshot.message; const toolCallSnapshot = messageSnapshot.tool_calls?.[toolCallIndex]; if (!toolCallSnapshot) { throw new Error("no tool call snapshot"); @@ -27367,13 +9546,13 @@ var init_ChatCompletionStream = __esm({ throw new Error("tool call snapshot missing `type`"); } if (toolCallSnapshot.type === "function") { - const inputTool = __classPrivateFieldGet2(this, _ChatCompletionStream_params, "f")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); + const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, "f")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); let parsedArguments = null; const parseable = isAutoParsableTool(inputTool) || inputTool?.function.strict === true; let argumentsSnapshot; if (parseable) { - if (__classPrivateFieldGet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")) { - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_validateStructuredSnapshots).call(this, __classPrivateFieldGet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")); + if (__classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")) { + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_validateStructuredSnapshots).call(this, __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")); } const capturedArguments = captureStructuredJSONSnapshot(toolCallSnapshot.function, "arguments"); if (typeof capturedArguments !== "string") { @@ -27401,21 +9580,21 @@ var init_ChatCompletionStream = __esm({ assertNever(toolCallSnapshot); } }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents2(choiceSnapshot) { - const state2 = __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot); - const structuredResponse = isParseableResponseFormat(__classPrivateFieldGet2(this, _ChatCompletionStream_params, "f")?.response_format); - const boundedSnapshot = structuredResponse || __classPrivateFieldGet2(this, _ChatCompletionStream_hasAutoParseableTool, "f"); + const state2 = __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot); + const structuredResponse = isParseableResponseFormat(__classPrivateFieldGet(this, _ChatCompletionStream_params, "f")?.response_format); + const boundedSnapshot = structuredResponse || __classPrivateFieldGet(this, _ChatCompletionStream_hasAutoParseableTool, "f"); const messageSnapshot = boundedSnapshot ? captureStructuredMessageSnapshot(choiceSnapshot) : choiceSnapshot.message; const refusal = boundedSnapshot ? captureStructuredJSONSnapshot(messageSnapshot, "refusal") : messageSnapshot.refusal; const parseableContent = !refusal && structuredResponse; const content = parseableContent ? captureStructuredJSONSnapshot(messageSnapshot, "content") : messageSnapshot.content; if (content != null && (content !== "" || !refusal && !messageSnapshot.tool_calls?.length && !messageSnapshot.function_call) && !state2.content_done) { - if (parseableContent && __classPrivateFieldGet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")) { - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_validateStructuredSnapshots).call(this, __classPrivateFieldGet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")); + if (parseableContent && __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")) { + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_validateStructuredSnapshots).call(this, __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")); } state2.content_done = true; this._emit("content.done", { content, - parsed: refusal ? null : parseResponseFormatContent(__classPrivateFieldGet2(this, _ChatCompletionStream_params, "f")?.response_format, parseableContent ? validateStructuredJSONSnapshot(content) : content) + parsed: refusal ? null : parseResponseFormatContent(__classPrivateFieldGet(this, _ChatCompletionStream_params, "f")?.response_format, parseableContent ? validateStructuredJSONSnapshot(content) : content) }); } if (refusal && !state2.refusal_done) { @@ -27432,7 +9611,7 @@ var init_ChatCompletionStream = __esm({ } }, _ChatCompletionStream_validateStructuredSnapshots = function _ChatCompletionStream_validateStructuredSnapshots2(snapshot) { const finalJSONBudget = { bytes: 0, fragments: 0, work: 0 }; - const parseableContent = isParseableResponseFormat(__classPrivateFieldGet2(this, _ChatCompletionStream_params, "f")?.response_format); + const parseableContent = isParseableResponseFormat(__classPrivateFieldGet(this, _ChatCompletionStream_params, "f")?.response_format); const validatedMessages = /* @__PURE__ */ new WeakMap(); const choices = captureSnapshotArray(snapshot, "choices", MAX_STREAM_CHOICES, "choice"); if (!choices) { @@ -27455,9 +9634,9 @@ var init_ChatCompletionStream = __esm({ toolCallCollection: toolCalls, toolCalls: validatedTools })); - const state2 = __classPrivateFieldGet2(this, _ChatCompletionStream_choiceEventStates, "f")[choice.index]; + const state2 = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, "f")[choice.index]; if (parseableContent && !refusal && typeof content === "string") { - validateStructuredJSONSnapshot(content, finalJSONBudget, __classPrivateFieldGet2(this, _ChatCompletionStream_partialJSONParseBudget, "f")); + validateStructuredJSONSnapshot(content, finalJSONBudget, __classPrivateFieldGet(this, _ChatCompletionStream_partialJSONParseBudget, "f")); } for (const [index, identity] of state2?.tool_call_identities ?? []) { const toolCall = toolCalls && captureSnapshotArrayItem(toolCalls, index); @@ -27466,7 +9645,7 @@ var init_ChatCompletionStream = __esm({ } assertBoundToolCallIdentity(toolCall, identity); } - if (!__classPrivateFieldGet2(this, _ChatCompletionStream_hasAutoParseableTool, "f")) { + if (!__classPrivateFieldGet(this, _ChatCompletionStream_hasAutoParseableTool, "f")) { continue; } for (let toolCallIndex = 0; toolCallIndex < (toolCalls?.length ?? 0); toolCallIndex += 1) { @@ -27495,7 +9674,7 @@ var init_ChatCompletionStream = __esm({ } continue; } - if (!shouldParseToolCall(__classPrivateFieldGet2(this, _ChatCompletionStream_params, "f"), { + if (!shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, "f"), { type: identity.type, function: { name: identity.name } })) { @@ -27510,7 +9689,7 @@ var init_ChatCompletionStream = __esm({ if (typeof argumentsSnapshot !== "string") { throw new OpenAIError("Chat completion stream contains an unsafe structured JSON snapshot"); } - validateStructuredJSONSnapshot(argumentsSnapshot, finalJSONBudget, __classPrivateFieldGet2(this, _ChatCompletionStream_partialJSONParseBudget, "f")); + validateStructuredJSONSnapshot(argumentsSnapshot, finalJSONBudget, __classPrivateFieldGet(this, _ChatCompletionStream_partialJSONParseBudget, "f")); validatedTools.set(toolCallIndex, Object.freeze({ tool: toolCall, function: fn, @@ -27525,31 +9704,31 @@ var init_ChatCompletionStream = __esm({ if (this.ended) { throw new OpenAIError(`stream has ended, this shouldn't happen`); } - const snapshot = __classPrivateFieldGet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f"); + const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f"); if (!snapshot) { throw new OpenAIError(`request ended without sending any chunks`); } - const validatedMessages = __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_validateStructuredSnapshots).call(this, snapshot); - const audioDoneChoiceIndexes = __classPrivateFieldGet2(this, _ChatCompletionStream_audioDoneChoiceIndexes, "f"); - __classPrivateFieldSet2(this, _ChatCompletionStream_audioDoneChoiceIndexes, /* @__PURE__ */ new Set(), "f"); - __classPrivateFieldSet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, void 0, "f"); - __classPrivateFieldSet2(this, _ChatCompletionStream_choiceEventStates, [], "f"); - return finalizeChatCompletion(snapshot, __classPrivateFieldGet2(this, _ChatCompletionStream_params, "f"), audioDoneChoiceIndexes, validatedMessages); + const validatedMessages = __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_validateStructuredSnapshots).call(this, snapshot); + const audioDoneChoiceIndexes = __classPrivateFieldGet(this, _ChatCompletionStream_audioDoneChoiceIndexes, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_audioDoneChoiceIndexes, /* @__PURE__ */ new Set(), "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, void 0, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], "f"); + return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, "f"), audioDoneChoiceIndexes, validatedMessages); }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion2(chunk, capturedChoiceFrames) { var _a6, _b, _c, _d, _e; - let snapshot = __classPrivateFieldGet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f"); + let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f"); const { choices, obfuscation: _obfuscation, ...rest } = chunk; if (!snapshot) { const newSnapshot = { ...rest, choices: [] }; - __classPrivateFieldSet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, newSnapshot, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, newSnapshot, "f"); snapshot = newSnapshot; } else if (chunk.id) { assignOwnProperties(snapshot, rest); } - const requestedChoiceCount = __classPrivateFieldGet2(this, _ChatCompletionStream_params, "f")?.n; + const requestedChoiceCount = __classPrivateFieldGet(this, _ChatCompletionStream_params, "f")?.n; const maxChoices = typeof requestedChoiceCount === "number" && Number.isSafeInteger(requestedChoiceCount) && requestedChoiceCount > 0 ? Math.min(requestedChoiceCount, MAX_STREAM_CHOICES) : MAX_STREAM_CHOICES; for (const chunkChoice of chunk.choices) { const { delta, finish_reason, index, logprobs = null, ...other } = chunkChoice; @@ -27564,7 +9743,7 @@ var init_ChatCompletionStream = __esm({ snapshot.choices[index] = newChoice; choice = newChoice; } - if (isParseableResponseFormat(__classPrivateFieldGet2(this, _ChatCompletionStream_params, "f")?.response_format) || __classPrivateFieldGet2(this, _ChatCompletionStream_hasAutoParseableTool, "f")) { + if (isParseableResponseFormat(__classPrivateFieldGet(this, _ChatCompletionStream_params, "f")?.response_format) || __classPrivateFieldGet(this, _ChatCompletionStream_hasAutoParseableTool, "f")) { captureStructuredJSONSnapshot(captureStructuredMessageSnapshot(choice), "refusal"); } if (logprobs) { @@ -27592,7 +9771,7 @@ var init_ChatCompletionStream = __esm({ } if (finish_reason) { choice.finish_reason = finish_reason; - if (__classPrivateFieldGet2(this, _ChatCompletionStream_params, "f") && (__classPrivateFieldGet2(this, _ChatCompletionStream_rejectsUnfinishedTurns, "f") || hasAutoParseableInput(__classPrivateFieldGet2(this, _ChatCompletionStream_params, "f")))) { + if (__classPrivateFieldGet(this, _ChatCompletionStream_params, "f") && (__classPrivateFieldGet(this, _ChatCompletionStream_rejectsUnfinishedTurns, "f") || hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, "f")))) { if (finish_reason === "length") { throw new LengthFinishReasonError(); } @@ -27606,14 +9785,14 @@ var init_ChatCompletionStream = __esm({ Object.freeze(capturedToolCalls); continue; } - __classPrivateFieldGet2(this, _ChatCompletionStream_audioDoneChoiceIndexes, "f").delete(index); + __classPrivateFieldGet(this, _ChatCompletionStream_audioDoneChoiceIndexes, "f").delete(index); const { audio, content, refusal, function_call, role, ...capturedDeltaFields } = delta; const { tool_calls: capturedToolCallDelta, ...rest2 } = capturedDeltaFields; - const tool_calls = hasOwn2(capturedDeltaFields, "tool_calls") ? capturedToolCallDelta : delta.tool_calls; + const tool_calls = hasOwn(capturedDeltaFields, "tool_calls") ? capturedToolCallDelta : delta.tool_calls; assertIsEmpty(rest2); assignOwnProperties(choice.message, rest2); if (audio?.expires_at != null && audio.id == null && audio.data == null && audio.transcript == null && content == null && refusal == null && function_call == null && role == null && tool_calls == null && Object.keys(rest2).length === 0) { - __classPrivateFieldGet2(this, _ChatCompletionStream_audioDoneChoiceIndexes, "f").add(index); + __classPrivateFieldGet(this, _ChatCompletionStream_audioDoneChoiceIndexes, "f").add(index); } if (refusal) { choice.message.refusal = (choice.message.refusal || "") + refusal; @@ -27650,15 +9829,15 @@ var init_ChatCompletionStream = __esm({ } } if (content != null) { - if (!choice.message.refusal && isParseableResponseFormat(__classPrivateFieldGet2(this, _ChatCompletionStream_params, "f")?.response_format)) { - const eventState = __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choice); + if (!choice.message.refusal && isParseableResponseFormat(__classPrivateFieldGet(this, _ChatCompletionStream_params, "f")?.response_format)) { + const eventState = __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choice); const parseState = eventState.content_parse_state ?? (eventState.content_parse_state = createPartialJSONParseState()); - const shouldParse = recordPartialJSONFragment(parseState, __classPrivateFieldGet2(this, _ChatCompletionStream_partialJSONParseBudget, "f"), content); + const shouldParse = recordPartialJSONFragment(parseState, __classPrivateFieldGet(this, _ChatCompletionStream_partialJSONParseBudget, "f"), content); choice.message.content = (captureStructuredJSONSnapshot(choice.message, "content") || "") + content; if (!parseState.has_non_whitespace) { choice.message.parsed = null; - } else if (shouldParse && reservePartialJSONParse(parseState, __classPrivateFieldGet2(this, _ChatCompletionStream_partialJSONParseBudget, "f"))) { - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_validateStructuredSnapshots).call(this, snapshot); + } else if (shouldParse && reservePartialJSONParse(parseState, __classPrivateFieldGet(this, _ChatCompletionStream_partialJSONParseBudget, "f"))) { + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_validateStructuredSnapshots).call(this, snapshot); choice.message.parsed = parseStructuredStreamingJSON(validateStructuredJSONSnapshot(choice.message.content)); } else if (content.length > 0) { choice.message.parsed = null; @@ -27677,7 +9856,7 @@ var init_ChatCompletionStream = __esm({ let argumentsDelta = ""; const tool_call = toolCallSnapshots[index2] ?? (toolCallSnapshots[index2] = {}); const functionName = fn?.name; - const eventState = __classPrivateFieldGet2(this, _ChatCompletionStream_hasAutoParseableTool, "f") ? __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choice) : void 0; + const eventState = __classPrivateFieldGet(this, _ChatCompletionStream_hasAutoParseableTool, "f") ? __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choice) : void 0; let boundIdentity = eventState?.tool_call_identities.get(index2); if (boundIdentity) { assertBoundToolCallIdentity(tool_call, boundIdentity); @@ -27708,11 +9887,11 @@ var init_ChatCompletionStream = __esm({ } if (eventState && !boundIdentity) { const identity = ownFunctionToolIdentity(tool_call); - const configuredTool = identity && __classPrivateFieldGet2(this, _ChatCompletionStream_params, "f")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === identity.name); + const configuredTool = identity && __classPrivateFieldGet(this, _ChatCompletionStream_params, "f")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === identity.name); if (identity) { boundIdentity = { ...identity, - parseable: configuredTool !== void 0 && shouldParseToolCall(__classPrivateFieldGet2(this, _ChatCompletionStream_params, "f"), { + parseable: configuredTool !== void 0 && shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, "f"), { type: identity.type, function: { name: identity.name } }) @@ -27721,9 +9900,9 @@ var init_ChatCompletionStream = __esm({ if (!boundIdentity.parseable) { const provisionalState = eventState.tool_call_parse_states.get(index2); if (provisionalState) { - __classPrivateFieldGet2(this, _ChatCompletionStream_partialJSONParseBudget, "f").bytes -= provisionalState.bytes; - __classPrivateFieldGet2(this, _ChatCompletionStream_partialJSONParseBudget, "f").fragments -= provisionalState.fragments; - __classPrivateFieldGet2(this, _ChatCompletionStream_partialJSONParseBudget, "f").work -= provisionalState.work; + __classPrivateFieldGet(this, _ChatCompletionStream_partialJSONParseBudget, "f").bytes -= provisionalState.bytes; + __classPrivateFieldGet(this, _ChatCompletionStream_partialJSONParseBudget, "f").fragments -= provisionalState.fragments; + __classPrivateFieldGet(this, _ChatCompletionStream_partialJSONParseBudget, "f").work -= provisionalState.work; eventState.tool_call_parse_states.delete(index2); } } @@ -27738,16 +9917,16 @@ var init_ChatCompletionStream = __esm({ parseState = createPartialJSONParseState(); eventState.tool_call_parse_states.set(index2, parseState); } - const shouldParse = recordPartialJSONFragment(parseState, __classPrivateFieldGet2(this, _ChatCompletionStream_partialJSONParseBudget, "f"), argumentFragment); + const shouldParse = recordPartialJSONFragment(parseState, __classPrivateFieldGet(this, _ChatCompletionStream_partialJSONParseBudget, "f"), argumentFragment); const previousArguments = captureStructuredJSONSnapshot(functionSnapshot, "arguments"); if (typeof previousArguments !== "string") { throw new OpenAIError("Chat completion stream contains an unsafe structured JSON snapshot"); } functionSnapshot.arguments = previousArguments + argumentFragment; - if (shouldParse && boundIdentity?.parseable === true && reservePartialJSONParse(parseState, __classPrivateFieldGet2(this, _ChatCompletionStream_partialJSONParseBudget, "f"))) { - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_validateStructuredSnapshots).call(this, snapshot); + if (shouldParse && boundIdentity?.parseable === true && reservePartialJSONParse(parseState, __classPrivateFieldGet(this, _ChatCompletionStream_partialJSONParseBudget, "f"))) { + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_validateStructuredSnapshots).call(this, snapshot); functionSnapshot.parsed_arguments = parseStructuredStreamingJSON(validateStructuredJSONSnapshot(functionSnapshot.arguments)); - } else if (argumentFragment.length > 0 && hasOwn2(functionSnapshot, "parsed_arguments")) { + } else if (argumentFragment.length > 0 && hasOwn(functionSnapshot, "parsed_arguments")) { functionSnapshot.parsed_arguments = void 0; } } else { @@ -27770,7 +9949,7 @@ var init_ChatCompletionStream = __esm({ } /** Serializes raw completion chunks into a readable stream for transfer to another runtime. */ toReadableStream() { - const stream5 = new Stream2(this[Symbol.asyncIterator].bind(this), this.controller); + const stream5 = new Stream(this[Symbol.asyncIterator].bind(this), this.controller); return stream5.toReadableStream(); } }; @@ -27782,8 +9961,8 @@ var ChatCompletionStreamingRunner; var init_ChatCompletionStreamingRunner = __esm({ "node_modules/openai/lib/ChatCompletionStreamingRunner.mjs"() { init_ChatCompletionStream(); - init_error4(); - init_streaming4(); + init_error2(); + init_streaming2(); init_chatCompletionUtils(); ChatCompletionStreamingRunner = class _ChatCompletionStreamingRunner extends ChatCompletionStream { /** Restores a serialized tool run, including intermediate completions and tool-result messages. */ @@ -27821,7 +10000,7 @@ var init_ChatCompletionStreamingRunner = __esm({ this.off("message", onMessage); }; }, { onReturn: () => this.abort() }); - const stream5 = new Stream2(() => iterator, this.controller); + const stream5 = new Stream(() => iterator, this.controller); return stream5.toReadableStream(); } /** Starts a streaming tool loop and returns its event-driven conversation runner. */ @@ -27842,26 +10021,26 @@ var init_ChatCompletionStreamingRunner = __esm({ }); // node_modules/openai/resources/chat/completions/completions.mjs -var Completions2; -var init_completions2 = __esm({ +var Completions; +var init_completions = __esm({ "node_modules/openai/resources/chat/completions/completions.mjs"() { - init_resource2(); - init_messages3(); - init_messages3(); - init_pagination2(); - init_path2(); + init_resource(); + init_messages(); + init_messages(); + init_pagination(); + init_path(); init_ChatCompletionRunner(); init_ChatCompletionStreamingRunner(); init_ChatCompletionStream(); - init_parser3(); + init_parser(); init_ChatCompletionStreamingRunner(); init_RunnableFunction(); init_ChatCompletionStream(); init_ChatCompletionRunner(); - Completions2 = class extends APIResource2 { + Completions = class extends APIResource { constructor() { super(...arguments); - this.messages = new Messages3(this._client); + this.messages = new Messages(this._client); } create(body, options) { return this._client.post("/chat/completions", { @@ -27882,7 +10061,7 @@ var init_completions2 = __esm({ * ``` */ retrieve(completionID, options) { - return this._client.get(path3`/chat/completions/${completionID}`, { + return this._client.get(path`/chat/completions/${completionID}`, { ...options, __security: { bearerAuth: true } }); @@ -27901,7 +10080,7 @@ var init_completions2 = __esm({ * ``` */ update(completionID, body, options) { - return this._client.post(path3`/chat/completions/${completionID}`, { + return this._client.post(path`/chat/completions/${completionID}`, { body, ...options, __security: { bearerAuth: true } @@ -27937,7 +10116,7 @@ var init_completions2 = __esm({ * ``` */ delete(completionID, options) { - return this._client.delete(path3`/chat/completions/${completionID}`, { + return this._client.delete(path`/chat/completions/${completionID}`, { ...options, __security: { bearerAuth: true } }); @@ -27962,7 +10141,7 @@ var init_completions2 = __esm({ return ChatCompletionStream.createChatCompletion(this._client, body, options); } }; - Completions2.Messages = Messages3; + Completions.Messages = Messages; } }); @@ -27970,25 +10149,25 @@ var init_completions2 = __esm({ var Chat; var init_chat = __esm({ "node_modules/openai/resources/chat/chat.mjs"() { - init_resource2(); - init_completions2(); - init_completions2(); - Chat = class extends APIResource2 { + init_resource(); + init_completions(); + init_completions(); + Chat = class extends APIResource { constructor() { super(...arguments); - this.completions = new Completions2(this._client); + this.completions = new Completions(this._client); } }; - Chat.Completions = Completions2; + Chat.Completions = Completions; } }); // node_modules/openai/resources/chat/completions/index.mjs -var init_completions3 = __esm({ +var init_completions2 = __esm({ "node_modules/openai/resources/chat/completions/index.mjs"() { - init_completions2(); - init_completions2(); - init_messages3(); + init_completions(); + init_completions(); + init_messages(); } }); @@ -27996,12 +10175,12 @@ var init_completions3 = __esm({ var init_chat2 = __esm({ "node_modules/openai/resources/chat/index.mjs"() { init_chat(); - init_completions3(); + init_completions2(); } }); // node_modules/openai/resources/shared.mjs -var init_shared2 = __esm({ +var init_shared = __esm({ "node_modules/openai/resources/shared.mjs"() { } }); @@ -28010,10 +10189,10 @@ var init_shared2 = __esm({ var AdminAPIKeys; var init_admin_api_keys = __esm({ "node_modules/openai/resources/admin/organization/admin-api-keys.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - AdminAPIKeys = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + AdminAPIKeys = class extends APIResource { /** * Create an organization admin API key * @@ -28044,7 +10223,7 @@ var init_admin_api_keys = __esm({ * ``` */ retrieve(keyID, options) { - return this._client.get(path3`/organization/admin_api_keys/${keyID}`, { + return this._client.get(path`/organization/admin_api_keys/${keyID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28079,7 +10258,7 @@ var init_admin_api_keys = __esm({ * ``` */ delete(keyID, options) { - return this._client.delete(path3`/organization/admin_api_keys/${keyID}`, { + return this._client.delete(path`/organization/admin_api_keys/${keyID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28092,9 +10271,9 @@ var init_admin_api_keys = __esm({ var AuditLogs; var init_audit_logs = __esm({ "node_modules/openai/resources/admin/organization/audit-logs.mjs"() { - init_resource2(); - init_pagination2(); - AuditLogs = class extends APIResource2 { + init_resource(); + init_pagination(); + AuditLogs = class extends APIResource { /** * List user actions and configuration changes within this organization. * @@ -28118,13 +10297,13 @@ var init_audit_logs = __esm({ }); // node_modules/openai/resources/admin/organization/certificates.mjs -var Certificates2; -var init_certificates2 = __esm({ +var Certificates; +var init_certificates = __esm({ "node_modules/openai/resources/admin/organization/certificates.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Certificates2 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Certificates = class extends APIResource { /** * Upload a certificate to the organization. This does **not** automatically * activate the certificate. @@ -28160,7 +10339,7 @@ var init_certificates2 = __esm({ * ``` */ retrieve(certificateID, query = {}, options) { - return this._client.get(path3`/organization/certificates/${certificateID}`, { + return this._client.get(path`/organization/certificates/${certificateID}`, { query, ...options, __security: { adminAPIKeyAuth: true } @@ -28178,7 +10357,7 @@ var init_certificates2 = __esm({ * ``` */ update(certificateID, body, options) { - return this._client.post(path3`/organization/certificates/${certificateID}`, { + return this._client.post(path`/organization/certificates/${certificateID}`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -28212,7 +10391,7 @@ var init_certificates2 = __esm({ * ``` */ delete(certificateID, options) { - return this._client.delete(path3`/organization/certificates/${certificateID}`, { + return this._client.delete(path`/organization/certificates/${certificateID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28233,7 +10412,7 @@ var init_certificates2 = __esm({ * ``` */ activate(body, options) { - return this._client.getAPIList("/organization/certificates/activate", Page2, { + return this._client.getAPIList("/organization/certificates/activate", Page, { body, method: "post", ...options, @@ -28256,7 +10435,7 @@ var init_certificates2 = __esm({ * ``` */ deactivate(body, options) { - return this._client.getAPIList("/organization/certificates/deactivate", Page2, { body, method: "post", ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList("/organization/certificates/deactivate", Page, { body, method: "post", ...options, __security: { adminAPIKeyAuth: true } }); } }; } @@ -28266,8 +10445,8 @@ var init_certificates2 = __esm({ var DataRetention; var init_data_retention = __esm({ "node_modules/openai/resources/admin/organization/data-retention.mjs"() { - init_resource2(); - DataRetention = class extends APIResource2 { + init_resource(); + DataRetention = class extends APIResource { /** * Retrieves organization data retention controls. * @@ -28306,13 +10485,13 @@ var init_data_retention = __esm({ }); // node_modules/openai/resources/admin/organization/invites.mjs -var Invites2; -var init_invites2 = __esm({ +var Invites; +var init_invites = __esm({ "node_modules/openai/resources/admin/organization/invites.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Invites2 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Invites = class extends APIResource { /** * Create an invite for a user to the organization. The invite must be accepted by * the user before they have access to the organization. @@ -28345,7 +10524,7 @@ var init_invites2 = __esm({ * ``` */ retrieve(inviteID, options) { - return this._client.get(path3`/organization/invites/${inviteID}`, { + return this._client.get(path`/organization/invites/${inviteID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28380,7 +10559,7 @@ var init_invites2 = __esm({ * ``` */ delete(inviteID, options) { - return this._client.delete(path3`/organization/invites/${inviteID}`, { + return this._client.delete(path`/organization/invites/${inviteID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28393,10 +10572,10 @@ var init_invites2 = __esm({ var Roles; var init_roles = __esm({ "node_modules/openai/resources/admin/organization/roles.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Roles = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Roles = class extends APIResource { /** * Creates a custom role for the organization. * @@ -28426,7 +10605,7 @@ var init_roles = __esm({ * ``` */ retrieve(roleID, options) { - return this._client.get(path3`/organization/roles/${roleID}`, { + return this._client.get(path`/organization/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28442,7 +10621,7 @@ var init_roles = __esm({ * ``` */ update(roleID, body, options) { - return this._client.post(path3`/organization/roles/${roleID}`, { + return this._client.post(path`/organization/roles/${roleID}`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -28477,7 +10656,7 @@ var init_roles = __esm({ * ``` */ delete(roleID, options) { - return this._client.delete(path3`/organization/roles/${roleID}`, { + return this._client.delete(path`/organization/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28490,10 +10669,10 @@ var init_roles = __esm({ var SpendAlerts; var init_spend_alerts = __esm({ "node_modules/openai/resources/admin/organization/spend-alerts.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - SpendAlerts = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + SpendAlerts = class extends APIResource { /** * Creates an organization spend alert. * @@ -28530,7 +10709,7 @@ var init_spend_alerts = __esm({ * ``` */ retrieve(alertID, options) { - return this._client.get(path3`/organization/spend_alerts/${alertID}`, { + return this._client.get(path`/organization/spend_alerts/${alertID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28556,7 +10735,7 @@ var init_spend_alerts = __esm({ * ``` */ update(alertID, body, options) { - return this._client.post(path3`/organization/spend_alerts/${alertID}`, { + return this._client.post(path`/organization/spend_alerts/${alertID}`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -28588,7 +10767,7 @@ var init_spend_alerts = __esm({ * ``` */ delete(alertID, options) { - return this._client.delete(path3`/organization/spend_alerts/${alertID}`, { + return this._client.delete(path`/organization/spend_alerts/${alertID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28601,8 +10780,8 @@ var init_spend_alerts = __esm({ var SpendLimit; var init_spend_limit = __esm({ "node_modules/openai/resources/admin/organization/spend-limit.mjs"() { - init_resource2(); - SpendLimit = class extends APIResource2 { + init_resource(); + SpendLimit = class extends APIResource { /** * Get the organization's hard spend limit. * @@ -28661,8 +10840,8 @@ var init_spend_limit = __esm({ var Usage; var init_usage = __esm({ "node_modules/openai/resources/admin/organization/usage.mjs"() { - init_resource2(); - Usage = class extends APIResource2 { + init_resource(); + Usage = class extends APIResource { /** * Get audio speeches usage details for the organization. * @@ -28869,10 +11048,10 @@ var init_usage = __esm({ var Roles2; var init_roles2 = __esm({ "node_modules/openai/resources/admin/organization/groups/roles.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Roles2 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Roles2 = class extends APIResource { /** * Assigns an organization role to a group within the organization. * @@ -28886,7 +11065,7 @@ var init_roles2 = __esm({ * ``` */ create(groupID, body, options) { - return this._client.post(path3`/organization/groups/${groupID}/roles`, { + return this._client.post(path`/organization/groups/${groupID}/roles`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -28906,7 +11085,7 @@ var init_roles2 = __esm({ */ retrieve(roleID, params, options) { const { group_id } = params; - return this._client.get(path3`/organization/groups/${group_id}/roles/${roleID}`, { + return this._client.get(path`/organization/groups/${group_id}/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28925,7 +11104,7 @@ var init_roles2 = __esm({ * ``` */ list(groupID, query = {}, options) { - return this._client.getAPIList(path3`/organization/groups/${groupID}/roles`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/groups/${groupID}/roles`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Unassigns an organization role from a group within the organization. @@ -28941,7 +11120,7 @@ var init_roles2 = __esm({ */ delete(roleID, params, options) { const { group_id } = params; - return this._client.delete(path3`/organization/groups/${group_id}/roles/${roleID}`, { + return this._client.delete(path`/organization/groups/${group_id}/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28951,13 +11130,13 @@ var init_roles2 = __esm({ }); // node_modules/openai/resources/admin/organization/groups/users.mjs -var Users2; -var init_users2 = __esm({ +var Users; +var init_users = __esm({ "node_modules/openai/resources/admin/organization/groups/users.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Users2 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Users = class extends APIResource { /** * Adds a user to a group. * @@ -28971,7 +11150,7 @@ var init_users2 = __esm({ * ``` */ create(groupID, body, options) { - return this._client.post(path3`/organization/groups/${groupID}/users`, { + return this._client.post(path`/organization/groups/${groupID}/users`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -28991,7 +11170,7 @@ var init_users2 = __esm({ */ retrieve(userID, params, options) { const { group_id } = params; - return this._client.get(path3`/organization/groups/${group_id}/users/${userID}`, { + return this._client.get(path`/organization/groups/${group_id}/users/${userID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29010,7 +11189,7 @@ var init_users2 = __esm({ * ``` */ list(groupID, query = {}, options) { - return this._client.getAPIList(path3`/organization/groups/${groupID}/users`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/groups/${groupID}/users`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Removes a user from a group. @@ -29026,7 +11205,7 @@ var init_users2 = __esm({ */ delete(userID, params, options) { const { group_id } = params; - return this._client.delete(path3`/organization/groups/${group_id}/users/${userID}`, { + return this._client.delete(path`/organization/groups/${group_id}/users/${userID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29039,17 +11218,17 @@ var init_users2 = __esm({ var Groups; var init_groups = __esm({ "node_modules/openai/resources/admin/organization/groups/groups.mjs"() { - init_resource2(); + init_resource(); init_roles2(); init_roles2(); - init_users2(); - init_users2(); - init_pagination2(); - init_path2(); - Groups = class extends APIResource2 { + init_users(); + init_users(); + init_pagination(); + init_path(); + Groups = class extends APIResource { constructor() { super(...arguments); - this.users = new Users2(this._client); + this.users = new Users(this._client); this.roles = new Roles2(this._client); } /** @@ -29081,7 +11260,7 @@ var init_groups = __esm({ * ``` */ retrieve(groupID, options) { - return this._client.get(path3`/organization/groups/${groupID}`, { + return this._client.get(path`/organization/groups/${groupID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29098,7 +11277,7 @@ var init_groups = __esm({ * ``` */ update(groupID, body, options) { - return this._client.post(path3`/organization/groups/${groupID}`, { + return this._client.post(path`/organization/groups/${groupID}`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29133,25 +11312,25 @@ var init_groups = __esm({ * ``` */ delete(groupID, options) { - return this._client.delete(path3`/organization/groups/${groupID}`, { + return this._client.delete(path`/organization/groups/${groupID}`, { ...options, __security: { adminAPIKeyAuth: true } }); } }; - Groups.Users = Users2; + Groups.Users = Users; Groups.Roles = Roles2; } }); // node_modules/openai/resources/admin/organization/projects/api-keys.mjs -var APIKeys2; -var init_api_keys2 = __esm({ +var APIKeys; +var init_api_keys = __esm({ "node_modules/openai/resources/admin/organization/projects/api-keys.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - APIKeys2 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + APIKeys = class extends APIResource { /** * Retrieves an API key in the project. * @@ -29166,7 +11345,7 @@ var init_api_keys2 = __esm({ */ retrieve(apiKeyID, params, options) { const { project_id } = params; - return this._client.get(path3`/organization/projects/${project_id}/api_keys/${apiKeyID}`, { + return this._client.get(path`/organization/projects/${project_id}/api_keys/${apiKeyID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29185,7 +11364,7 @@ var init_api_keys2 = __esm({ * ``` */ list(projectID, query = {}, options) { - return this._client.getAPIList(path3`/organization/projects/${projectID}/api_keys`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/projects/${projectID}/api_keys`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Deletes an API key from the project. @@ -29204,7 +11383,7 @@ var init_api_keys2 = __esm({ */ delete(apiKeyID, params, options) { const { project_id } = params; - return this._client.delete(path3`/organization/projects/${project_id}/api_keys/${apiKeyID}`, { + return this._client.delete(path`/organization/projects/${project_id}/api_keys/${apiKeyID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29214,13 +11393,13 @@ var init_api_keys2 = __esm({ }); // node_modules/openai/resources/admin/organization/projects/certificates.mjs -var Certificates3; -var init_certificates3 = __esm({ +var Certificates2; +var init_certificates2 = __esm({ "node_modules/openai/resources/admin/organization/projects/certificates.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Certificates3 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Certificates2 = class extends APIResource { /** * List certificates for this project. * @@ -29235,7 +11414,7 @@ var init_certificates3 = __esm({ * ``` */ list(projectID, query = {}, options) { - return this._client.getAPIList(path3`/organization/projects/${projectID}/certificates`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/projects/${projectID}/certificates`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Activate certificates at the project level. @@ -29254,7 +11433,7 @@ var init_certificates3 = __esm({ * ``` */ activate(projectID, body, options) { - return this._client.getAPIList(path3`/organization/projects/${projectID}/certificates/activate`, Page2, { body, method: "post", ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/projects/${projectID}/certificates/activate`, Page, { body, method: "post", ...options, __security: { adminAPIKeyAuth: true } }); } /** * Deactivate certificates at the project level. You can atomically and @@ -29272,7 +11451,7 @@ var init_certificates3 = __esm({ * ``` */ deactivate(projectID, body, options) { - return this._client.getAPIList(path3`/organization/projects/${projectID}/certificates/deactivate`, Page2, { body, method: "post", ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/projects/${projectID}/certificates/deactivate`, Page, { body, method: "post", ...options, __security: { adminAPIKeyAuth: true } }); } }; } @@ -29282,9 +11461,9 @@ var init_certificates3 = __esm({ var DataRetention2; var init_data_retention2 = __esm({ "node_modules/openai/resources/admin/organization/projects/data-retention.mjs"() { - init_resource2(); - init_path2(); - DataRetention2 = class extends APIResource2 { + init_resource(); + init_path(); + DataRetention2 = class extends APIResource { /** * Retrieves project data retention controls. * @@ -29297,7 +11476,7 @@ var init_data_retention2 = __esm({ * ``` */ retrieve(projectID, options) { - return this._client.get(path3`/organization/projects/${projectID}/data_retention`, { + return this._client.get(path`/organization/projects/${projectID}/data_retention`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29315,7 +11494,7 @@ var init_data_retention2 = __esm({ * ``` */ update(projectID, body, options) { - return this._client.post(path3`/organization/projects/${projectID}/data_retention`, { + return this._client.post(path`/organization/projects/${projectID}/data_retention`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29329,9 +11508,9 @@ var init_data_retention2 = __esm({ var HostedToolPermissions; var init_hosted_tool_permissions = __esm({ "node_modules/openai/resources/admin/organization/projects/hosted-tool-permissions.mjs"() { - init_resource2(); - init_path2(); - HostedToolPermissions = class extends APIResource2 { + init_resource(); + init_path(); + HostedToolPermissions = class extends APIResource { /** * Returns hosted tool permissions for a project. * @@ -29344,7 +11523,7 @@ var init_hosted_tool_permissions = __esm({ * ``` */ retrieve(projectID, options) { - return this._client.get(path3`/organization/projects/${projectID}/hosted_tool_permissions`, { + return this._client.get(path`/organization/projects/${projectID}/hosted_tool_permissions`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29361,7 +11540,7 @@ var init_hosted_tool_permissions = __esm({ * ``` */ update(projectID, body, options) { - return this._client.post(path3`/organization/projects/${projectID}/hosted_tool_permissions`, { + return this._client.post(path`/organization/projects/${projectID}/hosted_tool_permissions`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29375,9 +11554,9 @@ var init_hosted_tool_permissions = __esm({ var ModelPermissions; var init_model_permissions = __esm({ "node_modules/openai/resources/admin/organization/projects/model-permissions.mjs"() { - init_resource2(); - init_path2(); - ModelPermissions = class extends APIResource2 { + init_resource(); + init_path(); + ModelPermissions = class extends APIResource { /** * Returns model permissions for a project. * @@ -29390,7 +11569,7 @@ var init_model_permissions = __esm({ * ``` */ retrieve(projectID, options) { - return this._client.get(path3`/organization/projects/${projectID}/model_permissions`, { + return this._client.get(path`/organization/projects/${projectID}/model_permissions`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29408,7 +11587,7 @@ var init_model_permissions = __esm({ * ``` */ update(projectID, body, options) { - return this._client.post(path3`/organization/projects/${projectID}/model_permissions`, { + return this._client.post(path`/organization/projects/${projectID}/model_permissions`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29426,7 +11605,7 @@ var init_model_permissions = __esm({ * ``` */ delete(projectID, options) { - return this._client.delete(path3`/organization/projects/${projectID}/model_permissions`, { + return this._client.delete(path`/organization/projects/${projectID}/model_permissions`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29436,13 +11615,13 @@ var init_model_permissions = __esm({ }); // node_modules/openai/resources/admin/organization/projects/rate-limits.mjs -var RateLimits3; -var init_rate_limits3 = __esm({ +var RateLimits; +var init_rate_limits = __esm({ "node_modules/openai/resources/admin/organization/projects/rate-limits.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - RateLimits3 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + RateLimits = class extends APIResource { /** * Returns the rate limits per model for a project. * @@ -29457,7 +11636,7 @@ var init_rate_limits3 = __esm({ * ``` */ listRateLimits(projectID, query = {}, options) { - return this._client.getAPIList(path3`/organization/projects/${projectID}/rate_limits`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/projects/${projectID}/rate_limits`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Updates a project rate limit. @@ -29473,7 +11652,7 @@ var init_rate_limits3 = __esm({ */ updateRateLimit(rateLimitID, params, options) { const { project_id, ...body } = params; - return this._client.post(path3`/organization/projects/${project_id}/rate_limits/${rateLimitID}`, { + return this._client.post(path`/organization/projects/${project_id}/rate_limits/${rateLimitID}`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29487,10 +11666,10 @@ var init_rate_limits3 = __esm({ var Roles3; var init_roles3 = __esm({ "node_modules/openai/resources/admin/organization/projects/roles.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Roles3 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Roles3 = class extends APIResource { /** * Creates a custom role for a project. * @@ -29504,7 +11683,7 @@ var init_roles3 = __esm({ * ``` */ create(projectID, body, options) { - return this._client.post(path3`/projects/${projectID}/roles`, { + return this._client.post(path`/projects/${projectID}/roles`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29524,7 +11703,7 @@ var init_roles3 = __esm({ */ retrieve(roleID, params, options) { const { project_id } = params; - return this._client.get(path3`/projects/${project_id}/roles/${roleID}`, { + return this._client.get(path`/projects/${project_id}/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29543,7 +11722,7 @@ var init_roles3 = __esm({ */ update(roleID, params, options) { const { project_id, ...body } = params; - return this._client.post(path3`/projects/${project_id}/roles/${roleID}`, { + return this._client.post(path`/projects/${project_id}/roles/${roleID}`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29563,7 +11742,7 @@ var init_roles3 = __esm({ * ``` */ list(projectID, query = {}, options) { - return this._client.getAPIList(path3`/projects/${projectID}/roles`, NextCursorPage, { + return this._client.getAPIList(path`/projects/${projectID}/roles`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } @@ -29583,7 +11762,7 @@ var init_roles3 = __esm({ */ delete(roleID, params, options) { const { project_id } = params; - return this._client.delete(path3`/projects/${project_id}/roles/${roleID}`, { + return this._client.delete(path`/projects/${project_id}/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29596,10 +11775,10 @@ var init_roles3 = __esm({ var SpendAlerts2; var init_spend_alerts2 = __esm({ "node_modules/openai/resources/admin/organization/projects/spend-alerts.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - SpendAlerts2 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + SpendAlerts2 = class extends APIResource { /** * Creates a project spend alert. * @@ -29621,7 +11800,7 @@ var init_spend_alerts2 = __esm({ * ``` */ create(projectID, body, options) { - return this._client.post(path3`/organization/projects/${projectID}/spend_alerts`, { + return this._client.post(path`/organization/projects/${projectID}/spend_alerts`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29641,7 +11820,7 @@ var init_spend_alerts2 = __esm({ */ retrieve(alertID, params, options) { const { project_id } = params; - return this._client.get(path3`/organization/projects/${project_id}/spend_alerts/${alertID}`, { + return this._client.get(path`/organization/projects/${project_id}/spend_alerts/${alertID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29669,7 +11848,7 @@ var init_spend_alerts2 = __esm({ */ update(alertID, params, options) { const { project_id, ...body } = params; - return this._client.post(path3`/organization/projects/${project_id}/spend_alerts/${alertID}`, { + return this._client.post(path`/organization/projects/${project_id}/spend_alerts/${alertID}`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29689,7 +11868,7 @@ var init_spend_alerts2 = __esm({ * ``` */ list(projectID, query = {}, options) { - return this._client.getAPIList(path3`/organization/projects/${projectID}/spend_alerts`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/projects/${projectID}/spend_alerts`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Deletes a project spend alert. @@ -29705,7 +11884,7 @@ var init_spend_alerts2 = __esm({ */ delete(alertID, params, options) { const { project_id } = params; - return this._client.delete(path3`/organization/projects/${project_id}/spend_alerts/${alertID}`, { + return this._client.delete(path`/organization/projects/${project_id}/spend_alerts/${alertID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29718,9 +11897,9 @@ var init_spend_alerts2 = __esm({ var SpendLimit2; var init_spend_limit2 = __esm({ "node_modules/openai/resources/admin/organization/projects/spend-limit.mjs"() { - init_resource2(); - init_path2(); - SpendLimit2 = class extends APIResource2 { + init_resource(); + init_path(); + SpendLimit2 = class extends APIResource { /** * Get a project's hard spend limit. * @@ -29733,7 +11912,7 @@ var init_spend_limit2 = __esm({ * ``` */ retrieve(projectID, options) { - return this._client.get(path3`/organization/projects/${projectID}/spend_limit`, { + return this._client.get(path`/organization/projects/${projectID}/spend_limit`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29755,7 +11934,7 @@ var init_spend_limit2 = __esm({ * ``` */ update(projectID, body, options) { - return this._client.post(path3`/organization/projects/${projectID}/spend_limit`, { + return this._client.post(path`/organization/projects/${projectID}/spend_limit`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29773,7 +11952,7 @@ var init_spend_limit2 = __esm({ * ``` */ delete(projectID, options) { - return this._client.delete(path3`/organization/projects/${projectID}/spend_limit`, { + return this._client.delete(path`/organization/projects/${projectID}/spend_limit`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29786,10 +11965,10 @@ var init_spend_limit2 = __esm({ var Roles4; var init_roles4 = __esm({ "node_modules/openai/resources/admin/organization/projects/groups/roles.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Roles4 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Roles4 = class extends APIResource { /** * Assigns a project role to a group within a project. * @@ -29804,7 +11983,7 @@ var init_roles4 = __esm({ */ create(groupID, params, options) { const { project_id, ...body } = params; - return this._client.post(path3`/projects/${project_id}/groups/${groupID}/roles`, { + return this._client.post(path`/projects/${project_id}/groups/${groupID}/roles`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29824,7 +12003,7 @@ var init_roles4 = __esm({ */ retrieve(roleID, params, options) { const { project_id, group_id } = params; - return this._client.get(path3`/projects/${project_id}/groups/${group_id}/roles/${roleID}`, { + return this._client.get(path`/projects/${project_id}/groups/${group_id}/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29845,7 +12024,7 @@ var init_roles4 = __esm({ */ list(groupID, params, options) { const { project_id, ...query } = params; - return this._client.getAPIList(path3`/projects/${project_id}/groups/${groupID}/roles`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/projects/${project_id}/groups/${groupID}/roles`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Unassigns a project role from a group within a project. @@ -29861,7 +12040,7 @@ var init_roles4 = __esm({ */ delete(roleID, params, options) { const { project_id, group_id } = params; - return this._client.delete(path3`/projects/${project_id}/groups/${group_id}/roles/${roleID}`, { + return this._client.delete(path`/projects/${project_id}/groups/${group_id}/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29874,12 +12053,12 @@ var init_roles4 = __esm({ var Groups2; var init_groups2 = __esm({ "node_modules/openai/resources/admin/organization/projects/groups/groups.mjs"() { - init_resource2(); + init_resource(); init_roles4(); init_roles4(); - init_pagination2(); - init_path2(); - Groups2 = class extends APIResource2 { + init_pagination(); + init_path(); + Groups2 = class extends APIResource { constructor() { super(...arguments); this.roles = new Roles4(this._client); @@ -29897,7 +12076,7 @@ var init_groups2 = __esm({ * ``` */ create(projectID, body, options) { - return this._client.post(path3`/organization/projects/${projectID}/groups`, { + return this._client.post(path`/organization/projects/${projectID}/groups`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29917,7 +12096,7 @@ var init_groups2 = __esm({ */ retrieve(groupID, params, options) { const { project_id, ...query } = params; - return this._client.get(path3`/organization/projects/${project_id}/groups/${groupID}`, { + return this._client.get(path`/organization/projects/${project_id}/groups/${groupID}`, { query, ...options, __security: { adminAPIKeyAuth: true } @@ -29937,7 +12116,7 @@ var init_groups2 = __esm({ * ``` */ list(projectID, query = {}, options) { - return this._client.getAPIList(path3`/organization/projects/${projectID}/groups`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/projects/${projectID}/groups`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Revokes a group's access to a project. @@ -29953,7 +12132,7 @@ var init_groups2 = __esm({ */ delete(groupID, params, options) { const { project_id } = params; - return this._client.delete(path3`/organization/projects/${project_id}/groups/${groupID}`, { + return this._client.delete(path`/organization/projects/${project_id}/groups/${groupID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29964,12 +12143,12 @@ var init_groups2 = __esm({ }); // node_modules/openai/resources/admin/organization/projects/service-accounts/api-keys.mjs -var APIKeys3; -var init_api_keys3 = __esm({ +var APIKeys2; +var init_api_keys2 = __esm({ "node_modules/openai/resources/admin/organization/projects/service-accounts/api-keys.mjs"() { - init_resource2(); - init_path2(); - APIKeys3 = class extends APIResource2 { + init_resource(); + init_path(); + APIKeys2 = class extends APIResource { /** * Creates an API key for a service account in the project. * @@ -29984,25 +12163,25 @@ var init_api_keys3 = __esm({ */ create(serviceAccountID, params, options) { const { project_id, ...body } = params; - return this._client.post(path3`/organization/projects/${project_id}/service_accounts/${serviceAccountID}/api_keys`, { body, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.post(path`/organization/projects/${project_id}/service_accounts/${serviceAccountID}/api_keys`, { body, ...options, __security: { adminAPIKeyAuth: true } }); } }; } }); // node_modules/openai/resources/admin/organization/projects/service-accounts/service-accounts.mjs -var ServiceAccounts3; -var init_service_accounts3 = __esm({ +var ServiceAccounts; +var init_service_accounts = __esm({ "node_modules/openai/resources/admin/organization/projects/service-accounts/service-accounts.mjs"() { - init_resource2(); - init_api_keys3(); - init_api_keys3(); - init_pagination2(); - init_path2(); - ServiceAccounts3 = class extends APIResource2 { + init_resource(); + init_api_keys2(); + init_api_keys2(); + init_pagination(); + init_path(); + ServiceAccounts = class extends APIResource { constructor() { super(...arguments); - this.apiKeys = new APIKeys3(this._client); + this.apiKeys = new APIKeys2(this._client); } /** * Creates a new service account in the project. By default, this also returns an @@ -30018,7 +12197,7 @@ var init_service_accounts3 = __esm({ * ``` */ create(projectID, body, options) { - return this._client.post(path3`/organization/projects/${projectID}/service_accounts`, { + return this._client.post(path`/organization/projects/${projectID}/service_accounts`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -30038,7 +12217,7 @@ var init_service_accounts3 = __esm({ */ retrieve(serviceAccountID, params, options) { const { project_id } = params; - return this._client.get(path3`/organization/projects/${project_id}/service_accounts/${serviceAccountID}`, { + return this._client.get(path`/organization/projects/${project_id}/service_accounts/${serviceAccountID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -30057,7 +12236,7 @@ var init_service_accounts3 = __esm({ */ update(serviceAccountID, params, options) { const { project_id, ...body } = params; - return this._client.post(path3`/organization/projects/${project_id}/service_accounts/${serviceAccountID}`, { body, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.post(path`/organization/projects/${project_id}/service_accounts/${serviceAccountID}`, { body, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Returns a list of service accounts in the project. @@ -30073,7 +12252,7 @@ var init_service_accounts3 = __esm({ * ``` */ list(projectID, query = {}, options) { - return this._client.getAPIList(path3`/organization/projects/${projectID}/service_accounts`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/projects/${projectID}/service_accounts`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Deletes a service account from the project. @@ -30092,10 +12271,10 @@ var init_service_accounts3 = __esm({ */ delete(serviceAccountID, params, options) { const { project_id } = params; - return this._client.delete(path3`/organization/projects/${project_id}/service_accounts/${serviceAccountID}`, { ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.delete(path`/organization/projects/${project_id}/service_accounts/${serviceAccountID}`, { ...options, __security: { adminAPIKeyAuth: true } }); } }; - ServiceAccounts3.APIKeys = APIKeys3; + ServiceAccounts.APIKeys = APIKeys2; } }); @@ -30103,10 +12282,10 @@ var init_service_accounts3 = __esm({ var Roles5; var init_roles5 = __esm({ "node_modules/openai/resources/admin/organization/projects/users/roles.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Roles5 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Roles5 = class extends APIResource { /** * Assigns a project role to a user within a project. * @@ -30121,7 +12300,7 @@ var init_roles5 = __esm({ */ create(userID, params, options) { const { project_id, ...body } = params; - return this._client.post(path3`/projects/${project_id}/users/${userID}/roles`, { + return this._client.post(path`/projects/${project_id}/users/${userID}/roles`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -30141,7 +12320,7 @@ var init_roles5 = __esm({ */ retrieve(roleID, params, options) { const { project_id, user_id } = params; - return this._client.get(path3`/projects/${project_id}/users/${user_id}/roles/${roleID}`, { + return this._client.get(path`/projects/${project_id}/users/${user_id}/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -30162,7 +12341,7 @@ var init_roles5 = __esm({ */ list(userID, params, options) { const { project_id, ...query } = params; - return this._client.getAPIList(path3`/projects/${project_id}/users/${userID}/roles`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/projects/${project_id}/users/${userID}/roles`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Unassigns a project role from a user within a project. @@ -30178,7 +12357,7 @@ var init_roles5 = __esm({ */ delete(roleID, params, options) { const { project_id, user_id } = params; - return this._client.delete(path3`/projects/${project_id}/users/${user_id}/roles/${roleID}`, { + return this._client.delete(path`/projects/${project_id}/users/${user_id}/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -30188,15 +12367,15 @@ var init_roles5 = __esm({ }); // node_modules/openai/resources/admin/organization/projects/users/users.mjs -var Users3; -var init_users3 = __esm({ +var Users2; +var init_users2 = __esm({ "node_modules/openai/resources/admin/organization/projects/users/users.mjs"() { - init_resource2(); + init_resource(); init_roles5(); init_roles5(); - init_pagination2(); - init_path2(); - Users3 = class extends APIResource2 { + init_pagination(); + init_path(); + Users2 = class extends APIResource { constructor() { super(...arguments); this.roles = new Roles5(this._client); @@ -30215,7 +12394,7 @@ var init_users3 = __esm({ * ``` */ create(projectID, body, options) { - return this._client.post(path3`/organization/projects/${projectID}/users`, { + return this._client.post(path`/organization/projects/${projectID}/users`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -30235,7 +12414,7 @@ var init_users3 = __esm({ */ retrieve(userID, params, options) { const { project_id } = params; - return this._client.get(path3`/organization/projects/${project_id}/users/${userID}`, { + return this._client.get(path`/organization/projects/${project_id}/users/${userID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -30254,7 +12433,7 @@ var init_users3 = __esm({ */ update(userID, params, options) { const { project_id, ...body } = params; - return this._client.post(path3`/organization/projects/${project_id}/users/${userID}`, { + return this._client.post(path`/organization/projects/${project_id}/users/${userID}`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -30274,7 +12453,7 @@ var init_users3 = __esm({ * ``` */ list(projectID, query = {}, options) { - return this._client.getAPIList(path3`/organization/projects/${projectID}/users`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/projects/${projectID}/users`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Deletes a user from the project. @@ -30293,13 +12472,13 @@ var init_users3 = __esm({ */ delete(userID, params, options) { const { project_id } = params; - return this._client.delete(path3`/organization/projects/${project_id}/users/${userID}`, { + return this._client.delete(path`/organization/projects/${project_id}/users/${userID}`, { ...options, __security: { adminAPIKeyAuth: true } }); } }; - Users3.Roles = Roles5; + Users2.Roles = Roles5; } }); @@ -30307,19 +12486,19 @@ var init_users3 = __esm({ var Projects; var init_projects = __esm({ "node_modules/openai/resources/admin/organization/projects/projects.mjs"() { - init_resource2(); - init_api_keys2(); - init_api_keys2(); - init_certificates3(); - init_certificates3(); + init_resource(); + init_api_keys(); + init_api_keys(); + init_certificates2(); + init_certificates2(); init_data_retention2(); init_data_retention2(); init_hosted_tool_permissions(); init_hosted_tool_permissions(); init_model_permissions(); init_model_permissions(); - init_rate_limits3(); - init_rate_limits3(); + init_rate_limits(); + init_rate_limits(); init_roles3(); init_roles3(); init_spend_alerts2(); @@ -30328,19 +12507,19 @@ var init_projects = __esm({ init_spend_limit2(); init_groups2(); init_groups2(); - init_service_accounts3(); - init_service_accounts3(); - init_users3(); - init_users3(); - init_pagination2(); - init_path2(); - Projects = class extends APIResource2 { + init_service_accounts(); + init_service_accounts(); + init_users2(); + init_users2(); + init_pagination(); + init_path(); + Projects = class extends APIResource { constructor() { super(...arguments); - this.users = new Users3(this._client); - this.serviceAccounts = new ServiceAccounts3(this._client); - this.apiKeys = new APIKeys2(this._client); - this.rateLimits = new RateLimits3(this._client); + this.users = new Users2(this._client); + this.serviceAccounts = new ServiceAccounts(this._client); + this.apiKeys = new APIKeys(this._client); + this.rateLimits = new RateLimits(this._client); this.modelPermissions = new ModelPermissions(this._client); this.hostedToolPermissions = new HostedToolPermissions(this._client); this.groups = new Groups2(this._client); @@ -30348,7 +12527,7 @@ var init_projects = __esm({ this.dataRetention = new DataRetention2(this._client); this.spendLimit = new SpendLimit2(this._client); this.spendAlerts = new SpendAlerts2(this._client); - this.certificates = new Certificates3(this._client); + this.certificates = new Certificates2(this._client); } /** * Create a new project in the organization. Projects can be created and archived, @@ -30381,7 +12560,7 @@ var init_projects = __esm({ * ``` */ retrieve(projectID, options) { - return this._client.get(path3`/organization/projects/${projectID}`, { + return this._client.get(path`/organization/projects/${projectID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -30398,7 +12577,7 @@ var init_projects = __esm({ * ``` */ update(projectID, body, options) { - return this._client.post(path3`/organization/projects/${projectID}`, { + return this._client.post(path`/organization/projects/${projectID}`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -30435,16 +12614,16 @@ var init_projects = __esm({ * ``` */ archive(projectID, options) { - return this._client.post(path3`/organization/projects/${projectID}/archive`, { + return this._client.post(path`/organization/projects/${projectID}/archive`, { ...options, __security: { adminAPIKeyAuth: true } }); } }; - Projects.Users = Users3; - Projects.ServiceAccounts = ServiceAccounts3; - Projects.APIKeys = APIKeys2; - Projects.RateLimits = RateLimits3; + Projects.Users = Users2; + Projects.ServiceAccounts = ServiceAccounts; + Projects.APIKeys = APIKeys; + Projects.RateLimits = RateLimits; Projects.ModelPermissions = ModelPermissions; Projects.HostedToolPermissions = HostedToolPermissions; Projects.Groups = Groups2; @@ -30452,7 +12631,7 @@ var init_projects = __esm({ Projects.DataRetention = DataRetention2; Projects.SpendLimit = SpendLimit2; Projects.SpendAlerts = SpendAlerts2; - Projects.Certificates = Certificates3; + Projects.Certificates = Certificates2; } }); @@ -30460,10 +12639,10 @@ var init_projects = __esm({ var Roles6; var init_roles6 = __esm({ "node_modules/openai/resources/admin/organization/users/roles.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Roles6 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Roles6 = class extends APIResource { /** * Assigns an organization role to a user within the organization. * @@ -30477,7 +12656,7 @@ var init_roles6 = __esm({ * ``` */ create(userID, body, options) { - return this._client.post(path3`/organization/users/${userID}/roles`, { + return this._client.post(path`/organization/users/${userID}/roles`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -30497,7 +12676,7 @@ var init_roles6 = __esm({ */ retrieve(roleID, params, options) { const { user_id } = params; - return this._client.get(path3`/organization/users/${user_id}/roles/${roleID}`, { + return this._client.get(path`/organization/users/${user_id}/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -30516,7 +12695,7 @@ var init_roles6 = __esm({ * ``` */ list(userID, query = {}, options) { - return this._client.getAPIList(path3`/organization/users/${userID}/roles`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/users/${userID}/roles`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Unassigns an organization role from a user within the organization. @@ -30532,7 +12711,7 @@ var init_roles6 = __esm({ */ delete(roleID, params, options) { const { user_id } = params; - return this._client.delete(path3`/organization/users/${user_id}/roles/${roleID}`, { + return this._client.delete(path`/organization/users/${user_id}/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -30542,15 +12721,15 @@ var init_roles6 = __esm({ }); // node_modules/openai/resources/admin/organization/users/users.mjs -var Users4; -var init_users4 = __esm({ +var Users3; +var init_users3 = __esm({ "node_modules/openai/resources/admin/organization/users/users.mjs"() { - init_resource2(); + init_resource(); init_roles6(); init_roles6(); - init_pagination2(); - init_path2(); - Users4 = class extends APIResource2 { + init_pagination(); + init_path(); + Users3 = class extends APIResource { constructor() { super(...arguments); this.roles = new Roles6(this._client); @@ -30565,7 +12744,7 @@ var init_users4 = __esm({ * ``` */ retrieve(userID, options) { - return this._client.get(path3`/organization/users/${userID}`, { + return this._client.get(path`/organization/users/${userID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -30580,7 +12759,7 @@ var init_users4 = __esm({ * ``` */ update(userID, body, options) { - return this._client.post(path3`/organization/users/${userID}`, { + return this._client.post(path`/organization/users/${userID}`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -30615,31 +12794,31 @@ var init_users4 = __esm({ * ``` */ delete(userID, options) { - return this._client.delete(path3`/organization/users/${userID}`, { + return this._client.delete(path`/organization/users/${userID}`, { ...options, __security: { adminAPIKeyAuth: true } }); } }; - Users4.Roles = Roles6; + Users3.Roles = Roles6; } }); // node_modules/openai/resources/admin/organization/organization.mjs -var Organization2; -var init_organization2 = __esm({ +var Organization; +var init_organization = __esm({ "node_modules/openai/resources/admin/organization/organization.mjs"() { - init_resource2(); + init_resource(); init_admin_api_keys(); init_admin_api_keys(); init_audit_logs(); init_audit_logs(); - init_certificates2(); - init_certificates2(); + init_certificates(); + init_certificates(); init_data_retention(); init_data_retention(); - init_invites2(); - init_invites2(); + init_invites(); + init_invites(); init_roles(); init_roles(); init_spend_alerts(); @@ -30652,37 +12831,37 @@ var init_organization2 = __esm({ init_groups(); init_projects(); init_projects(); - init_users4(); - init_users4(); - Organization2 = class extends APIResource2 { + init_users3(); + init_users3(); + Organization = class extends APIResource { constructor() { super(...arguments); this.auditLogs = new AuditLogs(this._client); this.adminAPIKeys = new AdminAPIKeys(this._client); this.usage = new Usage(this._client); - this.invites = new Invites2(this._client); - this.users = new Users4(this._client); + this.invites = new Invites(this._client); + this.users = new Users3(this._client); this.groups = new Groups(this._client); this.roles = new Roles(this._client); this.dataRetention = new DataRetention(this._client); this.spendLimit = new SpendLimit(this._client); this.spendAlerts = new SpendAlerts(this._client); - this.certificates = new Certificates2(this._client); + this.certificates = new Certificates(this._client); this.projects = new Projects(this._client); } }; - Organization2.AuditLogs = AuditLogs; - Organization2.AdminAPIKeys = AdminAPIKeys; - Organization2.Usage = Usage; - Organization2.Invites = Invites2; - Organization2.Users = Users4; - Organization2.Groups = Groups; - Organization2.Roles = Roles; - Organization2.DataRetention = DataRetention; - Organization2.SpendLimit = SpendLimit; - Organization2.SpendAlerts = SpendAlerts; - Organization2.Certificates = Certificates2; - Organization2.Projects = Projects; + Organization.AuditLogs = AuditLogs; + Organization.AdminAPIKeys = AdminAPIKeys; + Organization.Usage = Usage; + Organization.Invites = Invites; + Organization.Users = Users3; + Organization.Groups = Groups; + Organization.Roles = Roles; + Organization.DataRetention = DataRetention; + Organization.SpendLimit = SpendLimit; + Organization.SpendAlerts = SpendAlerts; + Organization.Certificates = Certificates; + Organization.Projects = Projects; } }); @@ -30690,16 +12869,16 @@ var init_organization2 = __esm({ var Admin; var init_admin = __esm({ "node_modules/openai/resources/admin/admin.mjs"() { - init_resource2(); - init_organization2(); - init_organization2(); - Admin = class extends APIResource2 { + init_resource(); + init_organization(); + init_organization(); + Admin = class extends APIResource { constructor() { super(...arguments); - this.organization = new Organization2(this._client); + this.organization = new Organization(this._client); } }; - Admin.Organization = Organization2; + Admin.Organization = Organization; } }); @@ -30707,9 +12886,9 @@ var init_admin = __esm({ var Speech; var init_speech = __esm({ "node_modules/openai/resources/audio/speech.mjs"() { - init_resource2(); - init_headers3(); - Speech = class extends APIResource2 { + init_resource(); + init_headers(); + Speech = class extends APIResource { /** * Generates audio from the input text. * @@ -30731,7 +12910,7 @@ var init_speech = __esm({ return this._client.post("/audio/speech", { body, ...options, - headers: buildHeaders2([{ Accept: "application/octet-stream" }, options?.headers]), + headers: buildHeaders([{ Accept: "application/octet-stream" }, options?.headers]), __security: { bearerAuth: true }, __binaryResponse: true }); @@ -30744,11 +12923,11 @@ var init_speech = __esm({ var Transcriptions; var init_transcriptions = __esm({ "node_modules/openai/resources/audio/transcriptions.mjs"() { - init_resource2(); - init_uploads3(); - Transcriptions = class extends APIResource2 { + init_resource(); + init_uploads(); + Transcriptions = class extends APIResource { create(body, options) { - return this._client.post("/audio/transcriptions", multipartFormRequestOptions2({ + return this._client.post("/audio/transcriptions", multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false, @@ -30764,11 +12943,11 @@ var init_transcriptions = __esm({ var Translations; var init_translations = __esm({ "node_modules/openai/resources/audio/translations.mjs"() { - init_resource2(); - init_uploads3(); - Translations = class extends APIResource2 { + init_resource(); + init_uploads(); + Translations = class extends APIResource { create(body, options) { - return this._client.post("/audio/translations", multipartFormRequestOptions2({ body, ...options, __metadata: { model: body.model }, __security: { bearerAuth: true } }, this._client)); + return this._client.post("/audio/translations", multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model }, __security: { bearerAuth: true } }, this._client)); } }; } @@ -30778,14 +12957,14 @@ var init_translations = __esm({ var Audio; var init_audio = __esm({ "node_modules/openai/resources/audio/audio.mjs"() { - init_resource2(); + init_resource(); init_speech(); init_speech(); init_transcriptions(); init_transcriptions(); init_translations(); init_translations(); - Audio = class extends APIResource2 { + Audio = class extends APIResource { constructor() { super(...arguments); this.transcriptions = new Transcriptions(this._client); @@ -30800,13 +12979,13 @@ var init_audio = __esm({ }); // node_modules/openai/resources/batches.mjs -var Batches3; -var init_batches3 = __esm({ +var Batches; +var init_batches = __esm({ "node_modules/openai/resources/batches.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Batches3 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Batches = class extends APIResource { /** * Creates and executes a batch from an uploaded file of requests */ @@ -30817,7 +12996,7 @@ var init_batches3 = __esm({ * Retrieves a batch. */ retrieve(batchID, options) { - return this._client.get(path3`/batches/${batchID}`, { ...options, __security: { bearerAuth: true } }); + return this._client.get(path`/batches/${batchID}`, { ...options, __security: { bearerAuth: true } }); } /** * List your organization's batches. @@ -30835,7 +13014,7 @@ var init_batches3 = __esm({ * (if any) available in the output file. */ cancel(batchID, options) { - return this._client.post(path3`/batches/${batchID}/cancel`, { + return this._client.post(path`/batches/${batchID}/cancel`, { ...options, __security: { bearerAuth: true } }); @@ -30848,11 +13027,11 @@ var init_batches3 = __esm({ var Assistants; var init_assistants = __esm({ "node_modules/openai/resources/beta/assistants.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Assistants = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Assistants = class extends APIResource { /** * Create an assistant with a model and instructions. * @@ -30862,7 +13041,7 @@ var init_assistants = __esm({ return this._client.post("/assistants", { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -30872,9 +13051,9 @@ var init_assistants = __esm({ * @deprecated */ retrieve(assistantID, options) { - return this._client.get(path3`/assistants/${assistantID}`, { + return this._client.get(path`/assistants/${assistantID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -30884,10 +13063,10 @@ var init_assistants = __esm({ * @deprecated */ update(assistantID, body, options) { - return this._client.post(path3`/assistants/${assistantID}`, { + return this._client.post(path`/assistants/${assistantID}`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -30900,7 +13079,7 @@ var init_assistants = __esm({ return this._client.getAPIList("/assistants", CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -30910,9 +13089,9 @@ var init_assistants = __esm({ * @deprecated */ delete(assistantID, options) { - return this._client.delete(path3`/assistants/${assistantID}`, { + return this._client.delete(path`/assistants/${assistantID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -30921,12 +13100,12 @@ var init_assistants = __esm({ }); // node_modules/openai/resources/beta/realtime/sessions.mjs -var Sessions2; -var init_sessions2 = __esm({ +var Sessions; +var init_sessions = __esm({ "node_modules/openai/resources/beta/realtime/sessions.mjs"() { - init_resource2(); - init_headers3(); - Sessions2 = class extends APIResource2 { + init_resource(); + init_headers(); + Sessions = class extends APIResource { /** * Create an ephemeral API token for use in client-side applications with the * Realtime API. Can be configured with the same session parameters as the @@ -30946,7 +13125,7 @@ var init_sessions2 = __esm({ return this._client.post("/realtime/sessions", { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -30958,9 +13137,9 @@ var init_sessions2 = __esm({ var TranscriptionSessions; var init_transcription_sessions = __esm({ "node_modules/openai/resources/beta/realtime/transcription-sessions.mjs"() { - init_resource2(); - init_headers3(); - TranscriptionSessions = class extends APIResource2 { + init_resource(); + init_headers(); + TranscriptionSessions = class extends APIResource { /** * Create an ephemeral API token for use in client-side applications with the * Realtime API specifically for realtime transcriptions. Can be configured with @@ -30980,7 +13159,7 @@ var init_transcription_sessions = __esm({ return this._client.post("/realtime/transcription_sessions", { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -30992,32 +13171,32 @@ var init_transcription_sessions = __esm({ var Realtime; var init_realtime = __esm({ "node_modules/openai/resources/beta/realtime/realtime.mjs"() { - init_resource2(); - init_sessions2(); - init_sessions2(); + init_resource(); + init_sessions(); + init_sessions(); init_transcription_sessions(); init_transcription_sessions(); - Realtime = class extends APIResource2 { + Realtime = class extends APIResource { constructor() { super(...arguments); - this.sessions = new Sessions2(this._client); + this.sessions = new Sessions(this._client); this.transcriptionSessions = new TranscriptionSessions(this._client); } }; - Realtime.Sessions = Sessions2; + Realtime.Sessions = Sessions; Realtime.TranscriptionSessions = TranscriptionSessions; } }); // node_modules/openai/resources/beta/agents/environments/files.mjs -var Files3; -var init_files3 = __esm({ +var Files; +var init_files = __esm({ "node_modules/openai/resources/beta/agents/environments/files.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Files3 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Files = class extends APIResource { /** * Copies inline bytes or a Files API file into a connected execution environment. * See @@ -31037,10 +13216,10 @@ var init_files3 = __esm({ * ``` */ create(environmentID, body, options) { - return this._client.post(path3`/agents/environments/${environmentID}/files`, { + return this._client.post(path`/agents/environments/${environmentID}/files`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31060,10 +13239,10 @@ var init_files3 = __esm({ * ``` */ list(environmentID, query = {}, options) { - return this._client.getAPIList(path3`/agents/environments/${environmentID}/files`, TokenPage, { + return this._client.getAPIList(path`/agents/environments/${environmentID}/files`, TokenPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31075,11 +13254,11 @@ var init_files3 = __esm({ var Templates; var init_templates = __esm({ "node_modules/openai/resources/beta/agents/environments/templates.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Templates = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Templates = class extends APIResource { /** * Creates reusable environment configuration without returning confidential setup * commands or environment values. See @@ -31095,7 +13274,7 @@ var init_templates = __esm({ return this._client.post("/agents/environments/templates", { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31113,9 +13292,9 @@ var init_templates = __esm({ * ``` */ retrieve(environmentTemplateID, options) { - return this._client.get(path3`/agents/environments/templates/${environmentTemplateID}`, { + return this._client.get(path`/agents/environments/templates/${environmentTemplateID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31133,10 +13312,10 @@ var init_templates = __esm({ * ``` */ update(environmentTemplateID, body = {}, options) { - return this._client.post(path3`/agents/environments/templates/${environmentTemplateID}`, { + return this._client.post(path`/agents/environments/templates/${environmentTemplateID}`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31156,7 +13335,7 @@ var init_templates = __esm({ return this._client.getAPIList("/agents/environments/templates", CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31174,9 +13353,9 @@ var init_templates = __esm({ * ``` */ delete(environmentTemplateID, options) { - return this._client.delete(path3`/agents/environments/templates/${environmentTemplateID}`, { + return this._client.delete(path`/agents/environments/templates/${environmentTemplateID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31185,20 +13364,20 @@ var init_templates = __esm({ }); // node_modules/openai/resources/beta/agents/environments/environments.mjs -var Environments2; -var init_environments2 = __esm({ +var Environments; +var init_environments = __esm({ "node_modules/openai/resources/beta/agents/environments/environments.mjs"() { - init_resource2(); - init_files3(); - init_files3(); + init_resource(); + init_files(); + init_files(); init_templates(); init_templates(); - init_headers3(); - init_path2(); - Environments2 = class extends APIResource2 { + init_headers(); + init_path(); + Environments = class extends APIResource { constructor() { super(...arguments); - this.files = new Files3(this._client); + this.files = new Files(this._client); this.templates = new Templates(this._client); } /** @@ -31215,15 +13394,15 @@ var init_environments2 = __esm({ * ``` */ retrieve(environmentID, options) { - return this._client.get(path3`/agents/environments/${environmentID}`, { + return this._client.get(path`/agents/environments/${environmentID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } }; - Environments2.Files = Files3; - Environments2.Templates = Templates; + Environments.Files = Files; + Environments.Templates = Templates; } }); @@ -31231,7 +13410,7 @@ var init_environments2 = __esm({ var _TurnState_turnID, _TurnState_turnEnded, _TurnState_eventIDs, _TurnState_calls, TurnState; var init_turn_state = __esm({ "node_modules/openai/lib/agents/turn-state.mjs"() { - init_tslib2(); + init_tslib(); TurnState = class { constructor() { _TurnState_turnID.set(this, void 0); @@ -31241,27 +13420,27 @@ var init_turn_state = __esm({ } /** Records a delivery unless its event ID is in the bounded recent window. */ accept(event) { - if (__classPrivateFieldGet2(this, _TurnState_eventIDs, "f").has(event.event_id)) { + if (__classPrivateFieldGet(this, _TurnState_eventIDs, "f").has(event.event_id)) { return false; } - if (__classPrivateFieldGet2(this, _TurnState_eventIDs, "f").size === 1024) { - const oldest = __classPrivateFieldGet2(this, _TurnState_eventIDs, "f").values().next(); + if (__classPrivateFieldGet(this, _TurnState_eventIDs, "f").size === 1024) { + const oldest = __classPrivateFieldGet(this, _TurnState_eventIDs, "f").values().next(); if (!oldest.done) { - __classPrivateFieldGet2(this, _TurnState_eventIDs, "f").delete(oldest.value); + __classPrivateFieldGet(this, _TurnState_eventIDs, "f").delete(oldest.value); } } - __classPrivateFieldGet2(this, _TurnState_eventIDs, "f").add(event.event_id); - if (event.type === "agent.session.turn.created" && event.turn.subagent_id === null && __classPrivateFieldGet2(this, _TurnState_turnID, "f") === void 0) { - __classPrivateFieldSet2(this, _TurnState_turnID, event.turn_id, "f"); + __classPrivateFieldGet(this, _TurnState_eventIDs, "f").add(event.event_id); + if (event.type === "agent.session.turn.created" && event.turn.subagent_id === null && __classPrivateFieldGet(this, _TurnState_turnID, "f") === void 0) { + __classPrivateFieldSet(this, _TurnState_turnID, event.turn_id, "f"); } - if ((event.type === "agent.session.turn.completed" || event.type === "agent.session.turn.failed" || event.type === "agent.session.turn.cancelled") && __classPrivateFieldGet2(this, _TurnState_turnID, "f") !== void 0 && event.turn_id === __classPrivateFieldGet2(this, _TurnState_turnID, "f")) { - __classPrivateFieldSet2(this, _TurnState_turnEnded, true, "f"); + if ((event.type === "agent.session.turn.completed" || event.type === "agent.session.turn.failed" || event.type === "agent.session.turn.cancelled") && __classPrivateFieldGet(this, _TurnState_turnID, "f") !== void 0 && event.turn_id === __classPrivateFieldGet(this, _TurnState_turnID, "f")) { + __classPrivateFieldSet(this, _TurnState_turnEnded, true, "f"); } return true; } /** Checks session termination after updating the selected turn state. */ terminal(event) { - return event.type === "agent.session.failed" || event.type === "agent.session.idle" && __classPrivateFieldGet2(this, _TurnState_turnEnded, "f"); + return event.type === "agent.session.failed" || event.type === "agent.session.idle" && __classPrivateFieldGet(this, _TurnState_turnEnded, "f"); } /** Returns each tool call once for the full invocation, including subagent turns. */ call(event) { @@ -31270,10 +13449,10 @@ var init_turn_state = __esm({ } const call = event.item; const key = JSON.stringify([call.turn_id, call.call_id]); - if (__classPrivateFieldGet2(this, _TurnState_calls, "f").has(key)) { + if (__classPrivateFieldGet(this, _TurnState_calls, "f").has(key)) { return; } - __classPrivateFieldGet2(this, _TurnState_calls, "f").add(key); + __classPrivateFieldGet(this, _TurnState_calls, "f").add(key); return call; } }; @@ -31283,7 +13462,7 @@ var init_turn_state = __esm({ // node_modules/openai/lib/agents/agent-session-stream.mjs function isInputContent(value2) { - if (!isObj2(value2)) { + if (!isObj(value2)) { return false; } const content = value2; @@ -31295,7 +13474,7 @@ function isInputContent(value2) { } else { return false; } - return hasOwn2(content, "type") && hasOwn2(content, field) && typeof content[field] === "string"; + return hasOwn(content, "type") && hasOwn(content, field) && typeof content[field] === "string"; } function normalizedOutput(value2) { if (value2 === null) { @@ -31307,7 +13486,7 @@ function normalizedOutput(value2) { throw new OpenAIError("Tool output must be text, content, a JSON object, or null"); } function toolResult(call, value2) { - const output = isObj2(value2) ? JSON.stringify(value2) : value2; + const output = isObj(value2) ? JSON.stringify(value2) : value2; const serialized = JSON.stringify(output); if (serialized === void 0) { throw new OpenAIError("Tool output must be JSON serializable"); @@ -31329,12 +13508,12 @@ async function cancelBody(response) { var _AgentSessionStream_instances, _AgentSessionStream_consumed, _AgentSessionStream_stream, _AgentSessionStream_response, _AgentSessionStream_reading, _AgentSessionStream_sessions, _AgentSessionStream_sessionID, _AgentSessionStream_input, _AgentSessionStream_handlers, _AgentSessionStream_inputKey, _AgentSessionStream_options, _AgentSessionStream_iterate, _AgentSessionStream_result, _AgentSessionStream_checkAbort, _AgentSessionStream_abortError, _AgentSessionStream_wait, _AgentSessionStream_submit, AgentSessionStream; var init_agent_session_stream = __esm({ "node_modules/openai/lib/agents/agent-session-stream.mjs"() { - init_tslib2(); + init_tslib(); init_turn_state(); - init_error3(); - init_headers3(); - init_uuid2(); - init_values2(); + init_error(); + init_headers(); + init_uuid(); + init_values(); AgentSessionStream = class { /** Creates an unstarted helper. Prefer client.beta.agents.sessions.stream(). */ constructor(sessions, sessionID, params, options) { @@ -31354,89 +13533,89 @@ var init_agent_session_stream = __esm({ if (params.input.length === 0) { throw new OpenAIError("input must not be empty"); } - __classPrivateFieldSet2(this, _AgentSessionStream_sessions, sessions, "f"); - __classPrivateFieldSet2(this, _AgentSessionStream_sessionID, sessionID, "f"); - __classPrivateFieldSet2(this, _AgentSessionStream_input, { type: "agent.session.input.message", input }, "f"); - __classPrivateFieldSet2(this, _AgentSessionStream_handlers, new Map(Object.entries(params.toolHandlers ?? {})), "f"); - const headers = buildHeaders2([options?.headers]); - __classPrivateFieldSet2(this, _AgentSessionStream_inputKey, headers.nulls.has("idempotency-key") ? void 0 : headers.values.get("idempotency-key") ?? params.idempotencyKey ?? options?.idempotencyKey ?? uuid42(), "f"); + __classPrivateFieldSet(this, _AgentSessionStream_sessions, sessions, "f"); + __classPrivateFieldSet(this, _AgentSessionStream_sessionID, sessionID, "f"); + __classPrivateFieldSet(this, _AgentSessionStream_input, { type: "agent.session.input.message", input }, "f"); + __classPrivateFieldSet(this, _AgentSessionStream_handlers, new Map(Object.entries(params.toolHandlers ?? {})), "f"); + const headers = buildHeaders([options?.headers]); + __classPrivateFieldSet(this, _AgentSessionStream_inputKey, headers.nulls.has("idempotency-key") ? void 0 : headers.values.get("idempotency-key") ?? params.idempotencyKey ?? options?.idempotencyKey ?? uuid4(), "f"); headers.values.delete("idempotency-key"); headers.nulls.delete("idempotency-key"); const { idempotencyKey: _key, ...rest } = options ?? {}; - __classPrivateFieldSet2(this, _AgentSessionStream_options, { ...rest, headers }, "f"); + __classPrivateFieldSet(this, _AgentSessionStream_options, { ...rest, headers }, "f"); } /** Closes local requests without cancelling the turn; an optional reason becomes the abort error's cause. */ abort(reason) { this.controller.abort(reason); - __classPrivateFieldGet2(this, _AgentSessionStream_stream, "f")?.controller.abort(this.controller.signal.reason); - if (!__classPrivateFieldGet2(this, _AgentSessionStream_reading, "f")) { - void cancelBody(__classPrivateFieldGet2(this, _AgentSessionStream_response, "f")); + __classPrivateFieldGet(this, _AgentSessionStream_stream, "f")?.controller.abort(this.controller.signal.reason); + if (!__classPrivateFieldGet(this, _AgentSessionStream_reading, "f")) { + void cancelBody(__classPrivateFieldGet(this, _AgentSessionStream_response, "f")); } } /** Starts iteration once; use for await to ensure early exits close the connection. */ [(_AgentSessionStream_consumed = /* @__PURE__ */ new WeakMap(), _AgentSessionStream_stream = /* @__PURE__ */ new WeakMap(), _AgentSessionStream_response = /* @__PURE__ */ new WeakMap(), _AgentSessionStream_reading = /* @__PURE__ */ new WeakMap(), _AgentSessionStream_sessions = /* @__PURE__ */ new WeakMap(), _AgentSessionStream_sessionID = /* @__PURE__ */ new WeakMap(), _AgentSessionStream_input = /* @__PURE__ */ new WeakMap(), _AgentSessionStream_handlers = /* @__PURE__ */ new WeakMap(), _AgentSessionStream_inputKey = /* @__PURE__ */ new WeakMap(), _AgentSessionStream_options = /* @__PURE__ */ new WeakMap(), _AgentSessionStream_instances = /* @__PURE__ */ new WeakSet(), Symbol.asyncIterator)]() { - if (__classPrivateFieldGet2(this, _AgentSessionStream_consumed, "f")) { + if (__classPrivateFieldGet(this, _AgentSessionStream_consumed, "f")) { throw new OpenAIError("An AgentSessionStream can only be consumed once"); } - __classPrivateFieldSet2(this, _AgentSessionStream_consumed, true, "f"); - return __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_iterate).call(this); + __classPrivateFieldSet(this, _AgentSessionStream_consumed, true, "f"); + return __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_iterate).call(this); } }; _AgentSessionStream_iterate = async function* _AgentSessionStream_iterate2() { - const externalSignal = __classPrivateFieldGet2(this, _AgentSessionStream_options, "f").signal; + const externalSignal = __classPrivateFieldGet(this, _AgentSessionStream_options, "f").signal; const abort = () => this.abort(externalSignal?.aborted ? externalSignal.reason : this.controller.signal.reason); externalSignal?.addEventListener("abort", abort, { once: true }); this.controller.signal.addEventListener("abort", abort, { once: true }); - const options = { ...__classPrivateFieldGet2(this, _AgentSessionStream_options, "f"), signal: this.controller.signal }; + const options = { ...__classPrivateFieldGet(this, _AgentSessionStream_options, "f"), signal: this.controller.signal }; const state2 = new TurnState(); try { if (externalSignal?.aborted) { this.abort(externalSignal.reason); } - __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); - const session = await __classPrivateFieldGet2(this, _AgentSessionStream_sessions, "f").retrieve(__classPrivateFieldGet2(this, _AgentSessionStream_sessionID, "f"), options); + __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); + const session = await __classPrivateFieldGet(this, _AgentSessionStream_sessions, "f").retrieve(__classPrivateFieldGet(this, _AgentSessionStream_sessionID, "f"), options); if (session.status !== "idle") { throw new OpenAIError("sessions.stream requires an idle session; use sessions.events.stream for active sessions"); } - const subscription = await __classPrivateFieldGet2(this, _AgentSessionStream_sessions, "f").events.stream(__classPrivateFieldGet2(this, _AgentSessionStream_sessionID, "f"), options).withResponse(); - __classPrivateFieldSet2(this, _AgentSessionStream_stream, subscription.data, "f"); - __classPrivateFieldSet2(this, _AgentSessionStream_response, subscription.response, "f"); - __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); - await __classPrivateFieldGet2(this, _AgentSessionStream_sessions, "f").events.create(__classPrivateFieldGet2(this, _AgentSessionStream_sessionID, "f"), { - events: [__classPrivateFieldGet2(this, _AgentSessionStream_input, "f")], + const subscription = await __classPrivateFieldGet(this, _AgentSessionStream_sessions, "f").events.stream(__classPrivateFieldGet(this, _AgentSessionStream_sessionID, "f"), options).withResponse(); + __classPrivateFieldSet(this, _AgentSessionStream_stream, subscription.data, "f"); + __classPrivateFieldSet(this, _AgentSessionStream_response, subscription.response, "f"); + __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); + await __classPrivateFieldGet(this, _AgentSessionStream_sessions, "f").events.create(__classPrivateFieldGet(this, _AgentSessionStream_sessionID, "f"), { + events: [__classPrivateFieldGet(this, _AgentSessionStream_input, "f")], // Spread creates an own data property without invoking inherited setters or changing the object prototype. - ...__classPrivateFieldGet2(this, _AgentSessionStream_inputKey, "f") === void 0 ? {} : { "Idempotency-Key": __classPrivateFieldGet2(this, _AgentSessionStream_inputKey, "f") } + ...__classPrivateFieldGet(this, _AgentSessionStream_inputKey, "f") === void 0 ? {} : { "Idempotency-Key": __classPrivateFieldGet(this, _AgentSessionStream_inputKey, "f") } }, { ...options, - headers: buildHeaders2([options.headers, { "Idempotency-Key": __classPrivateFieldGet2(this, _AgentSessionStream_inputKey, "f") ?? null }]) + headers: buildHeaders([options.headers, { "Idempotency-Key": __classPrivateFieldGet(this, _AgentSessionStream_inputKey, "f") ?? null }]) }); - __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); - __classPrivateFieldSet2(this, _AgentSessionStream_reading, true, "f"); - for await (const event of __classPrivateFieldGet2(this, _AgentSessionStream_stream, "f")) { - __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); + __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); + __classPrivateFieldSet(this, _AgentSessionStream_reading, true, "f"); + for await (const event of __classPrivateFieldGet(this, _AgentSessionStream_stream, "f")) { + __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); if (!state2.accept(event)) { continue; } const terminal = state2.terminal(event); const pendingCall = state2.call(event); - const handler = pendingCall && __classPrivateFieldGet2(this, _AgentSessionStream_handlers, "f").get(pendingCall.name); + const handler = pendingCall && __classPrivateFieldGet(this, _AgentSessionStream_handlers, "f").get(pendingCall.name); const call = pendingCall && handler ? structuredClone(pendingCall) : void 0; if (terminal) { - __classPrivateFieldGet2(this, _AgentSessionStream_stream, "f").controller.abort(); + __classPrivateFieldGet(this, _AgentSessionStream_stream, "f").controller.abort(); } yield event; if (terminal) { return; } - __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); + __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); if (!call || !handler) { continue; } - const result = await __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_result).call(this, call, handler); - __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); - await __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_submit).call(this, result, options); + const result = await __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_result).call(this, call, handler); + __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); + await __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_submit).call(this, result, options); } - __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); + __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); throw new OpenAIError("Session event stream ended before the turn reached idle or failed"); } finally { externalSignal?.removeEventListener("abort", abort); @@ -31446,12 +13625,12 @@ var init_agent_session_stream = __esm({ }, _AgentSessionStream_result = async function _AgentSessionStream_result2(call, handler) { try { const args = typeof call.arguments === "string" ? JSON.parse(call.arguments) : call.arguments; - if (!isObj2(args)) { + if (!isObj(args)) { throw new OpenAIError("Function arguments must be a JSON object"); } - return toolResult(call, await __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_wait).call(this, () => handler(args))); + return toolResult(call, await __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_wait).call(this, () => handler(args))); } catch { - __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); + __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); return { type: "agent.session.input.tool_result", turn_id: call.turn_id, @@ -31462,10 +13641,10 @@ var init_agent_session_stream = __esm({ } }, _AgentSessionStream_checkAbort = function _AgentSessionStream_checkAbort2() { if (this.controller.signal.aborted) { - throw __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_abortError).call(this); + throw __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_abortError).call(this); } }, _AgentSessionStream_abortError = function _AgentSessionStream_abortError2() { - const error = new APIUserAbortError2(); + const error = new APIUserAbortError(); Object.defineProperty(error, "cause", { value: this.controller.signal.reason, writable: true, @@ -31475,11 +13654,11 @@ var init_agent_session_stream = __esm({ }, _AgentSessionStream_wait = async function _AgentSessionStream_wait2(action) { let onAbort; const aborted = new Promise((_resolve, reject2) => { - onAbort = () => reject2(__classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_abortError).call(this)); + onAbort = () => reject2(__classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_abortError).call(this)); this.controller.signal.addEventListener("abort", onAbort, { once: true }); }); try { - __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); + __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); const invoke = async () => await action(); return await Promise.race([invoke(), aborted]); } finally { @@ -31487,18 +13666,18 @@ var init_agent_session_stream = __esm({ this.controller.signal.removeEventListener("abort", onAbort); } } - }, _AgentSessionStream_submit = async function _AgentSessionStream_submit2(result, options, key = uuid42(), attempt = 0) { - __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); + }, _AgentSessionStream_submit = async function _AgentSessionStream_submit2(result, options, key = uuid4(), attempt = 0) { + __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); try { - await __classPrivateFieldGet2(this, _AgentSessionStream_sessions, "f").events.create(__classPrivateFieldGet2(this, _AgentSessionStream_sessionID, "f"), { events: [result], "Idempotency-Key": key }, options); + await __classPrivateFieldGet(this, _AgentSessionStream_sessions, "f").events.create(__classPrivateFieldGet(this, _AgentSessionStream_sessionID, "f"), { events: [result], "Idempotency-Key": key }, options); } catch (error) { const delay = [100, 300, 600][attempt]; - if (delay === void 0 || !(error instanceof BadRequestError2) || error.code !== "invalid_request_error" || !error.error || !("message" in error.error) || error.error.message !== `Unknown pending tool call: ${result.call_id}`) { + if (delay === void 0 || !(error instanceof BadRequestError) || error.code !== "invalid_request_error" || !error.error || !("message" in error.error) || error.error.message !== `Unknown pending tool call: ${result.call_id}`) { throw error; } let timer; try { - await __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_wait).call(this, () => ( + await __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_wait).call(this, () => ( // oxlint-disable-next-line promise/avoid-new -- Own the registration timer so cancellation clears it promptly. new Promise((resolve2) => { timer = setTimeout(resolve2, delay); @@ -31509,7 +13688,7 @@ var init_agent_session_stream = __esm({ clearTimeout(timer); } } - await __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_submit2).call(this, result, options, key, attempt + 1); + await __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_submit2).call(this, result, options, key, attempt + 1); } }; } @@ -31519,11 +13698,11 @@ var init_agent_session_stream = __esm({ var Artifacts; var init_artifacts = __esm({ "node_modules/openai/resources/beta/agents/sessions/artifacts.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Artifacts = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Artifacts = class extends APIResource { /** * Retrieves immutable metadata for one durable session artifact. See * [session artifacts](https://developers.openai.com/api/docs/guides/agents-api/environments/files#openai-hosted-artifacts). @@ -31539,9 +13718,9 @@ var init_artifacts = __esm({ */ retrieve(artifactID, params, options) { const { session_id } = params; - return this._client.get(path3`/agents/sessions/${session_id}/artifacts/${artifactID}`, { + return this._client.get(path`/agents/sessions/${session_id}/artifacts/${artifactID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31560,10 +13739,10 @@ var init_artifacts = __esm({ * ``` */ list(sessionID, query = {}, options) { - return this._client.getAPIList(path3`/agents/sessions/${sessionID}/artifacts`, CursorPage, { + return this._client.getAPIList(path`/agents/sessions/${sessionID}/artifacts`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31583,9 +13762,9 @@ var init_artifacts = __esm({ */ delete(artifactID, params, options) { const { session_id } = params; - return this._client.delete(path3`/agents/sessions/${session_id}/artifacts/${artifactID}`, { + return this._client.delete(path`/agents/sessions/${session_id}/artifacts/${artifactID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31608,9 +13787,9 @@ var init_artifacts = __esm({ */ content(artifactID, params, options) { const { session_id } = params; - return this._client.get(path3`/agents/sessions/${session_id}/artifacts/${artifactID}/content`, { + return this._client.get(path`/agents/sessions/${session_id}/artifacts/${artifactID}/content`, { ...options, - headers: buildHeaders2([ + headers: buildHeaders([ { "OpenAI-Beta": "agents=v1", Accept: "application/octet-stream" }, options?.headers ]), @@ -31623,13 +13802,13 @@ var init_artifacts = __esm({ }); // node_modules/openai/resources/beta/agents/sessions/events.mjs -var Events3; -var init_events3 = __esm({ +var Events; +var init_events = __esm({ "node_modules/openai/resources/beta/agents/sessions/events.mjs"() { - init_resource2(); - init_headers3(); - init_path2(); - Events3 = class extends APIResource2 { + init_resource(); + init_headers(); + init_path(); + Events = class extends APIResource { /** * Submits message, cancellation, or tool-result events to a managed agent session. * Cancellation can recover a still-open turn whose backend execution has ended by @@ -31660,10 +13839,10 @@ var init_events3 = __esm({ */ create(sessionID, params, options) { const { "Idempotency-Key": idempotencyKey, ...body } = params; - return this._client.post(path3`/agents/sessions/${sessionID}/events`, { + return this._client.post(path`/agents/sessions/${sessionID}/events`, { body, ...options, - headers: buildHeaders2([ + headers: buildHeaders([ { "OpenAI-Beta": "agents=v1", Accept: "*/*", @@ -31687,9 +13866,9 @@ var init_events3 = __esm({ * ``` */ stream(sessionID, options) { - return this._client.get(path3`/agents/sessions/${sessionID}/events`, { + return this._client.get(path`/agents/sessions/${sessionID}/events`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1", Accept: "text/event-stream" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1", Accept: "text/event-stream" }, options?.headers]), stream: true, __security: { bearerAuth: true } }); @@ -31702,11 +13881,11 @@ var init_events3 = __esm({ var Items; var init_items = __esm({ "node_modules/openai/resources/beta/agents/sessions/items.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Items = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Items = class extends APIResource { /** * Lists items produced by the session's root agent, including its interactions * with subagents. Each subagent has its own item history. See @@ -31723,10 +13902,10 @@ var init_items = __esm({ * ``` */ list(sessionID, query = {}, options) { - return this._client.getAPIList(path3`/agents/sessions/${sessionID}/items`, CursorPage, { + return this._client.getAPIList(path`/agents/sessions/${sessionID}/items`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31738,11 +13917,11 @@ var init_items = __esm({ var Turns; var init_turns = __esm({ "node_modules/openai/resources/beta/agents/sessions/turns.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Turns = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Turns = class extends APIResource { /** * Retrieves a turn's current status, timestamps, usage, and error. Returns 404 if * the turn does not belong to the session. See @@ -31759,9 +13938,9 @@ var init_turns = __esm({ */ retrieve(turnID, params, options) { const { session_id } = params; - return this._client.get(path3`/agents/sessions/${session_id}/turns/${turnID}`, { + return this._client.get(path`/agents/sessions/${session_id}/turns/${turnID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31781,10 +13960,10 @@ var init_turns = __esm({ * ``` */ list(sessionID, query = {}, options) { - return this._client.getAPIList(path3`/agents/sessions/${sessionID}/turns`, CursorPage, { + return this._client.getAPIList(path`/agents/sessions/${sessionID}/turns`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31796,11 +13975,11 @@ var init_turns = __esm({ var Items2; var init_items2 = __esm({ "node_modules/openai/resources/beta/agents/sessions/subagents/items.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Items2 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Items2 = class extends APIResource { /** * Lists this subagent's own items across all of its turns. See * [subagent workflows](https://developers.openai.com/api/docs/guides/agents-api/multi-agent). @@ -31818,10 +13997,10 @@ var init_items2 = __esm({ */ list(subagentID, params, options) { const { session_id, ...query } = params; - return this._client.getAPIList(path3`/agents/sessions/${session_id}/subagents/${subagentID}/items`, CursorPage, { + return this._client.getAPIList(path`/agents/sessions/${session_id}/subagents/${subagentID}/items`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31833,11 +14012,11 @@ var init_items2 = __esm({ var Items3; var init_items3 = __esm({ "node_modules/openai/resources/beta/agents/sessions/subagents/turns/items.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Items3 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Items3 = class extends APIResource { /** * Lists items belonging to one turn of this subagent. See * [subagent workflows](https://developers.openai.com/api/docs/guides/agents-api/multi-agent). @@ -31855,10 +14034,10 @@ var init_items3 = __esm({ */ list(turnID, params, options) { const { session_id, subagent_id, ...query } = params; - return this._client.getAPIList(path3`/agents/sessions/${session_id}/subagents/${subagent_id}/turns/${turnID}/items`, CursorPage, { + return this._client.getAPIList(path`/agents/sessions/${session_id}/subagents/${subagent_id}/turns/${turnID}/items`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31870,13 +14049,13 @@ var init_items3 = __esm({ var Turns2; var init_turns2 = __esm({ "node_modules/openai/resources/beta/agents/sessions/subagents/turns/turns.mjs"() { - init_resource2(); + init_resource(); init_items3(); init_items3(); - init_pagination2(); - init_headers3(); - init_path2(); - Turns2 = class extends APIResource2 { + init_pagination(); + init_headers(); + init_path(); + Turns2 = class extends APIResource { constructor() { super(...arguments); this.items = new Items3(this._client); @@ -31899,9 +14078,9 @@ var init_turns2 = __esm({ */ retrieve(turnID, params, options) { const { session_id, subagent_id } = params; - return this._client.get(path3`/agents/sessions/${session_id}/subagents/${subagent_id}/turns/${turnID}`, { + return this._client.get(path`/agents/sessions/${session_id}/subagents/${subagent_id}/turns/${turnID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31922,10 +14101,10 @@ var init_turns2 = __esm({ */ list(subagentID, params, options) { const { session_id, ...query } = params; - return this._client.getAPIList(path3`/agents/sessions/${session_id}/subagents/${subagentID}/turns`, CursorPage, { + return this._client.getAPIList(path`/agents/sessions/${session_id}/subagents/${subagentID}/turns`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31938,15 +14117,15 @@ var init_turns2 = __esm({ var Subagents; var init_subagents = __esm({ "node_modules/openai/resources/beta/agents/sessions/subagents/subagents.mjs"() { - init_resource2(); + init_resource(); init_items2(); init_items2(); init_turns2(); init_turns2(); - init_pagination2(); - init_headers3(); - init_path2(); - Subagents = class extends APIResource2 { + init_pagination(); + init_headers(); + init_path(); + Subagents = class extends APIResource { constructor() { super(...arguments); this.items = new Items2(this._client); @@ -31967,9 +14146,9 @@ var init_subagents = __esm({ */ retrieve(subagentID, params, options) { const { session_id } = params; - return this._client.get(path3`/agents/sessions/${session_id}/subagents/${subagentID}`, { + return this._client.get(path`/agents/sessions/${session_id}/subagents/${subagentID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31988,10 +14167,10 @@ var init_subagents = __esm({ * ``` */ list(sessionID, query = {}, options) { - return this._client.getAPIList(path3`/agents/sessions/${sessionID}/subagents`, CursorPage, { + return this._client.getAPIList(path`/agents/sessions/${sessionID}/subagents`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32002,31 +14181,31 @@ var init_subagents = __esm({ }); // node_modules/openai/resources/beta/agents/sessions/sessions.mjs -var Sessions3; -var init_sessions3 = __esm({ +var Sessions2; +var init_sessions2 = __esm({ "node_modules/openai/resources/beta/agents/sessions/sessions.mjs"() { init_agent_session_stream(); - init_resource2(); + init_resource(); init_artifacts(); init_artifacts(); - init_events3(); - init_events3(); + init_events(); + init_events(); init_items(); init_items(); init_turns(); init_turns(); init_subagents(); init_subagents(); - init_pagination2(); - init_headers3(); - init_path2(); - Sessions3 = class extends APIResource2 { + init_pagination(); + init_headers(); + init_path(); + Sessions2 = class extends APIResource { constructor() { super(...arguments); this.subagents = new Subagents(this._client); this.artifacts = new Artifacts(this._client); this.items = new Items(this._client); - this.events = new Events3(this._client); + this.events = new Events(this._client); this.turns = new Turns(this._client); } /** Stream one turn on an idle session with a single input writer. See AgentSessionStream for lifecycle and tool handling. */ @@ -32037,7 +14216,7 @@ var init_sessions3 = __esm({ return this._client.post("/agents/sessions", { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), stream: body.stream ?? false, __security: { bearerAuth: true } }); @@ -32053,9 +14232,9 @@ var init_sessions3 = __esm({ * ``` */ retrieve(sessionID, options) { - return this._client.get(path3`/agents/sessions/${sessionID}`, { + return this._client.get(path`/agents/sessions/${sessionID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32071,10 +14250,10 @@ var init_sessions3 = __esm({ * ``` */ update(sessionID, body = {}, options) { - return this._client.post(path3`/agents/sessions/${sessionID}`, { + return this._client.post(path`/agents/sessions/${sessionID}`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32095,7 +14274,7 @@ var init_sessions3 = __esm({ return this._client.getAPIList("/agents/sessions", CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32113,30 +14292,30 @@ var init_sessions3 = __esm({ * ``` */ delete(sessionID, options) { - return this._client.delete(path3`/agents/sessions/${sessionID}`, { + return this._client.delete(path`/agents/sessions/${sessionID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } }; - Sessions3.Subagents = Subagents; - Sessions3.Artifacts = Artifacts; - Sessions3.Items = Items; - Sessions3.Events = Events3; - Sessions3.Turns = Turns; + Sessions2.Subagents = Subagents; + Sessions2.Artifacts = Artifacts; + Sessions2.Items = Items; + Sessions2.Events = Events; + Sessions2.Turns = Turns; } }); // node_modules/openai/resources/beta/agents/vaults/credentials.mjs -var Credentials2; -var init_credentials3 = __esm({ +var Credentials; +var init_credentials = __esm({ "node_modules/openai/resources/beta/agents/vaults/credentials.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Credentials2 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Credentials = class extends APIResource { /** * Creates a vault credential. Secret values are write-only and are never returned. * See @@ -32159,10 +14338,10 @@ var init_credentials3 = __esm({ * ``` */ create(vaultID, body, options) { - return this._client.post(path3`/vaults/${vaultID}/credentials`, { + return this._client.post(path`/vaults/${vaultID}/credentials`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32181,9 +14360,9 @@ var init_credentials3 = __esm({ */ retrieve(credentialID, params, options) { const { vault_id } = params; - return this._client.get(path3`/vaults/${vault_id}/credentials/${credentialID}`, { + return this._client.get(path`/vaults/${vault_id}/credentials/${credentialID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32206,10 +14385,10 @@ var init_credentials3 = __esm({ */ update(credentialID, params, options) { const { vault_id, ...body } = params; - return this._client.post(path3`/vaults/${vault_id}/credentials/${credentialID}`, { + return this._client.post(path`/vaults/${vault_id}/credentials/${credentialID}`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32229,10 +14408,10 @@ var init_credentials3 = __esm({ * ``` */ list(vaultID, query = {}, options) { - return this._client.getAPIList(path3`/vaults/${vaultID}/credentials`, CursorPage, { + return this._client.getAPIList(path`/vaults/${vaultID}/credentials`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32251,9 +14430,9 @@ var init_credentials3 = __esm({ */ delete(credentialID, params, options) { const { vault_id } = params; - return this._client.delete(path3`/vaults/${vault_id}/credentials/${credentialID}`, { + return this._client.delete(path`/vaults/${vault_id}/credentials/${credentialID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32262,19 +14441,19 @@ var init_credentials3 = __esm({ }); // node_modules/openai/resources/beta/agents/vaults/vaults.mjs -var Vaults2; -var init_vaults2 = __esm({ +var Vaults; +var init_vaults = __esm({ "node_modules/openai/resources/beta/agents/vaults/vaults.mjs"() { - init_resource2(); - init_credentials3(); - init_credentials3(); - init_pagination2(); - init_headers3(); - init_path2(); - Vaults2 = class extends APIResource2 { + init_resource(); + init_credentials(); + init_credentials(); + init_pagination(); + init_headers(); + init_path(); + Vaults = class extends APIResource { constructor() { super(...arguments); - this.credentials = new Credentials2(this._client); + this.credentials = new Credentials(this._client); } /** * Creates a vault for the current project. See @@ -32289,7 +14468,7 @@ var init_vaults2 = __esm({ return this._client.post("/vaults", { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32305,9 +14484,9 @@ var init_vaults2 = __esm({ * ``` */ retrieve(vaultID, options) { - return this._client.get(path3`/vaults/${vaultID}`, { + return this._client.get(path`/vaults/${vaultID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32327,7 +14506,7 @@ var init_vaults2 = __esm({ return this._client.getAPIList("/vaults", CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32343,37 +14522,37 @@ var init_vaults2 = __esm({ * ``` */ delete(vaultID, options) { - return this._client.delete(path3`/vaults/${vaultID}`, { + return this._client.delete(path`/vaults/${vaultID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } }; - Vaults2.Credentials = Credentials2; + Vaults.Credentials = Credentials; } }); // node_modules/openai/resources/beta/agents/agents.mjs -var Agents2; -var init_agents2 = __esm({ +var Agents; +var init_agents = __esm({ "node_modules/openai/resources/beta/agents/agents.mjs"() { - init_resource2(); - init_environments2(); - init_environments2(); - init_sessions3(); - init_sessions3(); - init_vaults2(); - init_vaults2(); - init_pagination2(); - init_headers3(); - init_path2(); - Agents2 = class extends APIResource2 { + init_resource(); + init_environments(); + init_environments(); + init_sessions2(); + init_sessions2(); + init_vaults(); + init_vaults(); + init_pagination(); + init_headers(); + init_path(); + Agents = class extends APIResource { constructor() { super(...arguments); - this.environments = new Environments2(this._client); - this.vaults = new Vaults2(this._client); - this.sessions = new Sessions3(this._client); + this.environments = new Environments(this._client); + this.vaults = new Vaults(this._client); + this.sessions = new Sessions2(this._client); } /** * Creates a reusable agent without storing credentials. See @@ -32390,7 +14569,7 @@ var init_agents2 = __esm({ return this._client.post("/agents", { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32404,9 +14583,9 @@ var init_agents2 = __esm({ * ``` */ retrieve(agentID, options) { - return this._client.get(path3`/agents/${agentID}`, { + return this._client.get(path`/agents/${agentID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32420,10 +14599,10 @@ var init_agents2 = __esm({ * ``` */ update(agentID, body = {}, options) { - return this._client.post(path3`/agents/${agentID}`, { + return this._client.post(path`/agents/${agentID}`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32443,7 +14622,7 @@ var init_agents2 = __esm({ return this._client.getAPIList("/agents", CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32459,27 +14638,27 @@ var init_agents2 = __esm({ * ``` */ delete(agentID, options) { - return this._client.delete(path3`/agents/${agentID}`, { + return this._client.delete(path`/agents/${agentID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } }; - Agents2.Environments = Environments2; - Agents2.Vaults = Vaults2; - Agents2.Sessions = Sessions3; + Agents.Environments = Environments; + Agents.Vaults = Vaults; + Agents.Sessions = Sessions2; } }); // node_modules/openai/resources/beta/chatkit/sessions.mjs -var Sessions4; -var init_sessions4 = __esm({ +var Sessions3; +var init_sessions3 = __esm({ "node_modules/openai/resources/beta/chatkit/sessions.mjs"() { - init_resource2(); - init_headers3(); - init_path2(); - Sessions4 = class extends APIResource2 { + init_resource(); + init_headers(); + init_path(); + Sessions3 = class extends APIResource { /** * Create a ChatKit session. * @@ -32496,7 +14675,7 @@ var init_sessions4 = __esm({ return this._client.post("/chatkit/sessions", { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32512,9 +14691,9 @@ var init_sessions4 = __esm({ * ``` */ cancel(sessionID, options) { - return this._client.post(path3`/chatkit/sessions/${sessionID}/cancel`, { + return this._client.post(path`/chatkit/sessions/${sessionID}/cancel`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32523,14 +14702,14 @@ var init_sessions4 = __esm({ }); // node_modules/openai/resources/beta/chatkit/threads.mjs -var Threads2; -var init_threads2 = __esm({ +var Threads; +var init_threads = __esm({ "node_modules/openai/resources/beta/chatkit/threads.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Threads2 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Threads = class extends APIResource { /** * Retrieve a ChatKit thread by its identifier. * @@ -32541,9 +14720,9 @@ var init_threads2 = __esm({ * ``` */ retrieve(threadID, options) { - return this._client.get(path3`/chatkit/threads/${threadID}`, { + return this._client.get(path`/chatkit/threads/${threadID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32562,7 +14741,7 @@ var init_threads2 = __esm({ return this._client.getAPIList("/chatkit/threads", ConversationCursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32577,9 +14756,9 @@ var init_threads2 = __esm({ * ``` */ delete(threadID, options) { - return this._client.delete(path3`/chatkit/threads/${threadID}`, { + return this._client.delete(path`/chatkit/threads/${threadID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32597,10 +14776,10 @@ var init_threads2 = __esm({ * ``` */ listItems(threadID, query = {}, options) { - return this._client.getAPIList(path3`/chatkit/threads/${threadID}/items`, ConversationCursorPage, { + return this._client.getAPIList(path`/chatkit/threads/${threadID}/items`, ConversationCursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32612,20 +14791,20 @@ var init_threads2 = __esm({ var ChatKit; var init_chatkit = __esm({ "node_modules/openai/resources/beta/chatkit/chatkit.mjs"() { - init_resource2(); - init_sessions4(); - init_sessions4(); - init_threads2(); - init_threads2(); - ChatKit = class extends APIResource2 { + init_resource(); + init_sessions3(); + init_sessions3(); + init_threads(); + init_threads(); + ChatKit = class extends APIResource { constructor() { super(...arguments); - this.sessions = new Sessions4(this._client); - this.threads = new Threads2(this._client); + this.sessions = new Sessions3(this._client); + this.threads = new Threads(this._client); } }; - ChatKit.Sessions = Sessions4; - ChatKit.Threads = Threads2; + ChatKit.Sessions = Sessions3; + ChatKit.Threads = Threads; } }); @@ -32633,11 +14812,11 @@ var init_chatkit = __esm({ var InputItems; var init_input_items = __esm({ "node_modules/openai/resources/beta/responses/input-items.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - InputItems = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + InputItems = class extends APIResource { /** * Returns a list of input items for a given response. * @@ -32653,10 +14832,10 @@ var init_input_items = __esm({ */ list(responseID, params = {}, options) { const { betas, ...query } = params ?? {}; - return this._client.getAPIList(path3`/responses/${responseID}/input_items?beta=true`, CursorPage, { + return this._client.getAPIList(path`/responses/${responseID}/input_items?beta=true`, CursorPage, { query, ...options, - headers: buildHeaders2([ + headers: buildHeaders([ { ...betas?.toString() != null ? { "openai-beta": betas?.toString() } : void 0 }, options?.headers ]), @@ -32671,9 +14850,9 @@ var init_input_items = __esm({ var InputTokens; var init_input_tokens = __esm({ "node_modules/openai/resources/beta/responses/input-tokens.mjs"() { - init_resource2(); - init_headers3(); - InputTokens = class extends APIResource2 { + init_resource(); + init_headers(); + InputTokens = class extends APIResource { /** * Returns input token counts of the request. * @@ -32691,7 +14870,7 @@ var init_input_tokens = __esm({ return this._client.post("/responses/input_tokens?beta=true", { body, ...options, - headers: buildHeaders2([ + headers: buildHeaders([ { ...betas?.toString() != null ? { "openai-beta": betas?.toString() } : void 0 }, options?.headers ]), @@ -32706,14 +14885,14 @@ var init_input_tokens = __esm({ var Responses; var init_responses = __esm({ "node_modules/openai/resources/beta/responses/responses.mjs"() { - init_resource2(); + init_resource(); init_input_items(); init_input_items(); init_input_tokens(); init_input_tokens(); - init_headers3(); - init_path2(); - Responses = class extends APIResource2 { + init_headers(); + init_path(); + Responses = class extends APIResource { constructor() { super(...arguments); this.inputItems = new InputItems(this._client); @@ -32724,7 +14903,7 @@ var init_responses = __esm({ return this._client.post("/responses?beta=true", { body, ...options, - headers: buildHeaders2([ + headers: buildHeaders([ { ...betas?.toString() != null ? { "openai-beta": betas?.toString() } : void 0 }, options?.headers ]), @@ -32734,10 +14913,10 @@ var init_responses = __esm({ } retrieve(responseID, params = {}, options) { const { betas, ...query } = params ?? {}; - return this._client.get(path3`/responses/${responseID}?beta=true`, { + return this._client.get(path`/responses/${responseID}?beta=true`, { query, ...options, - headers: buildHeaders2([ + headers: buildHeaders([ { ...betas?.toString() != null ? { "openai-beta": betas?.toString() } : void 0 }, options?.headers ]), @@ -32757,9 +14936,9 @@ var init_responses = __esm({ */ delete(responseID, params = {}, options) { const { betas } = params ?? {}; - return this._client.delete(path3`/responses/${responseID}?beta=true`, { + return this._client.delete(path`/responses/${responseID}?beta=true`, { ...options, - headers: buildHeaders2([ + headers: buildHeaders([ { Accept: "*/*", ...betas?.toString() != null ? { "openai-beta": betas?.toString() } : void 0 }, options?.headers ]), @@ -32780,9 +14959,9 @@ var init_responses = __esm({ */ cancel(responseID, params = {}, options) { const { betas } = params ?? {}; - return this._client.post(path3`/responses/${responseID}/cancel?beta=true`, { + return this._client.post(path`/responses/${responseID}/cancel?beta=true`, { ...options, - headers: buildHeaders2([ + headers: buildHeaders([ { ...betas?.toString() != null ? { "openai-beta": betas?.toString() } : void 0 }, options?.headers ]), @@ -32810,7 +14989,7 @@ var init_responses = __esm({ return this._client.post("/responses/compact?beta=true", { body, ...options, - headers: buildHeaders2([ + headers: buildHeaders([ { ...betas?.toString() != null ? { "openai-beta": betas?.toString() } : void 0 }, options?.headers ]), @@ -32824,24 +15003,24 @@ var init_responses = __esm({ }); // node_modules/openai/resources/beta/threads/messages.mjs -var Messages4; -var init_messages4 = __esm({ +var Messages2; +var init_messages2 = __esm({ "node_modules/openai/resources/beta/threads/messages.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Messages4 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Messages2 = class extends APIResource { /** * Create a message. * * @deprecated The Assistants API is deprecated in favor of the Responses API */ create(threadID, body, options) { - return this._client.post(path3`/threads/${threadID}/messages`, { + return this._client.post(path`/threads/${threadID}/messages`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32852,9 +15031,9 @@ var init_messages4 = __esm({ */ retrieve(messageID, params, options) { const { thread_id } = params; - return this._client.get(path3`/threads/${thread_id}/messages/${messageID}`, { + return this._client.get(path`/threads/${thread_id}/messages/${messageID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32865,10 +15044,10 @@ var init_messages4 = __esm({ */ update(messageID, params, options) { const { thread_id, ...body } = params; - return this._client.post(path3`/threads/${thread_id}/messages/${messageID}`, { + return this._client.post(path`/threads/${thread_id}/messages/${messageID}`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32878,10 +15057,10 @@ var init_messages4 = __esm({ * @deprecated The Assistants API is deprecated in favor of the Responses API */ list(threadID, query = {}, options) { - return this._client.getAPIList(path3`/threads/${threadID}/messages`, CursorPage, { + return this._client.getAPIList(path`/threads/${threadID}/messages`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32892,9 +15071,9 @@ var init_messages4 = __esm({ */ delete(messageID, params, options) { const { thread_id } = params; - return this._client.delete(path3`/threads/${thread_id}/messages/${messageID}`, { + return this._client.delete(path`/threads/${thread_id}/messages/${messageID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32906,11 +15085,11 @@ var init_messages4 = __esm({ var Steps; var init_steps = __esm({ "node_modules/openai/resources/beta/threads/runs/steps.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Steps = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Steps = class extends APIResource { /** * Retrieves a run step. * @@ -32918,10 +15097,10 @@ var init_steps = __esm({ */ retrieve(stepID, params, options) { const { thread_id, run_id, ...query } = params; - return this._client.get(path3`/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, { + return this._client.get(path`/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32932,10 +15111,10 @@ var init_steps = __esm({ */ list(runID, params, options) { const { thread_id, ...query } = params; - return this._client.getAPIList(path3`/threads/${thread_id}/runs/${runID}/steps`, CursorPage, { + return this._client.getAPIList(path`/threads/${thread_id}/runs/${runID}/steps`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32944,12 +15123,12 @@ var init_steps = __esm({ }); // node_modules/openai/internal/utils/base64.mjs -var fromBase642, toFloat32Array; -var init_base642 = __esm({ +var fromBase64, toFloat32Array; +var init_base64 = __esm({ "node_modules/openai/internal/utils/base64.mjs"() { - init_error3(); - init_bytes2(); - fromBase642 = (str2) => { + init_error(); + init_bytes(); + fromBase64 = (str2) => { if (typeof globalThis.Buffer !== "undefined") { const buf = globalThis.Buffer.from(str2, "base64"); return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength); @@ -32985,10 +15164,10 @@ var init_base642 = __esm({ }); // node_modules/openai/internal/utils/env.mjs -var readEnv2; -var init_env2 = __esm({ +var readEnv; +var init_env = __esm({ "node_modules/openai/internal/utils/env.mjs"() { - readEnv2 = (env) => { + readEnv = (env) => { try { if (typeof globalThis.process !== "undefined") { return globalThis.process.env?.[env]?.trim() || void 0; @@ -33005,15 +15184,15 @@ var init_env2 = __esm({ }); // node_modules/openai/internal/utils.mjs -var init_utils4 = __esm({ +var init_utils2 = __esm({ "node_modules/openai/internal/utils.mjs"() { - init_values2(); - init_base642(); - init_env2(); - init_log2(); - init_uuid2(); - init_sleep2(); - init_query2(); + init_values(); + init_base64(); + init_env(); + init_log(); + init_uuid(); + init_sleep(); + init_query(); } }); @@ -33109,14 +15288,14 @@ function assertValidAssistantStreamArrayDelta(accumulator, delta, kind, projecti projection.arrays.set(accumulator, projectedArray); } for (const deltaEntry of delta) { - if (!isObj2(deltaEntry)) { + if (!isObj(deltaEntry)) { throw new Error("Expected array delta entry to be an object but got an invalid value"); } const validatedIndex = getAssistantStreamDeltaIndex(deltaEntry, kind, projectedArray.baselineLength); let accumulatedEntry; if (projectedArray.entries.has(validatedIndex)) { accumulatedEntry = projectedArray.entries.get(validatedIndex); - } else if (hasOwn2(accumulator, validatedIndex)) { + } else if (hasOwn(accumulator, validatedIndex)) { accumulatedEntry = accumulator[validatedIndex]; if (accumulatedEntry === null || accumulatedEntry === void 0) { projectedArray.entries.set(validatedIndex, deltaEntry); @@ -33129,7 +15308,7 @@ function assertValidAssistantStreamArrayDelta(accumulator, delta, kind, projecti if (projectedArray.enforceSparseHoleBudget && projectedLength - projectedArray.ownEntryCount > MAX_ASSISTANT_STREAM_ARRAY_GROWTH) { throw new OpenAIError(`Assistant stream delta contains an invalid ${kind} index: ${validatedIndex}`); } - if (isObj2(accumulatedEntry)) { + if (isObj(accumulatedEntry)) { validateRecord(accumulatedEntry, deltaEntry, projection); } projectedArray.length = projectedLength; @@ -33144,7 +15323,7 @@ function assertValidAssistantStreamDeltaIndices(accumulator, delta, projection) let accumulatedValue; if (projectedValues?.has(key)) { accumulatedValue = projectedValues.get(key); - } else if (hasOwn2(accumulator, key)) { + } else if (hasOwn(accumulator, key)) { accumulatedValue = accumulator[key]; } if (accumulatedValue === null || accumulatedValue === void 0) { @@ -33155,7 +15334,7 @@ function assertValidAssistantStreamDeltaIndices(accumulator, delta, projection) projectedValues.set(key, deltaValue); continue; } - if (isObj2(accumulatedValue) && isObj2(deltaValue)) { + if (isObj(accumulatedValue) && isObj(deltaValue)) { assertValidAssistantStreamDeltaIndices(accumulatedValue, deltaValue, projection); } else if (Array.isArray(accumulatedValue) && Array.isArray(deltaValue) && !isPrimitiveAssistantStreamArrayDelta(accumulatedValue, deltaValue)) { assertValidAssistantStreamArrayDelta(accumulatedValue, deltaValue, "array", projection, assertValidAssistantStreamDeltaIndices); @@ -33163,10 +15342,10 @@ function assertValidAssistantStreamDeltaIndices(accumulator, delta, projection) } } function isAssistantStreamValueExternallyMutable(value2) { - return (isObj2(value2) || Array.isArray(value2)) && externallyMutableAssistantStreamValues.has(value2); + return (isObj(value2) || Array.isArray(value2)) && externallyMutableAssistantStreamValues.has(value2); } function markAssistantStreamValueExternallyMutable(value2) { - if (!isObj2(value2) && !Array.isArray(value2) || externallyMutableAssistantStreamValues.has(value2)) { + if (!isObj(value2) && !Array.isArray(value2) || externallyMutableAssistantStreamValues.has(value2)) { return; } externallyMutableAssistantStreamValues.add(value2); @@ -33208,11 +15387,11 @@ function applyAssistantStreamArrayDelta(accumulator, delta, applyRecord) { return; } for (const deltaEntry of delta) { - if (!isObj2(deltaEntry)) { + if (!isObj(deltaEntry)) { throw new Error("Expected array delta entry to be an object but got an invalid value"); } const index = getRequiredAssistantStreamArrayIndex(deltaEntry); - if (hasOwn2(accumulator, index)) { + if (hasOwn(accumulator, index)) { const accumulatedEntry = accumulator[index]; if (accumulatedEntry === null || accumulatedEntry === void 0) { if (externallyMutableAssistantStreamValues.has(accumulator)) { @@ -33233,7 +15412,7 @@ function applyAssistantStreamDelta(accumulator, delta) { if (key === "__proto__" || key === "constructor" || key === "prototype") { throw new OpenAIError(`Assistant stream delta contains an unsafe property: ${key}`); } - if (!hasOwn2(accumulator, key)) { + if (!hasOwn(accumulator, key)) { if (externallyMutable) { markAssistantStreamValueExternallyMutable(deltaValue); } @@ -33256,7 +15435,7 @@ function applyAssistantStreamDelta(accumulator, delta) { accumulatedValue += deltaValue; } else if (typeof accumulatedValue === "number" && typeof deltaValue === "number") { accumulatedValue += deltaValue; - } else if (isObj2(accumulatedValue) && isObj2(deltaValue)) { + } else if (isObj(accumulatedValue) && isObj(deltaValue)) { accumulatedValue = applyAssistantStreamDelta(accumulatedValue, deltaValue); } else if (Array.isArray(accumulatedValue) && Array.isArray(deltaValue)) { applyAssistantStreamArrayDelta(accumulatedValue, deltaValue, applyAssistantStreamDelta); @@ -33269,7 +15448,7 @@ function applyAssistantStreamDelta(accumulator, delta) { return accumulator; } function assertSafeAssistantStreamDelta(value2) { - if (!isObj2(value2) && !Array.isArray(value2)) { + if (!isObj(value2) && !Array.isArray(value2)) { return; } for (const [key, nestedValue] of Object.entries(value2)) { @@ -33298,8 +15477,8 @@ function createAssistantStreamArrayDeltaCommit(accumulator, delta, kind, cacheAr var MAX_ASSISTANT_STREAM_ARRAY_GROWTH, MAX_EXTERNALLY_MUTABLE_ASSISTANT_STREAM_ARRAY_LENGTH, assistantStreamArrayStates, externallyMutableAssistantStreamValues; var init_assistant_stream_delta = __esm({ "node_modules/openai/internal/assistant-stream-delta.mjs"() { - init_error4(); - init_utils4(); + init_error2(); + init_utils2(); MAX_ASSISTANT_STREAM_ARRAY_GROWTH = 1024; MAX_EXTERNALLY_MUTABLE_ASSISTANT_STREAM_ARRAY_LENGTH = 65536; assistantStreamArrayStates = /* @__PURE__ */ new WeakMap(); @@ -33339,11 +15518,11 @@ function assertNever2(_x) { var _AssistantStream_instances, _AssistantStream_runStepSnapshots, _AssistantStream_runStepIDOwners, _AssistantStream_activeRunStepID, _AssistantStream_messageSnapshots, _AssistantStream_messageIDOwners, _AssistantStream_messageSnapshot, _AssistantStream_activeMessageID, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_validateRunStepEvent, _AssistantStream_reserveRunStepAlias, _AssistantStream_validateMessageEvent, _AssistantStream_reserveMessageAlias, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_emitExposed, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun, AssistantStream; var init_AssistantStream = __esm({ "node_modules/openai/lib/AssistantStream.mjs"() { - init_tslib2(); - init_streaming4(); - init_error4(); + init_tslib(); + init_streaming2(); + init_error2(); init_EventStream(); - init_utils4(); + init_utils2(); init_assistant_stream_delta(); AssistantStream = class _AssistantStream extends EventStream2 { constructor() { @@ -33382,18 +15561,18 @@ var init_AssistantStream = __esm({ async _fromReadableStream(readableStream, options) { this._listenForAbort(options?.signal); this._connected(); - const stream5 = Stream2.fromReadableStream(readableStream, this.controller); + const stream5 = Stream.fromReadableStream(readableStream, this.controller); for await (const event of stream5) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_addEvent).call(this, event); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_addEvent).call(this, event); } if (stream5.controller.signal?.aborted) { throw this._userAbortError(); } - return this._addRun(__classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_endRequest).call(this)); + return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_endRequest).call(this)); } /** Serializes assistant events into a readable stream for transfer to another runtime. */ toReadableStream() { - const stream5 = new Stream2(this[Symbol.asyncIterator].bind(this), this.controller); + const stream5 = new Stream(this[Symbol.asyncIterator].bind(this), this.controller); return stream5.toReadableStream(); } /** Submits tool outputs and starts streaming the continuation of an existing assistant run. */ @@ -33414,12 +15593,12 @@ var init_AssistantStream = __esm({ }); this._connected(); for await (const event of stream5) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_addEvent).call(this, event); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_addEvent).call(this, event); } if (stream5.controller.signal?.aborted) { throw this._userAbortError(); } - return this._addRun(__classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_endRequest).call(this)); + return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_endRequest).call(this)); } /** Creates an assistant thread and starts streaming its newly created run. */ static createThreadAssistantStream(params, thread, options) { @@ -33441,28 +15620,28 @@ var init_AssistantStream = __esm({ } /** Returns the most recent raw event, or `undefined` before any event arrives. */ currentEvent() { - markAssistantStreamValueExternallyMutable(__classPrivateFieldGet2(this, _AssistantStream_currentEvent, "f")); - return __classPrivateFieldGet2(this, _AssistantStream_currentEvent, "f"); + markAssistantStreamValueExternallyMutable(__classPrivateFieldGet(this, _AssistantStream_currentEvent, "f")); + return __classPrivateFieldGet(this, _AssistantStream_currentEvent, "f"); } /** Returns the latest run snapshot, or `undefined` before a run event arrives. */ currentRun() { - markAssistantStreamValueExternallyMutable(__classPrivateFieldGet2(this, _AssistantStream_currentRunSnapshot, "f")); - return __classPrivateFieldGet2(this, _AssistantStream_currentRunSnapshot, "f"); + markAssistantStreamValueExternallyMutable(__classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, "f")); + return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, "f"); } /** Returns the message currently being accumulated, or `undefined` before message creation. */ currentMessageSnapshot() { - markAssistantStreamValueExternallyMutable(__classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f")); - return __classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f"); + markAssistantStreamValueExternallyMutable(__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f")); + return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f"); } /** Returns the run step currently being accumulated, or `undefined` before a step begins. */ currentRunStepSnapshot() { - markAssistantStreamValueExternallyMutable(__classPrivateFieldGet2(this, _AssistantStream_currentRunStepSnapshot, "f")); - return __classPrivateFieldGet2(this, _AssistantStream_currentRunStepSnapshot, "f"); + markAssistantStreamValueExternallyMutable(__classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, "f")); + return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, "f"); } /** Waits for successful completion and returns the final snapshot of every observed run step. */ async finalRunSteps() { await this.done(); - return Object.values(__classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f")); + return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f")); } /** * Waits for successful completion and returns the final snapshot of every observed message. @@ -33470,15 +15649,15 @@ var init_AssistantStream = __esm({ */ async finalMessages() { await this.done(); - return Object.values(__classPrivateFieldGet2(this, _AssistantStream_messageSnapshots, "f")); + return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, "f")); } /** Waits for completion and returns the final run, or rejects if no terminal run was received. */ async finalRun() { await this.done(); - if (!__classPrivateFieldGet2(this, _AssistantStream_finalRun, "f")) { + if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, "f")) { throw new Error("Final run was not received."); } - return __classPrivateFieldGet2(this, _AssistantStream_finalRun, "f"); + return __classPrivateFieldGet(this, _AssistantStream_finalRun, "f"); } async _createThreadAssistantStream(thread, params, options) { this._listenForAbort(options?.signal); @@ -33486,12 +15665,12 @@ var init_AssistantStream = __esm({ const stream5 = await thread.createAndRun(body, { ...options, signal: this.controller.signal }); this._connected(); for await (const event of stream5) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_addEvent).call(this, event); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_addEvent).call(this, event); } if (stream5.controller.signal?.aborted) { throw this._userAbortError(); } - return this._addRun(__classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_endRequest).call(this)); + return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_endRequest).call(this)); } async _createAssistantStream(run2, threadId, params, options) { this._listenForAbort(options?.signal); @@ -33499,12 +15678,12 @@ var init_AssistantStream = __esm({ const stream5 = await run2.create(threadId, body, { ...options, signal: this.controller.signal }); this._connected(); for await (const event of stream5) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_addEvent).call(this, event); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_addEvent).call(this, event); } if (stream5.controller.signal?.aborted) { throw this._userAbortError(); } - return this._addRun(__classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_endRequest).call(this)); + return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_endRequest).call(this)); } /** * Applies an assistant delta to its mutable snapshot, concatenating text and @@ -33514,7 +15693,7 @@ var init_AssistantStream = __esm({ return accumulateAssistantStreamDelta(acc, delta); } _addRun(run2) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "run", run2); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "run", run2); return run2; } async _threadAssistantStream(params, thread, options) { @@ -33542,7 +15721,7 @@ var init_AssistantStream = __esm({ case "thread.message.delta": case "thread.message.completed": case "thread.message.incomplete": { - messageID = __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_validateMessageEvent).call(this, stableEvent); + messageID = __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_validateMessageEvent).call(this, stableEvent); messageData = stableEvent.data; break; } @@ -33553,21 +15732,21 @@ var init_AssistantStream = __esm({ case "thread.run.step.failed": case "thread.run.step.cancelled": case "thread.run.step.expired": { - runStepID = __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_validateRunStepEvent).call(this, stableEvent); + runStepID = __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_validateRunStepEvent).call(this, stableEvent); runStepData = stableEvent.data; break; } } - __classPrivateFieldSet2(this, _AssistantStream_currentEvent, exposedEvent, "f"); - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_handleEvent).call(this, exposedEvent); + __classPrivateFieldSet(this, _AssistantStream_currentEvent, exposedEvent, "f"); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_handleEvent).call(this, exposedEvent); if (messageID !== void 0 && messageData !== void 0) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_reserveMessageAlias).call(this, messageData, messageID); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_reserveMessageAlias).call(this, messageData, messageID); } if (runStepID !== void 0 && runStepData !== void 0) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_reserveRunStepAlias).call(this, runStepData, runStepID); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_reserveRunStepAlias).call(this, runStepData, runStepID); } - if (runStepID === void 0 && __classPrivateFieldGet2(this, _AssistantStream_activeRunStepID, "f") !== void 0 && __classPrivateFieldGet2(this, _AssistantStream_currentRunStepSnapshot, "f")) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_reserveRunStepAlias).call(this, __classPrivateFieldGet2(this, _AssistantStream_currentRunStepSnapshot, "f"), __classPrivateFieldGet2(this, _AssistantStream_activeRunStepID, "f")); + if (runStepID === void 0 && __classPrivateFieldGet(this, _AssistantStream_activeRunStepID, "f") !== void 0 && __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, "f")) { + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_reserveRunStepAlias).call(this, __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, "f"), __classPrivateFieldGet(this, _AssistantStream_activeRunStepID, "f")); } switch (stableEvent.event) { case "thread.created": { @@ -33583,7 +15762,7 @@ var init_AssistantStream = __esm({ case "thread.run.cancelling": case "thread.run.cancelled": case "thread.run.expired": { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_handleRun).call(this, stableEvent); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_handleRun).call(this, stableEvent); break; } case "thread.run.step.created": @@ -33596,15 +15775,15 @@ var init_AssistantStream = __esm({ if (runStepID === void 0) { throw new OpenAIError("Received assistant run-step event without a canonical run-step ID"); } - const activeRunStep = __classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f")[runStepID]; + const activeRunStep = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f")[runStepID]; if (activeRunStep) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_reserveRunStepAlias).call(this, activeRunStep, runStepID); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_reserveRunStepAlias).call(this, activeRunStep, runStepID); } - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_handleRunStep).call(this, stableEvent, runStepID); - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_reserveRunStepAlias).call(this, stableEvent.data, runStepID); - const retainedRunStep = __classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f")[runStepID]; + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_handleRunStep).call(this, stableEvent, runStepID); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_reserveRunStepAlias).call(this, stableEvent.data, runStepID); + const retainedRunStep = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f")[runStepID]; if (retainedRunStep) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_reserveRunStepAlias).call(this, retainedRunStep, runStepID); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_reserveRunStepAlias).call(this, retainedRunStep, runStepID); } break; } @@ -33613,21 +15792,21 @@ var init_AssistantStream = __esm({ case "thread.message.delta": case "thread.message.completed": case "thread.message.incomplete": { - if (messageID !== void 0 && __classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f")) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_reserveMessageAlias).call(this, __classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f"), messageID); + if (messageID !== void 0 && __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f")) { + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_reserveMessageAlias).call(this, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f"), messageID); } - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_handleMessage).call(this, stableEvent); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_handleMessage).call(this, stableEvent); if (messageID !== void 0) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_reserveMessageAlias).call(this, stableEvent.data, messageID); - const retainedMessage = __classPrivateFieldGet2(this, _AssistantStream_messageSnapshots, "f")[messageID]; + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_reserveMessageAlias).call(this, stableEvent.data, messageID); + const retainedMessage = __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, "f")[messageID]; if (retainedMessage) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_reserveMessageAlias).call(this, retainedMessage, messageID); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_reserveMessageAlias).call(this, retainedMessage, messageID); } } break; } case "error": { - throw new APIError2(void 0, stableEvent.data, void 0, void 0); + throw new APIError(void 0, stableEvent.data, void 0, void 0); } default: { assertNever2(stableEvent); @@ -33637,10 +15816,10 @@ var init_AssistantStream = __esm({ if (this.ended) { throw new OpenAIError(`stream has ended, this shouldn't happen`); } - if (!__classPrivateFieldGet2(this, _AssistantStream_finalRun, "f")) { + if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, "f")) { throw new Error("Final run has not been received"); } - return __classPrivateFieldGet2(this, _AssistantStream_finalRun, "f"); + return __classPrivateFieldGet(this, _AssistantStream_finalRun, "f"); }, _AssistantStream_validateRunStepEvent = function _AssistantStream_validateRunStepEvent2(event) { const descriptor = Object.getOwnPropertyDescriptor(event.data, "id"); const runStepID = descriptor && "value" in descriptor ? descriptor.value : void 0; @@ -33649,39 +15828,39 @@ var init_AssistantStream = __esm({ } if (event.event === "thread.run.step.delta") { const delta = event.data.delta; - if (delta && hasOwn2(delta, "id")) { + if (delta && hasOwn(delta, "id")) { throw new OpenAIError("Run-step deltas must not contain an id field"); } } if (event.event === "thread.run.step.created") { - if (__classPrivateFieldGet2(this, _AssistantStream_activeRunStepID, "f") !== void 0) { - throw new OpenAIError(`Received run-step creation for "${runStepID}" before the active run step "${__classPrivateFieldGet2(this, _AssistantStream_activeRunStepID, "f")}" reached a terminal state`); + if (__classPrivateFieldGet(this, _AssistantStream_activeRunStepID, "f") !== void 0) { + throw new OpenAIError(`Received run-step creation for "${runStepID}" before the active run step "${__classPrivateFieldGet(this, _AssistantStream_activeRunStepID, "f")}" reached a terminal state`); } - if (hasOwn2(__classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f"), runStepID) || __classPrivateFieldGet2(this, _AssistantStream_runStepIDOwners, "f").has(runStepID)) { + if (hasOwn(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f"), runStepID) || __classPrivateFieldGet(this, _AssistantStream_runStepIDOwners, "f").has(runStepID)) { throw new OpenAIError(`Received run-step creation for run step "${runStepID}", which has already been created`); } - __classPrivateFieldSet2(this, _AssistantStream_activeRunStepID, runStepID, "f"); - __classPrivateFieldGet2(this, _AssistantStream_runStepIDOwners, "f").set(runStepID, runStepID); + __classPrivateFieldSet(this, _AssistantStream_activeRunStepID, runStepID, "f"); + __classPrivateFieldGet(this, _AssistantStream_runStepIDOwners, "f").set(runStepID, runStepID); return runStepID; } - if (__classPrivateFieldGet2(this, _AssistantStream_activeRunStepID, "f") !== void 0) { - if (runStepID !== __classPrivateFieldGet2(this, _AssistantStream_activeRunStepID, "f")) { - throw new OpenAIError(`Received ${event.event} for run step "${runStepID}", which does not match the active run step "${__classPrivateFieldGet2(this, _AssistantStream_activeRunStepID, "f")}"`); + if (__classPrivateFieldGet(this, _AssistantStream_activeRunStepID, "f") !== void 0) { + if (runStepID !== __classPrivateFieldGet(this, _AssistantStream_activeRunStepID, "f")) { + throw new OpenAIError(`Received ${event.event} for run step "${runStepID}", which does not match the active run step "${__classPrivateFieldGet(this, _AssistantStream_activeRunStepID, "f")}"`); } return runStepID; } if (event.event === "thread.run.step.delta") { - if (!hasOwn2(__classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f"), runStepID)) { + if (!hasOwn(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f"), runStepID)) { throw new OpenAIError("Received a RunStepDelta before creation of a snapshot"); } throw new OpenAIError(`Received run-step delta for "${runStepID}" with no active run step`); } - if (hasOwn2(__classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f"), runStepID) || __classPrivateFieldGet2(this, _AssistantStream_runStepIDOwners, "f").has(runStepID)) { + if (hasOwn(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f"), runStepID) || __classPrivateFieldGet(this, _AssistantStream_runStepIDOwners, "f").has(runStepID)) { throw new OpenAIError(`Received run-step event for run step "${runStepID}", which has already been created`); } - __classPrivateFieldGet2(this, _AssistantStream_runStepIDOwners, "f").set(runStepID, runStepID); + __classPrivateFieldGet(this, _AssistantStream_runStepIDOwners, "f").set(runStepID, runStepID); if (event.event === "thread.run.step.in_progress") { - __classPrivateFieldSet2(this, _AssistantStream_activeRunStepID, runStepID, "f"); + __classPrivateFieldSet(this, _AssistantStream_activeRunStepID, runStepID, "f"); } return runStepID; }, _AssistantStream_reserveRunStepAlias = function _AssistantStream_reserveRunStepAlias2(data, canonicalID) { @@ -33690,11 +15869,11 @@ var init_AssistantStream = __esm({ if (typeof runStepID !== "string" || runStepID.length === 0) { throw new OpenAIError("Received assistant run-step event with an invalid run-step ID"); } - const owner = __classPrivateFieldGet2(this, _AssistantStream_runStepIDOwners, "f").get(runStepID); + const owner = __classPrivateFieldGet(this, _AssistantStream_runStepIDOwners, "f").get(runStepID); if (owner !== void 0 && owner !== canonicalID) { throw new OpenAIError(`Received run-step creation for run step "${runStepID}", which has already been created`); } - __classPrivateFieldGet2(this, _AssistantStream_runStepIDOwners, "f").set(runStepID, canonicalID); + __classPrivateFieldGet(this, _AssistantStream_runStepIDOwners, "f").set(runStepID, canonicalID); }, _AssistantStream_validateMessageEvent = function _AssistantStream_validateMessageEvent2(event) { const descriptor = Object.getOwnPropertyDescriptor(event.data, "id"); const messageID = descriptor && "value" in descriptor ? descriptor.value : void 0; @@ -33702,24 +15881,24 @@ var init_AssistantStream = __esm({ throw new OpenAIError("Received assistant message event with an invalid message ID"); } if (event.event === "thread.message.created") { - if (__classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f")) { - throw new OpenAIError(`Received message creation for "${messageID}" before the active message "${__classPrivateFieldGet2(this, _AssistantStream_activeMessageID, "f")}" reached a terminal state`); + if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f")) { + throw new OpenAIError(`Received message creation for "${messageID}" before the active message "${__classPrivateFieldGet(this, _AssistantStream_activeMessageID, "f")}" reached a terminal state`); } - if (hasOwn2(__classPrivateFieldGet2(this, _AssistantStream_messageSnapshots, "f"), messageID) || __classPrivateFieldGet2(this, _AssistantStream_messageIDOwners, "f").has(messageID)) { + if (hasOwn(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, "f"), messageID) || __classPrivateFieldGet(this, _AssistantStream_messageIDOwners, "f").has(messageID)) { throw new OpenAIError(`Received message creation for message "${messageID}", which has already been created`); } - __classPrivateFieldSet2(this, _AssistantStream_activeMessageID, messageID, "f"); - __classPrivateFieldGet2(this, _AssistantStream_messageIDOwners, "f").set(messageID, messageID); + __classPrivateFieldSet(this, _AssistantStream_activeMessageID, messageID, "f"); + __classPrivateFieldGet(this, _AssistantStream_messageIDOwners, "f").set(messageID, messageID); return messageID; } - if (!__classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f")) { + if (!__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f")) { if (event.event === "thread.message.delta") { throw new OpenAIError("Received a delta with no existing snapshot (there should be one from message creation)"); } throw new OpenAIError("Received thread message event with no existing snapshot"); } - if (messageID !== __classPrivateFieldGet2(this, _AssistantStream_activeMessageID, "f")) { - throw new OpenAIError(`Received ${event.event} for message "${messageID}", which does not match the active message "${__classPrivateFieldGet2(this, _AssistantStream_activeMessageID, "f")}"`); + if (messageID !== __classPrivateFieldGet(this, _AssistantStream_activeMessageID, "f")) { + throw new OpenAIError(`Received ${event.event} for message "${messageID}", which does not match the active message "${__classPrivateFieldGet(this, _AssistantStream_activeMessageID, "f")}"`); } return messageID; }, _AssistantStream_reserveMessageAlias = function _AssistantStream_reserveMessageAlias2(data, canonicalID) { @@ -33728,137 +15907,137 @@ var init_AssistantStream = __esm({ if (typeof messageID !== "string" || messageID.length === 0) { throw new OpenAIError("Received assistant message event with an invalid message ID"); } - const owner = __classPrivateFieldGet2(this, _AssistantStream_messageIDOwners, "f").get(messageID); + const owner = __classPrivateFieldGet(this, _AssistantStream_messageIDOwners, "f").get(messageID); if (owner !== void 0 && owner !== canonicalID) { throw new OpenAIError(`Received message creation for message "${messageID}", which has already been created`); } - __classPrivateFieldGet2(this, _AssistantStream_messageIDOwners, "f").set(messageID, canonicalID); + __classPrivateFieldGet(this, _AssistantStream_messageIDOwners, "f").set(messageID, canonicalID); }, _AssistantStream_handleMessage = function _AssistantStream_handleMessage2(event) { - const [accumulatedMessage, newContent] = __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f")); - __classPrivateFieldSet2(this, _AssistantStream_messageSnapshot, accumulatedMessage, "f"); - if (!__classPrivateFieldGet2(this, _AssistantStream_activeMessageID, "f")) { + const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f")); + __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, "f"); + if (!__classPrivateFieldGet(this, _AssistantStream_activeMessageID, "f")) { throw new OpenAIError("Received thread message event with no active message ID"); } - __classPrivateFieldGet2(this, _AssistantStream_messageSnapshots, "f")[__classPrivateFieldGet2(this, _AssistantStream_activeMessageID, "f")] = accumulatedMessage; + __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, "f")[__classPrivateFieldGet(this, _AssistantStream_activeMessageID, "f")] = accumulatedMessage; for (const content of newContent) { const snapshotContent = accumulatedMessage.content[content.index]; if (snapshotContent?.type === "text") { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "textCreated", snapshotContent.text); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "textCreated", snapshotContent.text); } } switch (event.event) { case "thread.message.created": { - __classPrivateFieldSet2(this, _AssistantStream_currentContentIndex, void 0, "f"); - __classPrivateFieldSet2(this, _AssistantStream_currentContent, void 0, "f"); - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "messageCreated", event.data); + __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, void 0, "f"); + __classPrivateFieldSet(this, _AssistantStream_currentContent, void 0, "f"); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "messageCreated", event.data); break; } case "thread.message.in_progress": { break; } case "thread.message.delta": { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "messageDelta", event.data.delta, accumulatedMessage); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "messageDelta", event.data.delta, accumulatedMessage); if (event.data.delta.content) { for (const content of event.data.delta.content) { if (content.type === "text" && content.text) { const textDelta = content.text; const snapshot = accumulatedMessage.content[content.index]; if (snapshot && snapshot.type === "text") { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "textDelta", textDelta, snapshot.text); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "textDelta", textDelta, snapshot.text); } else { throw new Error("The snapshot associated with this text delta is not text or missing"); } } - if (content.index !== __classPrivateFieldGet2(this, _AssistantStream_currentContentIndex, "f")) { - if (__classPrivateFieldGet2(this, _AssistantStream_currentContent, "f")) { - switch (__classPrivateFieldGet2(this, _AssistantStream_currentContent, "f").type) { + if (content.index !== __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, "f")) { + if (__classPrivateFieldGet(this, _AssistantStream_currentContent, "f")) { + switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, "f").type) { case "text": { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "textDone", __classPrivateFieldGet2(this, _AssistantStream_currentContent, "f").text, __classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f")); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "textDone", __classPrivateFieldGet(this, _AssistantStream_currentContent, "f").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f")); break; } case "image_file": { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "imageFileDone", __classPrivateFieldGet2(this, _AssistantStream_currentContent, "f").image_file, __classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f")); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "imageFileDone", __classPrivateFieldGet(this, _AssistantStream_currentContent, "f").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f")); break; } } } - __classPrivateFieldSet2(this, _AssistantStream_currentContentIndex, content.index, "f"); + __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, "f"); } - __classPrivateFieldSet2(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], "f"); + __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], "f"); } } break; } case "thread.message.completed": case "thread.message.incomplete": { - if (__classPrivateFieldGet2(this, _AssistantStream_currentContentIndex, "f") !== void 0) { - const currentContent = event.data.content[__classPrivateFieldGet2(this, _AssistantStream_currentContentIndex, "f")]; + if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, "f") !== void 0) { + const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, "f")]; if (currentContent) { switch (currentContent.type) { case "image_file": { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "imageFileDone", currentContent.image_file, __classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f")); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "imageFileDone", currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f")); break; } case "text": { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "textDone", currentContent.text, __classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f")); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "textDone", currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f")); break; } } } } - if (__classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f")) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "messageDone", event.data); + if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f")) { + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "messageDone", event.data); } - __classPrivateFieldSet2(this, _AssistantStream_currentContentIndex, void 0, "f"); - __classPrivateFieldSet2(this, _AssistantStream_currentContent, void 0, "f"); - __classPrivateFieldSet2(this, _AssistantStream_messageSnapshot, void 0, "f"); - __classPrivateFieldSet2(this, _AssistantStream_activeMessageID, void 0, "f"); + __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, void 0, "f"); + __classPrivateFieldSet(this, _AssistantStream_currentContent, void 0, "f"); + __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, void 0, "f"); + __classPrivateFieldSet(this, _AssistantStream_activeMessageID, void 0, "f"); } } }, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep2(event, runStepID) { - const accumulatedRunStep = __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_accumulateRunStep).call(this, event, runStepID); - __classPrivateFieldSet2(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, "f"); + const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_accumulateRunStep).call(this, event, runStepID); + __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, "f"); switch (event.event) { case "thread.run.step.created": { - __classPrivateFieldSet2(this, _AssistantStream_currentToolCallIndex, void 0, "f"); - __classPrivateFieldSet2(this, _AssistantStream_currentToolCall, void 0, "f"); - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "runStepCreated", event.data); + __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, void 0, "f"); + __classPrivateFieldSet(this, _AssistantStream_currentToolCall, void 0, "f"); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "runStepCreated", event.data); break; } case "thread.run.step.delta": { const delta = event.data.delta; if (delta.step_details && delta.step_details.type === "tool_calls" && delta.step_details.tool_calls && accumulatedRunStep.step_details.type === "tool_calls") { for (const toolCall of delta.step_details.tool_calls) { - if (toolCall.index === __classPrivateFieldGet2(this, _AssistantStream_currentToolCallIndex, "f")) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "toolCallDelta", toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]); + if (toolCall.index === __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, "f")) { + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "toolCallDelta", toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]); } else { - if (__classPrivateFieldGet2(this, _AssistantStream_currentToolCall, "f")) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "toolCallDone", __classPrivateFieldGet2(this, _AssistantStream_currentToolCall, "f")); + if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, "f")) { + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "toolCallDone", __classPrivateFieldGet(this, _AssistantStream_currentToolCall, "f")); } - __classPrivateFieldSet2(this, _AssistantStream_currentToolCallIndex, toolCall.index, "f"); - __classPrivateFieldSet2(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], "f"); - if (__classPrivateFieldGet2(this, _AssistantStream_currentToolCall, "f")) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "toolCallCreated", __classPrivateFieldGet2(this, _AssistantStream_currentToolCall, "f")); + __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, "f"); + __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], "f"); + if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, "f")) { + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "toolCallCreated", __classPrivateFieldGet(this, _AssistantStream_currentToolCall, "f")); } } } } - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "runStepDelta", event.data.delta, accumulatedRunStep); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "runStepDelta", event.data.delta, accumulatedRunStep); break; } case "thread.run.step.completed": case "thread.run.step.failed": case "thread.run.step.cancelled": case "thread.run.step.expired": { - __classPrivateFieldSet2(this, _AssistantStream_currentRunStepSnapshot, void 0, "f"); - __classPrivateFieldSet2(this, _AssistantStream_activeRunStepID, void 0, "f"); + __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, void 0, "f"); + __classPrivateFieldSet(this, _AssistantStream_activeRunStepID, void 0, "f"); const details = event.data.step_details; - if (details.type === "tool_calls" && __classPrivateFieldGet2(this, _AssistantStream_currentToolCall, "f")) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "toolCallDone", __classPrivateFieldGet2(this, _AssistantStream_currentToolCall, "f")); + if (details.type === "tool_calls" && __classPrivateFieldGet(this, _AssistantStream_currentToolCall, "f")) { + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "toolCallDone", __classPrivateFieldGet(this, _AssistantStream_currentToolCall, "f")); } - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "runStepDone", event.data, accumulatedRunStep); - __classPrivateFieldSet2(this, _AssistantStream_currentToolCallIndex, void 0, "f"); - __classPrivateFieldSet2(this, _AssistantStream_currentToolCall, void 0, "f"); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "runStepDone", event.data, accumulatedRunStep); + __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, void 0, "f"); + __classPrivateFieldSet(this, _AssistantStream_currentToolCall, void 0, "f"); break; } case "thread.run.step.in_progress": { @@ -33873,39 +16052,39 @@ var init_AssistantStream = __esm({ } this._emit(event, ...args); }, _AssistantStream_handleEvent = function _AssistantStream_handleEvent2(event) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "event", event); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "event", event); }, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep2(event, runStepID) { switch (event.event) { case "thread.run.step.created": { - __classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f")[runStepID] = event.data; + __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f")[runStepID] = event.data; return event.data; } case "thread.run.step.delta": { - const snapshot = __classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f")[runStepID]; + const snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f")[runStepID]; if (!snapshot) { throw new Error("Received a RunStepDelta before creation of a snapshot"); } const delta = event.data.delta; if (delta) { - if (hasOwn2(delta, "id")) { + if (hasOwn(delta, "id")) { throw new OpenAIError("Run-step deltas must not contain an id field"); } const accumulated = accumulateAssistantStreamDelta(snapshot, delta, true); - __classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f")[runStepID] = accumulated; + __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f")[runStepID] = accumulated; } - return __classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f")[runStepID]; + return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f")[runStepID]; } case "thread.run.step.completed": case "thread.run.step.failed": case "thread.run.step.cancelled": case "thread.run.step.expired": case "thread.run.step.in_progress": { - __classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f")[runStepID] = event.data; + __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f")[runStepID] = event.data; break; } } - if (__classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f")[runStepID]) { - return __classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f")[runStepID]; + if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f")[runStepID]) { + return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f")[runStepID]; } throw new Error("No snapshot available"); }, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage2(event, snapshot) { @@ -33924,9 +16103,9 @@ var init_AssistantStream = __esm({ const cacheArrays = !isAssistantStreamValueExternallyMutable(snapshot); const commitProjection = createAssistantStreamArrayDeltaCommit(snapshot.content, data.delta.content, "content", cacheArrays); for (const contentElement of data.delta.content) { - if (hasOwn2(snapshot.content, contentElement.index)) { + if (hasOwn(snapshot.content, contentElement.index)) { const currentContent = snapshot.content[contentElement.index]; - snapshot.content[contentElement.index] = __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_accumulateContent).call(this, contentElement, currentContent, cacheArrays); + snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_accumulateContent).call(this, contentElement, currentContent, cacheArrays); } else { defineAssistantStreamArrayEntry(snapshot.content, contentElement.index, contentElement); newContent.push(contentElement); @@ -33949,7 +16128,7 @@ var init_AssistantStream = __esm({ }, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent2(contentElement, currentContent, cacheArrays) { return accumulateAssistantStreamDelta(currentContent, contentElement, cacheArrays); }, _AssistantStream_handleRun = function _AssistantStream_handleRun2(event) { - __classPrivateFieldSet2(this, _AssistantStream_currentRunSnapshot, event.data, "f"); + __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, "f"); switch (event.event) { case "thread.run.created": { break; @@ -33966,12 +16145,12 @@ var init_AssistantStream = __esm({ case "thread.run.completed": case "thread.run.expired": case "thread.run.incomplete": { - __classPrivateFieldSet2(this, _AssistantStream_finalRun, event.data, "f"); - if (__classPrivateFieldGet2(this, _AssistantStream_currentToolCall, "f")) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "toolCallDone", __classPrivateFieldGet2(this, _AssistantStream_currentToolCall, "f")); + __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, "f"); + if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, "f")) { + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "toolCallDone", __classPrivateFieldGet(this, _AssistantStream_currentToolCall, "f")); } - __classPrivateFieldSet2(this, _AssistantStream_currentToolCallIndex, void 0, "f"); - __classPrivateFieldSet2(this, _AssistantStream_currentToolCall, void 0, "f"); + __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, void 0, "f"); + __classPrivateFieldSet(this, _AssistantStream_currentToolCall, void 0, "f"); break; } case "thread.run.cancelling": { @@ -34012,7 +16191,7 @@ function sleepUntilAborted(milliseconds, signal) { settled = true; cleanup(); try { - const error = new APIUserAbortError2(); + const error = new APIUserAbortError(); Object.defineProperty(error, "cause", { value: signal.reason, writable: true, @@ -34055,7 +16234,7 @@ function sleepUntilAborted(milliseconds, signal) { }); } async function pollWithResponse(retrieve, intermediateStatuses, terminalStatuses, options) { - const headers = buildHeaders2([ + const headers = buildHeaders([ options?.headers, { "X-Stainless-Poll-Helper": "true", @@ -34080,7 +16259,7 @@ async function pollWithResponse(retrieve, intermediateStatuses, terminalStatuses } } const signal = options && Object.prototype.propertyIsEnumerable.call(options, "signal") ? options.signal : void 0; - await (signal ? sleepUntilAborted(sleepInterval, signal) : sleep2(sleepInterval)); + await (signal ? sleepUntilAborted(sleepInterval, signal) : sleep(sleepInterval)); } else if (terminalStatuses.includes(status)) { return data; } @@ -34088,9 +16267,9 @@ async function pollWithResponse(retrieve, intermediateStatuses, terminalStatuses } var init_polling = __esm({ "node_modules/openai/lib/polling.mjs"() { - init_error3(); - init_headers3(); - init_sleep2(); + init_error(); + init_headers(); + init_sleep(); } }); @@ -34111,26 +16290,26 @@ var init_assistant_run_polling = __esm({ var Runs; var init_runs = __esm({ "node_modules/openai/resources/beta/threads/runs/runs.mjs"() { - init_resource2(); + init_resource(); init_steps(); init_steps(); - init_pagination2(); - init_headers3(); + init_pagination(); + init_headers(); init_AssistantStream(); init_assistant_run_polling(); - init_path2(); - Runs = class extends APIResource2 { + init_path(); + Runs = class extends APIResource { constructor() { super(...arguments); this.steps = new Steps(this._client); } create(threadID, params, options) { const { include, ...body } = params; - return this._client.post(path3`/threads/${threadID}/runs`, { + return this._client.post(path`/threads/${threadID}/runs`, { query: { include }, body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), stream: params.stream ?? false, __synthesizeEventData: true, __security: { bearerAuth: true } @@ -34143,9 +16322,9 @@ var init_runs = __esm({ */ retrieve(runID, params, options) { const { thread_id } = params; - return this._client.get(path3`/threads/${thread_id}/runs/${runID}`, { + return this._client.get(path`/threads/${thread_id}/runs/${runID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -34156,10 +16335,10 @@ var init_runs = __esm({ */ update(runID, params, options) { const { thread_id, ...body } = params; - return this._client.post(path3`/threads/${thread_id}/runs/${runID}`, { + return this._client.post(path`/threads/${thread_id}/runs/${runID}`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -34169,10 +16348,10 @@ var init_runs = __esm({ * @deprecated The Assistants API is deprecated in favor of the Responses API */ list(threadID, query = {}, options) { - return this._client.getAPIList(path3`/threads/${threadID}/runs`, CursorPage, { + return this._client.getAPIList(path`/threads/${threadID}/runs`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -34183,9 +16362,9 @@ var init_runs = __esm({ */ cancel(runID, params, options) { const { thread_id } = params; - return this._client.post(path3`/threads/${thread_id}/runs/${runID}/cancel`, { + return this._client.post(path`/threads/${thread_id}/runs/${runID}/cancel`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -34222,10 +16401,10 @@ var init_runs = __esm({ } submitToolOutputs(runID, params, options) { const { thread_id, ...body } = params; - return this._client.post(path3`/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, { + return this._client.post(path`/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), stream: params.stream ?? false, __synthesizeEventData: true, __security: { bearerAuth: true } @@ -34254,22 +16433,22 @@ var init_runs = __esm({ }); // node_modules/openai/resources/beta/threads/threads.mjs -var Threads3; -var init_threads3 = __esm({ +var Threads2; +var init_threads2 = __esm({ "node_modules/openai/resources/beta/threads/threads.mjs"() { - init_resource2(); - init_messages4(); - init_messages4(); + init_resource(); + init_messages2(); + init_messages2(); init_runs(); init_runs(); - init_headers3(); + init_headers(); init_AssistantStream(); - init_path2(); - Threads3 = class extends APIResource2 { + init_path(); + Threads2 = class extends APIResource { constructor() { super(...arguments); this.runs = new Runs(this._client); - this.messages = new Messages4(this._client); + this.messages = new Messages2(this._client); } /** * Create a thread. @@ -34280,7 +16459,7 @@ var init_threads3 = __esm({ return this._client.post("/threads", { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -34290,9 +16469,9 @@ var init_threads3 = __esm({ * @deprecated The Assistants API is deprecated in favor of the Responses API */ retrieve(threadID, options) { - return this._client.get(path3`/threads/${threadID}`, { + return this._client.get(path`/threads/${threadID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -34302,10 +16481,10 @@ var init_threads3 = __esm({ * @deprecated The Assistants API is deprecated in favor of the Responses API */ update(threadID, body, options) { - return this._client.post(path3`/threads/${threadID}`, { + return this._client.post(path`/threads/${threadID}`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -34315,9 +16494,9 @@ var init_threads3 = __esm({ * @deprecated The Assistants API is deprecated in favor of the Responses API */ delete(threadID, options) { - return this._client.delete(path3`/threads/${threadID}`, { + return this._client.delete(path`/threads/${threadID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -34325,7 +16504,7 @@ var init_threads3 = __esm({ return this._client.post("/threads/runs", { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), stream: body.stream ?? false, __synthesizeEventData: true, __security: { bearerAuth: true } @@ -34347,54 +16526,54 @@ var init_threads3 = __esm({ return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options); } }; - Threads3.Runs = Runs; - Threads3.Messages = Messages4; + Threads2.Runs = Runs; + Threads2.Messages = Messages2; } }); // node_modules/openai/resources/beta/beta.mjs -var Beta2; -var init_beta2 = __esm({ +var Beta; +var init_beta = __esm({ "node_modules/openai/resources/beta/beta.mjs"() { - init_resource2(); + init_resource(); init_assistants(); init_assistants(); init_realtime(); init_realtime(); - init_agents2(); - init_agents2(); + init_agents(); + init_agents(); init_chatkit(); init_chatkit(); init_responses(); init_responses(); - init_threads3(); - init_threads3(); - Beta2 = class extends APIResource2 { + init_threads2(); + init_threads2(); + Beta = class extends APIResource { constructor() { super(...arguments); this.realtime = new Realtime(this._client); - this.agents = new Agents2(this._client); + this.agents = new Agents(this._client); this.responses = new Responses(this._client); this.chatkit = new ChatKit(this._client); this.assistants = new Assistants(this._client); - this.threads = new Threads3(this._client); + this.threads = new Threads2(this._client); } }; - Beta2.Realtime = Realtime; - Beta2.Agents = Agents2; - Beta2.Responses = Responses; - Beta2.ChatKit = ChatKit; - Beta2.Assistants = Assistants; - Beta2.Threads = Threads3; + Beta.Realtime = Realtime; + Beta.Agents = Agents; + Beta.Responses = Responses; + Beta.ChatKit = ChatKit; + Beta.Assistants = Assistants; + Beta.Threads = Threads2; } }); // node_modules/openai/resources/completions.mjs -var Completions3; -var init_completions4 = __esm({ +var Completions2; +var init_completions3 = __esm({ "node_modules/openai/resources/completions.mjs"() { - init_resource2(); - Completions3 = class extends APIResource2 { + init_resource(); + Completions2 = class extends APIResource { create(body, options) { return this._client.post("/completions", { body, @@ -34411,18 +16590,18 @@ var init_completions4 = __esm({ var Content; var init_content = __esm({ "node_modules/openai/resources/containers/files/content.mjs"() { - init_resource2(); - init_headers3(); - init_path2(); - Content = class extends APIResource2 { + init_resource(); + init_headers(); + init_path(); + Content = class extends APIResource { /** * Retrieve Container File Content */ retrieve(fileID, params, options) { const { container_id } = params; - return this._client.get(path3`/containers/${container_id}/files/${fileID}/content`, { + return this._client.get(path`/containers/${container_id}/files/${fileID}/content`, { ...options, - headers: buildHeaders2([{ Accept: "application/binary" }, options?.headers]), + headers: buildHeaders([{ Accept: "application/binary" }, options?.headers]), __security: { bearerAuth: true }, __binaryResponse: true }); @@ -34432,17 +16611,17 @@ var init_content = __esm({ }); // node_modules/openai/resources/containers/files/files.mjs -var Files4; -var init_files4 = __esm({ +var Files2; +var init_files2 = __esm({ "node_modules/openai/resources/containers/files/files.mjs"() { - init_resource2(); + init_resource(); init_content(); init_content(); - init_pagination2(); - init_headers3(); - init_uploads3(); - init_path2(); - Files4 = class extends APIResource2 { + init_pagination(); + init_headers(); + init_uploads(); + init_path(); + Files2 = class extends APIResource { constructor() { super(...arguments); this.content = new Content(this._client); @@ -34454,14 +16633,14 @@ var init_files4 = __esm({ * a JSON request with a file ID. */ create(containerID, body, options) { - return this._client.post(path3`/containers/${containerID}/files`, maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); + return this._client.post(path`/containers/${containerID}/files`, maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); } /** * Retrieve Container File */ retrieve(fileID, params, options) { const { container_id } = params; - return this._client.get(path3`/containers/${container_id}/files/${fileID}`, { + return this._client.get(path`/containers/${container_id}/files/${fileID}`, { ...options, __security: { bearerAuth: true } }); @@ -34470,7 +16649,7 @@ var init_files4 = __esm({ * List Container files */ list(containerID, query = {}, options) { - return this._client.getAPIList(path3`/containers/${containerID}/files`, CursorPage, { + return this._client.getAPIList(path`/containers/${containerID}/files`, CursorPage, { query, ...options, __security: { bearerAuth: true } @@ -34481,14 +16660,14 @@ var init_files4 = __esm({ */ delete(fileID, params, options) { const { container_id } = params; - return this._client.delete(path3`/containers/${container_id}/files/${fileID}`, { + return this._client.delete(path`/containers/${container_id}/files/${fileID}`, { ...options, - headers: buildHeaders2([{ Accept: "*/*" }, options?.headers]), + headers: buildHeaders([{ Accept: "*/*" }, options?.headers]), __security: { bearerAuth: true } }); } }; - Files4.Content = Content; + Files2.Content = Content; } }); @@ -34496,16 +16675,16 @@ var init_files4 = __esm({ var Containers; var init_containers = __esm({ "node_modules/openai/resources/containers/containers.mjs"() { - init_resource2(); - init_files4(); - init_files4(); - init_pagination2(); - init_headers3(); - init_path2(); - Containers = class extends APIResource2 { + init_resource(); + init_files2(); + init_files2(); + init_pagination(); + init_headers(); + init_path(); + Containers = class extends APIResource { constructor() { super(...arguments); - this.files = new Files4(this._client); + this.files = new Files2(this._client); } /** * Create Container @@ -34517,7 +16696,7 @@ var init_containers = __esm({ * Retrieve Container */ retrieve(containerID, options) { - return this._client.get(path3`/containers/${containerID}`, { + return this._client.get(path`/containers/${containerID}`, { ...options, __security: { bearerAuth: true } }); @@ -34536,14 +16715,14 @@ var init_containers = __esm({ * Delete Container */ delete(containerID, options) { - return this._client.delete(path3`/containers/${containerID}`, { + return this._client.delete(path`/containers/${containerID}`, { ...options, - headers: buildHeaders2([{ Accept: "*/*" }, options?.headers]), + headers: buildHeaders([{ Accept: "*/*" }, options?.headers]), __security: { bearerAuth: true } }); } }; - Containers.Files = Files4; + Containers.Files = Files2; } }); @@ -34551,9 +16730,9 @@ var init_containers = __esm({ var ContentProvenanceChecks; var init_content_provenance_checks = __esm({ "node_modules/openai/resources/content-provenance-checks.mjs"() { - init_resource2(); - init_uploads3(); - ContentProvenanceChecks = class extends APIResource2 { + init_resource(); + init_uploads(); + ContentProvenanceChecks = class extends APIResource { /** * Check whether an image or audio file contains known OpenAI provenance signals. * [Learn more about content provenance](https://developers.openai.com/api/docs/guides/content-provenance). @@ -34566,7 +16745,7 @@ var init_content_provenance_checks = __esm({ * company's model, which the tool currently does not detect. */ create(body, options) { - return this._client.post("/content_provenance_checks", multipartFormRequestOptions2({ body, ...options, __security: { bearerAuth: true } }, this._client)); + return this._client.post("/content_provenance_checks", multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); } }; } @@ -34576,16 +16755,16 @@ var init_content_provenance_checks = __esm({ var Items4; var init_items4 = __esm({ "node_modules/openai/resources/conversations/items.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Items4 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Items4 = class extends APIResource { /** * Create items in a conversation with the given ID. */ create(conversationID, params, options) { const { include, ...body } = params; - return this._client.post(path3`/conversations/${conversationID}/items`, { + return this._client.post(path`/conversations/${conversationID}/items`, { query: { include }, body, ...options, @@ -34597,7 +16776,7 @@ var init_items4 = __esm({ */ retrieve(itemID, params, options) { const { conversation_id, ...query } = params; - return this._client.get(path3`/conversations/${conversation_id}/items/${itemID}`, { + return this._client.get(path`/conversations/${conversation_id}/items/${itemID}`, { query, ...options, __security: { bearerAuth: true } @@ -34607,14 +16786,14 @@ var init_items4 = __esm({ * List all items for a conversation with the given ID. */ list(conversationID, query = {}, options) { - return this._client.getAPIList(path3`/conversations/${conversationID}/items`, ConversationCursorPage, { query, ...options, __security: { bearerAuth: true } }); + return this._client.getAPIList(path`/conversations/${conversationID}/items`, ConversationCursorPage, { query, ...options, __security: { bearerAuth: true } }); } /** * Delete an item from a conversation with the given IDs. */ delete(itemID, params, options) { const { conversation_id } = params; - return this._client.delete(path3`/conversations/${conversation_id}/items/${itemID}`, { + return this._client.delete(path`/conversations/${conversation_id}/items/${itemID}`, { ...options, __security: { bearerAuth: true } }); @@ -34627,11 +16806,11 @@ var init_items4 = __esm({ var Conversations; var init_conversations = __esm({ "node_modules/openai/resources/conversations/conversations.mjs"() { - init_resource2(); + init_resource(); init_items4(); init_items4(); - init_path2(); - Conversations = class extends APIResource2 { + init_path(); + Conversations = class extends APIResource { constructor() { super(...arguments); this.items = new Items4(this._client); @@ -34646,7 +16825,7 @@ var init_conversations = __esm({ * Get a conversation */ retrieve(conversationID, options) { - return this._client.get(path3`/conversations/${conversationID}`, { + return this._client.get(path`/conversations/${conversationID}`, { ...options, __security: { bearerAuth: true } }); @@ -34655,7 +16834,7 @@ var init_conversations = __esm({ * Update a conversation */ update(conversationID, body, options) { - return this._client.post(path3`/conversations/${conversationID}`, { + return this._client.post(path`/conversations/${conversationID}`, { body, ...options, __security: { bearerAuth: true } @@ -34665,7 +16844,7 @@ var init_conversations = __esm({ * Delete a conversation. Items in the conversation will not be deleted. */ delete(conversationID, options) { - return this._client.delete(path3`/conversations/${conversationID}`, { + return this._client.delete(path`/conversations/${conversationID}`, { ...options, __security: { bearerAuth: true } }); @@ -34680,7 +16859,7 @@ function createEmbedding(client, body, options) { const hasUserProvidedEncodingFormat = !!body.encoding_format; const encodingFormat = hasUserProvidedEncodingFormat ? body.encoding_format : "base64"; if (hasUserProvidedEncodingFormat) { - loggerFor2(client).debug("embeddings/user defined encoding_format:", body.encoding_format); + loggerFor(client).debug("embeddings/user defined encoding_format:", body.encoding_format); } const optimizedBody = { ...body, encoding_format: encodingFormat }; const requestOptions = { @@ -34692,7 +16871,7 @@ function createEmbedding(client, body, options) { if (hasUserProvidedEncodingFormat) { return response; } - loggerFor2(client).debug("embeddings/decoding base64 embeddings from base64"); + loggerFor(client).debug("embeddings/decoding base64 embeddings from base64"); return response._thenUnwrap((data) => { const embeddings = data?.data; if (embeddings !== void 0) { @@ -34716,7 +16895,7 @@ function createEmbedding(client, body, options) { } var init_embeddings = __esm({ "node_modules/openai/lib/embeddings.mjs"() { - init_utils4(); + init_utils2(); } }); @@ -34724,9 +16903,9 @@ var init_embeddings = __esm({ var Embeddings; var init_embeddings2 = __esm({ "node_modules/openai/resources/embeddings.mjs"() { - init_resource2(); + init_resource(); init_embeddings(); - Embeddings = class extends APIResource2 { + Embeddings = class extends APIResource { create(body, options) { return createEmbedding(this._client, body, options); } @@ -34738,16 +16917,16 @@ var init_embeddings2 = __esm({ var OutputItems; var init_output_items = __esm({ "node_modules/openai/resources/evals/runs/output-items.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - OutputItems = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + OutputItems = class extends APIResource { /** * Get an evaluation run output item by ID. */ retrieve(outputItemID, params, options) { const { eval_id, run_id } = params; - return this._client.get(path3`/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, { + return this._client.get(path`/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, { ...options, __security: { bearerAuth: true } }); @@ -34757,7 +16936,7 @@ var init_output_items = __esm({ */ list(runID, params, options) { const { eval_id, ...query } = params; - return this._client.getAPIList(path3`/evals/${eval_id}/runs/${runID}/output_items`, CursorPage, { query, ...options, __security: { bearerAuth: true } }); + return this._client.getAPIList(path`/evals/${eval_id}/runs/${runID}/output_items`, CursorPage, { query, ...options, __security: { bearerAuth: true } }); } }; } @@ -34767,12 +16946,12 @@ var init_output_items = __esm({ var Runs2; var init_runs2 = __esm({ "node_modules/openai/resources/evals/runs/runs.mjs"() { - init_resource2(); + init_resource(); init_output_items(); init_output_items(); - init_pagination2(); - init_path2(); - Runs2 = class extends APIResource2 { + init_pagination(); + init_path(); + Runs2 = class extends APIResource { constructor() { super(...arguments); this.outputItems = new OutputItems(this._client); @@ -34783,7 +16962,7 @@ var init_runs2 = __esm({ * schema specified in the config of the evaluation. */ create(evalID, body, options) { - return this._client.post(path3`/evals/${evalID}/runs`, { + return this._client.post(path`/evals/${evalID}/runs`, { body, ...options, __security: { bearerAuth: true } @@ -34794,7 +16973,7 @@ var init_runs2 = __esm({ */ retrieve(runID, params, options) { const { eval_id } = params; - return this._client.get(path3`/evals/${eval_id}/runs/${runID}`, { + return this._client.get(path`/evals/${eval_id}/runs/${runID}`, { ...options, __security: { bearerAuth: true } }); @@ -34803,7 +16982,7 @@ var init_runs2 = __esm({ * Get a list of runs for an evaluation. */ list(evalID, query = {}, options) { - return this._client.getAPIList(path3`/evals/${evalID}/runs`, CursorPage, { + return this._client.getAPIList(path`/evals/${evalID}/runs`, CursorPage, { query, ...options, __security: { bearerAuth: true } @@ -34814,7 +16993,7 @@ var init_runs2 = __esm({ */ delete(runID, params, options) { const { eval_id } = params; - return this._client.delete(path3`/evals/${eval_id}/runs/${runID}`, { + return this._client.delete(path`/evals/${eval_id}/runs/${runID}`, { ...options, __security: { bearerAuth: true } }); @@ -34824,7 +17003,7 @@ var init_runs2 = __esm({ */ cancel(runID, params, options) { const { eval_id } = params; - return this._client.post(path3`/evals/${eval_id}/runs/${runID}`, { + return this._client.post(path`/evals/${eval_id}/runs/${runID}`, { ...options, __security: { bearerAuth: true } }); @@ -34838,12 +17017,12 @@ var init_runs2 = __esm({ var Evals; var init_evals = __esm({ "node_modules/openai/resources/evals/evals.mjs"() { - init_resource2(); + init_resource(); init_runs2(); init_runs2(); - init_pagination2(); - init_path2(); - Evals = class extends APIResource2 { + init_pagination(); + init_path(); + Evals = class extends APIResource { constructor() { super(...arguments); this.runs = new Runs2(this._client); @@ -34863,13 +17042,13 @@ var init_evals = __esm({ * Get an evaluation by ID. */ retrieve(evalID, options) { - return this._client.get(path3`/evals/${evalID}`, { ...options, __security: { bearerAuth: true } }); + return this._client.get(path`/evals/${evalID}`, { ...options, __security: { bearerAuth: true } }); } /** * Update certain properties of an evaluation. */ update(evalID, body, options) { - return this._client.post(path3`/evals/${evalID}`, { body, ...options, __security: { bearerAuth: true } }); + return this._client.post(path`/evals/${evalID}`, { body, ...options, __security: { bearerAuth: true } }); } /** * List evaluations for a project. @@ -34885,7 +17064,7 @@ var init_evals = __esm({ * Delete an evaluation. */ delete(evalID, options) { - return this._client.delete(path3`/evals/${evalID}`, { ...options, __security: { bearerAuth: true } }); + return this._client.delete(path`/evals/${evalID}`, { ...options, __security: { bearerAuth: true } }); } }; Evals.Runs = Runs2; @@ -34898,10 +17077,10 @@ async function waitForFileProcessing(resource, id, pollInterval, maxWait) { const start = performance.now(); let file2 = await resource.retrieve(id); while (!file2.status || !terminalStates.has(file2.status)) { - await sleep2(pollInterval); + await sleep(pollInterval); file2 = await resource.retrieve(id); if (performance.now() - start > maxWait) { - throw new APIConnectionTimeoutError2({ + throw new APIConnectionTimeoutError({ message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.` }); } @@ -34910,22 +17089,22 @@ async function waitForFileProcessing(resource, id, pollInterval, maxWait) { } var init_file_processing = __esm({ "node_modules/openai/lib/file-processing.mjs"() { - init_error4(); - init_sleep2(); + init_error2(); + init_sleep(); } }); // node_modules/openai/resources/files.mjs -var Files5; -var init_files5 = __esm({ +var Files3; +var init_files3 = __esm({ "node_modules/openai/resources/files.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_uploads3(); + init_resource(); + init_pagination(); + init_headers(); + init_uploads(); init_file_processing(); - init_path2(); - Files5 = class extends APIResource2 { + init_path(); + Files3 = class extends APIResource { /** * Upload a file that can be used across various endpoints. Individual files can be * up to 512 MB, and each project can store up to 2.5 TB of files in total. There @@ -34956,13 +17135,13 @@ var init_files5 = __esm({ * storage limits. */ create(body, options) { - return this._client.post("/files", multipartFormRequestOptions2({ body, ...options, __security: { bearerAuth: true } }, this._client)); + return this._client.post("/files", multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); } /** * Returns information about a specific file. */ retrieve(fileID, options) { - return this._client.get(path3`/files/${fileID}`, { ...options, __security: { bearerAuth: true } }); + return this._client.get(path`/files/${fileID}`, { ...options, __security: { bearerAuth: true } }); } /** * Returns a list of files. @@ -34978,15 +17157,15 @@ var init_files5 = __esm({ * Delete a file and remove it from all vector stores. */ delete(fileID, options) { - return this._client.delete(path3`/files/${fileID}`, { ...options, __security: { bearerAuth: true } }); + return this._client.delete(path`/files/${fileID}`, { ...options, __security: { bearerAuth: true } }); } /** * Returns a response containing the contents of the specified file. */ content(fileID, options) { - return this._client.get(path3`/files/${fileID}/content`, { + return this._client.get(path`/files/${fileID}/content`, { ...options, - headers: buildHeaders2([{ Accept: "application/binary" }, options?.headers]), + headers: buildHeaders([{ Accept: "application/binary" }, options?.headers]), __security: { bearerAuth: true }, __binaryResponse: true }); @@ -35005,8 +17184,8 @@ var init_files5 = __esm({ var Methods; var init_methods = __esm({ "node_modules/openai/resources/fine-tuning/methods.mjs"() { - init_resource2(); - Methods = class extends APIResource2 { + init_resource(); + Methods = class extends APIResource { }; } }); @@ -35015,8 +17194,8 @@ var init_methods = __esm({ var Graders; var init_graders = __esm({ "node_modules/openai/resources/fine-tuning/alpha/graders.mjs"() { - init_resource2(); - Graders = class extends APIResource2 { + init_resource(); + Graders = class extends APIResource { /** * Run a grader. * @@ -35073,10 +17252,10 @@ var init_graders = __esm({ var Alpha; var init_alpha = __esm({ "node_modules/openai/resources/fine-tuning/alpha/alpha.mjs"() { - init_resource2(); + init_resource(); init_graders(); init_graders(); - Alpha = class extends APIResource2 { + Alpha = class extends APIResource { constructor() { super(...arguments); this.graders = new Graders(this._client); @@ -35090,10 +17269,10 @@ var init_alpha = __esm({ var Permissions; var init_permissions = __esm({ "node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Permissions = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Permissions = class extends APIResource { /** * **NOTE:** Calling this endpoint requires an * [admin API key](https://developers.openai.com/api/reference/resources/admin/subresources/organization/subresources/admin_api_keys). @@ -35113,7 +17292,7 @@ var init_permissions = __esm({ * ``` */ create(fineTunedModelCheckpoint, body, options) { - return this._client.getAPIList(path3`/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, Page2, { body, method: "post", ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, Page, { body, method: "post", ...options, __security: { adminAPIKeyAuth: true } }); } /** * **NOTE:** This endpoint requires an @@ -35125,7 +17304,7 @@ var init_permissions = __esm({ * @deprecated Retrieve is deprecated. Please swap to the paginated list method instead. */ retrieve(fineTunedModelCheckpoint, query = {}, options) { - return this._client.get(path3`/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, { + return this._client.get(path`/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, { query, ...options, __security: { adminAPIKeyAuth: true } @@ -35149,7 +17328,7 @@ var init_permissions = __esm({ * ``` */ list(fineTunedModelCheckpoint, query = {}, options) { - return this._client.getAPIList(path3`/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * **NOTE:** This endpoint requires an @@ -35172,7 +17351,7 @@ var init_permissions = __esm({ */ delete(permissionID, params, options) { const { fine_tuned_model_checkpoint } = params; - return this._client.delete(path3`/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, { ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.delete(path`/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, { ...options, __security: { adminAPIKeyAuth: true } }); } }; } @@ -35182,10 +17361,10 @@ var init_permissions = __esm({ var Checkpoints; var init_checkpoints = __esm({ "node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs"() { - init_resource2(); + init_resource(); init_permissions(); init_permissions(); - Checkpoints = class extends APIResource2 { + Checkpoints = class extends APIResource { constructor() { super(...arguments); this.permissions = new Permissions(this._client); @@ -35199,10 +17378,10 @@ var init_checkpoints = __esm({ var Checkpoints2; var init_checkpoints2 = __esm({ "node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Checkpoints2 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Checkpoints2 = class extends APIResource { /** * List checkpoints for a fine-tuning job. * @@ -35217,7 +17396,7 @@ var init_checkpoints2 = __esm({ * ``` */ list(fineTuningJobID, query = {}, options) { - return this._client.getAPIList(path3`/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, CursorPage, { query, ...options, __security: { bearerAuth: true } }); + return this._client.getAPIList(path`/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, CursorPage, { query, ...options, __security: { bearerAuth: true } }); } }; } @@ -35227,12 +17406,12 @@ var init_checkpoints2 = __esm({ var Jobs; var init_jobs = __esm({ "node_modules/openai/resources/fine-tuning/jobs/jobs.mjs"() { - init_resource2(); + init_resource(); init_checkpoints2(); init_checkpoints2(); - init_pagination2(); - init_path2(); - Jobs = class extends APIResource2 { + init_pagination(); + init_path(); + Jobs = class extends APIResource { constructor() { super(...arguments); this.checkpoints = new Checkpoints2(this._client); @@ -35270,7 +17449,7 @@ var init_jobs = __esm({ * ``` */ retrieve(fineTuningJobID, options) { - return this._client.get(path3`/fine_tuning/jobs/${fineTuningJobID}`, { + return this._client.get(path`/fine_tuning/jobs/${fineTuningJobID}`, { ...options, __security: { bearerAuth: true } }); @@ -35304,7 +17483,7 @@ var init_jobs = __esm({ * ``` */ cancel(fineTuningJobID, options) { - return this._client.post(path3`/fine_tuning/jobs/${fineTuningJobID}/cancel`, { + return this._client.post(path`/fine_tuning/jobs/${fineTuningJobID}/cancel`, { ...options, __security: { bearerAuth: true } }); @@ -35323,7 +17502,7 @@ var init_jobs = __esm({ * ``` */ listEvents(fineTuningJobID, query = {}, options) { - return this._client.getAPIList(path3`/fine_tuning/jobs/${fineTuningJobID}/events`, CursorPage, { query, ...options, __security: { bearerAuth: true } }); + return this._client.getAPIList(path`/fine_tuning/jobs/${fineTuningJobID}/events`, CursorPage, { query, ...options, __security: { bearerAuth: true } }); } /** * Pause a fine-tune job. @@ -35336,7 +17515,7 @@ var init_jobs = __esm({ * ``` */ pause(fineTuningJobID, options) { - return this._client.post(path3`/fine_tuning/jobs/${fineTuningJobID}/pause`, { + return this._client.post(path`/fine_tuning/jobs/${fineTuningJobID}/pause`, { ...options, __security: { bearerAuth: true } }); @@ -35352,7 +17531,7 @@ var init_jobs = __esm({ * ``` */ resume(fineTuningJobID, options) { - return this._client.post(path3`/fine_tuning/jobs/${fineTuningJobID}/resume`, { + return this._client.post(path`/fine_tuning/jobs/${fineTuningJobID}/resume`, { ...options, __security: { bearerAuth: true } }); @@ -35366,7 +17545,7 @@ var init_jobs = __esm({ var FineTuning; var init_fine_tuning = __esm({ "node_modules/openai/resources/fine-tuning/fine-tuning.mjs"() { - init_resource2(); + init_resource(); init_methods(); init_methods(); init_alpha(); @@ -35375,7 +17554,7 @@ var init_fine_tuning = __esm({ init_checkpoints(); init_jobs(); init_jobs(); - FineTuning = class extends APIResource2 { + FineTuning = class extends APIResource { constructor() { super(...arguments); this.methods = new Methods(this._client); @@ -35395,8 +17574,8 @@ var init_fine_tuning = __esm({ var GraderModels; var init_grader_models = __esm({ "node_modules/openai/resources/graders/grader-models.mjs"() { - init_resource2(); - GraderModels = class extends APIResource2 { + init_resource(); + GraderModels = class extends APIResource { }; } }); @@ -35405,10 +17584,10 @@ var init_grader_models = __esm({ var Graders2; var init_graders2 = __esm({ "node_modules/openai/resources/graders/graders.mjs"() { - init_resource2(); + init_resource(); init_grader_models(); init_grader_models(); - Graders2 = class extends APIResource2 { + Graders2 = class extends APIResource { constructor() { super(...arguments); this.graderModels = new GraderModels(this._client); @@ -35422,9 +17601,9 @@ var init_graders2 = __esm({ var Images; var init_images = __esm({ "node_modules/openai/resources/images.mjs"() { - init_resource2(); - init_uploads3(); - Images = class extends APIResource2 { + init_resource(); + init_uploads(); + Images = class extends APIResource { /** * Creates a variation of a given image. This endpoint only supports `dall-e-2`. * @@ -35436,10 +17615,10 @@ var init_images = __esm({ * ``` */ createVariation(body, options) { - return this._client.post("/images/variations", multipartFormRequestOptions2({ body, ...options, __security: { bearerAuth: true } }, this._client)); + return this._client.post("/images/variations", multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); } edit(body, options) { - return this._client.post("/images/edits", multipartFormRequestOptions2({ + return this._client.post("/images/edits", multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false, @@ -35460,13 +17639,13 @@ var init_images = __esm({ }); // node_modules/openai/resources/live/sessions.mjs -var Sessions5; -var init_sessions5 = __esm({ +var Sessions4; +var init_sessions4 = __esm({ "node_modules/openai/resources/live/sessions.mjs"() { - init_resource2(); - init_headers3(); - init_path2(); - Sessions5 = class extends APIResource2 { + init_resource(); + init_headers(); + init_path(); + Sessions4 = class extends APIResource { /** * Accept an incoming SIP call. Supply session with type live, the model, and * startup configuration. Before accepting calls, follow the @@ -35482,10 +17661,10 @@ var init_sessions5 = __esm({ * ``` */ accept(sessionID, body, options) { - return this._client.post(path3`/live/sessions/${sessionID}/accept`, { + return this._client.post(path`/live/sessions/${sessionID}/accept`, { body, ...options, - headers: buildHeaders2([{ Accept: "*/*" }, options?.headers]), + headers: buildHeaders([{ Accept: "*/*" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -35502,9 +17681,9 @@ var init_sessions5 = __esm({ * ``` */ downloadRecording(sessionID, options) { - return this._client.get(path3`/live/sessions/${sessionID}/content`, { + return this._client.get(path`/live/sessions/${sessionID}/content`, { ...options, - headers: buildHeaders2([{ Accept: "application/binary" }, options?.headers]), + headers: buildHeaders([{ Accept: "application/binary" }, options?.headers]), __security: { bearerAuth: true }, __binaryResponse: true }); @@ -35521,7 +17700,7 @@ var init_sessions5 = __esm({ * ``` */ fork(sessionID, body, options) { - return this._client.post(path3`/live/sessions/${sessionID}/fork`, { + return this._client.post(path`/live/sessions/${sessionID}/fork`, { body, ...options, __security: { bearerAuth: true } @@ -35536,9 +17715,9 @@ var init_sessions5 = __esm({ * ``` */ hangup(sessionID, options) { - return this._client.post(path3`/live/sessions/${sessionID}/hangup`, { + return this._client.post(path`/live/sessions/${sessionID}/hangup`, { ...options, - headers: buildHeaders2([{ Accept: "*/*" }, options?.headers]), + headers: buildHeaders([{ Accept: "*/*" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -35554,10 +17733,10 @@ var init_sessions5 = __esm({ * ``` */ refer(sessionID, body, options) { - return this._client.post(path3`/live/sessions/${sessionID}/refer`, { + return this._client.post(path`/live/sessions/${sessionID}/refer`, { body, ...options, - headers: buildHeaders2([{ Accept: "*/*" }, options?.headers]), + headers: buildHeaders([{ Accept: "*/*" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -35573,10 +17752,10 @@ var init_sessions5 = __esm({ * ``` */ reject(sessionID, body, options) { - return this._client.post(path3`/live/sessions/${sessionID}/reject`, { + return this._client.post(path`/live/sessions/${sessionID}/reject`, { body, ...options, - headers: buildHeaders2([{ Accept: "*/*" }, options?.headers]), + headers: buildHeaders([{ Accept: "*/*" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -35588,8 +17767,8 @@ var init_sessions5 = __esm({ var Forks; var init_forks = __esm({ "node_modules/openai/resources/live/forks/forks.mjs"() { - init_resource2(); - Forks = class extends APIResource2 { + init_resource(); + Forks = class extends APIResource { }; } }); @@ -35598,8 +17777,8 @@ var init_forks = __esm({ var Sideband; var init_sideband = __esm({ "node_modules/openai/resources/live/sideband/sideband.mjs"() { - init_resource2(); - Sideband = class extends APIResource2 { + init_resource(); + Sideband = class extends APIResource { }; } }); @@ -35608,19 +17787,19 @@ var init_sideband = __esm({ var Live; var init_live = __esm({ "node_modules/openai/resources/live/live.mjs"() { - init_resource2(); - init_sessions5(); - init_sessions5(); + init_resource(); + init_sessions4(); + init_sessions4(); init_forks(); init_forks(); init_sideband(); init_sideband(); - Live = class extends APIResource2 { + Live = class extends APIResource { constructor() { super(...arguments); this.sideband = new Sideband(this._client); this.forks = new Forks(this._client); - this.sessions = new Sessions5(this._client); + this.sessions = new Sessions4(this._client); } /** * Create a Live WebRTC session. Start with the @@ -35640,38 +17819,38 @@ var init_live = __esm({ }; Live.Sideband = Sideband; Live.Forks = Forks; - Live.Sessions = Sessions5; + Live.Sessions = Sessions4; } }); // node_modules/openai/resources/models.mjs -var Models3; -var init_models4 = __esm({ +var Models; +var init_models2 = __esm({ "node_modules/openai/resources/models.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Models3 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Models = class extends APIResource { /** * Retrieves a model instance, providing basic information about the model such as * the owner and permissioning. */ retrieve(model2, options) { - return this._client.get(path3`/models/${model2}`, { ...options, __security: { bearerAuth: true } }); + return this._client.get(path`/models/${model2}`, { ...options, __security: { bearerAuth: true } }); } /** * Lists the currently available models, and provides basic information about each * one such as the owner and availability. */ list(options) { - return this._client.getAPIList("/models", Page2, { ...options, __security: { bearerAuth: true } }); + return this._client.getAPIList("/models", Page, { ...options, __security: { bearerAuth: true } }); } /** * Delete a fine-tuned model. You must have the Owner role in your organization to * delete a model. */ delete(model2, options) { - return this._client.delete(path3`/models/${model2}`, { ...options, __security: { bearerAuth: true } }); + return this._client.delete(path`/models/${model2}`, { ...options, __security: { bearerAuth: true } }); } }; } @@ -35681,8 +17860,8 @@ var init_models4 = __esm({ var Moderations; var init_moderations = __esm({ "node_modules/openai/resources/moderations.mjs"() { - init_resource2(); - Moderations = class extends APIResource2 { + init_resource(); + Moderations = class extends APIResource { /** * Classifies if text and/or image inputs are potentially harmful. Learn more in * the @@ -35708,7 +17887,7 @@ async function encodedMultipartFormRequestOptions(options, client, encodings, ra return { ...options, body: value2, - headers: buildHeaders2([options.headers, { "content-type": encodings[rawBodyField].content_type }]) + headers: buildHeaders([options.headers, { "content-type": encodings[rawBodyField].content_type }]) }; } const encoded = []; @@ -35719,10 +17898,10 @@ async function encodedMultipartFormRequestOptions(options, client, encodings, ra const data = encoding.json ? JSON.stringify(value2) : value2; if (typeof data !== "string") throw new TypeError(`Multipart field ${name} must encode as a string`); - encoded.push([name, makeFile2([data], "", { type: encoding.content_type })]); + encoded.push([name, makeFile([data], "", { type: encoding.content_type })]); delete body[name]; } - const multipart = await multipartFormRequestOptions2({ ...options, body }, client); + const multipart = await multipartFormRequestOptions({ ...options, body }, client); const form = multipart.body; if (!(form instanceof FormData)) { await form.cancel(); @@ -35733,13 +17912,13 @@ async function encodedMultipartFormRequestOptions(options, client, encodings, ra return { ...options, body: form, - headers: buildHeaders2([options.headers, { "content-type": null }]) + headers: buildHeaders([options.headers, { "content-type": null }]) }; } var init_multipart_encoding = __esm({ "node_modules/openai/internal/multipart-encoding.mjs"() { - init_uploads3(); - init_headers3(); + init_uploads(); + init_headers(); } }); @@ -35747,11 +17926,11 @@ var init_multipart_encoding = __esm({ var Calls; var init_calls = __esm({ "node_modules/openai/resources/realtime/calls.mjs"() { - init_resource2(); - init_headers3(); - init_path2(); + init_resource(); + init_headers(); + init_path(); init_multipart_encoding(); - Calls = class extends APIResource2 { + Calls = class extends APIResource { /** * Create a new Realtime API call over WebRTC and receive the SDP answer needed to * complete the peer connection. @@ -35767,7 +17946,7 @@ var init_calls = __esm({ return this._client.post("/realtime/calls", encodedMultipartFormRequestOptions({ body, ...options, - headers: buildHeaders2([{ Accept: "application/sdp" }, options?.headers]), + headers: buildHeaders([{ Accept: "application/sdp" }, options?.headers]), __security: { bearerAuth: true }, __binaryResponse: true }, this._client, { @@ -35787,10 +17966,10 @@ var init_calls = __esm({ * ``` */ accept(callID, body, options) { - return this._client.post(path3`/realtime/calls/${callID}/accept`, { + return this._client.post(path`/realtime/calls/${callID}/accept`, { body, ...options, - headers: buildHeaders2([{ Accept: "*/*" }, options?.headers]), + headers: buildHeaders([{ Accept: "*/*" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -35803,9 +17982,9 @@ var init_calls = __esm({ * ``` */ hangup(callID, options) { - return this._client.post(path3`/realtime/calls/${callID}/hangup`, { + return this._client.post(path`/realtime/calls/${callID}/hangup`, { ...options, - headers: buildHeaders2([{ Accept: "*/*" }, options?.headers]), + headers: buildHeaders([{ Accept: "*/*" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -35820,10 +17999,10 @@ var init_calls = __esm({ * ``` */ refer(callID, body, options) { - return this._client.post(path3`/realtime/calls/${callID}/refer`, { + return this._client.post(path`/realtime/calls/${callID}/refer`, { body, ...options, - headers: buildHeaders2([{ Accept: "*/*" }, options?.headers]), + headers: buildHeaders([{ Accept: "*/*" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -35836,10 +18015,10 @@ var init_calls = __esm({ * ``` */ reject(callID, body = {}, options) { - return this._client.post(path3`/realtime/calls/${callID}/reject`, { + return this._client.post(path`/realtime/calls/${callID}/reject`, { body, ...options, - headers: buildHeaders2([{ Accept: "*/*" }, options?.headers]), + headers: buildHeaders([{ Accept: "*/*" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -35851,8 +18030,8 @@ var init_calls = __esm({ var ClientSecrets; var init_client_secrets = __esm({ "node_modules/openai/resources/realtime/client-secrets.mjs"() { - init_resource2(); - ClientSecrets = class extends APIResource2 { + init_resource(); + ClientSecrets = class extends APIResource { /** * Create a Realtime client secret with an associated session configuration. * @@ -35891,12 +18070,12 @@ var init_client_secrets = __esm({ var Realtime2; var init_realtime2 = __esm({ "node_modules/openai/resources/realtime/realtime.mjs"() { - init_resource2(); + init_resource(); init_calls(); init_calls(); init_client_secrets(); init_client_secrets(); - Realtime2 = class extends APIResource2 { + Realtime2 = class extends APIResource { constructor() { super(...arguments); this.clientSecrets = new ClientSecrets(this._client); @@ -36041,8 +18220,8 @@ function addOutputText(rsp) { } var init_ResponsesParser = __esm({ "node_modules/openai/lib/ResponsesParser.mjs"() { - init_error4(); - init_parser3(); + init_error2(); + init_parser(); } }); @@ -36230,7 +18409,7 @@ var init_canonical_output_text = __esm({ // node_modules/openai/internal/responses/response-accumulator.mjs function validateArrayIndex(collection, index, kind, allowAppend = false) { - if (!Array.isArray(collection) || !Number.isSafeInteger(index) || index < 0 || index > collection.length || (index === collection.length ? !allowAppend || index in collection : !hasOwn2(collection, index))) { + if (!Array.isArray(collection) || !Number.isSafeInteger(index) || index < 0 || index > collection.length || (index === collection.length ? !allowAppend || index in collection : !hasOwn(collection, index))) { throw new OpenAIError(`missing ${kind} at index ${index}`); } } @@ -36252,12 +18431,12 @@ function hasRoutedOutputCallIdentity(output) { return output.type === "function_call" || output.type === "custom_tool_call" || output.type === "shell_call" || output.type === "shell_call_output"; } function getOutputItemIdentityKeys(output, eventType) { - if (!hasOwn2(output, "type") || typeof output.type !== "string") { + if (!hasOwn(output, "type") || typeof output.type !== "string") { throw new OpenAIError(`expected an own output item type for ${eventType}`); } const optionalPlatformID = output.type === "function_call" || output.type === "custom_tool_call"; const identities = []; - if (hasOwn2(output, "id")) { + if (hasOwn(output, "id")) { if (typeof output.id !== "string" || output.id.length === 0) { throw new OpenAIError(`expected a non-empty output item id for ${eventType}`); } @@ -36266,7 +18445,7 @@ function getOutputItemIdentityKeys(output, eventType) { throw new OpenAIError(`expected a non-empty output item id for ${eventType}`); } if (hasRoutedOutputCallIdentity(output)) { - if (!hasOwn2(output, "call_id") || typeof output.call_id !== "string" || output.call_id.length === 0) { + if (!hasOwn(output, "call_id") || typeof output.call_id !== "string" || output.call_id.length === 0) { throw new OpenAIError(`expected a non-empty output item call_id for ${eventType}`); } identities.push(`call:${output.type}:${output.call_id}`); @@ -36329,11 +18508,11 @@ function validateCompletedOutputItemIdentity(event, snapshot) { const replacement = event.item; getOutputItemIdentityKeys(output, event.type); getOutputItemIdentityKeys(replacement, event.type); - if (!hasOwn2(replacement, "type") || output.type !== replacement.type) { + if (!hasOwn(replacement, "type") || output.type !== replacement.type) { throw new OpenAIError(`expected output item type '${output.type}', got '${replacement.type}'`); } - const outputID = hasOwn2(output, "id") ? output.id : void 0; - const replacementID = hasOwn2(replacement, "id") ? replacement.id : void 0; + const outputID = hasOwn(output, "id") ? output.id : void 0; + const replacementID = hasOwn(replacement, "id") ? replacement.id : void 0; if (outputID !== replacementID) { throw new OpenAIError(`expected output item id '${outputID}', got '${replacementID}'`); } @@ -36348,20 +18527,20 @@ function validateOutputItemIdentity(event, snapshot, rejectInvalidShellTargets) } if (rejectInvalidShellTargets && (event.type === "response.shell_call_command.added" || event.type === "response.shell_call_command.delta" || event.type === "response.shell_call_command.done")) { const output2 = getOutput(snapshot, event.output_index); - if (!hasOwn2(output2, "type") || output2.type !== "shell_call") { + if (!hasOwn(output2, "type") || output2.type !== "shell_call") { throw new OpenAIError(`expected output item type 'shell_call', got '${output2.type}'`); } return; } - if (event.type !== "response.content_part.added" && event.type !== "response.content_part.done" && !hasOwn2(expectedOutputItemTypes, event.type)) { + if (event.type !== "response.content_part.added" && event.type !== "response.content_part.done" && !hasOwn(expectedOutputItemTypes, event.type)) { return; } const itemEvent = event; - if (!hasOwn2(event, "item_id") || typeof itemEvent.item_id !== "string" || itemEvent.item_id.length === 0) { + if (!hasOwn(event, "item_id") || typeof itemEvent.item_id !== "string" || itemEvent.item_id.length === 0) { throw new OpenAIError(`expected a non-empty item_id for ${event.type}`); } const output = getOutput(snapshot, itemEvent.output_index); - const outputID = hasOwn2(output, "id") ? output.id : void 0; + const outputID = hasOwn(output, "id") ? output.id : void 0; if (outputID !== itemEvent.item_id) { throw new OpenAIError(`expected item_id '${outputID}', got '${itemEvent.item_id}'`); } @@ -36415,7 +18594,7 @@ function sanitizeResponseEvent(event) { return assertNever3(event); } const stableValues = /* @__PURE__ */ new Map([["type", type]]); - const itemScoped = type === "response.output_item.added" || type === "response.output_item.done" || type === "response.content_part.added" || type === "response.content_part.done" || type === "response.shell_call_command.added" || type === "response.shell_call_command.delta" || type === "response.shell_call_command.done" || hasOwn2(expectedOutputItemTypes, type); + const itemScoped = type === "response.output_item.added" || type === "response.output_item.done" || type === "response.content_part.added" || type === "response.content_part.done" || type === "response.shell_call_command.added" || type === "response.shell_call_command.delta" || type === "response.shell_call_command.done" || hasOwn(expectedOutputItemTypes, type); if (itemScoped) { try { for (const field of responseEventRoutingFields) { @@ -37008,8 +19187,8 @@ function accumulateResponseWithContext(event, snapshot, context, rejectInvalidSh var responseOutputIdentityIndexes, expectedOutputItemTypes, supportedResponseEventTypes, responseEventRoutingFields; var init_response_accumulator = __esm({ "node_modules/openai/internal/responses/response-accumulator.mjs"() { - init_error4(); - init_utils4(); + init_error2(); + init_utils2(); init_canonical_output_text(); responseOutputIdentityIndexes = /* @__PURE__ */ new WeakMap(); expectedOutputItemTypes = { @@ -37135,12 +19314,12 @@ function finalizeResponse(snapshot, params) { var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_accumulatorContext, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, ResponseStream; var init_ResponseStream = __esm({ "node_modules/openai/lib/responses/ResponseStream.mjs"() { - init_tslib2(); - init_error4(); + init_tslib(); + init_error2(); init_EventStream(); init_response_accumulator(); init_ResponsesParser(); - init_streaming4(); + init_streaming2(); ResponseStream = class _ResponseStream extends EventStream2 { /** Creates an unstarted stream, retaining request parameters for structured-output parsing. */ constructor(params) { @@ -37150,7 +19329,7 @@ var init_ResponseStream = __esm({ _ResponseStream_currentResponseSnapshot.set(this, void 0); _ResponseStream_finalResponse.set(this, void 0); _ResponseStream_accumulatorContext.set(this, createResponseContext()); - __classPrivateFieldSet2(this, _ResponseStream_params, params, "f"); + __classPrivateFieldSet(this, _ResponseStream_params, params, "f"); } /** Starts a new response stream or replays an existing response by its identifier. */ static createResponse(client, params, options) { @@ -37169,7 +19348,7 @@ var init_ResponseStream = __esm({ } async _createOrRetrieveResponse(client, params, options) { this._listenForAbort(options?.signal); - __classPrivateFieldGet2(this, _ResponseStream_instances, "m", _ResponseStream_beginRequest).call(this); + __classPrivateFieldGet(this, _ResponseStream_instances, "m", _ResponseStream_beginRequest).call(this); let stream5; let starting_after = null; if ("response_id" in params) { @@ -37180,33 +19359,33 @@ var init_ResponseStream = __esm({ } this._connected(); for await (const event of stream5) { - __classPrivateFieldGet2(this, _ResponseStream_instances, "m", _ResponseStream_addEvent).call(this, event, starting_after); + __classPrivateFieldGet(this, _ResponseStream_instances, "m", _ResponseStream_addEvent).call(this, event, starting_after); } if (stream5.controller.signal?.aborted) { throw this._userAbortError(); } - return __classPrivateFieldGet2(this, _ResponseStream_instances, "m", _ResponseStream_endRequest).call(this); + return __classPrivateFieldGet(this, _ResponseStream_instances, "m", _ResponseStream_endRequest).call(this); } async _fromReadableStream(readableStream, options) { this._listenForAbort(options?.signal); - __classPrivateFieldGet2(this, _ResponseStream_instances, "m", _ResponseStream_beginRequest).call(this); + __classPrivateFieldGet(this, _ResponseStream_instances, "m", _ResponseStream_beginRequest).call(this); this._connected(); - const stream5 = Stream2.fromReadableStream(readableStream, this.controller); + const stream5 = Stream.fromReadableStream(readableStream, this.controller); for await (const event of stream5) { - __classPrivateFieldGet2(this, _ResponseStream_instances, "m", _ResponseStream_addEvent).call(this, event, null); + __classPrivateFieldGet(this, _ResponseStream_instances, "m", _ResponseStream_addEvent).call(this, event, null); } if (stream5.controller.signal?.aborted) { throw this._userAbortError(); } - return __classPrivateFieldGet2(this, _ResponseStream_instances, "m", _ResponseStream_endRequest).call(this); + return __classPrivateFieldGet(this, _ResponseStream_instances, "m", _ResponseStream_endRequest).call(this); } /** Iterates over response events; stopping iteration early aborts the underlying request. */ [(_ResponseStream_params = /* @__PURE__ */ new WeakMap(), _ResponseStream_currentResponseSnapshot = /* @__PURE__ */ new WeakMap(), _ResponseStream_finalResponse = /* @__PURE__ */ new WeakMap(), _ResponseStream_accumulatorContext = /* @__PURE__ */ new WeakMap(), _ResponseStream_instances = /* @__PURE__ */ new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest2() { if (this.ended) { return; } - __classPrivateFieldSet2(this, _ResponseStream_currentResponseSnapshot, void 0, "f"); - __classPrivateFieldSet2(this, _ResponseStream_accumulatorContext, createResponseContext(), "f"); + __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, void 0, "f"); + __classPrivateFieldSet(this, _ResponseStream_accumulatorContext, createResponseContext(), "f"); }, _ResponseStream_addEvent = function _ResponseStream_addEvent2(event, starting_after) { if (this.ended) { return; @@ -37221,13 +19400,13 @@ var init_ResponseStream = __esm({ // oxlint-disable-next-line anti-slop/no-runtime-typeof -- An error event can contain malformed server data; validate its container before extracting error details. "error" in event && typeof event.error === "object" && event.error !== null ? event.error : event ); - throw new APIError2(void 0, error, event.message, void 0); + throw new APIError(void 0, error, event.message, void 0); } let dispatchEvent = event; - const response = accumulateResponseWithContext(event, __classPrivateFieldGet2(this, _ResponseStream_currentResponseSnapshot, "f"), __classPrivateFieldGet2(this, _ResponseStream_accumulatorContext, "f"), true, (sanitizedEvent) => { + const response = accumulateResponseWithContext(event, __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, "f"), __classPrivateFieldGet(this, _ResponseStream_accumulatorContext, "f"), true, (sanitizedEvent) => { dispatchEvent = sanitizedEvent; }); - __classPrivateFieldSet2(this, _ResponseStream_currentResponseSnapshot, response, "f"); + __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, response, "f"); maybeEmit("event", event); switch (dispatchEvent.type) { case "response.output_text.delta": { @@ -37279,14 +19458,14 @@ var init_ResponseStream = __esm({ if (this.ended) { throw new OpenAIError(`stream has ended, this shouldn't happen`); } - const snapshot = __classPrivateFieldGet2(this, _ResponseStream_currentResponseSnapshot, "f"); + const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, "f"); if (!snapshot) { throw new OpenAIError(`request ended without sending any events`); } - __classPrivateFieldSet2(this, _ResponseStream_currentResponseSnapshot, void 0, "f"); - __classPrivateFieldSet2(this, _ResponseStream_accumulatorContext, createResponseContext(), "f"); - const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet2(this, _ResponseStream_params, "f")); - __classPrivateFieldSet2(this, _ResponseStream_finalResponse, parsedResponse, "f"); + __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, void 0, "f"); + __classPrivateFieldSet(this, _ResponseStream_accumulatorContext, createResponseContext(), "f"); + const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, "f")); + __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, "f"); return parsedResponse; }, Symbol.asyncIterator)]() { return this._createIterator((push) => { @@ -37303,7 +19482,7 @@ var init_ResponseStream = __esm({ */ async finalResponse() { await this.done(); - const response = __classPrivateFieldGet2(this, _ResponseStream_finalResponse, "f"); + const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, "f"); if (!response) { throw new OpenAIError("stream ended without producing a Response"); } @@ -37317,10 +19496,10 @@ var init_ResponseStream = __esm({ var InputItems2; var init_input_items2 = __esm({ "node_modules/openai/resources/responses/input-items.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - InputItems2 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + InputItems2 = class extends APIResource { /** * Returns a list of input items for a given response. * @@ -37335,7 +19514,7 @@ var init_input_items2 = __esm({ * ``` */ list(responseID, query = {}, options) { - return this._client.getAPIList(path3`/responses/${responseID}/input_items`, CursorPage, { query, ...options, __security: { bearerAuth: true } }); + return this._client.getAPIList(path`/responses/${responseID}/input_items`, CursorPage, { query, ...options, __security: { bearerAuth: true } }); } }; } @@ -37345,8 +19524,8 @@ var init_input_items2 = __esm({ var InputTokens2; var init_input_tokens2 = __esm({ "node_modules/openai/resources/responses/input-tokens.mjs"() { - init_resource2(); - InputTokens2 = class extends APIResource2 { + init_resource(); + InputTokens2 = class extends APIResource { /** * Returns input token counts of the request. * @@ -37375,14 +19554,14 @@ var init_responses2 = __esm({ "node_modules/openai/resources/responses/responses.mjs"() { init_ResponsesParser(); init_ResponseStream(); - init_resource2(); + init_resource(); init_input_items2(); init_input_items2(); init_input_tokens2(); init_input_tokens2(); - init_headers3(); - init_path2(); - Responses2 = class extends APIResource2 { + init_headers(); + init_path(); + Responses2 = class extends APIResource { constructor() { super(...arguments); this.inputItems = new InputItems2(this._client); @@ -37402,7 +19581,7 @@ var init_responses2 = __esm({ }); } retrieve(responseID, query = {}, options) { - return this._client.get(path3`/responses/${responseID}`, { + return this._client.get(path`/responses/${responseID}`, { query, ...options, stream: query?.stream ?? false, @@ -37425,9 +19604,9 @@ var init_responses2 = __esm({ * ``` */ delete(responseID, options) { - return this._client.delete(path3`/responses/${responseID}`, { + return this._client.delete(path`/responses/${responseID}`, { ...options, - headers: buildHeaders2([{ Accept: "*/*" }, options?.headers]), + headers: buildHeaders([{ Accept: "*/*" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -37453,7 +19632,7 @@ var init_responses2 = __esm({ * ``` */ cancel(responseID, options) { - return this._client.post(path3`/responses/${responseID}/cancel`, { + return this._client.post(path`/responses/${responseID}/cancel`, { ...options, __security: { bearerAuth: true } }); @@ -37486,14 +19665,14 @@ var init_responses2 = __esm({ var Alerts; var init_alerts = __esm({ "node_modules/openai/resources/safety/alerts.mjs"() { - init_resource2(); - init_path2(); - Alerts = class extends APIResource2 { + init_resource(); + init_path(); + Alerts = class extends APIResource { /** * Get a safety alert belonging to the authenticated API project. */ retrieve(id, options) { - return this._client.get(path3`/safety/alerts/${id}`, { ...options, __security: { bearerAuth: true } }); + return this._client.get(path`/safety/alerts/${id}`, { ...options, __security: { bearerAuth: true } }); } }; } @@ -37503,10 +19682,10 @@ var init_alerts = __esm({ var Safety; var init_safety = __esm({ "node_modules/openai/resources/safety/safety.mjs"() { - init_resource2(); + init_resource(); init_alerts(); init_alerts(); - Safety = class extends APIResource2 { + Safety = class extends APIResource { constructor() { super(...arguments); this.alerts = new Alerts(this._client); @@ -37520,17 +19699,17 @@ var init_safety = __esm({ var Content2; var init_content2 = __esm({ "node_modules/openai/resources/skills/content.mjs"() { - init_resource2(); - init_headers3(); - init_path2(); - Content2 = class extends APIResource2 { + init_resource(); + init_headers(); + init_path(); + Content2 = class extends APIResource { /** * Download a skill zip bundle by its ID. */ retrieve(skillID, options) { - return this._client.get(path3`/skills/${skillID}/content`, { + return this._client.get(path`/skills/${skillID}/content`, { ...options, - headers: buildHeaders2([{ Accept: "application/binary" }, options?.headers]), + headers: buildHeaders([{ Accept: "application/binary" }, options?.headers]), __security: { bearerAuth: true }, __binaryResponse: true }); @@ -37543,18 +19722,18 @@ var init_content2 = __esm({ var Content3; var init_content3 = __esm({ "node_modules/openai/resources/skills/versions/content.mjs"() { - init_resource2(); - init_headers3(); - init_path2(); - Content3 = class extends APIResource2 { + init_resource(); + init_headers(); + init_path(); + Content3 = class extends APIResource { /** * Download a skill version zip bundle. */ retrieve(version, params, options) { const { skill_id } = params; - return this._client.get(path3`/skills/${skill_id}/versions/${version}/content`, { + return this._client.get(path`/skills/${skill_id}/versions/${version}/content`, { ...options, - headers: buildHeaders2([{ Accept: "application/binary" }, options?.headers]), + headers: buildHeaders([{ Accept: "application/binary" }, options?.headers]), __security: { bearerAuth: true }, __binaryResponse: true }); @@ -37564,16 +19743,16 @@ var init_content3 = __esm({ }); // node_modules/openai/resources/skills/versions/versions.mjs -var Versions4; -var init_versions4 = __esm({ +var Versions; +var init_versions = __esm({ "node_modules/openai/resources/skills/versions/versions.mjs"() { - init_resource2(); + init_resource(); init_content3(); init_content3(); - init_pagination2(); - init_uploads3(); - init_path2(); - Versions4 = class extends APIResource2 { + init_pagination(); + init_uploads(); + init_path(); + Versions = class extends APIResource { constructor() { super(...arguments); this.content = new Content3(this._client); @@ -37582,7 +19761,7 @@ var init_versions4 = __esm({ * Create a new immutable skill version. */ create(skillID, body = {}, options) { - return this._client.post(path3`/skills/${skillID}/versions`, maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client, { + return this._client.post(path`/skills/${skillID}/versions`, maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client, { stripFilenames: false })); } @@ -37591,7 +19770,7 @@ var init_versions4 = __esm({ */ retrieve(version, params, options) { const { skill_id } = params; - return this._client.get(path3`/skills/${skill_id}/versions/${version}`, { + return this._client.get(path`/skills/${skill_id}/versions/${version}`, { ...options, __security: { bearerAuth: true } }); @@ -37600,7 +19779,7 @@ var init_versions4 = __esm({ * List skill versions for a skill. */ list(skillID, query = {}, options) { - return this._client.getAPIList(path3`/skills/${skillID}/versions`, CursorPage, { + return this._client.getAPIList(path`/skills/${skillID}/versions`, CursorPage, { query, ...options, __security: { bearerAuth: true } @@ -37611,33 +19790,33 @@ var init_versions4 = __esm({ */ delete(version, params, options) { const { skill_id } = params; - return this._client.delete(path3`/skills/${skill_id}/versions/${version}`, { + return this._client.delete(path`/skills/${skill_id}/versions/${version}`, { ...options, __security: { bearerAuth: true } }); } }; - Versions4.Content = Content3; + Versions.Content = Content3; } }); // node_modules/openai/resources/skills/skills.mjs -var Skills3; -var init_skills3 = __esm({ +var Skills; +var init_skills = __esm({ "node_modules/openai/resources/skills/skills.mjs"() { - init_resource2(); + init_resource(); init_content2(); init_content2(); - init_versions4(); - init_versions4(); - init_pagination2(); - init_uploads3(); - init_path2(); - Skills3 = class extends APIResource2 { + init_versions(); + init_versions(); + init_pagination(); + init_uploads(); + init_path(); + Skills = class extends APIResource { constructor() { super(...arguments); this.content = new Content2(this._client); - this.versions = new Versions4(this._client); + this.versions = new Versions(this._client); } /** * Create a new skill. @@ -37651,13 +19830,13 @@ var init_skills3 = __esm({ * Get a skill by its ID. */ retrieve(skillID, options) { - return this._client.get(path3`/skills/${skillID}`, { ...options, __security: { bearerAuth: true } }); + return this._client.get(path`/skills/${skillID}`, { ...options, __security: { bearerAuth: true } }); } /** * Update the default version pointer for a skill. */ update(skillID, body, options) { - return this._client.post(path3`/skills/${skillID}`, { + return this._client.post(path`/skills/${skillID}`, { body, ...options, __security: { bearerAuth: true } @@ -37677,11 +19856,11 @@ var init_skills3 = __esm({ * Delete a skill by its ID. */ delete(skillID, options) { - return this._client.delete(path3`/skills/${skillID}`, { ...options, __security: { bearerAuth: true } }); + return this._client.delete(path`/skills/${skillID}`, { ...options, __security: { bearerAuth: true } }); } }; - Skills3.Content = Content2; - Skills3.Versions = Versions4; + Skills.Content = Content2; + Skills.Versions = Versions; } }); @@ -37689,10 +19868,10 @@ var init_skills3 = __esm({ var Parts; var init_parts = __esm({ "node_modules/openai/resources/uploads/parts.mjs"() { - init_resource2(); - init_uploads3(); - init_path2(); - Parts = class extends APIResource2 { + init_resource(); + init_uploads(); + init_path(); + Parts = class extends APIResource { /** * Adds a * [Part](https://developers.openai.com/api/reference/resources/uploads/subresources/parts) @@ -37708,7 +19887,7 @@ var init_parts = __esm({ * [complete the Upload](https://developers.openai.com/api/reference/resources/uploads/methods/complete). */ create(uploadID, body, options) { - return this._client.post(path3`/uploads/${uploadID}/parts`, multipartFormRequestOptions2({ body, ...options, __security: { bearerAuth: true } }, this._client)); + return this._client.post(path`/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); } }; } @@ -37716,13 +19895,13 @@ var init_parts = __esm({ // node_modules/openai/resources/uploads/uploads.mjs var Uploads; -var init_uploads5 = __esm({ +var init_uploads3 = __esm({ "node_modules/openai/resources/uploads/uploads.mjs"() { - init_resource2(); + init_resource(); init_parts(); init_parts(); - init_path2(); - Uploads = class extends APIResource2 { + init_path(); + Uploads = class extends APIResource { constructor() { super(...arguments); this.parts = new Parts(this._client); @@ -37759,7 +19938,7 @@ var init_uploads5 = __esm({ * Returns the Upload object with status `cancelled`. */ cancel(uploadID, options) { - return this._client.post(path3`/uploads/${uploadID}/cancel`, { + return this._client.post(path`/uploads/${uploadID}/cancel`, { ...options, __security: { bearerAuth: true } }); @@ -37782,7 +19961,7 @@ var init_uploads5 = __esm({ * object. */ complete(uploadID, body, options) { - return this._client.post(path3`/uploads/${uploadID}/complete`, { + return this._client.post(path`/uploads/${uploadID}/complete`, { body, ...options, __security: { bearerAuth: true } @@ -37867,21 +20046,21 @@ var init_vector_store_upload = __esm({ var FileBatches; var init_file_batches = __esm({ "node_modules/openai/resources/vector-stores/file-batches.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); + init_resource(); + init_pagination(); + init_headers(); init_vector_store_polling(); init_vector_store_upload(); - init_path2(); - FileBatches = class extends APIResource2 { + init_path(); + FileBatches = class extends APIResource { /** * Create a vector store file batch. */ create(vectorStoreID, body, options) { - return this._client.post(path3`/vector_stores/${vectorStoreID}/file_batches`, { + return this._client.post(path`/vector_stores/${vectorStoreID}/file_batches`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -37890,9 +20069,9 @@ var init_file_batches = __esm({ */ retrieve(batchID, params, options) { const { vector_store_id } = params; - return this._client.get(path3`/vector_stores/${vector_store_id}/file_batches/${batchID}`, { + return this._client.get(path`/vector_stores/${vector_store_id}/file_batches/${batchID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -37902,9 +20081,9 @@ var init_file_batches = __esm({ */ cancel(batchID, params, options) { const { vector_store_id } = params; - return this._client.post(path3`/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, { + return this._client.post(path`/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -37920,10 +20099,10 @@ var init_file_batches = __esm({ */ listFiles(batchID, params, options) { const { vector_store_id, ...query } = params; - return this._client.getAPIList(path3`/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, CursorPage, { + return this._client.getAPIList(path`/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -37949,25 +20128,25 @@ var init_file_batches = __esm({ }); // node_modules/openai/resources/vector-stores/files.mjs -var Files6; -var init_files6 = __esm({ +var Files4; +var init_files4 = __esm({ "node_modules/openai/resources/vector-stores/files.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); + init_resource(); + init_pagination(); + init_headers(); init_vector_store_polling(); - init_path2(); - Files6 = class extends APIResource2 { + init_path(); + Files4 = class extends APIResource { /** * Create a vector store file by attaching a * [File](https://developers.openai.com/api/reference/resources/files) to a * [vector store](https://developers.openai.com/api/reference/resources/vector_stores). */ create(vectorStoreID, body, options) { - return this._client.post(path3`/vector_stores/${vectorStoreID}/files`, { + return this._client.post(path`/vector_stores/${vectorStoreID}/files`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -37976,9 +20155,9 @@ var init_files6 = __esm({ */ retrieve(fileID, params, options) { const { vector_store_id } = params; - return this._client.get(path3`/vector_stores/${vector_store_id}/files/${fileID}`, { + return this._client.get(path`/vector_stores/${vector_store_id}/files/${fileID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -37987,10 +20166,10 @@ var init_files6 = __esm({ */ update(fileID, params, options) { const { vector_store_id, ...body } = params; - return this._client.post(path3`/vector_stores/${vector_store_id}/files/${fileID}`, { + return this._client.post(path`/vector_stores/${vector_store_id}/files/${fileID}`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -37998,10 +20177,10 @@ var init_files6 = __esm({ * Returns a list of vector store files. */ list(vectorStoreID, query = {}, options) { - return this._client.getAPIList(path3`/vector_stores/${vectorStoreID}/files`, CursorPage, { + return this._client.getAPIList(path`/vector_stores/${vectorStoreID}/files`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -38013,9 +20192,9 @@ var init_files6 = __esm({ */ delete(fileID, params, options) { const { vector_store_id } = params; - return this._client.delete(path3`/vector_stores/${vector_store_id}/files/${fileID}`, { + return this._client.delete(path`/vector_stores/${vector_store_id}/files/${fileID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -38057,9 +20236,9 @@ var init_files6 = __esm({ */ content(fileID, params, options) { const { vector_store_id } = params; - return this._client.getAPIList(path3`/vector_stores/${vector_store_id}/files/${fileID}/content`, Page2, { + return this._client.getAPIList(path`/vector_stores/${vector_store_id}/files/${fileID}/content`, Page, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -38071,18 +20250,18 @@ var init_files6 = __esm({ var VectorStores; var init_vector_stores = __esm({ "node_modules/openai/resources/vector-stores/vector-stores.mjs"() { - init_resource2(); + init_resource(); init_file_batches(); init_file_batches(); - init_files6(); - init_files6(); - init_pagination2(); - init_headers3(); - init_path2(); - VectorStores = class extends APIResource2 { + init_files4(); + init_files4(); + init_pagination(); + init_headers(); + init_path(); + VectorStores = class extends APIResource { constructor() { super(...arguments); - this.files = new Files6(this._client); + this.files = new Files4(this._client); this.fileBatches = new FileBatches(this._client); } /** @@ -38092,7 +20271,7 @@ var init_vector_stores = __esm({ return this._client.post("/vector_stores", { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -38100,9 +20279,9 @@ var init_vector_stores = __esm({ * Retrieves a vector store. */ retrieve(vectorStoreID, options) { - return this._client.get(path3`/vector_stores/${vectorStoreID}`, { + return this._client.get(path`/vector_stores/${vectorStoreID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -38110,10 +20289,10 @@ var init_vector_stores = __esm({ * Modifies a vector store. */ update(vectorStoreID, body, options) { - return this._client.post(path3`/vector_stores/${vectorStoreID}`, { + return this._client.post(path`/vector_stores/${vectorStoreID}`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -38124,7 +20303,7 @@ var init_vector_stores = __esm({ return this._client.getAPIList("/vector_stores", CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -38132,9 +20311,9 @@ var init_vector_stores = __esm({ * Delete a vector store. */ delete(vectorStoreID, options) { - return this._client.delete(path3`/vector_stores/${vectorStoreID}`, { + return this._client.delete(path`/vector_stores/${vectorStoreID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -38143,16 +20322,16 @@ var init_vector_stores = __esm({ * filter. */ search(vectorStoreID, body, options) { - return this._client.getAPIList(path3`/vector_stores/${vectorStoreID}/search`, Page2, { + return this._client.getAPIList(path`/vector_stores/${vectorStoreID}/search`, Page, { body, method: "post", ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } }; - VectorStores.Files = Files6; + VectorStores.Files = Files4; VectorStores.FileBatches = FileBatches; } }); @@ -38161,19 +20340,19 @@ var init_vector_stores = __esm({ var Videos; var init_videos = __esm({ "node_modules/openai/resources/videos.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_uploads3(); - init_path2(); - Videos = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_uploads(); + init_path(); + Videos = class extends APIResource { /** * Create a new video generation job from a prompt and optional reference assets. * * @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026. */ create(body, options) { - return this._client.post("/videos", multipartFormRequestOptions2({ body, ...options, __security: { bearerAuth: true } }, this._client)); + return this._client.post("/videos", multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); } /** * Fetch the latest metadata for a generated video. @@ -38181,7 +20360,7 @@ var init_videos = __esm({ * @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026. */ retrieve(videoID, options) { - return this._client.get(path3`/videos/${videoID}`, { ...options, __security: { bearerAuth: true } }); + return this._client.get(path`/videos/${videoID}`, { ...options, __security: { bearerAuth: true } }); } /** * List recently generated videos for the current project. @@ -38201,7 +20380,7 @@ var init_videos = __esm({ * @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026. */ delete(videoID, options) { - return this._client.delete(path3`/videos/${videoID}`, { ...options, __security: { bearerAuth: true } }); + return this._client.delete(path`/videos/${videoID}`, { ...options, __security: { bearerAuth: true } }); } /** * Create a character from an uploaded video. @@ -38209,7 +20388,7 @@ var init_videos = __esm({ * @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026. */ createCharacter(body, options) { - return this._client.post("/videos/characters", multipartFormRequestOptions2({ body, ...options, __security: { bearerAuth: true } }, this._client)); + return this._client.post("/videos/characters", multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); } /** * Download the generated video bytes or a derived preview asset. @@ -38219,10 +20398,10 @@ var init_videos = __esm({ * @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026. */ downloadContent(videoID, query = {}, options) { - return this._client.get(path3`/videos/${videoID}/content`, { + return this._client.get(path`/videos/${videoID}/content`, { query, ...options, - headers: buildHeaders2([{ Accept: "application/binary" }, options?.headers]), + headers: buildHeaders([{ Accept: "application/binary" }, options?.headers]), __security: { bearerAuth: true }, __binaryResponse: true }); @@ -38234,7 +20413,7 @@ var init_videos = __esm({ * @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026. */ edit(body, options) { - return this._client.post("/videos/edits", multipartFormRequestOptions2({ body, ...options, __security: { bearerAuth: true } }, this._client)); + return this._client.post("/videos/edits", multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); } /** * Create an extension of a completed video. @@ -38242,7 +20421,7 @@ var init_videos = __esm({ * @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026. */ extend(body, options) { - return this._client.post("/videos/extensions", multipartFormRequestOptions2({ body, ...options, __security: { bearerAuth: true } }, this._client)); + return this._client.post("/videos/extensions", multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); } /** * Fetch a character. @@ -38250,7 +20429,7 @@ var init_videos = __esm({ * @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026. */ getCharacter(characterID, options) { - return this._client.get(path3`/videos/characters/${characterID}`, { + return this._client.get(path`/videos/characters/${characterID}`, { ...options, __security: { bearerAuth: true } }); @@ -38261,7 +20440,7 @@ var init_videos = __esm({ * @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026. */ remix(videoID, body, options) { - return this._client.post(path3`/videos/${videoID}/remix`, maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); + return this._client.post(path`/videos/${videoID}/remix`, maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); } }; } @@ -38285,7 +20464,7 @@ function* signatureCandidates(signatureHeader) { } function decodeSignature(signature) { try { - const signatureBytes = fromBase642(signature); + const signatureBytes = fromBase64(signature); return signatureBytes.byteLength === SHA256_SIGNATURE_LENGTH ? signatureBytes : void 0; } catch { return void 0; @@ -38334,9 +20513,9 @@ async function verifyWebhookSignature(payload, signatureHeader, timestamp2, webh if (useBoundedVerification && !firstSignature) { throw new InvalidWebhookSignatureError("The given webhook signature does not match the expected signature"); } - const decodedSecret = Uint8Array.from(secret.startsWith("whsec_") ? fromBase642(secret.slice("whsec_".length)) : encodeUTF82(secret)); + const decodedSecret = Uint8Array.from(secret.startsWith("whsec_") ? fromBase64(secret.slice("whsec_".length)) : encodeUTF8(secret)); const signedPayload = webhookId ? `${webhookId}.${timestamp2}.${payload}` : `${timestamp2}.${payload}`; - const signedPayloadBytes = Uint8Array.from(encodeUTF82(signedPayload)); + const signedPayloadBytes = Uint8Array.from(encodeUTF8(signedPayload)); const key = await crypto.subtle.importKey("raw", decodedSecret, { name: "HMAC", hash: "SHA-256" }, false, useBoundedVerification ? ["sign", "verify"] : ["verify"]); if (useBoundedVerification && firstSignature) { const expectedSignature = new Uint8Array(await crypto.subtle.sign("HMAC", key, signedPayloadBytes)); @@ -38351,7 +20530,7 @@ async function verifyWebhookSignature(payload, signatureHeader, timestamp2, webh } for (const signature of signatureCandidates(signatureHeader)) { try { - const signatureBytes = Uint8Array.from(fromBase642(signature)); + const signatureBytes = Uint8Array.from(fromBase64(signature)); const isValid2 = await crypto.subtle.verify("HMAC", key, signatureBytes, signedPayloadBytes); if (isValid2) { return; @@ -38364,9 +20543,9 @@ async function verifyWebhookSignature(payload, signatureHeader, timestamp2, webh var MAX_DIRECT_WEBHOOK_VERIFICATIONS, SHA256_SIGNATURE_LENGTH; var init_webhook_signature = __esm({ "node_modules/openai/lib/webhook-signature.mjs"() { - init_error4(); - init_base642(); - init_bytes2(); + init_error2(); + init_base64(); + init_bytes(); MAX_DIRECT_WEBHOOK_VERIFICATIONS = 32; SHA256_SIGNATURE_LENGTH = 32; } @@ -38376,8 +20555,8 @@ var init_webhook_signature = __esm({ var EventTypes; var init_event_types = __esm({ "node_modules/openai/resources/webhooks/event-types.mjs"() { - init_resource2(); - EventTypes = class extends APIResource2 { + init_resource(); + EventTypes = class extends APIResource { /** * Returns webhook event types visible to the authenticated project. * @@ -38395,18 +20574,18 @@ var init_event_types = __esm({ }); // node_modules/openai/resources/webhooks/webhooks.mjs -var _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader, Webhooks2; -var init_webhooks2 = __esm({ +var _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader, Webhooks; +var init_webhooks = __esm({ "node_modules/openai/resources/webhooks/webhooks.mjs"() { - init_tslib2(); - init_resource2(); - init_headers3(); + init_tslib(); + init_resource(); + init_headers(); init_webhook_signature(); init_event_types(); init_event_types(); - init_pagination2(); - init_path2(); - Webhooks2 = class extends APIResource2 { + init_pagination(); + init_path(); + Webhooks = class extends APIResource { constructor() { super(...arguments); _Webhooks_instances.add(this); @@ -38439,7 +20618,7 @@ var init_webhooks2 = __esm({ * ``` */ retrieve(webhookEndpointID, options) { - return this._client.get(path3`/webhook_endpoints/${webhookEndpointID}`, { + return this._client.get(path`/webhook_endpoints/${webhookEndpointID}`, { ...options, __security: { bearerAuth: true } }); @@ -38453,7 +20632,7 @@ var init_webhooks2 = __esm({ * ``` */ update(webhookEndpointID, body = {}, options) { - return this._client.post(path3`/webhook_endpoints/${webhookEndpointID}`, { + return this._client.post(path`/webhook_endpoints/${webhookEndpointID}`, { body, ...options, __security: { bearerAuth: true } @@ -38488,7 +20667,7 @@ var init_webhooks2 = __esm({ * ``` */ delete(webhookEndpointID, options) { - return this._client.delete(path3`/webhook_endpoints/${webhookEndpointID}`, { + return this._client.delete(path`/webhook_endpoints/${webhookEndpointID}`, { ...options, __security: { bearerAuth: true } }); @@ -38503,7 +20682,7 @@ var init_webhooks2 = __esm({ * ``` */ rotateSecret(webhookEndpointID, body = {}, options) { - return this._client.post(path3`/webhook_endpoints/${webhookEndpointID}/rotate_secret`, { + return this._client.post(path`/webhook_endpoints/${webhookEndpointID}/rotate_secret`, { body, ...options, __security: { bearerAuth: true } @@ -38521,7 +20700,7 @@ var init_webhooks2 = __esm({ * ``` */ test(webhookEndpointID, body, options) { - return this._client.post(path3`/webhook_endpoints/${webhookEndpointID}/test`, { + return this._client.post(path`/webhook_endpoints/${webhookEndpointID}/test`, { body, ...options, __security: { bearerAuth: true } @@ -38548,11 +20727,11 @@ var init_webhooks2 = __esm({ if (typeof crypto === "undefined" || typeof crypto.subtle?.importKey !== "function" || typeof crypto.subtle.verify !== "function") { throw new Error("Webhook signature verification is only supported when the `crypto` global is defined"); } - __classPrivateFieldGet2(this, _Webhooks_instances, "m", _Webhooks_validateSecret).call(this, secret); - const headersObj = buildHeaders2([headers]).values; - const signatureHeader = __classPrivateFieldGet2(this, _Webhooks_instances, "m", _Webhooks_getRequiredHeader).call(this, headersObj, "webhook-signature"); - const timestamp2 = __classPrivateFieldGet2(this, _Webhooks_instances, "m", _Webhooks_getRequiredHeader).call(this, headersObj, "webhook-timestamp"); - const webhookId = __classPrivateFieldGet2(this, _Webhooks_instances, "m", _Webhooks_getRequiredHeader).call(this, headersObj, "webhook-id"); + __classPrivateFieldGet(this, _Webhooks_instances, "m", _Webhooks_validateSecret).call(this, secret); + const headersObj = buildHeaders([headers]).values; + const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, "m", _Webhooks_getRequiredHeader).call(this, headersObj, "webhook-signature"); + const timestamp2 = __classPrivateFieldGet(this, _Webhooks_instances, "m", _Webhooks_getRequiredHeader).call(this, headersObj, "webhook-timestamp"); + const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, "m", _Webhooks_getRequiredHeader).call(this, headersObj, "webhook-id"); if (webhookSignatureRequiresSigning(signatureHeader) && typeof crypto.subtle.sign !== "function") { throw new Error("Webhook signature verification is only supported when the `crypto` global is defined"); } @@ -38573,40 +20752,40 @@ var init_webhooks2 = __esm({ } return value2; }; - Webhooks2.EventTypes = EventTypes; + Webhooks.EventTypes = EventTypes; } }); // node_modules/openai/resources/index.mjs -var init_resources3 = __esm({ +var init_resources = __esm({ "node_modules/openai/resources/index.mjs"() { init_chat2(); - init_shared2(); + init_shared(); init_admin(); init_audio(); - init_batches3(); - init_beta2(); - init_completions4(); + init_batches(); + init_beta(); + init_completions3(); init_containers(); init_content_provenance_checks(); init_conversations(); init_embeddings2(); init_evals(); - init_files5(); + init_files3(); init_fine_tuning(); init_graders2(); init_images(); init_live(); - init_models4(); + init_models2(); init_moderations(); init_realtime2(); init_responses2(); init_safety(); - init_skills3(); - init_uploads5(); + init_skills(); + init_uploads3(); init_vector_stores(); init_videos(); - init_webhooks2(); + init_webhooks(); } }); @@ -38646,7 +20825,7 @@ var init_provider = __esm({ // node_modules/openai/client.mjs function isRunningInBrowserOrBrowserWorker() { - if (isRunningInBrowser2()) + if (isRunningInBrowser()) return true; const scope = globalThis; return typeof scope.WorkerGlobalScope === "function" && scope instanceof scope.WorkerGlobalScope && typeof scope.WorkerNavigator === "function" && scope.navigator instanceof scope.WorkerNavigator && typeof scope.navigator?.userAgent === "string" && scope.navigator.userAgent !== "Cloudflare-Workers" && scope.process?.versions?.node === void 0 && scope.Deno === void 0 && scope.Bun === void 0 && scope.EdgeRuntime === void 0 && scope.WebSocketPair === void 0; @@ -38688,46 +20867,46 @@ function isUndiciDispatcherVersionMismatchError(error) { } return false; } -var _OpenAI_instances, _a4, _OpenAI_encoder, _OpenAI_x509Authentication, _OpenAI_x509Credential, _OpenAI_x509Fetch, _OpenAI_explicitDataResidency, _OpenAI_responseAttempts, _OpenAI_baseURLOverridden, WORKLOAD_IDENTITY_API_KEY_PLACEHOLDER, inheritedDataResidencySelection, OpenAI, composedCallerSignals; -var init_client2 = __esm({ +var _OpenAI_instances, _a3, _OpenAI_encoder, _OpenAI_x509Authentication, _OpenAI_x509Credential, _OpenAI_x509Fetch, _OpenAI_explicitDataResidency, _OpenAI_responseAttempts, _OpenAI_baseURLOverridden, WORKLOAD_IDENTITY_API_KEY_PLACEHOLDER, inheritedDataResidencySelection, OpenAI, composedCallerSignals; +var init_client = __esm({ "node_modules/openai/client.mjs"() { - init_tslib2(); - init_uuid2(); - init_values2(); - init_sleep2(); - init_abort3(); - init_errors2(); - init_parse2(); - init_detect_platform2(); - init_shims2(); - init_request_options2(); - init_query2(); - init_version3(); + init_tslib(); + init_uuid(); + init_values(); + init_sleep(); + init_abort2(); + init_errors(); + init_parse(); + init_detect_platform(); + init_shims(); + init_request_options(); + init_query(); + init_version2(); init_data_residency(); - init_error3(); - init_pagination2(); + init_error(); + init_pagination(); init_workload_identity_auth(); init_x509_api_origin(); init_x509_workload_identity_auth(); init_x509_credential_options(); init_x509_transport_state(); - init_error3(); - init_uploads4(); - init_resources3(); - init_api_promise2(); + init_error(); + init_uploads2(); + init_resources(); + init_api_promise(); init_realtime_credentials(); - init_batches3(); - init_completions4(); + init_batches(); + init_completions3(); init_content_provenance_checks(); init_embeddings2(); - init_files5(); + init_files3(); init_images(); - init_models4(); + init_models2(); init_moderations(); init_videos(); init_admin(); init_audio(); - init_beta2(); + init_beta(); init_chat(); init_containers(); init_conversations(); @@ -38738,16 +20917,16 @@ var init_client2 = __esm({ init_realtime2(); init_responses2(); init_safety(); - init_skills3(); - init_uploads5(); + init_skills(); + init_uploads3(); init_vector_stores(); - init_webhooks2(); - init_detect_platform2(); - init_headers3(); + init_webhooks(); + init_detect_platform(); + init_headers(); init_provider(); - init_env2(); - init_log2(); - init_values2(); + init_env(); + init_log(); + init_values(); WORKLOAD_IDENTITY_API_KEY_PLACEHOLDER = "workload-identity-auth"; inheritedDataResidencySelection = /* @__PURE__ */ Symbol("inheritedDataResidencySelection"); OpenAI = class { @@ -38777,22 +20956,22 @@ var init_client2 = __esm({ _OpenAI_x509Fetch.set(this, void 0); _OpenAI_explicitDataResidency.set(this, false); _OpenAI_responseAttempts.set(this, /* @__PURE__ */ new WeakMap()); - this.completions = new Completions3(this); + this.completions = new Completions2(this); this.chat = new Chat(this); this.embeddings = new Embeddings(this); - this.files = new Files5(this); + this.files = new Files3(this); this.images = new Images(this); this.contentProvenanceChecks = new ContentProvenanceChecks(this); this.audio = new Audio(this); this.moderations = new Moderations(this); - this.models = new Models3(this); + this.models = new Models(this); this.fineTuning = new FineTuning(this); this.graders = new Graders2(this); this.vectorStores = new VectorStores(this); this.safety = new Safety(this); - this.webhooks = new Webhooks2(this); - this.beta = new Beta2(this); - this.batches = new Batches3(this); + this.webhooks = new Webhooks(this); + this.beta = new Beta(this); + this.batches = new Batches(this); this.uploads = new Uploads(this); this.admin = new Admin(this); this.responses = new Responses2(this); @@ -38801,13 +20980,13 @@ var init_client2 = __esm({ this.conversations = new Conversations(this); this.evals = new Evals(this); this.containers = new Containers(this); - this.skills = new Skills3(this); + this.skills = new Skills(this); this.videos = new Videos(this); const { credential, options: normalizedOptions } = normalizeX509CredentialOptions(clientOptions); clientOptions = normalizedOptions; const residencyBaseURL = resolveDataResidency(clientOptions); const provider2 = clientOptions.provider; - const { baseURL = provider2 ? null : readEnv2("OPENAI_BASE_URL"), dataResidency: _dataResidency, [inheritedDataResidencySelection]: inheritedResidencySelection = false, apiKey = provider2 ? null : readEnv2("OPENAI_API_KEY") ?? null, adminAPIKey = provider2 ? null : readEnv2("OPENAI_ADMIN_KEY") ?? null, organization = provider2 ? null : readEnv2("OPENAI_ORG_ID") ?? null, project = provider2 ? null : readEnv2("OPENAI_PROJECT_ID") ?? null, webhookSecret = readEnv2("OPENAI_WEBHOOK_SECRET") ?? null, workloadIdentity, x509Transport, credential: _credential, ...opts } = clientOptions; + const { baseURL = provider2 ? null : readEnv("OPENAI_BASE_URL"), dataResidency: _dataResidency, [inheritedDataResidencySelection]: inheritedResidencySelection = false, apiKey = provider2 ? null : readEnv("OPENAI_API_KEY") ?? null, adminAPIKey = provider2 ? null : readEnv("OPENAI_ADMIN_KEY") ?? null, organization = provider2 ? null : readEnv("OPENAI_ORG_ID") ?? null, project = provider2 ? null : readEnv("OPENAI_PROJECT_ID") ?? null, webhookSecret = readEnv("OPENAI_WEBHOOK_SECRET") ?? null, workloadIdentity, x509Transport, credential: _credential, ...opts } = clientOptions; if (provider2) { const conflictingOptions = ["apiKey", "adminAPIKey", "workloadIdentity", "x509Transport", "baseURL", "dataResidency"].filter((key) => (key === "workloadIdentity" ? workloadIdentity : clientOptions[key]) != null); if (conflictingOptions.length) { @@ -38842,7 +21021,7 @@ var init_client2 = __esm({ } assertX509APIOrigin(options.baseURL); assertX509RequestOptions(options.fetchOptions); - if (this.fetchWithAuth !== _a4.prototype.fetchWithAuth || this.fetchWithTimeout !== _a4.prototype.fetchWithTimeout) { + if (this.fetchWithAuth !== _a3.prototype.fetchWithAuth || this.fetchWithTimeout !== _a3.prototype.fetchWithTimeout) { throw new OpenAIError("X.509 workload identity does not support overridden fetch dispatch hooks."); } } @@ -38856,17 +21035,17 @@ var init_client2 = __esm({ throw new OpenAIError("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n"); } this.baseURL = options.baseURL; - __classPrivateFieldSet2(this, _OpenAI_explicitDataResidency, residencyBaseURL !== void 0 || inheritedResidencySelection, "f"); - this.timeout = options.timeout ?? _a4.DEFAULT_TIMEOUT; + __classPrivateFieldSet(this, _OpenAI_explicitDataResidency, residencyBaseURL !== void 0 || inheritedResidencySelection, "f"); + this.timeout = options.timeout ?? _a3.DEFAULT_TIMEOUT; this.logger = options.logger ?? console; const defaultLogLevel2 = "warn"; this.logLevel = defaultLogLevel2; - this.logLevel = parseLogLevel2(options.logLevel, "ClientOptions.logLevel", this) ?? parseLogLevel2(readEnv2("OPENAI_LOG"), "process.env['OPENAI_LOG']", this) ?? defaultLogLevel2; + this.logLevel = parseLogLevel(options.logLevel, "ClientOptions.logLevel", this) ?? parseLogLevel(readEnv("OPENAI_LOG"), "process.env['OPENAI_LOG']", this) ?? defaultLogLevel2; this.fetchOptions = options.fetchOptions; this.maxRetries = options.maxRetries ?? 2; - this.fetch = options.fetch ?? getDefaultFetch2(); - __classPrivateFieldSet2(this, _OpenAI_encoder, FallbackEncoder2, "f"); - const customHeadersEnv = provider2 || credential ? void 0 : readEnv2("OPENAI_CUSTOM_HEADERS"); + this.fetch = options.fetch ?? getDefaultFetch(); + __classPrivateFieldSet(this, _OpenAI_encoder, FallbackEncoder, "f"); + const customHeadersEnv = provider2 || credential ? void 0 : readEnv("OPENAI_CUSTOM_HEADERS"); if (customHeadersEnv) { const parsed = {}; for (const line of customHeadersEnv.split("\n")) { @@ -38875,17 +21054,17 @@ var init_client2 = __esm({ parsed[line.substring(0, colon).trim()] = line.substring(colon + 1).trim(); } } - options.defaultHeaders = buildHeaders2([parsed, options.defaultHeaders]); + options.defaultHeaders = buildHeaders([parsed, options.defaultHeaders]); } this._options = options; this._provider = providerRuntime; if (x509Identity) { const authentication = new X509WorkloadIdentityAuth(x509Identity, x509Transport, organization, project); this._workloadIdentityAuth = authentication; - __classPrivateFieldSet2(this, _OpenAI_x509Authentication, authentication, "f"); - __classPrivateFieldSet2(this, _OpenAI_x509Credential, credential, "f"); - __classPrivateFieldSet2(this, _OpenAI_x509Fetch, authentication.fetch(), "f"); - this.fetch = __classPrivateFieldGet2(this, _OpenAI_x509Fetch, "f"); + __classPrivateFieldSet(this, _OpenAI_x509Authentication, authentication, "f"); + __classPrivateFieldSet(this, _OpenAI_x509Credential, credential, "f"); + __classPrivateFieldSet(this, _OpenAI_x509Fetch, authentication.fetch(), "f"); + this.fetch = __classPrivateFieldGet(this, _OpenAI_x509Fetch, "f"); markApprovedX509Client2(this); } else if (identity.legacy) { this._workloadIdentityAuth = new WorkloadIdentityAuth(identity.legacy, this.fetch); @@ -38901,7 +21080,7 @@ var init_client2 = __esm({ */ withOptions(options) { const residencyBaseURL = resolveDataResidency(options); - const x509Authentication = __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f"); + const x509Authentication = __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f"); const inheritedOptions = { ...this._options, baseURL: this.baseURL, @@ -38909,7 +21088,7 @@ var init_client2 = __esm({ timeout: this.timeout, logger: this.logger, logLevel: this.logLevel, - fetch: __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f") ? void 0 : this.fetch, + fetch: __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f") ? void 0 : this.fetch, fetchOptions: this.fetchOptions, apiKey: this._options.apiKey, adminAPIKey: this.adminAPIKey, @@ -38919,7 +21098,7 @@ var init_client2 = __esm({ project: this.project, webhookSecret: this.webhookSecret }; - const { credential, provider: provider2 } = prepareX509ClientClone(inheritedOptions, options, __classPrivateFieldGet2(this, _OpenAI_x509Credential, "f"), x509Authentication !== void 0); + const { credential, provider: provider2 } = prepareX509ClientClone(inheritedOptions, options, __classPrivateFieldGet(this, _OpenAI_x509Credential, "f"), x509Authentication !== void 0); if (residencyBaseURL !== void 0) { delete inheritedOptions.baseURL; } @@ -38928,7 +21107,7 @@ var init_client2 = __esm({ ...options, credential, provider: provider2, - [inheritedDataResidencySelection]: __classPrivateFieldGet2(this, _OpenAI_explicitDataResidency, "f") && residencyBaseURL === void 0 && !hasOwn2(options, "baseURL") && options.credential === void 0 && !provider2 + [inheritedDataResidencySelection]: __classPrivateFieldGet(this, _OpenAI_explicitDataResidency, "f") && residencyBaseURL === void 0 && !hasOwn(options, "baseURL") && options.credential === void 0 && !provider2 }; const client = new this.constructor(clientOptions); if (provider2 && new URL(client.baseURL).origin !== new URL(this.baseURL).origin) { @@ -38939,14 +21118,14 @@ var init_client2 = __esm({ fetch: options.fetch }); client.fetchOptions = options.fetchOptions; - client.fetch = options.fetch ?? getDefaultFetch2(); + client.fetch = options.fetch ?? getDefaultFetch(); client.organization = options.organization ?? null; client.project = options.project ?? null; } - if (__classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f") && __classPrivateFieldGet2(client, _OpenAI_x509Authentication, "f") && this.baseURL === client.baseURL && __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f").matches(__classPrivateFieldGet2(client, _OpenAI_x509Authentication, "f"))) { - client._workloadIdentityAuth = __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f"); - __classPrivateFieldSet2(client, _OpenAI_x509Authentication, __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f"), "f"); - __classPrivateFieldSet2(client, _OpenAI_x509Fetch, __classPrivateFieldGet2(this, _OpenAI_x509Fetch, "f"), "f"); + if (__classPrivateFieldGet(this, _OpenAI_x509Authentication, "f") && __classPrivateFieldGet(client, _OpenAI_x509Authentication, "f") && this.baseURL === client.baseURL && __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f").matches(__classPrivateFieldGet(client, _OpenAI_x509Authentication, "f"))) { + client._workloadIdentityAuth = __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f"); + __classPrivateFieldSet(client, _OpenAI_x509Authentication, __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f"), "f"); + __classPrivateFieldSet(client, _OpenAI_x509Fetch, __classPrivateFieldGet(this, _OpenAI_x509Fetch, "f"), "f"); } return client; } @@ -38955,7 +21134,7 @@ var init_client2 = __esm({ } /** @internal Client request headers for each new WebSocket handshake. */ _buildWebSocketHeaders(authHeaders) { - return Object.fromEntries(buildHeaders2([ + return Object.fromEntries(buildHeaders([ { "User-Agent": this.getUserAgent(), "OpenAI-Organization": this.organization, @@ -38984,20 +21163,20 @@ var init_client2 = __esm({ bearerAuth: true, adminAPIKeyAuth: true }) { - const authentication = __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f") ?? this._workloadIdentityAuth; + const authentication = __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f") ?? this._workloadIdentityAuth; if (authentication instanceof X509WorkloadIdentityAuth && schemes.adminAPIKeyAuth && this.adminAPIKey !== null) { return await this.adminAPIKeyAuth(opts); } - return buildHeaders2([ + return buildHeaders([ schemes.bearerAuth ? await this.bearerAuth(opts) : null, schemes.adminAPIKeyAuth ? await this.adminAPIKeyAuth(opts) : null ]); } async bearerAuth(opts) { - const authentication = __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f") ?? this._workloadIdentityAuth; + const authentication = __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f") ?? this._workloadIdentityAuth; if (authentication) { if (authentication instanceof X509WorkloadIdentityAuth) { - if (authentication === this._workloadIdentityAuth && (this.fetchWithAuth !== _a4.prototype.fetchWithAuth || this.fetchWithTimeout !== _a4.prototype.fetchWithTimeout)) { + if (authentication === this._workloadIdentityAuth && (this.fetchWithAuth !== _a3.prototype.fetchWithAuth || this.fetchWithTimeout !== _a3.prototype.fetchWithTimeout)) { throw new OpenAIError("X.509 workload identity does not support overridden fetch dispatch hooks."); } const snapshots = authentication.headerSnapshots(); @@ -39012,32 +21191,32 @@ var init_client2 = __esm({ signal: authentication.effectiveSignal(), ...authentication.tenantSnapshot() }) : await authentication.getToken(); - return buildHeaders2([{ Authorization: `Bearer ${token}` }]); + return buildHeaders([{ Authorization: `Bearer ${token}` }]); } const { apiKey } = await resolveRealtimeAPIKey(this); if (apiKey == null) { return void 0; } - return buildHeaders2([{ Authorization: `Bearer ${apiKey}` }]); + return buildHeaders([{ Authorization: `Bearer ${apiKey}` }]); } async adminAPIKeyAuth(opts) { if (this.adminAPIKey == null) { return void 0; } - return buildHeaders2([{ Authorization: `Bearer ${this.adminAPIKey}` }]); + return buildHeaders([{ Authorization: `Bearer ${this.adminAPIKey}` }]); } stringifyQuery(query) { - return stringifyQuery2(query); + return stringifyQuery(query); } getUserAgent() { - return `${this.constructor.name}/JS ${VERSION2}`; + return `${this.constructor.name}/JS ${VERSION}`; } defaultIdempotencyKey() { - return `stainless-node-retry-${uuid42()}`; + return `stainless-node-retry-${uuid4()}`; } makeStatusError(status, error, message, headers) { const normalizedError = error && typeof error === "object" && error.error == null ? { error } : error; - return APIError2.generate(status, normalizedError, message, headers); + return APIError.generate(status, normalizedError, message, headers); } _hasApiKeyProvider() { return typeof this._options.apiKey === "function"; @@ -39080,11 +21259,11 @@ var init_client2 = __esm({ return true; } buildURL(path5, query, defaultBaseURL) { - const baseURL = !__classPrivateFieldGet2(this, _OpenAI_instances, "m", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL || this.baseURL; - const url = isAbsoluteURL2(path5) ? new URL(path5) : new URL(baseURL + (baseURL.endsWith("/") && path5.startsWith("/") ? path5.slice(1) : path5)); + const baseURL = !__classPrivateFieldGet(this, _OpenAI_instances, "m", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL || this.baseURL; + const url = isAbsoluteURL(path5) ? new URL(path5) : new URL(baseURL + (baseURL.endsWith("/") && path5.startsWith("/") ? path5.slice(1) : path5)); const defaultQuery = this.defaultQuery(); const pathQuery = Object.fromEntries(url.searchParams); - if (!isEmptyObj2(defaultQuery) || !isEmptyObj2(pathQuery)) { + if (!isEmptyObj(defaultQuery) || !isEmptyObj(pathQuery)) { query = { ...pathQuery, ...defaultQuery, ...query }; } if (typeof query === "object" && query && !Array.isArray(query)) { @@ -39129,13 +21308,13 @@ var init_client2 = __esm({ })); } request(options, remainingRetries = null) { - const authentication = __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f") ?? this._workloadIdentityAuth; + const authentication = __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f") ?? this._workloadIdentityAuth; const request2 = authentication instanceof X509WorkloadIdentityAuth ? Promise.resolve(options).then((resolved) => authentication.runRequest(() => this.makeRequest(resolved, remainingRetries, void 0), this)) : this.makeRequest(options, remainingRetries, void 0); return this.responsePromise(request2); } responsePromise(request2, parse2 = (client, props) => this.parseResponseWithTimeout(client, props)) { - const promise = new APIPromise2(this, request2, (client, props) => { - const resume = __classPrivateFieldGet2(this, _OpenAI_responseAttempts, "f").get(props.controller)?.continueRequest; + const promise = new APIPromise(this, request2, (client, props) => { + const resume = __classPrivateFieldGet(this, _OpenAI_responseAttempts, "f").get(props.controller)?.continueRequest; return resume ? resume(() => parse2(client, props)) : parse2(client, props); }); promise.withResponse = async () => { @@ -39148,21 +21327,21 @@ var init_client2 = __esm({ } async parseResponseWithTimeout(client, props) { if (props.options.stream || props.options.__binaryResponse || props.response.status === 204 || props.response.headers.get("content-length") === "0") { - return defaultParseResponse2(client, props); + return defaultParseResponse(client, props); } while (true) { - const attempt = __classPrivateFieldGet2(this, _OpenAI_responseAttempts, "f").get(props.controller); + const attempt = __classPrivateFieldGet(this, _OpenAI_responseAttempts, "f").get(props.controller); const timeout = attempt?.timeout ?? props.options.timeout ?? this.timeout; const x509Authentication = attempt?.authentication; const callerSignal = x509Authentication ? props.controller.signal : props.options.signal; - const abortError2 = () => x509Authentication && callerSignal ? this._makeUserAbortError(callerSignal) : new APIUserAbortError2(); + const abortError2 = () => x509Authentication && callerSignal ? this._makeUserAbortError(callerSignal) : new APIUserAbortError(); let remaining; try { remaining = x509Authentication?.remainingTimeout(props.options, timeout) ?? Math.max(0, props.startTime + timeout - Date.now()); } catch (error) { const cancellation = callerSignal?.aborted ? abortError2() : void 0; props.controller.abort(); - void CancelReadableStream2(props.response.body).catch(() => void 0); + void CancelReadableStream(props.response.body).catch(() => void 0); throw cancellation ?? error; } let timer; @@ -39176,7 +21355,7 @@ var init_client2 = __esm({ timer = setTimeout(() => { timedOut = true; props.controller.abort(); - reject2(new APIConnectionTimeoutError2()); + reject2(new APIConnectionTimeoutError()); }, remaining); if (callerSignal) { abortListener = () => { @@ -39186,7 +21365,7 @@ var init_client2 = __esm({ callerSignal.addEventListener("abort", abortListener, { once: true }); } }); - return await Promise.race([defaultParseResponse2(client, props), timeoutPromise]); + return await Promise.race([defaultParseResponse(client, props), timeoutPromise]); } catch (error) { if (callerSignal?.aborted && !timedOut) { throw abortError2(); @@ -39196,7 +21375,7 @@ var init_client2 = __esm({ throw new SyntaxError("X.509 workload identity API response contains invalid JSON."); } if (x509Authentication && !(error instanceof OpenAIError)) { - throw new APIConnectionError2({ + throw new APIConnectionError({ message: "X.509 workload identity API response body could not be read." }); } @@ -39204,7 +21383,7 @@ var init_client2 = __esm({ } const retriesRemaining = attempt?.retriesRemaining ?? 0; if (!retriesRemaining || attempt?.hasStreamingBody || props.options.__metadata?.["hasStreamingBody"] || globalThis.ReadableStream && props.options.body instanceof globalThis.ReadableStream || typeof props.options.body === "object" && props.options.body !== null && (Symbol.asyncIterator in props.options.body || Symbol.iterator in props.options.body && "next" in props.options.body && typeof props.options.body.next === "function")) { - throw new APIConnectionTimeoutError2(); + throw new APIConnectionTimeoutError(); } if (timer !== void 0) clearTimeout(timer); @@ -39234,7 +21413,7 @@ var init_client2 = __esm({ try { const remaining = authentication.remainingTimeout(options, timeout); const expiration = authentication.waitForRetry(remaining, deadline.signal).then(() => { - throw new APIConnectionTimeoutError2(); + throw new APIConnectionTimeoutError(); }); const body = await Promise.race([ response.text().catch(() => "X.509 workload identity API response body could not be read."), @@ -39245,10 +21424,10 @@ var init_client2 = __esm({ } return body; } catch (error) { - if (error instanceof APIConnectionTimeoutError2) { + if (error instanceof APIConnectionTimeoutError) { timedOut = !callerSignal.aborted; controller.abort(); - void CancelReadableStream2(response.body).catch(() => void 0); + void CancelReadableStream(response.body).catch(() => void 0); } if (callerSignal.aborted && !timedOut) { throw this._makeUserAbortError(callerSignal); @@ -39265,7 +21444,7 @@ var init_client2 = __esm({ if (retriesRemaining == null) { retriesRemaining = maxRetries; } - const x509Authentication = __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f"); + const x509Authentication = __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f"); x509Authentication?.beginRequestPreparation(); await this.prepareOptions(options); x509Authentication?.beginRequestPlanning(); @@ -39276,7 +21455,7 @@ var init_client2 = __esm({ }); built = { req: candidate.req, url: candidate.url, timeout: candidate.timeout }; if (x509Authentication) { - validatePositiveInteger2("timeout", built.timeout); + validatePositiveInteger("timeout", built.timeout); x509Authentication.authorizePlannedRequest(built.url, built.req, built.timeout); if (X509WorkloadIdentityAuth.isStreamingRequestBody(built.req.body)) { options.__metadata = { ...options.__metadata, hasStreamingBody: true }; @@ -39297,13 +21476,13 @@ var init_client2 = __esm({ const security2 = options.__security ?? { bearerAuth: true }; const authenticationHeaders = await this.authHeaders(options, security2); const suppliedHeaders = x509Authentication.headerSnapshots(); - const supplied = buildHeaders2([suppliedHeaders.defaultHeaders, suppliedHeaders.requestHeaders]); + const supplied = buildHeaders([suppliedHeaders.defaultHeaders, suppliedHeaders.requestHeaders]); for (const [name, value2] of authenticationHeaders?.values ?? []) { if (!supplied.nulls.has(name) && !built.req.headers.has(name)) { built.req.headers.set(name, value2); } } - this.validateHeaders(buildHeaders2([supplied, built.req.headers]), security2); + this.validateHeaders(buildHeaders([supplied, built.req.headers]), security2); } } catch (error) { x509Authentication?.retireRequestBody(); @@ -39329,7 +21508,7 @@ var init_client2 = __esm({ const startTime = x509Authentication?.requestStartedAt(options) ?? Date.now(); if (this.logLevel === "debug") { const body = typeof req.body === "string" ? { type: "string", length: req.body.length } : req.body; - loggerFor2(this).debug(`[${requestLogID}] sending request`, formatRequestDetails2({ + loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({ retryOfRequestLogID, method: options.method, url, @@ -39342,21 +21521,21 @@ var init_client2 = __esm({ throw this._makeUserAbortError(callerSignal?.aborted ? callerSignal : req.signal); } const security = options.__security ?? { bearerAuth: true }; - const controller = x509Authentication || this.fetchWithTimeout === _a4.prototype.fetchWithTimeout ? createRequestController(req.signal ?? (x509Authentication ? callerSignal : void 0), x509Authentication ? callerSignal : void 0) : new AbortController(); + const controller = x509Authentication || this.fetchWithTimeout === _a3.prototype.fetchWithTimeout ? createRequestController(req.signal ?? (x509Authentication ? callerSignal : void 0), x509Authentication ? callerSignal : void 0) : new AbortController(); const remainingTimeout = x509Authentication?.remainingTimeout(options, timeout) ?? timeout; - const fetchWithAuth = x509Authentication ? _a4.prototype.fetchWithAuth : this.fetchWithAuth; + const fetchWithAuth = x509Authentication ? _a3.prototype.fetchWithAuth : this.fetchWithAuth; x509Authentication?.releaseRequestBody(req.body); - const response = await fetchWithAuth.call(this, url, req, remainingTimeout, controller, security).catch(castToError2); + const response = await fetchWithAuth.call(this, url, req, remainingTimeout, controller, security).catch(castToError); const headersTime = Date.now(); if (response instanceof globalThis.Error) { const retryMessage = `retrying, ${retriesRemaining} attempts remaining`; if (callerSignal?.aborted || req.signal?.aborted) { throw this._makeUserAbortError(callerSignal?.aborted ? callerSignal : req.signal); } - const isTimeout = isAbortError2(response) || /timed? ?out/i.test(String(response) + ("cause" in response ? String(response.cause) : "")); + const isTimeout = isAbortError(response) || /timed? ?out/i.test(String(response) + ("cause" in response ? String(response.cause) : "")); if (retriesRemaining && !hasStreamingBody && (!x509Authentication || isTransientX509ConnectionError2(response))) { - loggerFor2(this).info(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} - ${retryMessage}`); - loggerFor2(this).debug(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} (${retryMessage})`, formatRequestDetails2({ + loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} - ${retryMessage}`); + loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} (${retryMessage})`, formatRequestDetails({ retryOfRequestLogID, url, durationMs: headersTime - startTime, @@ -39365,8 +21544,8 @@ var init_client2 = __esm({ return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, void 0, req.signal); } const terminalMessage = hasStreamingBody ? "error; streaming body cannot be retried" : "error; no more retries left"; - loggerFor2(this).info(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} - ${terminalMessage}`); - loggerFor2(this).debug(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} (${terminalMessage})`, formatRequestDetails2({ + loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} - ${terminalMessage}`); + loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} (${terminalMessage})`, formatRequestDetails({ retryOfRequestLogID, url, durationMs: headersTime - startTime, @@ -39378,18 +21557,18 @@ var init_client2 = __esm({ if (isTimeout) { const transportCause = "cause" in response ? response.cause : void 0; const isHeadersTimeout = typeof transportCause === "object" && transportCause !== null && "code" in transportCause && transportCause.code === "UND_ERR_HEADERS_TIMEOUT"; - const timeoutError = isHeadersTimeout ? new APIConnectionTimeoutError2({ + const timeoutError = isHeadersTimeout ? new APIConnectionTimeoutError({ message: "Request timed out. Node.js fetch timed out waiting for response headers; configure a matching undici fetch and fetchOptions.dispatcher with an Agent whose headersTimeout is at least the SDK timeout." - }) : new APIConnectionTimeoutError2(); + }) : new APIConnectionTimeoutError(); if (x509Authentication) { - throw new APIConnectionTimeoutError2(); + throw new APIConnectionTimeoutError(); } throw Object.assign(timeoutError, { cause: response }); } if (x509Authentication) { - throw new APIConnectionError2({ message: "X.509 workload identity API connection failed." }); + throw new APIConnectionError({ message: "X.509 workload identity API connection failed." }); } - throw new APIConnectionError2({ + throw new APIConnectionError({ message: getConnectionErrorMessage(response), cause: response }); @@ -39403,9 +21582,9 @@ var init_client2 = __esm({ } if (response.status === 401 && (x509Authentication || this._workloadIdentityAuth) && security.bearerAuth && (!x509Authentication || x509Authentication.usedWorkloadToken(options)) && (!x509Authentication || retriesRemaining > 0) && !hasStreamingBody && !options.__metadata?.["workloadIdentityTokenRefreshed"]) { if (x509Authentication) { - void CancelReadableStream2(response.body).catch(() => void 0); + void CancelReadableStream(response.body).catch(() => void 0); } else { - await CancelReadableStream2(response.body); + await CancelReadableStream(response.body); this._workloadIdentityAuth?.invalidateToken(); } const replayOptions = { @@ -39421,12 +21600,12 @@ var init_client2 = __esm({ if (retriesRemaining && shouldRetry && !hasStreamingBody) { const retryMessage2 = `retrying, ${retriesRemaining} attempts remaining`; if (x509Authentication) { - void CancelReadableStream2(response.body).catch(() => void 0); + void CancelReadableStream(response.body).catch(() => void 0); } else { - await CancelReadableStream2(response.body); + await CancelReadableStream(response.body); } - loggerFor2(this).info(`${responseInfo} - ${retryMessage2}`); - loggerFor2(this).debug(`[${requestLogID}] response error (${retryMessage2})`, formatRequestDetails2({ + loggerFor(this).info(`${responseInfo} - ${retryMessage2}`); + loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage2})`, formatRequestDetails({ retryOfRequestLogID, url: response.url, status: response.status, @@ -39436,11 +21615,11 @@ var init_client2 = __esm({ return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers, req.signal); } const retryMessage = shouldRetry ? hasStreamingBody ? `error; streaming body cannot be retried` : `error; no more retries left` : `error; not retryable`; - loggerFor2(this).info(`${responseInfo} - ${retryMessage}`); - const errText = x509Authentication ? await this.readX509ResponseError(response, options, timeout, controller, x509Authentication) : await response.text().catch((err2) => castToError2(err2).message); - const errJSON = safeJSON2(errText); + loggerFor(this).info(`${responseInfo} - ${retryMessage}`); + const errText = x509Authentication ? await this.readX509ResponseError(response, options, timeout, controller, x509Authentication) : await response.text().catch((err2) => castToError(err2).message); + const errJSON = safeJSON(errText); const errMessage = errJSON ? void 0 : errText; - loggerFor2(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails2({ + loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({ retryOfRequestLogID, url: response.url, status: response.status, @@ -39451,8 +21630,8 @@ var init_client2 = __esm({ const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers); throw err; } - loggerFor2(this).info(responseInfo); - loggerFor2(this).debug(`[${requestLogID}] response start`, formatRequestDetails2({ + loggerFor(this).info(responseInfo); + loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({ retryOfRequestLogID, url: response.url, status: response.status, @@ -39461,7 +21640,7 @@ var init_client2 = __esm({ })); const continueRequest = x509Authentication?.continuation(); x509Authentication?.releaseRequestCredentials(); - __classPrivateFieldGet2(this, _OpenAI_responseAttempts, "f").set(controller, { + __classPrivateFieldGet(this, _OpenAI_responseAttempts, "f").set(controller, { timeout, retriesRemaining, hasStreamingBody, @@ -39483,9 +21662,9 @@ var init_client2 = __esm({ return this.requestAPIList(Page3, opts && "then" in opts ? opts.then((opts2) => ({ method: "get", path: path5, ...opts2 })) : { method: "get", path: path5, ...opts }); } requestAPIList(Page3, options) { - const authentication = __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f") ?? this._workloadIdentityAuth; + const authentication = __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f") ?? this._workloadIdentityAuth; const request2 = authentication instanceof X509WorkloadIdentityAuth ? Promise.resolve(options).then((resolved) => authentication.runRequest(() => this.makeRequest(resolved, null, void 0), this)) : this.makeRequest(options, null, void 0); - const page3 = new PagePromise2(this, request2, Page3); + const page3 = new PagePromise(this, request2, Page3); const guarded = this.responsePromise(request2, async (client, props) => { const body = await this.parseResponseWithTimeout(client, props); return new Page3(client, props.response, body, props.options); @@ -39501,7 +21680,7 @@ var init_client2 = __esm({ bearerAuth: true, adminAPIKeyAuth: true }) { - if (this._workloadIdentityAuth && !__classPrivateFieldGet2(this, _OpenAI_x509Fetch, "f") && schemes.bearerAuth) { + if (this._workloadIdentityAuth && !__classPrivateFieldGet(this, _OpenAI_x509Fetch, "f") && schemes.bearerAuth) { const headers = init.headers; const authHeader = headers.get("Authorization"); if (authHeader === `Bearer ${WORKLOAD_IDENTITY_API_KEY_PLACEHOLDER}`) { @@ -39509,7 +21688,7 @@ var init_client2 = __esm({ headers.set("Authorization", `Bearer ${token}`); } } - const fetchWithTimeout = __classPrivateFieldGet2(this, _OpenAI_x509Fetch, "f") ? _a4.prototype.fetchWithTimeout : this.fetchWithTimeout; + const fetchWithTimeout = __classPrivateFieldGet(this, _OpenAI_x509Fetch, "f") ? _a3.prototype.fetchWithTimeout : this.fetchWithTimeout; const response = await fetchWithTimeout.call(this, url, init, timeout, controller); return response; } @@ -39530,7 +21709,7 @@ var init_client2 = __esm({ fetchOptions.method = method2.toUpperCase(); } try { - const response = await (__classPrivateFieldGet2(this, _OpenAI_x509Fetch, "f") ?? this.fetch).call(void 0, url, fetchOptions); + const response = await (__classPrivateFieldGet(this, _OpenAI_x509Fetch, "f") ?? this.fetch).call(void 0, url, fetchOptions); if (cleanup) { retainRequestAbortCallback(response.body ?? response, abort, controller.signal); } @@ -39580,11 +21759,11 @@ var init_client2 = __esm({ const maxRetries = options.maxRetries ?? this.maxRetries; timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries); } - const x509Authentication = __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f"); + const x509Authentication = __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f"); if (x509Authentication) { const remaining = x509Authentication.remainingTimeout(options, x509Authentication.requestSnapshot().timeout); if (timeoutMillis >= remaining) { - throw new APIConnectionTimeoutError2(); + throw new APIConnectionTimeoutError(); } } if (x509Authentication) { @@ -39592,7 +21771,7 @@ var init_client2 = __esm({ } else { const retrySignals = requestSignal === options.signal ? [requestSignal] : [requestSignal, options.signal]; try { - await sleep2(timeoutMillis, ...retrySignals); + await sleep(timeoutMillis, ...retrySignals); } catch (error) { const abortedSignal = retrySignals.find((signal) => signal?.aborted); if (abortedSignal) { @@ -39618,16 +21797,16 @@ var init_client2 = __esm({ * can call `this.authHeaders()` to resolve headers with request-local credentials. */ async buildRequest(inputOptions, { retryCount = 0 } = {}) { - if (__classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f") && !__classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f").inRequest(this)) { - const authentication = __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f"); + if (__classPrivateFieldGet(this, _OpenAI_x509Authentication, "f") && !__classPrivateFieldGet(this, _OpenAI_x509Authentication, "f").inRequest(this)) { + const authentication = __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f"); return await authentication.runRequest(async () => { - const built = await _a4.prototype.buildRequest.call(this, inputOptions, { retryCount }); + const built = await _a3.prototype.buildRequest.call(this, inputOptions, { retryCount }); authentication.releaseRequestBody(built.req.body); return built; }, this); } const options = { ...inputOptions }; - const x509Authentication = __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f"); + const x509Authentication = __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f"); const x509Tenant = x509Authentication?.snapshotTenant(this.organization, this.project); const x509Headers = x509Authentication?.snapshotHeaders(this._options.defaultHeaders, options.headers); if (x509Headers) { @@ -39640,7 +21819,7 @@ var init_client2 = __esm({ x509Authentication?.snapshotAPIURL(url); const explicitTimeout = "timeout" in options; if (explicitTimeout) - validatePositiveInteger2("timeout", options.timeout); + validatePositiveInteger("timeout", options.timeout); options.timeout = options.timeout ?? this.timeout; if (x509Authentication && x509RequestFetchOptions) { x509Authentication.snapshotRequest(options.signal, options.timeout, x509RequestFetchOptions); @@ -39693,25 +21872,25 @@ var init_client2 = __esm({ } const helperMethod = options.__metadata?.["helperMethod"]; const timeout = x509Headers ? x509Timeout : options.timeout; - const headers = buildHeaders2([ + const headers = buildHeaders([ idempotencyHeaders, { Accept: "application/json", ...!isRunningInBrowserOrBrowserWorker() ? { "User-Agent": this.getUserAgent() } : void 0, "X-Stainless-Retry-Count": String(retryCount), ...timeout ? { "X-Stainless-Timeout": String(Math.trunc(timeout / 1e3)) } : {}, - ...getPlatformHeaders2(), + ...getPlatformHeaders(), ...typeof helperMethod === "string" ? { "X-Stainless-Helper-Method": helperMethod } : {}, "OpenAI-Organization": x509Tenant ? x509Tenant.organization : this.organization, "OpenAI-Project": x509Tenant ? x509Tenant.project : this.project }, // X.509 owns streaming uploads before authentication so it can retire them on failure. - __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f") && !__classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f").isPlanningRequest() ? await this.authHeaders(options, options.__security ?? { bearerAuth: true }) : authenticationHeaders, + __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f") && !__classPrivateFieldGet(this, _OpenAI_x509Authentication, "f").isPlanningRequest() ? await this.authHeaders(options, options.__security ?? { bearerAuth: true }) : authenticationHeaders, x509Headers?.defaultHeaders ?? this._options.defaultHeaders, bodyHeaders, x509Headers?.requestHeaders ?? options.headers ]); - if (!this._provider && !__classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f")?.isPlanningRequest()) { + if (!this._provider && !__classPrivateFieldGet(this, _OpenAI_x509Authentication, "f")?.isPlanningRequest()) { this.validateHeaders(headers, options.__security ?? { bearerAuth: true }); } return headers.values; @@ -39720,7 +21899,7 @@ var init_client2 = __esm({ return () => controller.abort(); } _makeUserAbortError(signal) { - const error = new APIUserAbortError2(); + const error = new APIUserAbortError(); Object.defineProperty(error, "cause", { value: signal.reason, writable: true, configurable: true }); return error; } @@ -39728,11 +21907,11 @@ var init_client2 = __esm({ const { body, headers: rawHeaders } = options; if (!body) { if (body === void 0 && "body" in options) { - return { ...__classPrivateFieldGet2(this, _OpenAI_encoder, "f").call(this, { body, headers: buildHeaders2([rawHeaders]) }), isStreamingBody: false }; + return { ...__classPrivateFieldGet(this, _OpenAI_encoder, "f").call(this, { body, headers: buildHeaders([rawHeaders]) }), isStreamingBody: false }; } return { bodyHeaders: void 0, body: void 0, isStreamingBody: false }; } - const headers = buildHeaders2([rawHeaders]); + const headers = buildHeaders([rawHeaders]); const isReadableStream2 = typeof globalThis.ReadableStream !== "undefined" && body instanceof globalThis.ReadableStream; const isRetryableBody = !isReadableStream2 && (typeof body === "string" || body instanceof ArrayBuffer || ArrayBuffer.isView(body) || typeof globalThis.Blob !== "undefined" && body instanceof globalThis.Blob || body instanceof URLSearchParams || body instanceof FormData); if ( @@ -39748,7 +21927,7 @@ var init_client2 = __esm({ } else if (typeof body === "object" && (Symbol.asyncIterator in body || Symbol.iterator in body && "next" in body && typeof body.next === "function")) { return { bodyHeaders: void 0, - body: ReadableStreamFrom2(body), + body: ReadableStreamFrom(body), isStreamingBody: true }; } else if (typeof body === "object" && headers.values.get("content-type") === "application/x-www-form-urlencoded") { @@ -39758,47 +21937,47 @@ var init_client2 = __esm({ isStreamingBody: false }; } else { - return { ...__classPrivateFieldGet2(this, _OpenAI_encoder, "f").call(this, { body, headers }), isStreamingBody: false }; + return { ...__classPrivateFieldGet(this, _OpenAI_encoder, "f").call(this, { body, headers }), isStreamingBody: false }; } } }; - _a4 = OpenAI, _OpenAI_encoder = /* @__PURE__ */ new WeakMap(), _OpenAI_x509Authentication = /* @__PURE__ */ new WeakMap(), _OpenAI_x509Credential = /* @__PURE__ */ new WeakMap(), _OpenAI_x509Fetch = /* @__PURE__ */ new WeakMap(), _OpenAI_explicitDataResidency = /* @__PURE__ */ new WeakMap(), _OpenAI_responseAttempts = /* @__PURE__ */ new WeakMap(), _OpenAI_instances = /* @__PURE__ */ new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden2() { - return __classPrivateFieldGet2(this, _OpenAI_explicitDataResidency, "f") || this._provider !== void 0 || this.baseURL !== "https://api.openai.com/v1"; + _a3 = OpenAI, _OpenAI_encoder = /* @__PURE__ */ new WeakMap(), _OpenAI_x509Authentication = /* @__PURE__ */ new WeakMap(), _OpenAI_x509Credential = /* @__PURE__ */ new WeakMap(), _OpenAI_x509Fetch = /* @__PURE__ */ new WeakMap(), _OpenAI_explicitDataResidency = /* @__PURE__ */ new WeakMap(), _OpenAI_responseAttempts = /* @__PURE__ */ new WeakMap(), _OpenAI_instances = /* @__PURE__ */ new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden2() { + return __classPrivateFieldGet(this, _OpenAI_explicitDataResidency, "f") || this._provider !== void 0 || this.baseURL !== "https://api.openai.com/v1"; }; - OpenAI.OpenAI = _a4; + OpenAI.OpenAI = _a3; OpenAI.DEFAULT_TIMEOUT = 6e5; OpenAI.OpenAIError = OpenAIError; - OpenAI.APIError = APIError2; - OpenAI.APIConnectionError = APIConnectionError2; - OpenAI.APIConnectionTimeoutError = APIConnectionTimeoutError2; - OpenAI.APIUserAbortError = APIUserAbortError2; - OpenAI.NotFoundError = NotFoundError2; - OpenAI.ConflictError = ConflictError2; - OpenAI.RateLimitError = RateLimitError2; - OpenAI.BadRequestError = BadRequestError2; - OpenAI.AuthenticationError = AuthenticationError2; - OpenAI.InternalServerError = InternalServerError2; - OpenAI.PermissionDeniedError = PermissionDeniedError2; - OpenAI.UnprocessableEntityError = UnprocessableEntityError2; + OpenAI.APIError = APIError; + OpenAI.APIConnectionError = APIConnectionError; + OpenAI.APIConnectionTimeoutError = APIConnectionTimeoutError; + OpenAI.APIUserAbortError = APIUserAbortError; + OpenAI.NotFoundError = NotFoundError; + OpenAI.ConflictError = ConflictError; + OpenAI.RateLimitError = RateLimitError; + OpenAI.BadRequestError = BadRequestError; + OpenAI.AuthenticationError = AuthenticationError; + OpenAI.InternalServerError = InternalServerError; + OpenAI.PermissionDeniedError = PermissionDeniedError; + OpenAI.UnprocessableEntityError = UnprocessableEntityError; OpenAI.InvalidWebhookSignatureError = InvalidWebhookSignatureError; - OpenAI.toFile = toFile2; + OpenAI.toFile = toFile; OpenAI.toStreamingFile = toStreamingFile; - OpenAI.Completions = Completions3; + OpenAI.Completions = Completions2; OpenAI.Chat = Chat; OpenAI.Embeddings = Embeddings; - OpenAI.Files = Files5; + OpenAI.Files = Files3; OpenAI.Images = Images; OpenAI.ContentProvenanceChecks = ContentProvenanceChecks; OpenAI.Audio = Audio; OpenAI.Moderations = Moderations; - OpenAI.Models = Models3; + OpenAI.Models = Models; OpenAI.FineTuning = FineTuning; OpenAI.Graders = Graders2; OpenAI.VectorStores = VectorStores; OpenAI.Safety = Safety; - OpenAI.Webhooks = Webhooks2; - OpenAI.Beta = Beta2; - OpenAI.Batches = Batches3; + OpenAI.Webhooks = Webhooks; + OpenAI.Beta = Beta; + OpenAI.Batches = Batches; OpenAI.Uploads = Uploads; OpenAI.Admin = Admin; OpenAI.Responses = Responses2; @@ -39807,12 +21986,12 @@ var init_client2 = __esm({ OpenAI.Conversations = Conversations; OpenAI.Evals = Evals; OpenAI.Containers = Containers; - OpenAI.Skills = Skills3; + OpenAI.Skills = Skills; OpenAI.Videos = Videos; OpenAI.ConversationCursorPage = ConversationCursorPage; OpenAI.CursorPage = CursorPage; OpenAI.NextCursorPage = NextCursorPage; - OpenAI.Page = Page2; + OpenAI.Page = Page; OpenAI.TokenPage = TokenPage; composedCallerSignals = /* @__PURE__ */ new WeakMap(); } @@ -39821,11 +22000,11 @@ var init_client2 = __esm({ // node_modules/openai/azure.mjs var init_azure = __esm({ "node_modules/openai/azure.mjs"() { - init_headers3(); - init_error4(); - init_utils4(); - init_path2(); - init_client2(); + init_headers(); + init_error2(); + init_utils2(); + init_path(); + init_client(); init_data_residency(); } }); @@ -39834,38 +22013,38 @@ var init_azure = __esm({ var brand_privateBedrockClient; var init_bedrock = __esm({ "node_modules/openai/internal/bedrock.mjs"() { - init_error4(); - init_utils4(); + init_error2(); + init_utils2(); brand_privateBedrockClient = /* @__PURE__ */ Symbol.for("openai.privateBedrockClient"); } }); // node_modules/openai/bedrock.mjs -var _a5; +var _a4; var init_bedrock2 = __esm({ "node_modules/openai/bedrock.mjs"() { - init_error4(); - init_client2(); + init_error2(); + init_client(); init_realtime_credentials(); init_data_residency(); init_bedrock(); - init_headers3(); - init_utils4(); + init_headers(); + init_utils2(); init_ResponsesParser(); - init_resources3(); - _a5 = brand_privateBedrockClient; + init_resources(); + _a4 = brand_privateBedrockClient; } }); // node_modules/openai/index.mjs var init_openai = __esm({ "node_modules/openai/index.mjs"() { - init_client2(); - init_uploads4(); - init_api_promise2(); - init_client2(); - init_pagination2(); - init_error3(); + init_client(); + init_uploads2(); + init_api_promise(); + init_client(); + init_pagination(); + init_error(); init_azure(); init_bedrock2(); } @@ -39874,7 +22053,7 @@ var init_openai = __esm({ // node_modules/@earendil-works/pi-ai/dist/utils/error-body.js function normalizeProviderError(error) { if (!(error instanceof Error)) { - return { message: safeJsonStringify2(error), messageCarriesBody: false }; + return { message: safeJsonStringify(error), messageCarriesBody: false }; } const sdkError = error; const status = extractStatus(sdkError); @@ -39911,14 +22090,14 @@ function pickBodyText(error) { if (typeof error.body === "string") return error.body; if (isPlainNonEmptyObject(error.error)) - return safeJsonStringify2(error.error); + return safeJsonStringify(error.error); const responseBody = error.$response?.body; if (typeof responseBody === "string") return responseBody; if (isReadableStreamLike(responseBody)) return void 0; if (isPlainNonEmptyObject(responseBody)) - return safeJsonStringify2(responseBody); + return safeJsonStringify(responseBody); return void 0; } function isReadableStreamLike(value2) { @@ -39943,7 +22122,7 @@ function truncateErrorText(text2, maxChars) { return text2; return `${ownedSlice(text2, 0, maxChars)}... [truncated ${text2.length - maxChars} chars]`; } -function safeJsonStringify2(value2) { +function safeJsonStringify(value2) { try { const serialized = JSON.stringify(value2); return serialized === void 0 ? String(value2) : serialized; @@ -39959,6 +22138,1281 @@ var init_error_body = __esm({ } }); +// node_modules/@earendil-works/pi-ai/dist/utils/hash.js +function shortHash(str2) { + let h1 = 3735928559; + let h2 = 1103547991; + for (let i = 0; i < str2.length; i++) { + const ch = str2.charCodeAt(i); + h1 = Math.imul(h1 ^ ch, 2654435761); + h2 = Math.imul(h2 ^ ch, 1597334677); + } + h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507) ^ Math.imul(h2 ^ h2 >>> 13, 3266489909); + h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507) ^ Math.imul(h1 ^ h1 >>> 13, 3266489909); + return (h2 >>> 0).toString(36) + (h1 >>> 0).toString(36); +} +var init_hash = __esm({ + "node_modules/@earendil-works/pi-ai/dist/utils/hash.js"() { + } +}); + +// node_modules/@earendil-works/pi-ai/dist/utils/headers.js +function headersToRecord(headers) { + const result = {}; + for (const [key, value2] of headers.entries()) { + result[key] = value2; + } + return result; +} +var init_headers2 = __esm({ + "node_modules/@earendil-works/pi-ai/dist/utils/headers.js"() { + } +}); + +// node_modules/@earendil-works/pi-ai/dist/utils/openrouter-cost.js +function isValidCost(value2) { + return typeof value2 === "number" && Number.isFinite(value2) && value2 >= 0; +} +function isOpenRouterModel(model2) { + return model2.provider === "openrouter" || model2.baseUrl.includes("openrouter.ai"); +} +function applyOpenRouterReportedCost(usage, reported) { + if (!isValidCost(reported.cost)) + return; + if (reported.is_byok === false) { + usage.cost.total = reported.cost; + usage.cost.totalFromProvider = true; + return; + } + if (reported.is_byok === true) { + const details = reported.cost_details; + if (!details) + return; + let upstreamCost = details.upstream_inference_cost; + if (upstreamCost === null) { + if (!isValidCost(details.upstream_inference_prompt_cost) || !isValidCost(details.upstream_inference_completions_cost)) { + return; + } + upstreamCost = details.upstream_inference_prompt_cost + details.upstream_inference_completions_cost; + } + if (!isValidCost(upstreamCost)) + return; + usage.cost.total = reported.cost + upstreamCost; + usage.cost.totalFromProvider = true; + } +} +var init_openrouter_cost = __esm({ + "node_modules/@earendil-works/pi-ai/dist/utils/openrouter-cost.js"() { + } +}); + +// node_modules/@earendil-works/pi-ai/dist/utils/provider-env.js +function getBunSandboxEnvValue(name) { + if (typeof process === "undefined" || !process.versions?.bun || Object.keys(process.env).length > 0) { + return void 0; + } + if (procEnvCache === null) { + procEnvCache = /* @__PURE__ */ new Map(); + try { + const { readFileSync } = __require("node:fs"); + const data = readFileSync("/proc/self/environ", "utf-8"); + for (const entry2 of data.split("\0")) { + const idx = entry2.indexOf("="); + if (idx > 0) { + procEnvCache.set(entry2.slice(0, idx), entry2.slice(idx + 1)); + } + } + } catch { + } + } + return procEnvCache.get(name); +} +function getProviderEnvValue(name, env) { + return env?.[name] || (typeof process !== "undefined" ? process.env[name] : void 0) || getBunSandboxEnvValue(name) || void 0; +} +var procEnvCache; +var init_provider_env = __esm({ + "node_modules/@earendil-works/pi-ai/dist/utils/provider-env.js"() { + procEnvCache = null; + } +}); + +// node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js +function isProviderError(error) { + if (!(error instanceof Error) || !("status" in error) || !("headers" in error)) + return false; + return (error.status === void 0 || typeof error.status === "number") && (error.headers === void 0 || error.headers instanceof Headers); +} +function isRetryableProviderError(error) { + const shouldRetry = error.headers?.get("x-should-retry"); + if (shouldRetry === "true") + return true; + if (shouldRetry === "false") + return false; + if (error.status === void 0) + return true; + return error.status === 408 || error.status === 409 || error.status === 429 || typeof error.status === "number" && error.status >= 500; +} +function validateServerRetryDelayMs(delayMs, maxRetryDelayMs, providerErrorMessage) { + const maxDelayMs = maxRetryDelayMs ?? DEFAULT_MAX_RETRY_DELAY_MS; + if (maxDelayMs > 0 && delayMs > maxDelayMs) { + throw new Error(`Server requested ${Math.ceil(delayMs / 1e3)}s retry delay (max: ${Math.ceil(maxDelayMs / 1e3)}s). ${providerErrorMessage}`); + } + return delayMs; +} +function getRetryDelayMs(error, retryIndex, maxRetryDelayMs) { + const retryAfterMs = error.headers?.get("retry-after-ms"); + if (retryAfterMs) { + const value2 = Number.parseFloat(retryAfterMs); + if (Number.isFinite(value2)) + return validateServerRetryDelayMs(value2, maxRetryDelayMs, error.message); + } + const retryAfter = error.headers?.get("retry-after"); + if (retryAfter) { + const seconds = Number.parseFloat(retryAfter); + const delayMs = Number.isNaN(seconds) ? Date.parse(retryAfter) - Date.now() : seconds * 1e3; + if (Number.isFinite(delayMs)) + return validateServerRetryDelayMs(delayMs, maxRetryDelayMs, error.message); + } + const exponentialDelay = Math.min(0.5 * 2 ** retryIndex, 8) * 1e3; + return exponentialDelay * (1 - Math.random() * 0.25); +} +function createAbortError() { + const error = new Error("Request aborted"); + error.name = "AbortError"; + return error; +} +function abortableSleep(ms, signal) { + return new Promise((resolve2, reject2) => { + if (signal?.aborted) { + reject2(createAbortError()); + return; + } + const onAbort = () => { + clearTimeout(timeout); + reject2(createAbortError()); + }; + const timeout = setTimeout(() => { + signal?.removeEventListener("abort", onAbort); + resolve2(); + }, Math.max(0, ms)); + signal?.addEventListener("abort", onAbort, { once: true }); + }); +} +async function retryProviderRequest(request2, options = {}) { + const maxRetries = options.maxRetries ?? 0; + let retriesRemaining = maxRetries; + for (; ; ) { + try { + return await request2(); + } catch (error) { + if (options.signal?.aborted) + throw createAbortError(); + if (retriesRemaining <= 0 || !isProviderError(error) || !isRetryableProviderError(error)) + throw error; + if (error.status !== void 0 && options.noRetryStatuses?.includes(error.status)) + throw error; + const retryIndex = maxRetries - retriesRemaining; + retriesRemaining--; + await abortableSleep(getRetryDelayMs(error, retryIndex, options.maxRetryDelayMs), options.signal); + } + } +} +var DEFAULT_MAX_RETRY_DELAY_MS; +var init_provider_retry = __esm({ + "node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js"() { + DEFAULT_MAX_RETRY_DELAY_MS = 6e4; + } +}); + +// node_modules/@earendil-works/pi-ai/dist/utils/sanitize-unicode.js +function sanitizeSurrogates(text2) { + return text2.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(? { + const length = jsonString.length; + let index = 0; + const markPartialJSON = (msg) => { + throw new PartialJSON2(`${msg} at position ${index}`); + }; + const throwMalformedError = (msg) => { + throw new MalformedJSON2(`${msg} at position ${index}`); + }; + const parseAny = () => { + skipBlank(); + if (index >= length) + markPartialJSON("Unexpected end of input"); + if (jsonString[index] === '"') + return parseStr(); + if (jsonString[index] === "{") + return parseObj(); + if (jsonString[index] === "[") + return parseArr(); + if (jsonString.substring(index, index + 4) === "null" || options_1.Allow.NULL & allow && length - index < 4 && "null".startsWith(jsonString.substring(index))) { + index += 4; + return null; + } + if (jsonString.substring(index, index + 4) === "true" || options_1.Allow.BOOL & allow && length - index < 4 && "true".startsWith(jsonString.substring(index))) { + index += 4; + return true; + } + if (jsonString.substring(index, index + 5) === "false" || options_1.Allow.BOOL & allow && length - index < 5 && "false".startsWith(jsonString.substring(index))) { + index += 5; + return false; + } + if (jsonString.substring(index, index + 8) === "Infinity" || options_1.Allow.INFINITY & allow && length - index < 8 && "Infinity".startsWith(jsonString.substring(index))) { + index += 8; + return Infinity; + } + if (jsonString.substring(index, index + 9) === "-Infinity" || options_1.Allow._INFINITY & allow && 1 < length - index && length - index < 9 && "-Infinity".startsWith(jsonString.substring(index))) { + index += 9; + return -Infinity; + } + if (jsonString.substring(index, index + 3) === "NaN" || options_1.Allow.NAN & allow && length - index < 3 && "NaN".startsWith(jsonString.substring(index))) { + index += 3; + return NaN; + } + return parseNum(); + }; + const parseStr = () => { + const start = index; + let escape2 = false; + index++; + while (index < length && (jsonString[index] !== '"' || escape2 && jsonString[index - 1] === "\\")) { + escape2 = jsonString[index] === "\\" ? !escape2 : false; + index++; + } + if (jsonString.charAt(index) == '"') { + try { + return JSON.parse(jsonString.substring(start, ++index - Number(escape2))); + } catch (e) { + throwMalformedError(String(e)); + } + } else if (options_1.Allow.STR & allow) { + try { + return JSON.parse(jsonString.substring(start, index - Number(escape2)) + '"'); + } catch (e) { + return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf("\\")) + '"'); + } + } + markPartialJSON("Unterminated string literal"); + }; + const parseObj = () => { + index++; + skipBlank(); + const obj2 = {}; + try { + while (jsonString[index] !== "}") { + skipBlank(); + if (index >= length && options_1.Allow.OBJ & allow) + return obj2; + const key = parseStr(); + skipBlank(); + index++; + try { + const value2 = parseAny(); + obj2[key] = value2; + } catch (e) { + if (options_1.Allow.OBJ & allow) + return obj2; + else + throw e; + } + skipBlank(); + if (jsonString[index] === ",") + index++; + } + } catch (e) { + if (options_1.Allow.OBJ & allow) + return obj2; + else + markPartialJSON("Expected '}' at end of object"); + } + index++; + return obj2; + }; + const parseArr = () => { + index++; + const arr2 = []; + try { + while (jsonString[index] !== "]") { + arr2.push(parseAny()); + skipBlank(); + if (jsonString[index] === ",") { + index++; + } + } + } catch (e) { + if (options_1.Allow.ARR & allow) { + return arr2; + } + markPartialJSON("Expected ']' at end of array"); + } + index++; + return arr2; + }; + const parseNum = () => { + if (index === 0) { + if (jsonString === "-") + throwMalformedError("Not sure what '-' is"); + try { + return JSON.parse(jsonString); + } catch (e) { + if (options_1.Allow.NUM & allow) + try { + return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf("e"))); + } catch (e2) { + } + throwMalformedError(String(e)); + } + } + const start = index; + if (jsonString[index] === "-") + index++; + while (jsonString[index] && ",]}".indexOf(jsonString[index]) === -1) + index++; + if (index == length && !(options_1.Allow.NUM & allow)) + markPartialJSON("Unterminated number literal"); + try { + return JSON.parse(jsonString.substring(start, index)); + } catch (e) { + if (jsonString.substring(start, index) === "-") + markPartialJSON("Not sure what '-' is"); + try { + return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf("e"))); + } catch (e2) { + throwMalformedError(String(e2)); + } + } + }; + const skipBlank = () => { + while (index < length && " \n\r ".includes(jsonString[index])) { + index++; + } + }; + return parseAny(); + }; + var parse2 = parseJSON2; + exports.parse = parse2; + } +}); + +// node_modules/@earendil-works/pi-ai/dist/utils/json-parse.js +function isControlCharacter(char) { + const codePoint = char.codePointAt(0); + return codePoint !== void 0 && codePoint >= 0 && codePoint <= 31; +} +function escapeControlCharacter(char) { + switch (char) { + case "\b": + return "\\b"; + case "\f": + return "\\f"; + case "\n": + return "\\n"; + case "\r": + return "\\r"; + case " ": + return "\\t"; + default: + return `\\u${char.codePointAt(0)?.toString(16).padStart(4, "0") ?? "0000"}`; + } +} +function repairJson(json) { + let repaired = ""; + let inString = false; + for (let index = 0; index < json.length; index++) { + const char = json[index]; + if (!inString) { + repaired += char; + if (char === '"') { + inString = true; + } + continue; + } + if (char === '"') { + repaired += char; + inString = false; + continue; + } + if (char === "\\") { + const nextChar = json[index + 1]; + if (nextChar === void 0) { + repaired += "\\\\"; + continue; + } + if (nextChar === "u") { + const unicodeDigits = json.slice(index + 2, index + 6); + if (/^[0-9a-fA-F]{4}$/.test(unicodeDigits)) { + repaired += `\\u${unicodeDigits}`; + index += 5; + continue; + } + } + if (VALID_JSON_ESCAPES.has(nextChar)) { + repaired += `\\${nextChar}`; + index += 1; + continue; + } + repaired += "\\\\"; + continue; + } + repaired += isControlCharacter(char) ? escapeControlCharacter(char) : char; + } + return repaired; +} +function parseJsonWithRepair(json) { + try { + return JSON.parse(json); + } catch (error) { + const repairedJson = repairJson(json); + if (repairedJson !== json) { + return JSON.parse(repairedJson); + } + throw error; + } +} +function parseToolCallArguments(json) { + if (!json?.trim()) + return { arguments: {} }; + try { + const parsed = parseJsonWithRepair(json); + if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) { + throw new Error("Tool arguments must be a JSON object"); + } + return { arguments: parsed }; + } catch (error) { + return { + arguments: {}, + argumentsError: `${error instanceof Error ? error.message : String(error)} + +Received arguments: +${json}` + }; + } +} +function parseStreamingJson(partialJson) { + if (!partialJson || partialJson.trim() === "") { + return {}; + } + try { + return parseJsonWithRepair(partialJson); + } catch { + try { + const result = (0, import_partial_json.parse)(partialJson); + return result ?? {}; + } catch { + try { + const result = (0, import_partial_json.parse)(repairJson(partialJson)); + return result ?? {}; + } catch { + return {}; + } + } + } +} +var import_partial_json, VALID_JSON_ESCAPES; +var init_json_parse = __esm({ + "node_modules/@earendil-works/pi-ai/dist/utils/json-parse.js"() { + import_partial_json = __toESM(require_dist(), 1); + VALID_JSON_ESCAPES = /* @__PURE__ */ new Set(['"', "\\", "/", "b", "f", "n", "r", "t"]); + } +}); + +// node_modules/@earendil-works/pi-ai/dist/utils/streaming-json.js +function isDelimiter(char) { + return char === " " || char === " " || char === "\n" || char === "\r" || char === "," || char === ":" || char === "{" || char === "}" || char === "[" || char === "]" || char === '"'; +} +function isHexDigit(char) { + return char >= "0" && char <= "9" || char >= "a" && char <= "f" || char >= "A" && char <= "F"; +} +function scalarValue(token) { + for (const [literal, value2] of LITERALS) + if (token === literal) + return value2; + return NUMBER.test(token) ? Number(token) : void 0; +} +function pendingScalarValue(token) { + for (const [literal, value2] of LITERALS) + if (literal.startsWith(token)) + return value2; + if (NUMBER.test(token)) + return Number(token); + const mantissa = NUMBER_WITHOUT_EXPONENT_DIGITS.exec(token); + return mantissa === null ? void 0 : Number(mantissa[1]); +} +function setSlot(container, slot, value2) { + if (slot.kind === "element") + container[slot.index] = value2; + else if (slot.kind === "member") + setMember(container, slot.key, value2); +} +function setMember(members, key, value2) { + if (key === "__proto__") { + Object.defineProperty(members, key, { value: value2, writable: true, enumerable: true, configurable: true }); + } else { + members[key] = value2; + } +} +var MAX_REPORTED_DEPTH, ROOT_SLOT, CREDIT_PER_APPEND, CREDIT_PER_CHARACTER, MAX_PENDING_SCALAR_LENGTH, NUMBER, NUMBER_WITHOUT_EXPONENT_DIGITS, LITERALS, QUOTE, BACKSLASH, StreamingJsonParser, ToolCallArgumentsStream, SIMPLE_ESCAPES; +var init_streaming_json = __esm({ + "node_modules/@earendil-works/pi-ai/dist/utils/streaming-json.js"() { + init_json_parse(); + MAX_REPORTED_DEPTH = 32; + ROOT_SLOT = { kind: "root" }; + CREDIT_PER_APPEND = 256; + CREDIT_PER_CHARACTER = 8; + MAX_PENDING_SCALAR_LENGTH = 64; + NUMBER = /^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?$/; + NUMBER_WITHOUT_EXPONENT_DIGITS = /^(-?(?:0|[1-9]\d*)(?:\.\d+)?)[eE][+-]?$/; + LITERALS = [ + ["true", true], + ["false", false], + ["null", null] + ]; + QUOTE = 34; + BACKSLASH = 92; + StreamingJsonParser = class { + #root = void 0; + #done = false; + #stack = []; + #string = void 0; + #scalar = ""; + #scalarSlot = void 0; + /** Sum of `size + 1` over the open path: what a fresh snapshot copies. */ + #pathCost = 0; + #credit = 0; + #dirty = false; + #snapshot = void 0; + /** Changes of the piece being read. */ + #changes = []; + /** + * Read the next piece of text; returns the changes it made, in order. Costs time linear in `text.length`. + */ + append(text2) { + this.#credit += CREDIT_PER_APPEND + CREDIT_PER_CHARACTER * text2.length; + this.#changes = []; + if (this.#string !== void 0) + this.#string.change = void 0; + let index = 0; + while (index < text2.length && !this.#done) { + const open = this.#string; + if (open !== void 0) + index = this.#readString(open, text2, index); + else if (this.#scalar !== "") + index = this.#readScalar(text2, index); + else + this.#structural(text2[index++]); + } + return this.#changes; + } + /** + * The value of the text read so far: `undefined` before a value starts, otherwise a plain JSON value that never + * changes afterwards. Returns the previous snapshot while the text read since did not change the value, or while a + * fresh copy of the open path is not yet paid for (see the module comment). + */ + snapshot() { + if (!this.#dirty) + return this.#snapshot; + const pending = this.#pendingScalar(); + const cost = this.#pathCost + (pending === void 0 ? 0 : 1); + if (cost > this.#credit) + return this.#snapshot; + this.#credit -= cost; + this.#dirty = false; + this.#snapshot = this.#copyOpenPath(pending); + return this.#snapshot; + } + /** Read string characters from `start` until the string ends or the text does; returns the next index. */ + #readString(open, text2, start) { + let runStart = start; + for (let index = start; index < text2.length; index++) { + const code = text2.charCodeAt(index); + if (open.escape !== "") { + if (this.#continueEscape(open, text2[index])) { + runStart = index + 1; + continue; + } + runStart = index; + } + if (code === QUOTE) { + if (index > runStart) + this.#appendString(open, text2.slice(runStart, index)); + this.#endString(open); + return index + 1; + } + if (code === BACKSLASH) { + if (index > runStart) + this.#appendString(open, text2.slice(runStart, index)); + open.escape = "\\"; + runStart = index + 1; + } + } + if (text2.length > runStart) + this.#appendString(open, text2.slice(runStart)); + return text2.length; + } + /** Read number or literal characters from `start` up to the next delimiter; returns the delimiter's index. */ + #readScalar(text2, start) { + let end = start; + while (end < text2.length && !isDelimiter(text2[end])) + end++; + if (end > start) { + this.#scalar += text2.slice(start, end); + if (this.#scalarSlot !== void 0) + this.#dirty = true; + } + if (end < text2.length) + this.#endScalar(); + return end; + } + /** Handle one character outside strings. */ + #structural(char) { + switch (char) { + case " ": + case " ": + case "\n": + case "\r": + return; + case '"': + this.#startString(); + return; + case "{": + case "[": + this.#openContainer(char === "{" ? {} : []); + return; + case "}": + case "]": + this.#closeContainer(); + return; + case ":": { + const frame = this.#stack.at(-1); + if (frame !== void 0 && !Array.isArray(frame.container) && frame.phase === "colon") + frame.phase = "value"; + return; + } + case ",": { + const frame = this.#stack.at(-1); + if (frame !== void 0) + frame.phase = Array.isArray(frame.container) ? "value" : "key"; + return; + } + default: + this.#scalar = char; + this.#scalarSlot = this.#valueSlot(); + if (this.#scalarSlot !== void 0) + this.#dirty = true; + } + } + /** Where a value starting now goes, or `undefined` when this position takes no value. */ + #valueSlot() { + const frame = this.#stack.at(-1); + if (frame === void 0) + return this.#root === void 0 ? ROOT_SLOT : void 0; + if (Array.isArray(frame.container)) + return { kind: "element", index: frame.container.length }; + if ((frame.phase === "value" || frame.phase === "colon") && frame.key !== void 0) { + return { kind: "member", key: frame.key }; + } + return void 0; + } + #startString() { + const frame = this.#stack.at(-1); + if (frame !== void 0 && !Array.isArray(frame.container) && (frame.phase === "key" || frame.phase === "comma")) { + this.#string = { target: "key", slot: void 0, text: "", escape: "", path: void 0, change: void 0 }; + return; + } + const slot = this.#valueSlot(); + const path5 = this.#reportedPath(slot); + this.#string = { target: "value", slot, text: "", escape: "", path: path5, change: void 0 }; + this.#place(slot, ""); + if (path5 !== void 0) + this.#string.change = this.#report({ kind: "set", path: path5, value: "" }); + } + /** The path of a value at `slot` in the innermost open container, when its changes are reported. */ + #reportedPath(slot) { + if (slot === void 0) + return void 0; + if (slot.kind === "root") + return []; + const frame = this.#stack.at(-1); + if (!frame.reportsInside) + return void 0; + return [...frame.path, slot.kind === "member" ? slot.key : slot.index]; + } + #report(change) { + this.#changes.push(change); + return change; + } + /** Continue an escape with `char`; returns false when `char` is not part of it and must be read normally. */ + #continueEscape(open, char) { + if (open.escape === "\\") { + const decoded = SIMPLE_ESCAPES[char]; + if (decoded !== void 0) { + open.escape = ""; + this.#appendString(open, decoded); + return true; + } + if (char === "u") { + open.escape = "\\u"; + return true; + } + open.escape = ""; + this.#appendString(open, "\\"); + return false; + } + if (isHexDigit(char)) { + open.escape += char; + if (open.escape.length < 6) + return true; + const decoded = String.fromCharCode(Number.parseInt(open.escape.slice(2), 16)); + open.escape = ""; + this.#appendString(open, decoded); + return true; + } + const literal = open.escape; + open.escape = ""; + this.#appendString(open, literal); + return false; + } + #appendString(open, text2) { + open.text += text2; + if (open.target !== "value") + return; + this.#place(open.slot, open.text); + if (open.path === void 0) + return; + const change = open.change; + if (change !== void 0 && this.#changes.at(-1) === change) { + if (change.kind === "set") + change.value = change.value + text2; + else + change.text += text2; + return; + } + open.change = this.#report({ kind: "append", path: open.path, text: text2 }); + } + #endString(open) { + this.#string = void 0; + const frame = this.#stack.at(-1); + if (open.target === "key") { + if (frame === void 0) + return; + frame.key = open.text; + frame.phase = "colon"; + return; + } + this.#valueEnded(frame); + } + #endScalar() { + const token = this.#scalar; + const slot = this.#scalarSlot; + this.#scalar = ""; + this.#scalarSlot = void 0; + const value2 = scalarValue(token); + if (value2 !== void 0) { + this.#place(slot, value2); + const path5 = this.#reportedPath(slot); + if (path5 !== void 0) + this.#report({ kind: "set", path: path5, value: value2 }); + } + this.#valueEnded(this.#stack.at(-1)); + } + /** The value of the unterminated scalar at the end of the text, if it shows. */ + #pendingScalar() { + const slot = this.#scalarSlot; + const token = this.#scalar; + if (slot === void 0 || token === "" || token.length > MAX_PENDING_SCALAR_LENGTH) + return void 0; + const value2 = pendingScalarValue(token); + return value2 === void 0 ? void 0 : { slot, value: value2 }; + } + #openContainer(container) { + const slot = this.#valueSlot(); + const path5 = this.#reportedPath(slot); + this.#place(slot, container); + this.#stack.push({ + container, + slot, + path: path5, + reportsInside: path5 !== void 0 && path5.length < MAX_REPORTED_DEPTH, + size: 0, + key: void 0, + phase: Array.isArray(container) ? "value" : "key" + }); + this.#pathCost += 1; + this.#dirty = true; + if (path5 !== void 0) + this.#report({ kind: "set", path: path5, value: Array.isArray(container) ? [] : {} }); + } + #closeContainer() { + const frame = this.#stack.pop(); + if (frame === void 0) + return; + this.#pathCost -= frame.size + 1; + this.#dirty = true; + if (frame.path !== void 0 && !frame.reportsInside) { + this.#report({ kind: "set", path: frame.path, value: frame.container }); + } + this.#valueEnded(this.#stack.at(-1)); + } + /** A value in `frame`, or the root value when there is no frame, has ended. */ + #valueEnded(frame) { + if (frame === void 0) { + if (this.#root !== void 0) + this.#done = true; + return; + } + frame.phase = "comma"; + } + /** Set the value at `slot` in the open path; nothing for a value in an invalid position. */ + #place(slot, value2) { + if (slot === void 0) + return; + this.#dirty = true; + if (slot.kind === "root") { + this.#root = value2; + return; + } + const frame = this.#stack.at(-1); + if (slot.kind === "element") { + const elements = frame.container; + if (slot.index === elements.length) { + frame.size++; + this.#pathCost++; + } + elements[slot.index] = value2; + return; + } + const members = frame.container; + if (!Object.hasOwn(members, slot.key)) { + frame.size++; + this.#pathCost++; + } + setMember(members, slot.key, value2); + } + /** A fresh snapshot: copies of the open containers, innermost first, each holding the copy of its open child. */ + #copyOpenPath(pending) { + if (this.#stack.length === 0) + return pending?.slot.kind === "root" ? pending.value : this.#root; + let child; + let childSlot; + for (let depth = this.#stack.length - 1; depth >= 0; depth--) { + const frame = this.#stack[depth]; + const copy2 = Array.isArray(frame.container) ? frame.container.slice() : { ...frame.container }; + if (depth === this.#stack.length - 1 && pending !== void 0) + setSlot(copy2, pending.slot, pending.value); + if (child !== void 0 && childSlot !== void 0) + setSlot(copy2, childSlot, child); + child = copy2; + childSlot = frame.slot; + } + return childSlot?.kind === "root" ? child : this.#root; + } + }; + ToolCallArgumentsStream = class { + #text = ""; + #parser = new StreamingJsonParser(); + #snapshot = void 0; + #arguments = {}; + /** The raw argument text received so far. */ + get text() { + return this.#text; + } + /** Append a piece of argument text; returns the partial arguments, a new object whenever they changed. */ + append(delta) { + this.#text += delta; + this.#parser.append(delta); + return this.#partial(); + } + /** + * Take the provider's complete argument text. When it continues the text so far, returns the missing piece as + * `delta`; otherwise starts over with `text`. Either way returns the partial arguments of `text`. + */ + replace(text2) { + if (text2.startsWith(this.#text)) { + const delta = text2.slice(this.#text.length); + return { delta, arguments: delta === "" ? this.#partial() : this.append(delta) }; + } + this.#text = ""; + this.#parser = new StreamingJsonParser(); + return { delta: void 0, arguments: this.append(text2) }; + } + /** The final arguments: one full parse of the complete text, which reports malformed arguments. */ + finish() { + return parseToolCallArguments(this.#text); + } + #partial() { + const snapshot = this.#parser.snapshot(); + if (snapshot === this.#snapshot) + return this.#arguments; + this.#snapshot = snapshot; + this.#arguments = typeof snapshot === "object" && snapshot !== null && !Array.isArray(snapshot) ? snapshot : {}; + return this.#arguments; + } + }; + SIMPLE_ESCAPES = { + '"': '"', + "\\": "\\", + "/": "/", + b: "\b", + f: "\f", + n: "\n", + r: "\r", + t: " " + }; + } +}); + +// node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js +function isJsonSchemaObject(value2) { + return typeof value2 === "object" && value2 !== null && !Array.isArray(value2); +} +function isStructuredSchema(schema4) { + if (!isJsonSchemaObject(schema4)) + return false; + const types = typeof schema4.type === "string" ? [schema4.type] : Array.isArray(schema4.type) ? schema4.type : []; + return types.includes("object") || types.includes("array") || schema4.properties !== void 0 || schema4.items !== void 0; +} +function schemaAllowsNull(schema4) { + if (!isJsonSchemaObject(schema4)) + return false; + if (schema4.type === "null" || Array.isArray(schema4.type) && schema4.type.includes("null")) + return true; + if (schema4.const === null || Array.isArray(schema4.enum) && schema4.enum.includes(null)) + return true; + return Array.isArray(schema4.anyOf) && schema4.anyOf.some((variant) => schemaAllowsNull(variant)); +} +function makeJsonSchemaNodeStrict(schema4, isUnsupportedKeyword) { + if (!isJsonSchemaObject(schema4)) { + throw new UnsupportedStrictJsonSchemaError("boolean schemas are unsupported"); + } + for (const key of UNSUPPORTED_STRICT_SCHEMA_KEYS) { + if (schema4[key] !== void 0) { + throw new UnsupportedStrictJsonSchemaError(`${key} schemas are unsupported`); + } + } + if (isUnsupportedKeyword) { + for (const [key, value2] of Object.entries(schema4)) { + if (isUnsupportedKeyword(key, value2)) { + throw new UnsupportedStrictJsonSchemaError(`${key}: ${JSON.stringify(value2)} is unsupported`); + } + } + } + if (schema4.anyOf !== void 0) { + if (!Array.isArray(schema4.anyOf) || schema4.anyOf.length === 0) { + throw new UnsupportedStrictJsonSchemaError("anyOf must contain at least one schema"); + } + for (const variant of schema4.anyOf) { + if (isStructuredSchema(variant)) { + throw new UnsupportedStrictJsonSchemaError("object and array unions are unsupported"); + } + makeJsonSchemaNodeStrict(variant, isUnsupportedKeyword); + } + } + if (schema4.items !== void 0) { + if (Array.isArray(schema4.items)) { + throw new UnsupportedStrictJsonSchemaError("tuple schemas are unsupported"); + } + makeJsonSchemaNodeStrict(schema4.items, isUnsupportedKeyword); + } + const isObjectSchema = schema4.type === "object"; + if (schema4.properties !== void 0 && !isObjectSchema) { + throw new UnsupportedStrictJsonSchemaError("properties require type object"); + } + if (!isObjectSchema) + return; + if (schema4.additionalProperties !== void 0 && schema4.additionalProperties !== false) { + throw new UnsupportedStrictJsonSchemaError("schema-valued or true additionalProperties is unsupported"); + } + if (schema4.properties !== void 0 && !isJsonSchemaObject(schema4.properties)) { + throw new UnsupportedStrictJsonSchemaError("object properties must be a schema map"); + } + if (schema4.required !== void 0 && (!Array.isArray(schema4.required) || schema4.required.some((key) => typeof key !== "string"))) { + throw new UnsupportedStrictJsonSchemaError("object required must be a string array"); + } + const properties = schema4.properties ?? {}; + const propertyNames = Object.keys(properties); + const required = new Set(Array.isArray(schema4.required) ? schema4.required : []); + if ([...required].some((key) => !propertyNames.includes(key))) { + throw new UnsupportedStrictJsonSchemaError("required contains an unknown property"); + } + for (const [key, property] of Object.entries(properties)) { + makeJsonSchemaNodeStrict(property, isUnsupportedKeyword); + if (!required.has(key) && !schemaAllowsNull(property)) { + properties[key] = { anyOf: [property, { type: "null" }] }; + } + } + schema4.required = propertyNames; + schema4.additionalProperties = false; +} +function makeStrictJsonSchema(schema4, isUnsupportedKeyword) { + const cloned = structuredClone(schema4); + if (!isJsonSchemaObject(cloned)) { + throw new UnsupportedStrictJsonSchemaError("root schema must have type object"); + } + makeJsonSchemaNodeStrict(cloned, isUnsupportedKeyword); + if (cloned.type !== "object") { + throw new UnsupportedStrictJsonSchemaError("root schema must have type object"); + } + return cloned; +} +function prefersJsonSchemaStrictSampling(tool) { + const config = tool.constrainedSampling; + return !!config && config.type === "json_schema" && config.strict === "prefer"; +} +function isStrictToolLimitErrorMessage(message) { + return STRICT_TOOL_LIMIT_ERROR_MESSAGES.some((limitMessage) => message.includes(limitMessage)); +} +function getJsonSchemaToolParameters(tool, strict) { + return strict === true ? makeStrictJsonSchema(tool.parameters) : tool.parameters; +} +function getGrammarToolInput(toolName2, arguments_, inputProperty) { + const input = arguments_[inputProperty]; + if (typeof input !== "string") { + throw new Error(`Grammar tool call "${toolName2}" requires argument "${inputProperty}" to be a string.`); + } + return input; +} +function appendGrammarToolInputJsonDelta(buffer, inputProperty, inputDelta) { + if (buffer.closed) { + throw new Error(`grammar tool input for property "${inputProperty}" changed after it was closed`); + } + if (inputDelta.length === 0) + return void 0; + buffer.input += inputDelta; + return grammarToolInputJsonStart(buffer, inputProperty) + JSON.stringify(inputDelta).slice(1, -1); +} +function closeGrammarToolInputJson(buffer, inputProperty, finalInput) { + if (buffer.closed) { + if (finalInput === void 0 || finalInput === buffer.input) + return void 0; + throw new Error(`grammar tool input for property "${inputProperty}" changed after it was closed`); + } + if (finalInput !== void 0 && !finalInput.startsWith(buffer.input)) { + throw new Error(`grammar tool input for property "${inputProperty}" changed non-monotonically`); + } + const rest = finalInput === void 0 ? "" : finalInput.slice(buffer.input.length); + if (finalInput !== void 0) + buffer.input = finalInput; + buffer.closed = true; + return `${grammarToolInputJsonStart(buffer, inputProperty)}${JSON.stringify(rest).slice(1, -1)}"}`; +} +function grammarToolInputJsonStart(buffer, inputProperty) { + if (buffer.started) + return ""; + buffer.started = true; + return `{${JSON.stringify(inputProperty)}:"`; +} +function inferGrammarInputProperty(tool) { + const schema4 = tool.parameters; + if (schema4.type !== "object") { + throw new Error("grammar constrained sampling requires an object parameter schema"); + } + if (!Array.isArray(schema4.required) || schema4.required.length !== 1 || typeof schema4.required[0] !== "string") { + throw new Error("grammar constrained sampling requires exactly one required string property"); + } + const inputProperty = schema4.required[0]; + if (!schema4.properties?.[inputProperty]) { + throw new Error(`grammar constrained sampling requires a properties entry for ${inputProperty}`); + } + if (schema4.properties[inputProperty]?.type !== "string") { + throw new Error(`grammar constrained sampling property ${inputProperty} must have type string`); + } + return inputProperty; +} +function resolveJsonSchemaStrictSampling(tool, supportsStrictMode, isUnsupportedKeyword) { + const config = tool.constrainedSampling; + if (!config || config.type !== "json_schema") + return void 0; + if (supportsStrictMode) { + try { + makeStrictJsonSchema(tool.parameters, isUnsupportedKeyword); + return true; + } catch (error) { + if (!(error instanceof UnsupportedStrictJsonSchemaError)) + throw error; + if (config.strict !== "require") + return void 0; + throw new Error(`Tool "${tool.name}" requires JSON-schema constrained sampling, but ${error.message}.`); + } + } + if (config.strict === "require") { + throw new Error(`Tool "${tool.name}" requires JSON-schema constrained sampling, but strict tools are unsupported.`); + } + return void 0; +} +function resolveGrammarConstrainedSampling(tool, supportsOpenAIGrammarTools) { + const config = tool.constrainedSampling; + if (!config || config.type !== "grammar") { + return void 0; + } + if (!supportsOpenAIGrammarTools) { + return void 0; + } + const larkDefinition = config.variants.openai_lark; + const regexDefinition = config.variants.openai_regex; + const hasLarkDefinition = typeof larkDefinition === "string" && larkDefinition.trim().length > 0; + const hasRegexDefinition = typeof regexDefinition === "string" && regexDefinition.trim().length > 0; + if (!hasLarkDefinition && !hasRegexDefinition) { + throw new Error(`Tool "${tool.name}" cannot use grammar constrained sampling: no supported grammar variant was provided.`); + } + try { + return { + format: hasLarkDefinition ? "lark" : "regex", + definition: hasLarkDefinition ? larkDefinition : regexDefinition, + inputProperty: inferGrammarInputProperty(tool) + }; + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + throw new Error(`Tool "${tool.name}" cannot use grammar constrained sampling: ${message}.`); + } +} +function createGrammarToolInputProperties(tools, supportsOpenAIGrammarTools) { + const properties = /* @__PURE__ */ new Map(); + for (const tool of tools ?? []) { + const grammar = resolveGrammarConstrainedSampling(tool, supportsOpenAIGrammarTools); + if (grammar) { + properties.set(tool.name, grammar.inputProperty); + } + } + return properties; +} +var UnsupportedStrictJsonSchemaError, UNSUPPORTED_STRICT_SCHEMA_KEYS, STRICT_TOOL_LIMIT_ERROR_MESSAGES; +var init_constrained_sampling = __esm({ + "node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js"() { + UnsupportedStrictJsonSchemaError = class extends Error { + }; + UNSUPPORTED_STRICT_SCHEMA_KEYS = [ + "$ref", + "$defs", + "definitions", + "allOf", + "oneOf", + "patternProperties", + "dependentSchemas", + "dependencies", + "unevaluatedProperties", + "propertyNames", + "contains", + "prefixItems", + "not", + "if", + "then", + "else" + ]; + STRICT_TOOL_LIMIT_ERROR_MESSAGES = [ + "The compiled grammar is too large", + "Too many strict tools (", + "Schemas contains too many parameters with union types (" + ]; + } +}); + +// node_modules/@earendil-works/pi-ai/dist/api/github-copilot-headers.js +function inferCopilotInitiator(messages) { + const last = messages[messages.length - 1]; + return last && last.role !== "user" ? "agent" : "user"; +} +function hasCopilotVisionInput(messages) { + return messages.some((msg) => { + if (msg.role === "user" && Array.isArray(msg.content)) { + return msg.content.some((c) => c.type === "image"); + } + if (msg.role === "toolResult" && Array.isArray(msg.content)) { + return msg.content.some((c) => c.type === "image"); + } + return false; + }); +} +function buildCopilotDynamicHeaders(params) { + const headers = { + "X-Initiator": inferCopilotInitiator(params.messages), + "Openai-Intent": "conversation-edits" + }; + if (params.hasImages) { + headers["Copilot-Vision-Request"] = "true"; + } + return headers; +} +var init_github_copilot_headers = __esm({ + "node_modules/@earendil-works/pi-ai/dist/api/github-copilot-headers.js"() { + } +}); + // node_modules/@earendil-works/pi-ai/dist/api/openai-prompt-cache.js function clampOpenAIPromptCacheKey(key) { if (key === void 0) @@ -39975,21 +23429,17715 @@ var init_openai_prompt_cache = __esm({ } }); -// node_modules/@earendil-works/pi-ai/dist/utils/hash.js -function shortHash(str2) { - let h1 = 3735928559; - let h2 = 1103547991; - for (let i = 0; i < str2.length; i++) { - const ch = str2.charCodeAt(i); - h1 = Math.imul(h1 ^ ch, 2654435761); - h2 = Math.imul(h2 ^ ch, 1597334677); - } - h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507) ^ Math.imul(h2 ^ h2 >>> 13, 3266489909); - h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507) ^ Math.imul(h1 ^ h1 >>> 13, 3266489909); - return (h2 >>> 0).toString(36) + (h1 >>> 0).toString(36); +// node_modules/@earendil-works/pi-ai/dist/utils/estimate.js +function calculateContextTokens(usage) { + return usage.totalTokens || usage.input + usage.output + usage.cacheRead + usage.cacheWrite; } -var init_hash = __esm({ - "node_modules/@earendil-works/pi-ai/dist/utils/hash.js"() { +function safeJsonStringify2(value2) { + try { + return JSON.stringify(value2) ?? "undefined"; + } catch { + return "[unserializable]"; + } +} +function estimateTextAndImageContentChars(content) { + if (typeof content === "string") + return content.length; + let chars = 0; + for (const block of content) + chars += block.type === "text" ? block.text.length : ESTIMATED_IMAGE_CHARS; + return chars; +} +function estimateTextTokens(text2) { + return Math.ceil(text2.length / CHARS_PER_TOKEN); +} +function estimateTextAndImageContentTokens(content) { + return Math.ceil(estimateTextAndImageContentChars(content) / CHARS_PER_TOKEN); +} +function estimateMessageTokens(message) { + let chars = 0; + if (message.role === "system") { + return estimateTextTokens(getSystemMessageText(message)) + estimateToolsTokens(message.toolsAdded) + estimateToolsTokens(message.toolsRemoved); + } + if (message.role === "user") + return estimateTextAndImageContentTokens(message.content); + if (message.role === "toolResult") + return estimateTextAndImageContentTokens(message.content); + for (const block of message.content) { + if (block.type === "text") { + chars += block.text.length; + } else if (block.type === "thinking") { + chars += block.thinking.length; + } else { + chars += block.name.length + safeJsonStringify2(block.arguments).length; + } + } + return Math.ceil(chars / CHARS_PER_TOKEN); +} +function getLastAssistantUsageInfo(messages) { + let latestPrefixTimestamp = Number.NEGATIVE_INFINITY; + let usageInfo; + for (let i = 0; i < messages.length; i++) { + const message = messages[i]; + if (message.role === "assistant") { + const assistant = message; + const usageAppliesToPrefix = assistant.timestamp >= latestPrefixTimestamp; + if (usageAppliesToPrefix && assistant.stopReason !== "aborted" && assistant.stopReason !== "error" && calculateContextTokens(assistant.usage) > 0) { + usageInfo = { usage: assistant.usage, index: i }; + } + } + latestPrefixTimestamp = Math.max(latestPrefixTimestamp, message.timestamp); + } + return usageInfo; +} +function estimateContextTokens(context) { + const messages = "messages" in context ? context.messages : context; + const usageInfo = getLastAssistantUsageInfo(messages); + if (usageInfo) { + const usageTokens = calculateContextTokens(usageInfo.usage); + let trailingTokens = 0; + for (let i = usageInfo.index + 1; i < messages.length; i++) { + trailingTokens += estimateMessageTokens(messages[i]); + } + return { tokens: usageTokens + trailingTokens, usageTokens, trailingTokens, lastUsageIndex: usageInfo.index }; + } + let tokens = 0; + for (const message of messages) + tokens += estimateMessageTokens(message); + return { tokens, usageTokens: 0, trailingTokens: tokens, lastUsageIndex: null }; +} +function estimateToolsTokens(tools) { + if (!tools || tools.length === 0) + return 0; + return estimateTextTokens(safeJsonStringify2(tools)); +} +var CHARS_PER_TOKEN, ESTIMATED_IMAGE_CHARS; +var init_estimate = __esm({ + "node_modules/@earendil-works/pi-ai/dist/utils/estimate.js"() { + init_text(); + CHARS_PER_TOKEN = 3.5; + ESTIMATED_IMAGE_CHARS = 4800; + } +}); + +// node_modules/@earendil-works/pi-ai/dist/api/simple-options.js +function clampMaxTokensToContext(model2, context, maxTokens) { + if (model2.contextWindow <= 0) + return Math.max(MIN_MAX_TOKENS, maxTokens); + const available = model2.contextWindow - estimateContextTokens(context).tokens - CONTEXT_SAFETY_TOKENS; + return Math.min(maxTokens, Math.max(MIN_MAX_TOKENS, available)); +} +function resolveSamplingParams(model2, thinkingLevel, requestParams) { + const effectiveThinkingLevel = clampThinkingLevel(model2, thinkingLevel); + const thinkingLevelParams = model2.samplingParamsByThinkingLevel?.[effectiveThinkingLevel]; + return model2.samplingParams || thinkingLevelParams || requestParams ? { ...model2.samplingParams, ...thinkingLevelParams, ...requestParams } : void 0; +} +function buildBaseOptions(model2, context, options, apiKey) { + const samplingParams = resolveSamplingParams(model2, options?.reasoning ?? "off", options?.samplingParams); + return { + temperature: options?.temperature, + samplingParams, + maxTokens: clampMaxTokensToContext(model2, context, options?.maxTokens ?? model2.maxTokens), + signal: options?.signal, + telemetry: options?.telemetry, + apiKey: apiKey || options?.apiKey, + fetch: options?.fetch, + transport: options?.transport, + cacheRetention: options?.cacheRetention, + sessionId: options?.sessionId, + headers: options?.headers, + identity: options?.identity, + onPayload: options?.onPayload, + onResponse: options?.onResponse, + onProviderStreamEvent: options?.onProviderStreamEvent, + timeoutMs: options?.timeoutMs, + websocketConnectTimeoutMs: options?.websocketConnectTimeoutMs, + maxRetries: options?.maxRetries, + maxRetryDelayMs: options?.maxRetryDelayMs, + metadata: options?.metadata, + env: options?.env + }; +} +function clampReasoning(effort) { + return effort === "xhigh" || effort === "max" ? "high" : effort; +} +function thinkingBudgetForLevel(reasoningLevel, customBudgets) { + const budgets = { ...DEFAULT_THINKING_BUDGETS, ...customBudgets }; + const level = clampReasoning(reasoningLevel); + return budgets[level]; +} +function clampThinkingBudgetToAnswerRoom(thinkingBudget, ceiling) { + return Math.min(thinkingBudget, Math.max(0, ceiling - MIN_ANSWER_TOKENS)); +} +function adjustMaxTokensForThinking(baseMaxTokens, modelMaxTokens, reasoningLevel, customBudgets) { + let thinkingBudget = thinkingBudgetForLevel(reasoningLevel, customBudgets); + const maxTokens = baseMaxTokens === void 0 ? modelMaxTokens : Math.min(baseMaxTokens + thinkingBudget, modelMaxTokens); + if (maxTokens <= thinkingBudget) { + thinkingBudget = clampThinkingBudgetToAnswerRoom(thinkingBudget, maxTokens); + } + return { maxTokens, thinkingBudget }; +} +var CONTEXT_SAFETY_TOKENS, MIN_MAX_TOKENS, MIN_ANSWER_TOKENS, DEFAULT_THINKING_BUDGETS; +var init_simple_options = __esm({ + "node_modules/@earendil-works/pi-ai/dist/api/simple-options.js"() { + init_models(); + init_estimate(); + CONTEXT_SAFETY_TOKENS = 4096; + MIN_MAX_TOKENS = 1; + MIN_ANSWER_TOKENS = 1024; + DEFAULT_THINKING_BUDGETS = { + minimal: 1024, + low: 2048, + medium: 8192, + high: 16384 + }; + } +}); + +// node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js +function splitErrorToolResultImages(msg) { + if (!msg.isError) + return void 0; + const images = msg.content.filter((block) => block.type === "image"); + if (images.length === 0) + return void 0; + return { + content: replaceImagesWithPlaceholder(msg.content, ERROR_TOOL_IMAGE_PLACEHOLDER), + caption: `Images from the error result of tool call ${msg.toolCallId} (${msg.toolName}):`, + images + }; +} +function replaceImagesWithPlaceholder(content, placeholder) { + const result = []; + let previousWasPlaceholder = false; + for (const block of content) { + if (block.type === "image") { + if (!previousWasPlaceholder) { + result.push({ type: "text", text: placeholder }); + } + previousWasPlaceholder = true; + continue; + } + result.push(block); + previousWasPlaceholder = block.text === placeholder; + } + return result; +} +function downgradeUnsupportedImages(messages, model2) { + if (model2.input.includes("image")) { + return messages; + } + return messages.map((msg) => { + if (msg.role === "user" && Array.isArray(msg.content)) { + return { + ...msg, + content: replaceImagesWithPlaceholder(msg.content, NON_VISION_USER_IMAGE_PLACEHOLDER) + }; + } + if (msg.role === "toolResult") { + return { + ...msg, + content: replaceImagesWithPlaceholder(msg.content, NON_VISION_TOOL_IMAGE_PLACEHOLDER) + }; + } + return msg; + }); +} +function transformMessages(messages, model2, normalizeToolCallId2) { + const toolCallIdMap = /* @__PURE__ */ new Map(); + const normalizedMessages = messages.map((msg) => msg.content == null ? { ...msg, content: [] } : msg); + const imageAwareMessages = downgradeUnsupportedImages(normalizedMessages, model2); + const transformed = imageAwareMessages.map((msg) => { + if (msg.role === "system" || msg.role === "user") { + return msg; + } + if (msg.role === "toolResult") { + const normalizedId = toolCallIdMap.get(msg.toolCallId); + if (normalizedId && normalizedId !== msg.toolCallId) { + return { ...msg, toolCallId: normalizedId }; + } + return msg; + } + if (msg.role === "assistant") { + const assistantMsg = msg; + const isSameModel = assistantMsg.provider === model2.provider && assistantMsg.api === model2.api && assistantMsg.model === model2.id; + const transformedContent = assistantMsg.content.flatMap((block) => { + if (block.type === "thinking") { + if (!isSameModel) + return []; + if (block.redacted || block.thinkingSignature) + return block; + if (!block.thinking || block.thinking.trim() === "") + return []; + return block; + } + if (block.type === "text") { + if (isSameModel) + return block; + return { + type: "text", + text: block.text + }; + } + if (block.type === "toolCall") { + const toolCall = block; + let normalizedToolCall = toolCall; + if (!isSameModel && toolCall.thoughtSignature) { + normalizedToolCall = { ...toolCall }; + delete normalizedToolCall.thoughtSignature; + } + if (!isSameModel && normalizeToolCallId2) { + const normalizedId = normalizeToolCallId2(toolCall.id, model2, assistantMsg); + if (normalizedId !== toolCall.id) { + toolCallIdMap.set(toolCall.id, normalizedId); + normalizedToolCall = { ...normalizedToolCall, id: normalizedId }; + } + } + return normalizedToolCall; + } + return block; + }); + return { + ...assistantMsg, + content: transformedContent + }; + } + return msg; + }); + const result = []; + let pendingToolCalls = []; + let existingToolResultIds = /* @__PURE__ */ new Set(); + const heldSystemMessages = []; + const closePendingToolCalls = () => { + if (pendingToolCalls.length > 0) { + for (const tc of pendingToolCalls) { + if (!existingToolResultIds.has(tc.id)) { + result.push({ + role: "toolResult", + toolCallId: tc.id, + toolName: tc.name, + content: [{ type: "text", text: "No result provided" }], + isError: true, + timestamp: Date.now() + }); + } + } + pendingToolCalls = []; + existingToolResultIds = /* @__PURE__ */ new Set(); + } + result.push(...heldSystemMessages); + heldSystemMessages.length = 0; + }; + for (let i = 0; i < transformed.length; i++) { + const msg = transformed[i]; + if (msg.role === "assistant") { + closePendingToolCalls(); + const assistantMsg = msg; + if (assistantMsg.stopReason === "error" || assistantMsg.stopReason === "aborted") { + continue; + } + const toolCalls = assistantMsg.content.filter((b) => b.type === "toolCall"); + if (toolCalls.length > 0) { + pendingToolCalls = toolCalls; + existingToolResultIds = /* @__PURE__ */ new Set(); + } + result.push(msg); + } else if (msg.role === "toolResult") { + existingToolResultIds.add(msg.toolCallId); + result.push(msg); + } else if (msg.role === "system") { + if (pendingToolCalls.length > 0) { + heldSystemMessages.push(msg); + } else { + result.push(msg); + } + } else if (msg.role === "user") { + closePendingToolCalls(); + result.push(msg); + } else { + result.push(msg); + } + } + closePendingToolCalls(); + return result; +} +var NON_VISION_USER_IMAGE_PLACEHOLDER, NON_VISION_TOOL_IMAGE_PLACEHOLDER, ERROR_TOOL_IMAGE_PLACEHOLDER; +var init_transform_messages = __esm({ + "node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js"() { + NON_VISION_USER_IMAGE_PLACEHOLDER = "(image omitted: model does not support images)"; + NON_VISION_TOOL_IMAGE_PLACEHOLDER = "(tool image omitted: model does not support images)"; + ERROR_TOOL_IMAGE_PLACEHOLDER = "(image attached after the tool results)"; + } +}); + +// node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +var openai_completions_exports = {}; +__export(openai_completions_exports, { + convertMessages: () => convertMessages, + stream: () => stream, + streamSimple: () => streamSimple +}); +function hasHeader(headers, name) { + if (!headers) + return false; + const expected = name.toLowerCase(); + for (const [key, value2] of Object.entries(headers)) { + if (key.toLowerCase() === expected && value2 !== null && value2.trim().length > 0) + return true; + } + return false; +} +function getClientApiKey(provider2, apiKey, headers) { + if (apiKey) + return apiKey; + if (hasHeader(headers, "authorization") || hasHeader(headers, "cf-aig-authorization")) + return "unused"; + throw new Error(`No API key for provider: ${provider2}`); +} +function hasToolHistory(messages) { + for (const msg of messages) { + if (msg.role === "toolResult") { + return true; + } + if (msg.role === "assistant") { + if (msg.content.some((block) => block.type === "toolCall")) { + return true; + } + } + } + return false; +} +function isTextContentBlock(block) { + return block.type === "text"; +} +function isThinkingContentBlock(block) { + return block.type === "thinking"; +} +function isToolCallBlock(block) { + return block.type === "toolCall"; +} +function isImageContentBlock(block) { + return block.type === "image"; +} +function isReasoningDetailObject(detail) { + return typeof detail === "object" && detail !== null && !Array.isArray(detail); +} +function hasValidCommonReasoningDetailFields(candidate) { + return (candidate.id === void 0 || candidate.id === null || typeof candidate.id === "string") && (candidate.format === void 0 || typeof candidate.format === "string") && (candidate.index === void 0 || typeof candidate.index === "number"); +} +function isOpenAIReasoningDetail(detail) { + if (!isReasoningDetailObject(detail) || !hasValidCommonReasoningDetailFields(detail)) { + return false; + } + switch (detail.type) { + case "reasoning.summary": + return typeof detail.summary === "string"; + case "reasoning.encrypted": + return typeof detail.data === "string"; + case "reasoning.text": + return typeof detail.text === "string" && (detail.signature === void 0 || detail.signature === null || typeof detail.signature === "string"); + default: + return false; + } +} +function parseOpenAIReasoningDetails(signature) { + if (!signature) + return void 0; + try { + const parsed = JSON.parse(signature); + return Array.isArray(parsed) && parsed.length > 0 && parsed.every(isOpenAIReasoningDetail) ? parsed : void 0; + } catch { + return void 0; + } +} +function parseLegacyEncryptedReasoningDetail(signature) { + if (!signature) + return void 0; + try { + const parsed = JSON.parse(signature); + return isOpenAIReasoningDetail(parsed) && parsed.type === "reasoning.encrypted" && typeof parsed.id === "string" && parsed.id.length > 0 && parsed.data.length > 0 ? parsed : void 0; + } catch { + return void 0; + } +} +function fillMissingCommonReasoningDetailFields(target, source) { + target.id ??= source.id; + target.format ||= source.format; + target.index ??= source.index; +} +function appendOpenAIReasoningDetail(details, detail) { + const lastDetail = details[details.length - 1]; + if (detail.type === "reasoning.text" && lastDetail?.type === "reasoning.text") { + lastDetail.text += detail.text; + lastDetail.signature ||= detail.signature; + fillMissingCommonReasoningDetailFields(lastDetail, detail); + return; + } + if (detail.type === "reasoning.summary" && lastDetail?.type === "reasoning.summary") { + lastDetail.summary += detail.summary; + fillMissingCommonReasoningDetailFields(lastDetail, detail); + return; + } + details.push({ ...detail }); +} +function isOpenAICompletionsReasoningField(field) { + return OPENAI_COMPLETIONS_REASONING_FIELDS.includes(field); +} +function resolveCacheRetention(cacheRetention, env) { + if (cacheRetention) { + return cacheRetention; + } + if (getProviderEnvValue("PI_CACHE_RETENTION", env) === "long") { + return "long"; + } + return "short"; +} +function createClient(model2, context, apiKey, optionsHeaders, identity, fetch2, sessionId, compat = getCompat(model2)) { + const headers = { ...getIdentityHeaders(model2, identity), ...model2.headers }; + if (model2.provider === "github-copilot") { + const hasImages = hasCopilotVisionInput(context.messages); + const copilotHeaders = buildCopilotDynamicHeaders({ + messages: context.messages, + hasImages + }); + Object.assign(headers, copilotHeaders); + } + if (sessionId && compat.sendSessionAffinityHeaders) { + if (compat.sessionAffinityFormat === "openrouter") { + headers["x-session-id"] = sessionId; + } else { + if (compat.sessionAffinityFormat === "openai") { + headers.session_id = sessionId; + } + headers["x-client-request-id"] = sessionId; + headers["x-session-affinity"] = sessionId; + } + } + if (optionsHeaders) { + Object.assign(headers, optionsHeaders); + } + return new OpenAI({ + apiKey, + baseURL: model2.baseUrl, + dangerouslyAllowBrowser: true, + fetch: fetch2, + defaultHeaders: headers + }); +} +function buildParams(model2, context, options, compat = getCompat(model2), cacheRetention = resolveCacheRetention(options?.cacheRetention, options?.env), grammarToolInputProperties = createGrammarToolInputProperties(getDeclaredTools(context.messages), compat.supportsOpenAIGrammarTools)) { + const transcriptTools = resolveTranscriptTools(context.messages, compat.supportsMidConvoSystemMessages === true && compat.supportsMidConvoToolAdditions === true ? "additions" : "none"); + const messages = convertMessages(model2, context, compat, { + grammarToolInputProperties + }); + const cacheControl = getCompatCacheControl(compat, cacheRetention); + const params = { + model: model2.id, + messages, + stream: true, + prompt_cache_key: model2.baseUrl.includes("api.openai.com") && cacheRetention !== "none" || cacheRetention === "long" && compat.supportsLongCacheRetention ? clampOpenAIPromptCacheKey(options?.sessionId) : void 0, + prompt_cache_retention: cacheRetention === "long" && compat.supportsLongCacheRetention ? "24h" : void 0 + }; + if (compat.supportsUsageInStreaming !== false) { + params.stream_options = { include_usage: true }; + } + if (compat.supportsStore) { + params.store = false; + } + if (options?.maxTokens) { + if (compat.maxTokensField === "max_tokens") { + params.max_tokens = options.maxTokens; + } else { + params.max_completion_tokens = options.maxTokens; + } + } + if (options?.temperature !== void 0) { + params.temperature = options.temperature; + } + if (transcriptTools.requestTools.length > 0) { + params.tools = convertTools(transcriptTools.requestTools, compat); + if (compat.zaiToolStream) { + params.tool_stream = true; + } + } else if (hasToolHistory(context.messages)) { + params.tools = []; + } + if (cacheControl) { + applyAnthropicCacheControl(messages, params.tools, cacheControl); + } + if (options?.toolChoice) { + params.tool_choice = options.toolChoice; + } + if (compat.vllmPriority !== void 0) { + params.priority = compat.vllmPriority; + } + const thinkingTokenBudgetField = resolveThinkingTokenBudgetField(compat); + const thinkingBudget = resolveClampedThinkingBudget(model2, options, params); + if (compat.thinkingFormat === "zai" && model2.reasoning) { + const zaiParams = params; + zaiParams.thinking = options?.reasoningEffort ? { type: "enabled", clear_thinking: false } : { type: "disabled" }; + if (options?.reasoningEffort && compat.supportsReasoningEffort) { + const mappedEffort = model2.thinkingLevelMap?.[options.reasoningEffort]; + const effort = mappedEffort === void 0 ? options.reasoningEffort : mappedEffort; + if (typeof effort === "string") { + zaiParams.reasoning_effort = effort; + } + } + } else if (compat.thinkingFormat === "qwen" && model2.reasoning) { + params.enable_thinking = !!options?.reasoningEffort; + if (options?.reasoningEffort && compat.supportsReasoningEffort) { + const effort = model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort; + if (typeof effort === "string") { + params.reasoning_effort = effort; + } + } + } else if (compat.thinkingFormat === "qwen-chat-template" && model2.reasoning) { + params.chat_template_kwargs = { + enable_thinking: !!options?.reasoningEffort, + preserve_thinking: true + }; + } else if (compat.thinkingFormat === "chat-template" && model2.reasoning) { + const chatTemplateKwargs = buildChatTemplateValues(model2, options, compat.chatTemplateKwargs, thinkingBudget); + if (chatTemplateKwargs) { + params.chat_template_kwargs = chatTemplateKwargs; + } + } else if (compat.thinkingFormat === "baseten" && model2.reasoning) { + const basetenParams = params; + const chatTemplateArgs = buildChatTemplateValues(model2, options, compat.chatTemplateArgs, thinkingBudget); + if (chatTemplateArgs) { + basetenParams.chat_template_args = chatTemplateArgs; + } + if (compat.supportsReasoningEffort) { + const requestedEffort = options?.reasoningEffort; + const mappedEffort = requestedEffort ? model2.thinkingLevelMap?.[requestedEffort] : model2.thinkingLevelMap?.off; + const effort = mappedEffort === void 0 ? requestedEffort : mappedEffort; + if (typeof effort === "string") { + basetenParams.reasoning_effort = effort; + } + } + } else if (compat.thinkingFormat === "deepseek" && model2.reasoning) { + if (options?.reasoningEffort) { + params.thinking = { type: "enabled" }; + } else if (model2.thinkingLevelMap?.off !== null) { + params.thinking = { type: "disabled" }; + } + if (options?.reasoningEffort && compat.supportsReasoningEffort) { + params.reasoning_effort = model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort; + } + } else if (compat.thinkingFormat === "openrouter" && model2.reasoning) { + const openRouterParams = params; + if (options?.reasoningEffort) { + openRouterParams.reasoning = { + effort: model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort + }; + } else if (model2.thinkingLevelMap?.off !== null) { + openRouterParams.reasoning = { effort: model2.thinkingLevelMap?.off ?? "none" }; + } + } else if (compat.thinkingFormat === "ant-ling" && model2.reasoning && options?.reasoningEffort) { + const effort = model2.thinkingLevelMap?.[options.reasoningEffort]; + if (typeof effort === "string") { + params.reasoning = { effort }; + } + } else if (compat.thinkingFormat === "together" && model2.reasoning) { + const togetherParams = params; + togetherParams.reasoning = { enabled: !!options?.reasoningEffort }; + if (options?.reasoningEffort && compat.supportsReasoningEffort) { + togetherParams.reasoning_effort = model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort; + } + } else if (compat.thinkingFormat === "string-thinking" && model2.reasoning) { + const stringThinkingParams = params; + if (options?.reasoningEffort) { + stringThinkingParams.thinking = model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort; + } else if (model2.thinkingLevelMap?.off !== null) { + stringThinkingParams.thinking = model2.thinkingLevelMap?.off ?? "none"; + } + } else if (options?.reasoningEffort && model2.reasoning && compat.supportsReasoningEffort) { + params.reasoning_effort = model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort; + } else if (!options?.reasoningEffort && model2.reasoning && compat.supportsReasoningEffort) { + const offValue = model2.thinkingLevelMap?.off; + if (typeof offValue === "string") { + params.reasoning_effort = offValue; + } + } + if (thinkingTokenBudgetField && thinkingBudget !== void 0) { + Object.assign(params, { [thinkingTokenBudgetField]: thinkingBudget }); + } + if (model2.compat?.openRouterRouting) { + params.provider = model2.compat.openRouterRouting; + } + if (model2.compat?.vercelGatewayRouting) { + const routing = model2.compat.vercelGatewayRouting; + if (routing.only || routing.order) { + const gatewayOptions = {}; + if (routing.only) + gatewayOptions.only = routing.only; + if (routing.order) + gatewayOptions.order = routing.order; + params.providerOptions = { gateway: gatewayOptions }; + } + } + const samplingParams = resolveSamplingParams(model2, options?.reasoningEffort ?? "off", options?.samplingParams); + if (samplingParams) { + Object.assign(params, samplingParams); + } + return params; +} +function resolveThinkingTokenBudgetField(compat) { + if (compat.thinkingTokenBudgetField) + return compat.thinkingTokenBudgetField; + if (compat.supportsThinkingTokenBudget) + return "thinking_token_budget"; + return void 0; +} +function resolveClampedThinkingBudget(model2, options, params) { + if (!options?.reasoningEffort || !model2.reasoning) + return void 0; + const ceiling = params.max_tokens ?? params.max_completion_tokens ?? model2.maxTokens; + const budget = clampThinkingBudgetToAnswerRoom(thinkingBudgetForLevel(options.reasoningEffort, options.thinkingBudgets), ceiling); + return budget > 0 ? budget : void 0; +} +function buildChatTemplateValues(model2, options, values, thinkingBudget) { + const resolvedValues = {}; + for (const [key, value2] of Object.entries(values)) { + const resolved = resolveChatTemplateKwargValue(model2, options, value2, thinkingBudget); + if (resolved !== void 0) { + resolvedValues[key] = resolved; + } + } + return Object.keys(resolvedValues).length > 0 ? resolvedValues : void 0; +} +function resolveChatTemplateKwargValue(model2, options, value2, thinkingBudget) { + if (typeof value2 !== "object" || value2 === null) { + return value2; + } + const reasoningEffort = options?.reasoningEffort; + if (!reasoningEffort && value2.omitWhenOff) { + return void 0; + } + if (value2.$var === "thinking.enabled") { + return !!reasoningEffort; + } + if (value2.$var === "thinking.budget") { + return thinkingBudget; + } + const mappedValue = reasoningEffort ? model2.thinkingLevelMap?.[reasoningEffort] : model2.thinkingLevelMap?.off; + return mappedValue === void 0 ? reasoningEffort : typeof mappedValue === "string" ? mappedValue : void 0; +} +function getCompatCacheControl(compat, cacheRetention) { + if (compat.cacheControlFormat !== "anthropic" || cacheRetention === "none") { + return void 0; + } + const ttl = cacheRetention === "long" && compat.supportsLongCacheRetention ? "1h" : void 0; + return { type: "ephemeral", ...ttl ? { ttl } : {} }; +} +function applyAnthropicCacheControl(messages, tools, cacheControl) { + addCacheControlToSystemPrompt(messages, cacheControl); + addCacheControlToLastTool(tools, cacheControl); + addCacheControlToLastConversationMessage(messages, cacheControl); +} +function addCacheControlToSystemPrompt(messages, cacheControl) { + for (const message of messages) { + if (message.role === "system" || message.role === "developer") { + addCacheControlToInstructionMessage(message, cacheControl); + return; + } + } +} +function addCacheControlToLastConversationMessage(messages, cacheControl) { + for (let i = messages.length - 1; i >= 0; i--) { + const message = messages[i]; + if (message.role === "user" || message.role === "assistant" || message.role === "tool") { + if (addCacheControlToMessage(message, cacheControl)) { + return; + } + } + } +} +function addCacheControlToLastTool(tools, cacheControl) { + if (!tools || tools.length === 0) { + return; + } + const lastTool = tools[tools.length - 1]; + lastTool.cache_control = cacheControl; +} +function addCacheControlToInstructionMessage(message, cacheControl) { + return addCacheControlToTextContent(message, cacheControl); +} +function addCacheControlToMessage(message, cacheControl) { + if (message.role === "user" || message.role === "assistant" || message.role === "tool") { + return addCacheControlToTextContent(message, cacheControl); + } + return false; +} +function addCacheControlToTextContent(message, cacheControl) { + const content = message.content; + if (typeof content === "string") { + if (content.length === 0) { + return false; + } + message.content = [ + { + type: "text", + text: content, + cache_control: cacheControl + } + ]; + return true; + } + if (!Array.isArray(content)) { + return false; + } + for (let i = content.length - 1; i >= 0; i--) { + const part = content[i]; + if (part?.type === "text") { + const textPart = part; + textPart.cache_control = cacheControl; + return true; + } + } + return false; +} +function convertMessages(model2, context, compat, options) { + const normalizedContext = resolveTranscript(context, compat.supportsMidConvoSystemMessages); + const params = []; + const normalizeToolCallId2 = (id) => { + if (id.includes("|")) { + const separatorIndex = id.indexOf("|"); + const callId = id.slice(0, separatorIndex).replace(/[^a-zA-Z0-9_-]/g, "_"); + const itemId = id.slice(separatorIndex + 1).replace(/[^a-zA-Z0-9_-]/g, "_"); + const combinedId = itemId.length > 0 ? `${callId}_${itemId}` : callId; + if (combinedId.length <= 40) { + return combinedId; + } + const hash = shortHash(id).slice(0, 8); + const prefix = callId.slice(0, Math.max(1, 40 - hash.length - 1)); + return `${prefix}_${hash}`; + } + if (model2.provider === "openai") + return id.length > 40 ? id.slice(0, 40) : id; + return id; + }; + const transformedMessages = transformMessages(normalizedContext.messages, model2, (id) => normalizeToolCallId2(id)); + const transcriptTools = resolveTranscriptTools(normalizedContext.messages, compat.supportsMidConvoSystemMessages === true && compat.supportsMidConvoToolAdditions === true ? "additions" : "none"); + const instructionRole = model2.reasoning && compat.supportsDeveloperRole ? "developer" : "system"; + let lastRole = null; + let systemIndex = 0; + for (let i = 0; i < transformedMessages.length; i++) { + const msg = transformedMessages[i]; + if (compat.requiresAssistantAfterToolResult && lastRole === "toolResult" && msg.role === "user") { + params.push({ + role: "assistant", + content: "I have processed the tool results." + }); + } + if (msg.role === "system") { + const addedTools = systemIndex++ >= transcriptTools.foldedSystemMessages ? msg.toolsAdded ?? [] : []; + if (addedTools.length > 0) { + const kimiToolMessage = { + role: "system", + tools: convertTools(addedTools, compat) + }; + params.push(kimiToolMessage); + } + const text2 = i === 0 ? getSystemMessageText(msg) : renderSystemMessageUpdate(msg); + if (text2.length > 0) { + params.push({ role: instructionRole, content: sanitizeSurrogates(text2) }); + } + } else if (msg.role === "user") { + if (typeof msg.content === "string") { + params.push({ + role: "user", + content: sanitizeSurrogates(msg.content) + }); + } else { + const content = msg.content.filter((item) => item.type !== "text" || item.text.length > 0).map((item) => { + if (item.type === "text") { + return { + type: "text", + text: sanitizeSurrogates(item.text) + }; + } else { + return { + type: "image_url", + image_url: { + url: `data:${item.mimeType};base64,${item.data}` + } + }; + } + }); + if (content.length === 0) + continue; + params.push({ + role: "user", + content + }); + } + } else if (msg.role === "assistant") { + const assistantMsg = { + role: "assistant", + content: compat.requiresAssistantAfterToolResult ? "" : null + }; + const assistantTextParts = msg.content.filter(isTextContentBlock).filter((block) => block.text.trim().length > 0).map((block) => ({ + type: "text", + text: sanitizeSurrogates(block.text) + })); + const assistantText = assistantTextParts.map((part) => part.text).join(""); + const thinkingBlocks = msg.content.filter(isThinkingContentBlock); + const toolCalls = msg.content.filter(isToolCallBlock); + const signedReasoningDetails = thinkingBlocks.map((block) => parseOpenAIReasoningDetails(block.thinkingSignature)).find((details) => details !== void 0); + const legacyReasoningDetails = toolCalls.map((toolCall) => parseLegacyEncryptedReasoningDetail(toolCall.thoughtSignature)).filter((detail) => detail !== void 0); + const preservedReasoningDetails = signedReasoningDetails ?? (legacyReasoningDetails.length > 0 ? legacyReasoningDetails : void 0); + const nonEmptyThinkingBlocks = thinkingBlocks.filter((block) => block.thinking.trim().length > 0); + if (nonEmptyThinkingBlocks.length > 0) { + if (compat.requiresThinkingAsText) { + const thinkingText = nonEmptyThinkingBlocks.map((block) => sanitizeSurrogates(block.thinking)).join("\n\n"); + assistantMsg.content = [{ type: "text", text: thinkingText }, ...assistantTextParts]; + } else { + if (assistantText.length > 0) { + assistantMsg.content = assistantText; + } + if (!preservedReasoningDetails) { + let signature = nonEmptyThinkingBlocks[0].thinkingSignature; + if (model2.provider === "opencode-go" && signature === "reasoning") { + signature = "reasoning_content"; + } + if (signature && isOpenAICompletionsReasoningField(signature)) { + assistantMsg[signature] = nonEmptyThinkingBlocks.map((block) => block.thinking).join("\n"); + } + } + } + } else if (assistantText.length > 0) { + assistantMsg.content = assistantText; + } + if (toolCalls.length > 0) { + assistantMsg.tool_calls = toolCalls.map((tc) => { + const customInputProperty = options?.grammarToolInputProperties?.get(tc.name); + if (customInputProperty !== void 0) { + return { + id: tc.id, + type: "custom", + custom: { + name: tc.name, + input: sanitizeSurrogates(getGrammarToolInput(tc.name, tc.arguments, customInputProperty)) + } + }; + } + return { + id: tc.id, + type: "function", + function: { + name: tc.name, + arguments: JSON.stringify(tc.arguments) + } + }; + }); + } + if (preservedReasoningDetails) { + assistantMsg.reasoning_details = preservedReasoningDetails; + } + if (compat.requiresReasoningContentOnAssistantMessages && model2.reasoning && assistantMsg.reasoning_content === void 0) { + assistantMsg.reasoning_content = ""; + } + const content = assistantMsg.content; + const hasContent = content !== null && content !== void 0 && (typeof content === "string" ? content.length > 0 : content.length > 0); + if (!hasContent && !assistantMsg.tool_calls) { + continue; + } + params.push(assistantMsg); + } else if (msg.role === "toolResult") { + const imageBlocks = []; + let j = i; + for (; j < transformedMessages.length && transformedMessages[j].role === "toolResult"; j++) { + const toolMsg = transformedMessages[j]; + const textResult = toolMsg.content.filter(isTextContentBlock).map((block) => block.text).join("\n"); + const hasImages = toolMsg.content.some((c) => c.type === "image"); + const hasText = textResult.trim().length > 0; + const toolResultText = hasText ? textResult : hasImages ? "(see attached image)" : "(no tool output)"; + const toolResultMsg = { + role: "tool", + content: sanitizeSurrogates(toolResultText), + tool_call_id: toolMsg.toolCallId + }; + if (compat.requiresToolResultName && toolMsg.toolName) { + toolResultMsg.name = toolMsg.toolName; + } + params.push(toolResultMsg); + if (hasImages && model2.input.includes("image")) { + for (const block of toolMsg.content) { + if (isImageContentBlock(block)) { + imageBlocks.push({ + type: "image_url", + image_url: { + url: `data:${block.mimeType};base64,${block.data}` + } + }); + } + } + } + } + i = j - 1; + if (imageBlocks.length > 0) { + if (compat.requiresAssistantAfterToolResult) { + params.push({ + role: "assistant", + content: "I have processed the tool results." + }); + } + params.push({ + role: "user", + content: [ + { + type: "text", + text: "Attached image(s) from tool result:" + }, + ...imageBlocks + ] + }); + lastRole = "user"; + } else { + lastRole = "toolResult"; + } + continue; + } + lastRole = msg.role; + } + return params; +} +function convertTools(tools, compat) { + return tools.map((tool) => { + const grammar = resolveGrammarConstrainedSampling(tool, compat.supportsOpenAIGrammarTools); + if (grammar) { + return { + type: "custom", + custom: { + name: tool.name, + description: tool.description, + format: { + type: "grammar", + grammar: { + syntax: grammar.format, + definition: grammar.definition + } + } + } + }; + } + const strict = resolveJsonSchemaStrictSampling(tool, compat.supportsStrictMode !== false); + return { + type: "function", + function: { + name: tool.name, + description: tool.description, + parameters: getJsonSchemaToolParameters(tool, strict), + // Only include strict if provider supports it. Some reject unknown fields. + ...compat.supportsStrictMode !== false && { strict: strict ?? false } + } + }; + }); +} +function parseChunkUsage(rawUsage, model2) { + const promptTokens = rawUsage.prompt_tokens || 0; + const cacheReadTokens = rawUsage.prompt_tokens_details?.cached_tokens ?? rawUsage.prompt_cache_hit_tokens ?? rawUsage.cached_tokens ?? 0; + const cacheWriteTokens = rawUsage.prompt_tokens_details?.cache_write_tokens || 0; + const input = Math.max(0, promptTokens - cacheReadTokens - cacheWriteTokens); + const outputTokens = rawUsage.completion_tokens || 0; + const usage = { + input, + output: outputTokens, + cacheRead: cacheReadTokens, + cacheWrite: cacheWriteTokens, + reasoning: rawUsage.completion_tokens_details?.reasoning_tokens || 0, + totalTokens: input + outputTokens + cacheReadTokens + cacheWriteTokens, + cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 } + }; + calculateCost(model2, usage); + if (isOpenRouterModel(model2)) { + applyOpenRouterReportedCost(usage, rawUsage); + } + return usage; +} +function mapStopReason(reason) { + if (reason === null) + return { stopReason: "stop" }; + switch (reason) { + case "stop": + case "end": + return { stopReason: "stop" }; + case "length": + return { stopReason: "length" }; + case "function_call": + case "tool_calls": + return { stopReason: "toolUse" }; + case "content_filter": + return { stopReason: "error", errorMessage: "Provider finish_reason: content_filter" }; + case "network_error": + return { stopReason: "error", errorMessage: "Provider finish_reason: network_error" }; + default: + return { + stopReason: "error", + errorMessage: `Provider finish_reason: ${reason}` + }; + } +} +function detectCompat(model2) { + const provider2 = model2.provider; + const baseUrl = model2.baseUrl; + const isZai = provider2 === "zai" || provider2 === "zai-coding-cn" || baseUrl.includes("api.z.ai") || baseUrl.includes("open.bigmodel.cn"); + const isTogether = provider2 === "together" || baseUrl.includes("api.together.ai") || baseUrl.includes("api.together.xyz"); + const isMoonshot = provider2 === "moonshotai" || provider2 === "moonshotai-cn" || baseUrl.includes("api.moonshot."); + const isOpenRouter2 = provider2 === "openrouter" || baseUrl.includes("openrouter.ai"); + const isCloudflareWorkersAI = provider2 === "cloudflare-workers-ai" || baseUrl.includes("api.cloudflare.com"); + const isCloudflareAiGateway = provider2 === "cloudflare-ai-gateway" || baseUrl.includes("gateway.ai.cloudflare.com"); + const isNvidia = provider2 === "nvidia" || baseUrl.includes("integrate.api.nvidia.com"); + const isAntLing = provider2 === "ant-ling" || baseUrl.includes("api.ant-ling.com"); + const isCerebras = provider2 === "cerebras" || baseUrl.includes("cerebras.ai"); + const isDeepSeek = provider2 === "deepseek" || baseUrl.toLowerCase().includes("deepseek.com"); + const isNonStandard = isNvidia || isCerebras || provider2 === "xai" || baseUrl.includes("api.x.ai") || isTogether || baseUrl.includes("chutes.ai") || isDeepSeek || isZai || isMoonshot || provider2 === "opencode" || baseUrl.includes("opencode.ai") || isCloudflareWorkersAI || isCloudflareAiGateway || isAntLing; + const useMaxTokens = baseUrl.includes("chutes.ai") || isDeepSeek || isMoonshot || isCloudflareAiGateway || isTogether || isNvidia || isAntLing || isZai; + const isGrok = provider2 === "xai" || baseUrl.includes("api.x.ai"); + const isOpenRouterDeveloperRoleModel = isOpenRouter2 && (model2.id.startsWith("anthropic/") || model2.id.startsWith("openai/")); + const cacheControlFormat = provider2 === "openrouter" && model2.id.startsWith("anthropic/") ? "anthropic" : void 0; + return { + supportsStore: !isNonStandard, + supportsDeveloperRole: isOpenRouterDeveloperRoleModel || !isNonStandard && !isOpenRouter2, + supportsReasoningEffort: !isGrok && !isZai && !isMoonshot && !isTogether && !isCloudflareAiGateway && !isNvidia && !isAntLing, + supportsUsageInStreaming: true, + supportsFinishReason: true, + maxTokensField: useMaxTokens ? "max_tokens" : "max_completion_tokens", + requiresToolResultName: false, + requiresAssistantAfterToolResult: false, + requiresThinkingAsText: false, + requiresReasoningContentOnAssistantMessages: isDeepSeek, + thinkingFormat: isDeepSeek ? "deepseek" : isZai ? "zai" : isTogether ? "together" : isAntLing ? "ant-ling" : isOpenRouter2 ? "openrouter" : "openai", + openRouterRouting: {}, + vercelGatewayRouting: {}, + chatTemplateKwargs: {}, + chatTemplateArgs: {}, + zaiToolStream: false, + supportsThinkingTokenBudget: false, + thinkingTokenBudgetField: void 0, + // OpenAI compatibility alone does not imply strict JSON-schema tool support. + supportsStrictMode: false, + supportsOpenAIGrammarTools: false, + supportsMidConvoSystemMessages: false, + supportsMidConvoToolAdditions: false, + cacheControlFormat, + sendSessionAffinityHeaders: isOpenRouter2, + sessionAffinityFormat: isOpenRouter2 ? "openrouter" : "openai", + supportsLongCacheRetention: !(isTogether || isCloudflareWorkersAI || isCloudflareAiGateway || isNvidia || isAntLing) + }; +} +function getCompat(model2) { + const detected = detectCompat(model2); + if (!model2.compat) + return detected; + return { + supportsStore: model2.compat.supportsStore ?? detected.supportsStore, + supportsDeveloperRole: model2.compat.supportsDeveloperRole ?? detected.supportsDeveloperRole, + supportsReasoningEffort: model2.compat.supportsReasoningEffort ?? detected.supportsReasoningEffort, + supportsUsageInStreaming: model2.compat.supportsUsageInStreaming ?? detected.supportsUsageInStreaming, + supportsFinishReason: model2.compat.supportsFinishReason ?? detected.supportsFinishReason, + maxTokensField: model2.compat.maxTokensField ?? detected.maxTokensField, + requiresToolResultName: model2.compat.requiresToolResultName ?? detected.requiresToolResultName, + requiresAssistantAfterToolResult: model2.compat.requiresAssistantAfterToolResult ?? detected.requiresAssistantAfterToolResult, + requiresThinkingAsText: model2.compat.requiresThinkingAsText ?? detected.requiresThinkingAsText, + requiresReasoningContentOnAssistantMessages: model2.compat.requiresReasoningContentOnAssistantMessages ?? detected.requiresReasoningContentOnAssistantMessages, + thinkingFormat: model2.compat.thinkingFormat ?? detected.thinkingFormat, + openRouterRouting: model2.compat.openRouterRouting ?? {}, + vercelGatewayRouting: model2.compat.vercelGatewayRouting ?? detected.vercelGatewayRouting, + chatTemplateKwargs: model2.compat.chatTemplateKwargs ?? detected.chatTemplateKwargs, + chatTemplateArgs: model2.compat.chatTemplateArgs ?? detected.chatTemplateArgs, + zaiToolStream: model2.compat.zaiToolStream ?? detected.zaiToolStream, + supportsThinkingTokenBudget: model2.compat.supportsThinkingTokenBudget ?? detected.supportsThinkingTokenBudget, + thinkingTokenBudgetField: model2.compat.thinkingTokenBudgetField ?? detected.thinkingTokenBudgetField, + supportsStrictMode: model2.compat.supportsStrictMode ?? detected.supportsStrictMode, + supportsOpenAIGrammarTools: model2.compat.supportsOpenAIGrammarTools ?? detected.supportsOpenAIGrammarTools, + supportsMidConvoSystemMessages: model2.compat.supportsMidConvoSystemMessages ?? detected.supportsMidConvoSystemMessages, + supportsMidConvoToolAdditions: model2.compat.supportsMidConvoToolAdditions ?? detected.supportsMidConvoToolAdditions, + cacheControlFormat: model2.compat.cacheControlFormat ?? detected.cacheControlFormat, + sendSessionAffinityHeaders: model2.compat.sendSessionAffinityHeaders ?? detected.sendSessionAffinityHeaders, + sessionAffinityFormat: model2.compat.sessionAffinityFormat ?? detected.sessionAffinityFormat, + supportsLongCacheRetention: model2.compat.supportsLongCacheRetention ?? detected.supportsLongCacheRetention, + vllmPriority: model2.compat.vllmPriority + }; +} +var OPENAI_COMPLETIONS_REASONING_FIELDS, stream, streamSimple; +var init_openai_completions = __esm({ + "node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js"() { + init_openai(); + init_models(); + init_error_body(); + init_event_stream(); + init_hash(); + init_headers2(); + init_identity(); + init_openrouter_cost(); + init_provider_env(); + init_provider_retry(); + init_sanitize_unicode(); + init_streaming_json(); + init_text(); + init_transcript(); + init_constrained_sampling(); + init_github_copilot_headers(); + init_openai_prompt_cache(); + init_simple_options(); + init_transform_messages(); + OPENAI_COMPLETIONS_REASONING_FIELDS = ["reasoning", "reasoning_content", "reasoning_text"]; + stream = (model2, context, options) => { + const stream5 = new AssistantMessageEventStream(); + const normalizedContext = resolveTranscript(context, getCompat(model2).supportsMidConvoSystemMessages); + (async () => { + const output = { + role: "assistant", + content: [], + api: model2.api, + provider: model2.provider, + model: model2.id, + usage: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + totalTokens: 0, + cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 } + }, + stopReason: "pending", + timestamp: Date.now() + }; + let streamedReasoningDetails; + const applyStreamedReasoningDetails = (block) => { + if (streamedReasoningDetails !== void 0) { + block.thinkingSignature = JSON.stringify(streamedReasoningDetails); + } + }; + try { + const apiKey = getClientApiKey(model2.provider, options?.apiKey, options?.headers); + const compat = getCompat(model2); + const grammarToolInputProperties = createGrammarToolInputProperties(getDeclaredTools(normalizedContext.messages), compat.supportsOpenAIGrammarTools); + const cacheRetention = resolveCacheRetention(options?.cacheRetention, options?.env); + const cacheSessionId = cacheRetention === "none" ? void 0 : options?.sessionId; + const client = createClient(model2, normalizedContext, apiKey, options?.headers, options?.identity, options?.fetch, cacheSessionId, compat); + let params = buildParams(model2, normalizedContext, options, compat, cacheRetention, grammarToolInputProperties); + const nextParams = await options?.onPayload?.(params, model2); + if (nextParams !== void 0) { + params = nextParams; + } + const requestOptions = { + ...options?.signal ? { signal: options.signal } : {}, + ...options?.timeoutMs !== void 0 ? { timeout: options.timeoutMs } : {}, + maxRetries: 0 + }; + const { data: openaiStream, response } = await retryProviderRequest(() => client.chat.completions.create(params, requestOptions).withResponse(), { + maxRetries: options?.maxRetries, + maxRetryDelayMs: options?.maxRetryDelayMs, + signal: options?.signal + }); + await options?.onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model2); + stream5.push({ type: "start", partial: output }); + let textBlock = null; + let thinkingBlock = null; + let hasFinishReason = false; + const toolCallBlocksByIndex = /* @__PURE__ */ new Map(); + const toolCallBlocksById = /* @__PURE__ */ new Map(); + const toolCallStates = /* @__PURE__ */ new Map(); + const blocks = output.content; + const getContentIndex = (block) => blocks.indexOf(block); + const customInput2 = (property) => ({ + kind: "custom", + property, + buffer: { input: "", started: false, closed: false } + }); + const finishBlock = (block) => { + const contentIndex = getContentIndex(block); + if (contentIndex === -1) { + return; + } + if (block.type === "text") { + stream5.push({ + type: "text_end", + contentIndex, + content: block.text, + partial: output + }); + } else if (block.type === "thinking") { + applyStreamedReasoningDetails(block); + stream5.push({ + type: "thinking_end", + contentIndex, + content: block.thinking, + partial: output + }); + } else if (block.type === "toolCall") { + const input = toolCallStates.get(block).input; + toolCallStates.delete(block); + if (input.kind === "custom") { + const delta = closeGrammarToolInputJson(input.buffer, input.property, void 0); + if (delta !== void 0) { + stream5.push({ + type: "toolcall_delta", + contentIndex, + delta, + partial: output + }); + } + } else { + Object.assign(block, input.arguments.finish()); + } + stream5.push({ + type: "toolcall_end", + contentIndex, + toolCall: block, + partial: output + }); + } + }; + const ensureTextBlock = () => { + if (!textBlock) { + textBlock = { type: "text", text: "" }; + blocks.push(textBlock); + stream5.push({ type: "text_start", contentIndex: getContentIndex(textBlock), partial: output }); + } + return textBlock; + }; + const ensureThinkingBlock = (thinkingSignature) => { + if (!thinkingBlock) { + thinkingBlock = { + type: "thinking", + thinking: "", + thinkingSignature + }; + blocks.push(thinkingBlock); + stream5.push({ type: "thinking_start", contentIndex: getContentIndex(thinkingBlock), partial: output }); + } + return thinkingBlock; + }; + const ensureToolCallBlock = (toolCall) => { + const streamIndex = typeof toolCall.index === "number" ? toolCall.index : void 0; + const name = toolCall.function?.name ?? toolCall.custom?.name ?? ""; + let block = streamIndex !== void 0 ? toolCallBlocksByIndex.get(streamIndex) : void 0; + if (!block && toolCall.id) { + block = toolCallBlocksById.get(toolCall.id); + } + if (!block) { + const customInputProperty = toolCall.custom && !toolCall.function ? grammarToolInputProperties.get(name) ?? "input" : void 0; + block = { + type: "toolCall", + id: toolCall.id || "", + name, + arguments: customInputProperty !== void 0 ? { [customInputProperty]: "" } : {} + }; + toolCallStates.set(block, { + streamIndex, + input: customInputProperty !== void 0 ? customInput2(customInputProperty) : { kind: "json", arguments: new ToolCallArgumentsStream() } + }); + if (streamIndex !== void 0) { + toolCallBlocksByIndex.set(streamIndex, block); + } + if (toolCall.id) { + toolCallBlocksById.set(toolCall.id, block); + } + blocks.push(block); + stream5.push({ + type: "toolcall_start", + contentIndex: getContentIndex(block), + partial: output + }); + } + const state2 = toolCallStates.get(block); + if (streamIndex !== void 0 && state2.streamIndex === void 0) { + state2.streamIndex = streamIndex; + toolCallBlocksByIndex.set(streamIndex, block); + } + if (toolCall.id) { + toolCallBlocksById.set(toolCall.id, block); + } + if (!block.name && name) { + block.name = name; + } + if (toolCall.custom && !toolCall.function && state2.input.kind !== "custom") { + const customInputProperty = grammarToolInputProperties.get(block.name) ?? "input"; + block.arguments = { [customInputProperty]: "" }; + state2.input = customInput2(customInputProperty); + } + return { block, state: state2 }; + }; + for await (const chunk of openaiStream) { + await options?.onProviderStreamEvent?.(chunk, model2); + if (!chunk || typeof chunk !== "object") + continue; + output.responseId ||= chunk.id; + if (typeof chunk.model === "string" && chunk.model.length > 0 && chunk.model !== model2.id) { + output.responseModel ||= chunk.model; + } + if (chunk.usage) { + output.usage = parseChunkUsage(chunk.usage, model2); + } + const choice = Array.isArray(chunk.choices) ? chunk.choices[0] : void 0; + if (!choice) + continue; + if (!chunk.usage && choice.usage) { + output.usage = parseChunkUsage(choice.usage, model2); + } + if (choice.finish_reason) { + output.rawStopReason = choice.finish_reason; + const finishReasonResult = mapStopReason(choice.finish_reason); + output.stopReason = finishReasonResult.stopReason; + if (finishReasonResult.errorMessage) { + output.errorMessage = finishReasonResult.errorMessage; + } + hasFinishReason = true; + } + if (choice.delta) { + const reasoningFields = ["reasoning_content", "reasoning", "reasoning_text"]; + const deltaFields = choice.delta; + let foundReasoningField = null; + for (const field of reasoningFields) { + const value2 = deltaFields[field]; + if (typeof value2 === "string" && value2.length > 0) { + foundReasoningField = field; + break; + } + } + if (foundReasoningField) { + const delta = deltaFields[foundReasoningField]; + if (typeof delta === "string" && delta.length > 0) { + const thinkingSignature = model2.provider === "opencode-go" && foundReasoningField === "reasoning" ? "reasoning_content" : foundReasoningField; + const block = ensureThinkingBlock(thinkingSignature); + block.thinking += delta; + stream5.push({ + type: "thinking_delta", + contentIndex: getContentIndex(block), + delta, + partial: output + }); + } + } + const reasoningDetails = choice.delta.reasoning_details; + if (Array.isArray(reasoningDetails)) { + for (const detail of reasoningDetails) { + if (!isOpenAIReasoningDetail(detail)) + continue; + ensureThinkingBlock(""); + streamedReasoningDetails ??= []; + appendOpenAIReasoningDetail(streamedReasoningDetails, detail); + } + } + if (choice.delta.content !== null && choice.delta.content !== void 0 && choice.delta.content.length > 0) { + const block = ensureTextBlock(); + block.text += choice.delta.content; + stream5.push({ + type: "text_delta", + contentIndex: getContentIndex(block), + delta: choice.delta.content, + partial: output + }); + } + if (choice?.delta?.tool_calls) { + for (const toolCall of choice.delta.tool_calls) { + const { block, state: state2 } = ensureToolCallBlock(toolCall); + if (!block.id && toolCall.id) { + block.id = toolCall.id; + toolCallBlocksById.set(toolCall.id, block); + } + const name = toolCall.function?.name ?? toolCall.custom?.name; + if (!block.name && name) { + block.name = name; + } + let delta = ""; + const input = state2.input; + if (toolCall.function?.arguments && input.kind === "json") { + delta = toolCall.function.arguments; + block.arguments = input.arguments.append(delta); + } else if (toolCall.custom?.input && input.kind === "custom") { + delta = appendGrammarToolInputJsonDelta(input.buffer, input.property, toolCall.custom.input) ?? ""; + block.arguments = { [input.property]: input.buffer.input }; + } + stream5.push({ + type: "toolcall_delta", + contentIndex: getContentIndex(block), + delta, + partial: output + }); + } + } + } + } + for (const block of blocks) { + finishBlock(block); + } + if (options?.signal?.aborted) { + throw new Error("Request was aborted"); + } + if (output.stopReason === "aborted") { + throw new Error("Request was aborted"); + } + if (!hasFinishReason && !compat.supportsFinishReason) { + output.stopReason = output.content.some((block) => block.type === "toolCall") ? "toolUse" : "stop"; + } + if (output.stopReason === "error") { + throw new Error(output.errorMessage || "Provider returned an error stop reason"); + } + if (compat.supportsFinishReason && !hasFinishReason || output.stopReason === "pending") { + throw new Error("Stream ended without finish_reason"); + } + stream5.push({ type: "done", reason: output.stopReason, message: output }); + stream5.end(); + } catch (error) { + for (const block of output.content) { + if (block.type === "thinking") { + applyStreamedReasoningDetails(block); + } + } + output.stopReason = options?.signal?.aborted ? "aborted" : "error"; + output.errorMessage = formatProviderError(normalizeProviderError(error)); + const rawMetadata = error?.error?.metadata?.raw; + if (rawMetadata && !output.errorMessage.includes(String(rawMetadata))) { + output.errorMessage += ` +${rawMetadata}`; + } + stream5.push({ type: "error", reason: output.stopReason, error: output }); + stream5.end(); + } + })(); + return stream5; + }; + streamSimple = (model2, context, options) => { + getClientApiKey(model2.provider, options?.apiKey, options?.headers); + const base = { + ...buildBaseOptions(model2, context, options, options?.apiKey), + toolChoice: options?.toolChoice + }; + const clampedReasoning = options?.reasoning ? clampThinkingLevel(model2, options.reasoning) : void 0; + const reasoningEffort = clampedReasoning === "off" ? void 0 : clampedReasoning; + return stream(model2, context, { + ...base, + reasoningEffort, + thinkingBudgets: options?.thinkingBudgets + }); + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/tslib.mjs +function __classPrivateFieldSet2(receiver, state2, value2, kind, f) { + if (kind === "m") + throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) + throw new TypeError("Private accessor was defined without a setter"); + if (typeof state2 === "function" ? receiver !== state2 || !f : !state2.has(receiver)) + throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return kind === "a" ? f.call(receiver, value2) : f ? f.value = value2 : state2.set(receiver, value2), value2; +} +function __classPrivateFieldGet2(receiver, state2, kind, f) { + if (kind === "a" && !f) + throw new TypeError("Private accessor was defined without a getter"); + if (typeof state2 === "function" ? receiver !== state2 || !f : !state2.has(receiver)) + throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state2.get(receiver); +} +var init_tslib2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/tslib.mjs"() { + } +}); + +// node_modules/@anthropic-ai/sdk/internal/errors.mjs +function isAbortError2(err) { + return typeof err === "object" && err !== null && // Spec-compliant fetch implementations + ("name" in err && err.name === "AbortError" || // Expo fetch + "message" in err && String(err.message).includes("FetchRequestCanceledException")); +} +var castToError2; +var init_errors2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/errors.mjs"() { + castToError2 = (err) => { + if (err instanceof Error) + return err; + if (typeof err === "object" && err !== null) { + try { + const tag = Object.prototype.toString.call(err); + if (tag === "[object Error]" || tag === "[object DOMException]") { + const error = new Error(err.message, err.cause ? { cause: err.cause } : {}); + if (err.stack) + error.stack = err.stack; + if (err.cause && !error.cause) + error.cause = err.cause; + if (err.name) + error.name = err.name; + return error; + } + } catch { + } + try { + return new Error(JSON.stringify(err)); + } catch { + } + } + return new Error(err); + }; + } +}); + +// node_modules/@anthropic-ai/sdk/core/error.mjs +var AnthropicError, APIError2, APIUserAbortError2, APIConnectionError2, APIConnectionTimeoutError2, RetryableError, BadRequestError2, AuthenticationError2, PermissionDeniedError2, NotFoundError2, ConflictError2, UnprocessableEntityError2, RateLimitError2, InternalServerError2; +var init_error3 = __esm({ + "node_modules/@anthropic-ai/sdk/core/error.mjs"() { + init_errors2(); + AnthropicError = /* @__PURE__ */ (() => { + class AnthropicError2 extends Error { + } + return AnthropicError2; + })(); + APIError2 = class _APIError extends AnthropicError { + constructor(status, error, message, headers, type) { + super(`${_APIError.makeMessage(status, error, message)}`); + this.status = status; + this.headers = headers; + this.requestID = headers?.get("request-id"); + this.workspaceID = headers?.get("anthropic-workspace-id"); + this.error = error; + this.type = type ?? null; + } + static makeMessage(status, error, message) { + const msg = error?.message ? typeof error.message === "string" ? error.message : JSON.stringify(error.message) : error ? JSON.stringify(error) : message; + if (status && msg) { + return `${status} ${msg}`; + } + if (status) { + return `${status} status code (no body)`; + } + if (msg) { + return msg; + } + return "(no status code or body)"; + } + static generate(status, errorResponse, message, headers) { + if (!status || !headers) { + return new APIConnectionError2({ message, cause: castToError2(errorResponse) }); + } + const error = errorResponse; + const type = error?.["error"]?.["type"]; + if (status === 400) { + return new BadRequestError2(status, error, message, headers, type); + } + if (status === 401) { + return new AuthenticationError2(status, error, message, headers, type); + } + if (status === 403) { + return new PermissionDeniedError2(status, error, message, headers, type); + } + if (status === 404) { + return new NotFoundError2(status, error, message, headers, type); + } + if (status === 409) { + return new ConflictError2(status, error, message, headers, type); + } + if (status === 422) { + return new UnprocessableEntityError2(status, error, message, headers, type); + } + if (status === 429) { + return new RateLimitError2(status, error, message, headers, type); + } + if (status >= 500) { + return new InternalServerError2(status, error, message, headers, type); + } + return new _APIError(status, error, message, headers, type); + } + }; + APIUserAbortError2 = class extends APIError2 { + constructor({ message } = {}) { + super(void 0, void 0, message || "Request was aborted.", void 0); + } + }; + APIConnectionError2 = class extends APIError2 { + constructor({ message, cause }) { + super(void 0, void 0, message || "Connection error.", void 0); + if (cause) + this.cause = cause; + } + }; + APIConnectionTimeoutError2 = class extends APIConnectionError2 { + constructor({ message } = {}) { + super({ message: message ?? "Request timed out." }); + } + }; + RetryableError = class extends AnthropicError { + constructor(message, { cause } = {}) { + super(message ?? "Retryable error."); + if (cause !== void 0) + this.cause = cause; + } + }; + BadRequestError2 = class extends APIError2 { + }; + AuthenticationError2 = class extends APIError2 { + }; + PermissionDeniedError2 = class extends APIError2 { + }; + NotFoundError2 = class extends APIError2 { + }; + ConflictError2 = class extends APIError2 { + }; + UnprocessableEntityError2 = class extends APIError2 { + }; + RateLimitError2 = class extends APIError2 { + }; + InternalServerError2 = class extends APIError2 { + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/values.mjs +function maybeObj2(x) { + if (typeof x !== "object") { + return {}; + } + return x ?? {}; +} +function isEmptyObj2(obj2) { + if (!obj2) + return true; + for (const _k in obj2) + return false; + return true; +} +function hasOwn2(obj2, key) { + return Object.prototype.hasOwnProperty.call(obj2, key); +} +function isObj2(obj2) { + return obj2 != null && typeof obj2 === "object" && !Array.isArray(obj2); +} +function checkNever(_value) { +} +var startsWithSchemeRegexp2, isAbsoluteURL2, isArray2, isReadonlyArray2, validatePositiveInteger2, safeJSON2; +var init_values2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/values.mjs"() { + init_error3(); + startsWithSchemeRegexp2 = /^[a-z][a-z0-9+.-]*:/i; + isAbsoluteURL2 = (url) => { + return startsWithSchemeRegexp2.test(url); + }; + isArray2 = (val) => (isArray2 = Array.isArray, isArray2(val)); + isReadonlyArray2 = isArray2; + validatePositiveInteger2 = (name, n) => { + if (typeof n !== "number" || !Number.isInteger(n)) { + throw new AnthropicError(`${name} must be an integer`); + } + if (n < 0) { + throw new AnthropicError(`${name} must be a positive integer`); + } + return n; + }; + safeJSON2 = (text2) => { + try { + return JSON.parse(text2); + } catch (err) { + return void 0; + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/sleep.mjs +var sleep2; +var init_sleep2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/sleep.mjs"() { + sleep2 = (ms, signal) => new Promise((resolve2) => { + if (signal?.aborted) + return resolve2(); + const onAbort = () => { + clearTimeout(timer); + resolve2(); + }; + const timer = setTimeout(() => { + signal?.removeEventListener("abort", onAbort); + resolve2(); + }, ms); + signal?.addEventListener("abort", onAbort, { once: true }); + }); + } +}); + +// node_modules/@anthropic-ai/sdk/version.mjs +var VERSION2; +var init_version3 = __esm({ + "node_modules/@anthropic-ai/sdk/version.mjs"() { + VERSION2 = "0.129.0"; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/detect-platform.mjs +function getDetectedPlatform2() { + if (typeof Deno !== "undefined" && Deno.build != null) { + return "deno"; + } + if (typeof EdgeRuntime !== "undefined") { + return "edge"; + } + if (Object.prototype.toString.call(typeof globalThis.process !== "undefined" ? globalThis.process : 0) === "[object process]") { + return "node"; + } + return "unknown"; +} +function getBrowserInfo2() { + if (typeof navigator === "undefined" || !navigator) { + return null; + } + const browserPatterns = [ + { key: "edge", pattern: /Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: "ie", pattern: /MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: "ie", pattern: /Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: "chrome", pattern: /Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: "firefox", pattern: /Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: "safari", pattern: /(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/ } + ]; + for (const { key, pattern } of browserPatterns) { + const match = pattern.exec(navigator.userAgent); + if (match) { + const major = match[1] || 0; + const minor = match[2] || 0; + const patch = match[3] || 0; + return { browser: key, version: `${major}.${minor}.${patch}` }; + } + } + return null; +} +var isRunningInBrowser2, getPlatformProperties2, normalizeArch2, normalizePlatform2, _platformHeaders2, getPlatformHeaders2; +var init_detect_platform2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/detect-platform.mjs"() { + init_version3(); + isRunningInBrowser2 = () => { + return ( + // @ts-ignore + typeof window !== "undefined" && // @ts-ignore + typeof window.document !== "undefined" && // @ts-ignore + typeof navigator !== "undefined" + ); + }; + getPlatformProperties2 = () => { + const detectedPlatform = getDetectedPlatform2(); + if (detectedPlatform === "deno") { + return { + "X-Stainless-Lang": "js", + "X-Stainless-Package-Version": VERSION2, + "X-Stainless-OS": normalizePlatform2(Deno.build.os), + "X-Stainless-Arch": normalizeArch2(Deno.build.arch), + "X-Stainless-Runtime": "deno", + "X-Stainless-Runtime-Version": typeof Deno.version === "string" ? Deno.version : Deno.version?.deno ?? "unknown" + }; + } + if (typeof EdgeRuntime !== "undefined") { + return { + "X-Stainless-Lang": "js", + "X-Stainless-Package-Version": VERSION2, + "X-Stainless-OS": "Unknown", + "X-Stainless-Arch": `other:${EdgeRuntime}`, + "X-Stainless-Runtime": "edge", + "X-Stainless-Runtime-Version": globalThis.process?.version ?? "unknown" + }; + } + if (detectedPlatform === "node") { + return { + "X-Stainless-Lang": "js", + "X-Stainless-Package-Version": VERSION2, + "X-Stainless-OS": normalizePlatform2(globalThis.process.platform ?? "unknown"), + "X-Stainless-Arch": normalizeArch2(globalThis.process.arch ?? "unknown"), + "X-Stainless-Runtime": "node", + "X-Stainless-Runtime-Version": globalThis.process.version ?? "unknown" + }; + } + const browserInfo = getBrowserInfo2(); + if (browserInfo) { + return { + "X-Stainless-Lang": "js", + "X-Stainless-Package-Version": VERSION2, + "X-Stainless-OS": "Unknown", + "X-Stainless-Arch": "unknown", + "X-Stainless-Runtime": `browser:${browserInfo.browser}`, + "X-Stainless-Runtime-Version": browserInfo.version + }; + } + return { + "X-Stainless-Lang": "js", + "X-Stainless-Package-Version": VERSION2, + "X-Stainless-OS": "Unknown", + "X-Stainless-Arch": "unknown", + "X-Stainless-Runtime": "unknown", + "X-Stainless-Runtime-Version": "unknown" + }; + }; + normalizeArch2 = (arch) => { + if (arch === "x32") + return "x32"; + if (arch === "x86_64" || arch === "x64") + return "x64"; + if (arch === "arm") + return "arm"; + if (arch === "aarch64" || arch === "arm64") + return "arm64"; + if (arch) + return `other:${arch}`; + return "unknown"; + }; + normalizePlatform2 = (platform) => { + platform = platform.toLowerCase(); + if (platform.includes("ios")) + return "iOS"; + if (platform === "android") + return "Android"; + if (platform === "darwin") + return "MacOS"; + if (platform === "win32") + return "Windows"; + if (platform === "freebsd") + return "FreeBSD"; + if (platform === "openbsd") + return "OpenBSD"; + if (platform === "linux") + return "Linux"; + if (platform) + return `Other:${platform}`; + return "Unknown"; + }; + getPlatformHeaders2 = () => { + return _platformHeaders2 ?? (_platformHeaders2 = getPlatformProperties2()); + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/request-signal.mjs +function makeCleanup(signal, listener) { + return () => signal.removeEventListener("abort", listener); +} +function registerRequestSignalCleanup(controller, signal, listener) { + cleanups.set(controller, makeCleanup(signal, listener)); +} +function armAbandonmentBackstop(body, controller) { + if (cleanups.has(controller)) + registry?.register(body, controller, controller); +} +function releaseRequestSignal(controller) { + const cleanup = cleanups.get(controller); + if (cleanup) { + cleanups.delete(controller); + registry?.unregister(controller); + cleanup(); + } +} +var cleanups, registry; +var init_request_signal = __esm({ + "node_modules/@anthropic-ai/sdk/internal/request-signal.mjs"() { + cleanups = /* @__PURE__ */ new WeakMap(); + registry = typeof globalThis.FinalizationRegistry === "function" ? new globalThis.FinalizationRegistry((controller) => releaseRequestSignal(controller)) : null; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/shims.mjs +function getDefaultFetch2() { + if (typeof fetch !== "undefined") { + return fetch; + } + throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`"); +} +function makeReadableStream2(...args) { + const ReadableStream2 = globalThis.ReadableStream; + if (typeof ReadableStream2 === "undefined") { + throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`"); + } + return new ReadableStream2(...args); +} +function ReadableStreamFrom2(iterable) { + let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator](); + return makeReadableStream2({ + start() { + }, + async pull(controller) { + const { done, value: value2 } = await iter.next(); + if (done) { + controller.close(); + } else { + controller.enqueue(value2); + } + }, + async cancel() { + await iter.return?.(); + } + }); +} +function ReadableStreamToAsyncIterable2(stream5) { + if (stream5[Symbol.asyncIterator]) + return stream5; + const reader = stream5.getReader(); + return { + async next() { + try { + const result = await reader.read(); + if (result?.done) + reader.releaseLock(); + return result; + } catch (e) { + reader.releaseLock(); + throw e; + } + }, + async return() { + const cancelPromise = reader.cancel(); + reader.releaseLock(); + await cancelPromise; + return { done: true, value: void 0 }; + }, + [Symbol.asyncIterator]() { + return this; + } + }; +} +async function CancelReadableStream2(stream5) { + if (stream5 === null || typeof stream5 !== "object") + return; + if (stream5[Symbol.asyncIterator]) { + await stream5[Symbol.asyncIterator]().return?.(); + return; + } + const reader = stream5.getReader(); + const cancelPromise = reader.cancel(); + reader.releaseLock(); + await cancelPromise; +} +var init_shims2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/shims.mjs"() { + } +}); + +// node_modules/@anthropic-ai/sdk/internal/request-options.mjs +var FallbackEncoder2; +var init_request_options2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/request-options.mjs"() { + FallbackEncoder2 = ({ headers, body }) => { + return { + bodyHeaders: { + "content-type": "application/json" + }, + body: JSON.stringify(body) + }; + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/qs/formats.mjs +var default_format2, default_formatter2, formatters2, RFC17382; +var init_formats2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/qs/formats.mjs"() { + default_format2 = "RFC3986"; + default_formatter2 = (v) => String(v); + formatters2 = { + RFC1738: (v) => String(v).replace(/%20/g, "+"), + RFC3986: default_formatter2 + }; + RFC17382 = "RFC1738"; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/qs/utils.mjs +function is_buffer2(obj2) { + if (!obj2 || typeof obj2 !== "object") { + return false; + } + return !!(obj2.constructor && obj2.constructor.isBuffer && obj2.constructor.isBuffer(obj2)); +} +function maybe_map2(val, fn) { + if (isArray2(val)) { + const mapped = []; + for (let i = 0; i < val.length; i += 1) { + mapped.push(fn(val[i])); + } + return mapped; + } + return fn(val); +} +var has2, hex_table2, limit2, encode2; +var init_utils3 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/qs/utils.mjs"() { + init_formats2(); + init_values2(); + has2 = (obj2, key) => (has2 = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty), has2(obj2, key)); + hex_table2 = /* @__PURE__ */ (() => { + const array = []; + for (let i = 0; i < 256; ++i) { + array.push("%" + ((i < 16 ? "0" : "") + i.toString(16)).toUpperCase()); + } + return array; + })(); + limit2 = 1024; + encode2 = (str2, _defaultEncoder, charset, _kind, format) => { + if (str2.length === 0) { + return str2; + } + let string2 = str2; + if (typeof str2 === "symbol") { + string2 = Symbol.prototype.toString.call(str2); + } else if (typeof str2 !== "string") { + string2 = String(str2); + } + if (charset === "iso-8859-1") { + return escape(string2).replace(/%u[0-9a-f]{4}/gi, function($0) { + return "%26%23" + parseInt($0.slice(2), 16) + "%3B"; + }); + } + let out = ""; + for (let j = 0; j < string2.length; j += limit2) { + const segment = string2.length >= limit2 ? string2.slice(j, j + limit2) : string2; + const arr2 = []; + for (let i = 0; i < segment.length; ++i) { + let c = segment.charCodeAt(i); + if (c === 45 || // - + c === 46 || // . + c === 95 || // _ + c === 126 || // ~ + c >= 48 && c <= 57 || // 0-9 + c >= 65 && c <= 90 || // a-z + c >= 97 && c <= 122 || // A-Z + format === RFC17382 && (c === 40 || c === 41)) { + arr2[arr2.length] = segment.charAt(i); + continue; + } + if (c < 128) { + arr2[arr2.length] = hex_table2[c]; + continue; + } + if (c < 2048) { + arr2[arr2.length] = hex_table2[192 | c >> 6] + hex_table2[128 | c & 63]; + continue; + } + if (c < 55296 || c >= 57344) { + arr2[arr2.length] = hex_table2[224 | c >> 12] + hex_table2[128 | c >> 6 & 63] + hex_table2[128 | c & 63]; + continue; + } + i += 1; + c = 65536 + ((c & 1023) << 10 | segment.charCodeAt(i) & 1023); + arr2[arr2.length] = hex_table2[240 | c >> 18] + hex_table2[128 | c >> 12 & 63] + hex_table2[128 | c >> 6 & 63] + hex_table2[128 | c & 63]; + } + out += arr2.join(""); + } + return out; + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/qs/stringify.mjs +function is_non_nullish_primitive2(v) { + return typeof v === "string" || typeof v === "number" || typeof v === "boolean" || typeof v === "symbol" || typeof v === "bigint"; +} +function inner_stringify2(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder6, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) { + let obj2 = object; + let tmp_sc = sideChannel; + let step = 0; + let find_flag = false; + while ((tmp_sc = tmp_sc.get(sentinel2)) !== void 0 && !find_flag) { + const pos = tmp_sc.get(object); + step += 1; + if (typeof pos !== "undefined") { + if (pos === step) { + throw new RangeError("Cyclic object value"); + } else { + find_flag = true; + } + } + if (typeof tmp_sc.get(sentinel2) === "undefined") { + step = 0; + } + } + if (typeof filter === "function") { + obj2 = filter(prefix, obj2); + } else if (obj2 instanceof Date) { + obj2 = serializeDate?.(obj2); + } else if (generateArrayPrefix === "comma" && isArray2(obj2)) { + obj2 = maybe_map2(obj2, function(value2) { + if (value2 instanceof Date) { + return serializeDate?.(value2); + } + return value2; + }); + } + if (obj2 === null) { + if (strictNullHandling) { + return encoder6 && !encodeValuesOnly ? ( + // @ts-expect-error + encoder6(prefix, defaults2.encoder, charset, "key", format) + ) : prefix; + } + obj2 = ""; + } + if (is_non_nullish_primitive2(obj2) || is_buffer2(obj2)) { + if (encoder6) { + const key_value = encodeValuesOnly ? prefix : encoder6(prefix, defaults2.encoder, charset, "key", format); + return [ + formatter?.(key_value) + "=" + // @ts-expect-error + formatter?.(encoder6(obj2, defaults2.encoder, charset, "value", format)) + ]; + } + return [formatter?.(prefix) + "=" + formatter?.(String(obj2))]; + } + const values = []; + if (typeof obj2 === "undefined") { + return values; + } + let obj_keys; + if (generateArrayPrefix === "comma" && isArray2(obj2)) { + if (encodeValuesOnly && encoder6) { + obj2 = maybe_map2(obj2, encoder6); + } + obj_keys = [{ value: obj2.length > 0 ? obj2.join(",") || null : void 0 }]; + } else if (isArray2(filter)) { + obj_keys = filter; + } else { + const keys = Object.keys(obj2); + obj_keys = sort ? keys.sort(sort) : keys; + } + const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\./g, "%2E") : String(prefix); + const adjusted_prefix = commaRoundTrip && isArray2(obj2) && obj2.length === 1 ? encoded_prefix + "[]" : encoded_prefix; + if (allowEmptyArrays && isArray2(obj2) && obj2.length === 0) { + return adjusted_prefix + "[]"; + } + for (let j = 0; j < obj_keys.length; ++j) { + const key = obj_keys[j]; + const value2 = ( + // @ts-ignore + typeof key === "object" && typeof key.value !== "undefined" ? key.value : obj2[key] + ); + if (skipNulls && value2 === null) { + continue; + } + const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\./g, "%2E") : key; + const key_prefix = isArray2(obj2) ? typeof generateArrayPrefix === "function" ? generateArrayPrefix(adjusted_prefix, encoded_key) : adjusted_prefix : adjusted_prefix + (allowDots ? "." + encoded_key : "[" + encoded_key + "]"); + sideChannel.set(object, step); + const valueSideChannel = /* @__PURE__ */ new WeakMap(); + valueSideChannel.set(sentinel2, sideChannel); + push_to_array3(values, inner_stringify2( + value2, + key_prefix, + generateArrayPrefix, + commaRoundTrip, + allowEmptyArrays, + strictNullHandling, + skipNulls, + encodeDotInKeys, + // @ts-ignore + generateArrayPrefix === "comma" && encodeValuesOnly && isArray2(obj2) ? null : encoder6, + filter, + sort, + allowDots, + serializeDate, + format, + formatter, + encodeValuesOnly, + charset, + valueSideChannel + )); + } + return values; +} +function normalize_stringify_options2(opts = defaults2) { + if (typeof opts.allowEmptyArrays !== "undefined" && typeof opts.allowEmptyArrays !== "boolean") { + throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided"); + } + if (typeof opts.encodeDotInKeys !== "undefined" && typeof opts.encodeDotInKeys !== "boolean") { + throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided"); + } + if (opts.encoder !== null && typeof opts.encoder !== "undefined" && typeof opts.encoder !== "function") { + throw new TypeError("Encoder has to be a function."); + } + const charset = opts.charset || defaults2.charset; + if (typeof opts.charset !== "undefined" && opts.charset !== "utf-8" && opts.charset !== "iso-8859-1") { + throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined"); + } + let format = default_format2; + if (typeof opts.format !== "undefined") { + if (!has2(formatters2, opts.format)) { + throw new TypeError("Unknown format option provided."); + } + format = opts.format; + } + const formatter = formatters2[format]; + let filter = defaults2.filter; + if (typeof opts.filter === "function" || isArray2(opts.filter)) { + filter = opts.filter; + } + let arrayFormat; + if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators2) { + arrayFormat = opts.arrayFormat; + } else if ("indices" in opts) { + arrayFormat = opts.indices ? "indices" : "repeat"; + } else { + arrayFormat = defaults2.arrayFormat; + } + if ("commaRoundTrip" in opts && typeof opts.commaRoundTrip !== "boolean") { + throw new TypeError("`commaRoundTrip` must be a boolean, or absent"); + } + const allowDots = typeof opts.allowDots === "undefined" ? !!opts.encodeDotInKeys === true ? true : defaults2.allowDots : !!opts.allowDots; + return { + addQueryPrefix: typeof opts.addQueryPrefix === "boolean" ? opts.addQueryPrefix : defaults2.addQueryPrefix, + // @ts-ignore + allowDots, + allowEmptyArrays: typeof opts.allowEmptyArrays === "boolean" ? !!opts.allowEmptyArrays : defaults2.allowEmptyArrays, + arrayFormat, + charset, + charsetSentinel: typeof opts.charsetSentinel === "boolean" ? opts.charsetSentinel : defaults2.charsetSentinel, + commaRoundTrip: !!opts.commaRoundTrip, + delimiter: typeof opts.delimiter === "undefined" ? defaults2.delimiter : opts.delimiter, + encode: typeof opts.encode === "boolean" ? opts.encode : defaults2.encode, + encodeDotInKeys: typeof opts.encodeDotInKeys === "boolean" ? opts.encodeDotInKeys : defaults2.encodeDotInKeys, + encoder: typeof opts.encoder === "function" ? opts.encoder : defaults2.encoder, + encodeValuesOnly: typeof opts.encodeValuesOnly === "boolean" ? opts.encodeValuesOnly : defaults2.encodeValuesOnly, + filter, + format, + formatter, + serializeDate: typeof opts.serializeDate === "function" ? opts.serializeDate : defaults2.serializeDate, + skipNulls: typeof opts.skipNulls === "boolean" ? opts.skipNulls : defaults2.skipNulls, + // @ts-ignore + sort: typeof opts.sort === "function" ? opts.sort : null, + strictNullHandling: typeof opts.strictNullHandling === "boolean" ? opts.strictNullHandling : defaults2.strictNullHandling + }; +} +function stringify2(object, opts = {}) { + let obj2 = object; + const options = normalize_stringify_options2(opts); + let obj_keys; + let filter; + if (typeof options.filter === "function") { + filter = options.filter; + obj2 = filter("", obj2); + } else if (isArray2(options.filter)) { + filter = options.filter; + obj_keys = filter; + } + const keys = []; + if (typeof obj2 !== "object" || obj2 === null) { + return ""; + } + const generateArrayPrefix = array_prefix_generators2[options.arrayFormat]; + const commaRoundTrip = generateArrayPrefix === "comma" && options.commaRoundTrip; + if (!obj_keys) { + obj_keys = Object.keys(obj2); + } + if (options.sort) { + obj_keys.sort(options.sort); + } + const sideChannel = /* @__PURE__ */ new WeakMap(); + for (let i = 0; i < obj_keys.length; ++i) { + const key = obj_keys[i]; + if (options.skipNulls && obj2[key] === null) { + continue; + } + push_to_array3(keys, inner_stringify2( + obj2[key], + key, + // @ts-expect-error + generateArrayPrefix, + commaRoundTrip, + options.allowEmptyArrays, + options.strictNullHandling, + options.skipNulls, + options.encodeDotInKeys, + options.encode ? options.encoder : null, + options.filter, + options.sort, + options.allowDots, + options.serializeDate, + options.format, + options.formatter, + options.encodeValuesOnly, + options.charset, + sideChannel + )); + } + const joined = keys.join(options.delimiter); + let prefix = options.addQueryPrefix === true ? "?" : ""; + if (options.charsetSentinel) { + if (options.charset === "iso-8859-1") { + prefix += "utf8=%26%2310003%3B&"; + } else { + prefix += "utf8=%E2%9C%93&"; + } + } + return joined.length > 0 ? prefix + joined : ""; +} +var array_prefix_generators2, push_to_array3, toISOString2, defaults2, sentinel2; +var init_stringify2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/qs/stringify.mjs"() { + init_utils3(); + init_formats2(); + init_values2(); + array_prefix_generators2 = { + brackets(prefix) { + return String(prefix) + "[]"; + }, + comma: "comma", + indices(prefix, key) { + return String(prefix) + "[" + key + "]"; + }, + repeat(prefix) { + return String(prefix); + } + }; + push_to_array3 = function(arr2, value_or_array) { + Array.prototype.push.apply(arr2, isArray2(value_or_array) ? value_or_array : [value_or_array]); + }; + defaults2 = { + addQueryPrefix: false, + allowDots: false, + allowEmptyArrays: false, + arrayFormat: "indices", + charset: "utf-8", + charsetSentinel: false, + delimiter: "&", + encode: true, + encodeDotInKeys: false, + encoder: encode2, + encodeValuesOnly: false, + format: default_format2, + formatter: default_formatter2, + /** @deprecated */ + indices: false, + serializeDate(date) { + return (toISOString2 ?? (toISOString2 = Function.prototype.call.bind(Date.prototype.toISOString)))(date); + }, + skipNulls: false, + strictNullHandling: false + }; + sentinel2 = {}; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/query.mjs +function stringifyQuery2(query) { + return stringify2(query, { arrayFormat: "brackets" }); +} +var init_query2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/query.mjs"() { + init_stringify2(); + } +}); + +// node_modules/@anthropic-ai/sdk/internal/node.browser.mjs +var node_browser_exports = {}; +__export(node_browser_exports, { + child_process: () => child_process, + crypto: () => crypto2, + fs: () => fs, + os: () => os, + path: () => path2, + stream: () => stream2, + util: () => util +}); +function unavailable(module) { + return new Proxy({}, { + get(_target, property) { + if (typeof property === "symbol") + return void 0; + throw new AnthropicError(`\`${module}.${property}\` is not available in this environment; it needs a Node.js-compatible runtime`); + } + }); +} +var child_process, crypto2, fs, os, path2, stream2, util; +var init_node_browser = __esm({ + "node_modules/@anthropic-ai/sdk/internal/node.browser.mjs"() { + init_error3(); + child_process = /* @__PURE__ */ unavailable("child_process"); + crypto2 = /* @__PURE__ */ unavailable("crypto"); + fs = /* @__PURE__ */ unavailable("fs"); + os = /* @__PURE__ */ unavailable("os"); + path2 = /* @__PURE__ */ unavailable("path"); + stream2 = /* @__PURE__ */ unavailable("stream"); + util = /* @__PURE__ */ unavailable("util"); + } +}); + +// node_modules/@anthropic-ai/sdk/lib/credentials/types.mjs +function requireSecureTokenEndpoint(baseURL) { + if (!baseURL) + return; + let u; + try { + u = new URL(baseURL); + } catch (err) { + throw new WorkloadIdentityError(`Invalid token endpoint base URL "${baseURL}": ${err}`); + } + if (u.protocol === "https:") + return; + const host = u.hostname.toLowerCase().replace(/^\[|\]$/g, ""); + if (u.protocol === "http:" && (host === "localhost" || host === "127.0.0.1" || host === "::1")) { + return; + } + throw new WorkloadIdentityError(`Refusing to send credential over non-https token endpoint "${baseURL}"`); +} +async function parseTokenResponse(resp, requestId) { + const text2 = await readLimitedText(resp); + let data; + try { + data = JSON.parse(text2); + } catch { + throw new WorkloadIdentityError(`Token endpoint returned non-JSON response (status ${resp.status})`, resp.status, redactSensitive(text2), requestId); + } + if (!data.access_token) { + throw new WorkloadIdentityError(`Token endpoint response missing access_token: ${JSON.stringify(redactSensitive(data))}`, resp.status, redactSensitive(data), requestId); + } + if (data.token_type && data.token_type.toLowerCase() !== "bearer") { + throw new WorkloadIdentityError(`Token endpoint response: unsupported token_type "${data.token_type}" (want Bearer)`, resp.status, redactSensitive(data), requestId); + } + return data; +} +function redactSensitive(body) { + if (body == null) + return body; + if (typeof body === "string") { + let parsed; + try { + parsed = JSON.parse(body); + } catch { + if (body.length <= MAX_ERROR_BODY_CHARS) + return body; + return body.slice(0, MAX_ERROR_BODY_CHARS) + `... <${body.length - MAX_ERROR_BODY_CHARS} more chars>`; + } + return JSON.stringify(redactSensitive(parsed)); + } + if (typeof body === "object" && !Array.isArray(body)) { + const out = {}; + for (const [k, v] of Object.entries(body)) { + if (SAFE_ERROR_KEYS.has(k)) + out[k] = v; + } + return out; + } + return null; +} +async function checkCredentialsFileSafety(path5, onWarn = (m) => console.warn(`anthropic-sdk: ${m}`)) { + if (typeof process === "undefined" || process.platform === "win32") + return; + const { fs: fs3 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); + let resolved = path5; + let st; + try { + resolved = await fs3.promises.realpath(path5); + st = await fs3.promises.stat(resolved); + } catch { + return; + } + const mode = st.mode & 511; + if (mode & 18) { + throw new WorkloadIdentityError(`Credentials file at ${resolved} is group/world-writable (mode 0o${mode.toString(8)}); this allows other local users to plant tokens. Run \`chmod 600 ${resolved}\`.`); + } + if (mode & 36) { + throw new WorkloadIdentityError(`Credentials file at ${resolved} is group/world-readable (mode 0o${mode.toString(8)}); run \`chmod 600 ${resolved}\` before retrying.`); + } + if (typeof process.getuid === "function" && st.uid !== process.getuid()) { + onWarn(`credentials file at ${resolved} is owned by uid ${st.uid} (current process uid ${process.getuid()}); verify this is intentional.`); + } +} +async function writeCredentialsFileAtomic(targetPath, data) { + const { fs: fs3, path: path5 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); + const dir = path5.dirname(targetPath); + await fs3.promises.mkdir(dir, { recursive: true, mode: 448 }); + const tmpPath = `${targetPath}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`; + try { + const fh = await fs3.promises.open(tmpPath, "w", 384); + try { + await fh.writeFile(JSON.stringify(data, null, 2)); + await fh.sync(); + } finally { + await fh.close(); + } + await fs3.promises.rename(tmpPath, targetPath); + } catch (err) { + await fs3.promises.unlink(tmpPath).catch(() => { + }); + throw err; + } + try { + const dirFh = await fs3.promises.open(dir, "r"); + try { + await dirFh.sync(); + } finally { + await dirFh.close(); + } + } catch { + } +} +async function readLimitedText(resp) { + if (!resp.body) { + return ""; + } + const reader = resp.body.getReader(); + const chunks = []; + let received = 0; + for (; ; ) { + const { done, value: value2 } = await reader.read(); + if (done) + break; + if (received + value2.length > MAX_TOKEN_RESPONSE_BYTES) { + const remaining = MAX_TOKEN_RESPONSE_BYTES - received; + if (remaining > 0) + chunks.push(value2.subarray(0, remaining)); + await reader.cancel(); + break; + } + chunks.push(value2); + received += value2.length; + } + let merged; + if (chunks.length === 1) { + merged = chunks[0]; + } else { + merged = new Uint8Array(chunks.reduce((n, c) => n + c.length, 0)); + let offset = 0; + for (const c of chunks) { + merged.set(c, offset); + offset += c.length; + } + } + return new TextDecoder("utf-8").decode(merged); +} +var GRANT_TYPE_JWT_BEARER, GRANT_TYPE_REFRESH_TOKEN, TOKEN_ENDPOINT, OAUTH_API_BETA_HEADER, FEDERATION_BETA_HEADER, ADVISORY_REFRESH_THRESHOLD_IN_SECONDS, MANDATORY_REFRESH_THRESHOLD_IN_SECONDS, ADVISORY_REFRESH_BACKOFF_IN_SECONDS, MAX_TOKEN_RESPONSE_BYTES, MAX_ERROR_BODY_CHARS, SAFE_ERROR_KEYS, WorkloadIdentityError; +var init_types = __esm({ + "node_modules/@anthropic-ai/sdk/lib/credentials/types.mjs"() { + init_error3(); + GRANT_TYPE_JWT_BEARER = "urn:ietf:params:oauth:grant-type:jwt-bearer"; + GRANT_TYPE_REFRESH_TOKEN = "refresh_token"; + TOKEN_ENDPOINT = "/v1/oauth/token"; + OAUTH_API_BETA_HEADER = "oauth-2025-04-20"; + FEDERATION_BETA_HEADER = "oidc-federation-2026-04-01"; + ADVISORY_REFRESH_THRESHOLD_IN_SECONDS = 120; + MANDATORY_REFRESH_THRESHOLD_IN_SECONDS = 30; + ADVISORY_REFRESH_BACKOFF_IN_SECONDS = 5; + MAX_TOKEN_RESPONSE_BYTES = 1 << 20; + MAX_ERROR_BODY_CHARS = 2e3; + SAFE_ERROR_KEYS = /* @__PURE__ */ new Set(["error", "error_description", "error_uri"]); + WorkloadIdentityError = class extends AnthropicError { + constructor(message, statusCode = null, body = null, requestId = null) { + super(message); + this.statusCode = statusCode; + this.body = body; + this.requestId = requestId; + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/time.mjs +function nowAsSeconds() { + return Math.floor(Date.now() / 1e3); +} +var init_time = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/time.mjs"() { + } +}); + +// node_modules/@anthropic-ai/sdk/lib/credentials/token-cache.mjs +var TokenCache; +var init_token_cache = __esm({ + "node_modules/@anthropic-ai/sdk/lib/credentials/token-cache.mjs"() { + init_types(); + init_time(); + TokenCache = class { + constructor(provider2, onAdvisoryRefreshError) { + this.cached = null; + this.pendingRefresh = null; + this.nextForce = false; + this.lastAdvisoryError = 0; + this.provider = provider2; + this.onAdvisoryRefreshError = onAdvisoryRefreshError; + } + async getToken() { + const force = this.nextForce; + this.nextForce = false; + const cached = this.cached; + if (force || cached == null) { + const token2 = await this.refresh(force); + return token2.token; + } + if (cached.expiresAt == null) { + return cached.token; + } + const remaining = cached.expiresAt - nowAsSeconds(); + if (remaining > ADVISORY_REFRESH_THRESHOLD_IN_SECONDS) { + return cached.token; + } + if (remaining > MANDATORY_REFRESH_THRESHOLD_IN_SECONDS) { + this.backgroundRefresh(); + return cached.token; + } + const token = await this.refresh(); + return token.token; + } + /** + * Clears the cached token and marks the next {@link getToken} as a forced + * refresh, so the underlying provider bypasses any on-disk freshness check. + * Called after a 401 — the server has just told us the token is bad even + * if its `expires_at` still looks fresh. + */ + invalidate() { + this.cached = null; + this.nextForce = true; + } + /** + * Mandatory refresh. Joins any in-flight refresh unless forced — a forced + * refresh must not coalesce into a non-forced one that may re-serve the + * same stale disk token. + */ + refresh(force = false) { + if (this.pendingRefresh && !force) { + return this.pendingRefresh; + } + return this.doRefresh(force); + } + /** + * Advisory background refresh. Shares the same in-flight promise as + * mandatory refreshes for deduplication, but swallows errors so the + * stale cached token keeps being served. Backs off for + * {@link ADVISORY_REFRESH_BACKOFF_IN_SECONDS} after a failure so an + * outage during the advisory window doesn't hammer the token endpoint. + */ + backgroundRefresh() { + if (this.pendingRefresh) { + return; + } + if (nowAsSeconds() - this.lastAdvisoryError < ADVISORY_REFRESH_BACKOFF_IN_SECONDS) { + return; + } + this.doRefresh().catch((err) => { + this.lastAdvisoryError = nowAsSeconds(); + this.onAdvisoryRefreshError?.(err); + }); + } + /** + * Core refresh. Sets {@link pendingRefresh} so concurrent callers + * (both advisory and mandatory) coalesce into a single provider call. + */ + doRefresh(force = false) { + this.pendingRefresh = this.provider(force ? { forceRefresh: true } : void 0).then((token) => { + this.cached = token; + this.pendingRefresh = null; + return token; + }, (err) => { + this.pendingRefresh = null; + throw err; + }); + return this.pendingRefresh; + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/env.mjs +var readEnv2; +var init_env2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/env.mjs"() { + readEnv2 = (env) => { + if (typeof globalThis.process !== "undefined") { + return globalThis.process.env?.[env]?.trim() || void 0; + } + if (typeof globalThis.Deno !== "undefined") { + return globalThis.Deno.env?.get?.(env)?.trim() || void 0; + } + return void 0; + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/bytes.mjs +function concatBytes(buffers) { + let length = 0; + for (const buffer of buffers) { + length += buffer.length; + } + const output = new Uint8Array(length); + let index = 0; + for (const buffer of buffers) { + output.set(buffer, index); + index += buffer.length; + } + return output; +} +function encodeUTF82(str2) { + let encoder6; + return (encodeUTF8_2 ?? (encoder6 = new globalThis.TextEncoder(), encodeUTF8_2 = encoder6.encode.bind(encoder6)))(str2); +} +function decodeUTF82(bytes2) { + let decoder5; + return (decodeUTF8_2 ?? (decoder5 = new globalThis.TextDecoder(), decodeUTF8_2 = decoder5.decode.bind(decoder5)))(bytes2); +} +var encodeUTF8_2, decodeUTF8_2; +var init_bytes2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/bytes.mjs"() { + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/base64.mjs +var fromBase642; +var init_base642 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/base64.mjs"() { + init_error3(); + fromBase642 = (str2) => { + if (typeof globalThis.Buffer !== "undefined") { + const buf = globalThis.Buffer.from(str2, "base64"); + return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength); + } + if (typeof atob !== "undefined") { + const bstr = atob(str2); + const buf = new Uint8Array(bstr.length); + for (let i = 0; i < bstr.length; i++) { + buf[i] = bstr.charCodeAt(i); + } + return buf; + } + throw new AnthropicError("Cannot decode base64 string; Expected `Buffer` or `atob` to be defined"); + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/log.mjs +function noop2() { +} +function makeLogFn2(fnLevel, logger, logLevel) { + if (!logger || levelNumbers2[fnLevel] > levelNumbers2[logLevel]) { + return noop2; + } else { + return logger[fnLevel].bind(logger); + } +} +function filterLogger(logger, logLevel) { + const cachedLogger = cachedLoggers2.get(logger); + if (cachedLogger && cachedLogger[0] === logLevel) { + return cachedLogger[1]; + } + const levelLogger = { + error: makeLogFn2("error", logger, logLevel), + warn: makeLogFn2("warn", logger, logLevel), + info: makeLogFn2("info", logger, logLevel), + debug: makeLogFn2("debug", logger, logLevel) + }; + cachedLoggers2.set(logger, [logLevel, levelLogger]); + return levelLogger; +} +function loggerFor2(client) { + const logger = client.logger; + const logLevel = client.logLevel ?? "off"; + if (!logger) { + return noopLogger2; + } + return filterLogger(logger, logLevel); +} +function defaultLogger() { + const envLevel = readEnv2("ANTHROPIC_LOG"); + if (!cachedDefaultLogger || envLevel !== lastEnvLevel) { + lastEnvLevel = envLevel; + cachedDefaultLogger = filterLogger(console, parseLogLevel2(envLevel, "process.env['ANTHROPIC_LOG']", filterLogger(console, defaultLogLevel)) ?? defaultLogLevel); + } + return cachedDefaultLogger; +} +function debugLogRequestDetails(logger, message, details) { + if (logger.debug === noop2) { + return; + } + logger.debug(message, formatRequestDetails2(details)); +} +var defaultLogLevel, levelNumbers2, parseLogLevel2, noopLogger2, cachedLoggers2, lastEnvLevel, cachedDefaultLogger, formatRequestDetails2; +var init_log2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/log.mjs"() { + init_values2(); + init_env2(); + defaultLogLevel = "warn"; + levelNumbers2 = { + off: 0, + error: 200, + warn: 300, + info: 400, + debug: 500 + }; + parseLogLevel2 = (maybeLevel, sourceName, logger) => { + if (!maybeLevel) { + return void 0; + } + if (hasOwn2(levelNumbers2, maybeLevel)) { + return maybeLevel; + } + logger.warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers2))}`); + return void 0; + }; + noopLogger2 = { + error: noop2, + warn: noop2, + info: noop2, + debug: noop2 + }; + cachedLoggers2 = /* @__PURE__ */ new WeakMap(); + formatRequestDetails2 = (details) => { + if (details.options) { + details.options = { ...details.options }; + delete details.options["headers"]; + } + if (details.headers) { + details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value2]) => [ + name, + name.toLowerCase() === "authorization" || name.toLowerCase() === "api-key" || name.toLowerCase() === "x-api-key" || name.toLowerCase() === "cookie" || name.toLowerCase() === "set-cookie" ? "***" : value2 + ])); + } + if ("retryOfRequestLogID" in details) { + if (details.retryOfRequestLogID) { + details.retryOf = details.retryOfRequestLogID; + } + delete details.retryOfRequestLogID; + } + return details; + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/uuid.mjs +var uuid42; +var init_uuid2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/uuid.mjs"() { + uuid42 = function() { + const { crypto: crypto3 } = globalThis; + if (crypto3?.randomUUID) { + uuid42 = crypto3.randomUUID.bind(crypto3); + return crypto3.randomUUID(); + } + const u8 = new Uint8Array(1); + const randomByte = crypto3 ? () => crypto3.getRandomValues(u8)[0] : () => Math.random() * 255 & 255; + return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, (c) => (+c ^ randomByte() & 15 >> +c / 4).toString(16)); + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils.mjs +var init_utils4 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils.mjs"() { + init_values2(); + init_base642(); + init_env2(); + init_log2(); + init_uuid2(); + init_sleep2(); + init_query2(); + } +}); + +// node_modules/@anthropic-ai/sdk/core/credentials.mjs +function validateProfileName(name) { + if (!name) { + throw new Error("profile name is empty"); + } + if (name === "." || name === "..") { + throw new Error(`profile name "${name}" is not allowed`); + } + if (name.includes("/") || name.includes("\\")) { + throw new Error(`profile name "${name}" must not contain path separators`); + } + if (!PROFILE_NAME_PATTERN.test(name)) { + throw new Error(`profile name "${name}" contains disallowed characters (allowed: letters, digits, '_', '.', '-')`); + } +} +var CREDENTIALS_FILE_VERSION, PROFILE_NAME_PATTERN, loadConfigWithSource, getCredentialsPath, getRootConfigPath, supportsLocalConfigFiles, getActiveProfileName; +var init_credentials2 = __esm({ + "node_modules/@anthropic-ai/sdk/core/credentials.mjs"() { + init_detect_platform2(); + init_utils4(); + CREDENTIALS_FILE_VERSION = "1.0"; + PROFILE_NAME_PATTERN = /^[A-Za-z0-9_.-]+$/; + loadConfigWithSource = async (profile) => { + var _a6, _b; + const rootConfigPath = await getRootConfigPath(); + if (rootConfigPath === null) { + return null; + } + const profileName = profile ?? await getActiveProfileName(); + if (profileName === null) { + return null; + } + validateProfileName(profileName); + const { fs: fs3, path: path5 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); + const configPath = path5.join(rootConfigPath, "configs", `${profileName}.json`); + let configRaw; + try { + configRaw = await fs3.promises.readFile(configPath, "utf-8"); + } catch (err) { + if (err?.code !== "ENOENT") { + throw new Error(`failed to read config file ${configPath}: ${err}`); + } + configRaw = null; + } + if (configRaw === null) { + const organizationId = readEnv2("ANTHROPIC_ORGANIZATION_ID"); + const identityTokenFile = readEnv2("ANTHROPIC_IDENTITY_TOKEN_FILE"); + const federationRuleId = readEnv2("ANTHROPIC_FEDERATION_RULE_ID"); + if (federationRuleId && organizationId) { + return { + fromFile: false, + config: { + organization_id: organizationId, + // A defaulted-but-empty CI variable (`ANTHROPIC_WORKSPACE_ID=""`) is + // treated as unset — readEnv coerces empty to undefined, and the body + // builder's truthy check skips it — so `"workspace_id": ""` never goes + // on the wire. + workspace_id: readEnv2("ANTHROPIC_WORKSPACE_ID"), + base_url: readEnv2("ANTHROPIC_BASE_URL"), + authentication: { + type: "oidc_federation", + federation_rule_id: federationRuleId, + service_account_id: readEnv2("ANTHROPIC_SERVICE_ACCOUNT_ID"), + identity_token: identityTokenFile ? { source: "file", path: identityTokenFile } : void 0, + scope: readEnv2("ANTHROPIC_SCOPE") + } + } + }; + } + return null; + } + let config; + try { + config = JSON.parse(configRaw); + } catch (err) { + throw new Error(`failed to parse config file ${configPath}: ${err}`); + } + if (!config.authentication) { + throw new Error(`config file ${configPath} is missing "authentication"`); + } + const authType = config.authentication.type; + if (authType !== "oidc_federation" && authType !== "user_oauth") { + throw new Error(`authentication.type "${authType}" is not a known authentication type`); + } + config.organization_id ?? (config.organization_id = readEnv2("ANTHROPIC_ORGANIZATION_ID")); + config.workspace_id ?? (config.workspace_id = readEnv2("ANTHROPIC_WORKSPACE_ID")); + config.base_url ?? (config.base_url = readEnv2("ANTHROPIC_BASE_URL")); + (_a6 = config.authentication).scope ?? (_a6.scope = readEnv2("ANTHROPIC_SCOPE")); + if (config.authentication.type === "oidc_federation") { + if (!config.authentication.identity_token) { + const identityTokenFile = readEnv2("ANTHROPIC_IDENTITY_TOKEN_FILE"); + if (identityTokenFile) { + config.authentication.identity_token = { + source: "file", + path: identityTokenFile + }; + } + } + if (!config.authentication.federation_rule_id) { + config.authentication.federation_rule_id = readEnv2("ANTHROPIC_FEDERATION_RULE_ID") ?? ""; + } + (_b = config.authentication).service_account_id ?? (_b.service_account_id = readEnv2("ANTHROPIC_SERVICE_ACCOUNT_ID")); + } + return { config, fromFile: true }; + }; + getCredentialsPath = async (config, profile) => { + if (config?.authentication.credentials_path) { + return config.authentication.credentials_path; + } + const rootConfigPath = await getRootConfigPath(); + if (!rootConfigPath) { + return null; + } + const profileName = profile ?? await getActiveProfileName(); + if (!profileName) { + return null; + } + validateProfileName(profileName); + const { path: path5 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); + return path5.join(rootConfigPath, "credentials", `${profileName}.json`); + }; + getRootConfigPath = async () => { + if (!supportsLocalConfigFiles()) { + return null; + } + const { path: path5 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); + const configDir = readEnv2("ANTHROPIC_CONFIG_DIR"); + if (configDir) { + return configDir; + } + const os2 = getPlatformHeaders2()["X-Stainless-OS"]; + if (os2 === "Windows") { + const appData = readEnv2("APPDATA"); + if (appData) { + return path5.join(appData, "Anthropic"); + } + const userProfile = readEnv2("USERPROFILE"); + if (userProfile) { + return path5.join(userProfile, "AppData", "Roaming", "Anthropic"); + } + return null; + } + const xdgConfigHome = readEnv2("XDG_CONFIG_HOME"); + if (xdgConfigHome) { + return path5.join(xdgConfigHome, "anthropic"); + } + const home = readEnv2("HOME"); + if (home) { + return path5.join(home, ".config", "anthropic"); + } + return null; + }; + supportsLocalConfigFiles = () => { + const runtime = getPlatformHeaders2()["X-Stainless-Runtime"]; + return runtime === "node" || runtime === "deno"; + }; + getActiveProfileName = async () => { + const rootConfigPath = await getRootConfigPath(); + if (!rootConfigPath) { + return null; + } + const profileName = readEnv2("ANTHROPIC_PROFILE"); + if (profileName) { + return profileName; + } + const { fs: fs3, path: path5 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); + const filePath = path5.join(rootConfigPath, "active_config"); + try { + return (await fs3.promises.readFile(filePath, "utf-8")).trim() || "default"; + } catch (err) { + if (err?.code !== "ENOENT") { + throw new Error(`failed to read ${filePath}: ${err}`); + } + return "default"; + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/lib/credentials/identity-token.mjs +function identityTokenFromFile(path5) { + if (!path5) { + throw new AnthropicError("Identity token file path is empty"); + } + return async () => { + const { fs: fs3 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); + let content; + try { + content = await fs3.promises.readFile(path5, "utf-8"); + } catch (err) { + throw new AnthropicError(`Failed to read identity token file at ${path5}: ${err}`); + } + const token = content.trim(); + if (!token) { + throw new AnthropicError(`Identity token file at ${path5} is empty`); + } + return token; + }; +} +function identityTokenFromValue(token) { + if (!token) { + throw new AnthropicError("Identity token value is empty"); + } + return () => token; +} +var init_identity_token = __esm({ + "node_modules/@anthropic-ai/sdk/lib/credentials/identity-token.mjs"() { + init_error3(); + } +}); + +// node_modules/@anthropic-ai/sdk/lib/credentials/oidc-federation.mjs +function oidcFederationProvider(config) { + return async () => { + requireSecureTokenEndpoint(config.baseURL); + const jwt = await config.identityTokenProvider(); + if (jwt.length > 16 * 1024) { + throw new WorkloadIdentityError(`Identity token is ${Math.ceil(jwt.length / 1024)} KiB, exceeds the 16 KiB assertion limit`); + } + const body = { + grant_type: GRANT_TYPE_JWT_BEARER, + assertion: jwt, + federation_rule_id: config.federationRuleId, + organization_id: config.organizationId + }; + if (config.serviceAccountId) { + body["service_account_id"] = config.serviceAccountId; + } + if (config.workspaceId) { + body["workspace_id"] = config.workspaceId; + } + const url = `${config.baseURL}${TOKEN_ENDPOINT}`; + let resp; + try { + resp = await config.fetch(url, { + method: "POST", + headers: { + "Content-Type": "application/json", + "anthropic-beta": `${OAUTH_API_BETA_HEADER},${FEDERATION_BETA_HEADER}`, + "User-Agent": config.userAgent || `anthropic-sdk-typescript/${VERSION2} oidcFederationProvider` + }, + body: JSON.stringify(body) + }); + } catch (err) { + throw new WorkloadIdentityError(`Failed to reach token endpoint ${url}: ${err}`); + } + const requestId = resp.headers.get("Request-Id"); + if (!resp.ok) { + const text2 = await resp.text().catch(() => ""); + const redacted = redactSensitive(text2); + let hint = ""; + if (resp.status === 401) { + const hintMiddle = config.workspaceId ? "" : "If your federation rule is scoped to multiple workspaces, set the ANTHROPIC_WORKSPACE_ID environment variable, the 'workspace_id' config key, or the `workspaceId` option. "; + hint = ` Ensure your federation rule matches your identity token. ${hintMiddle}View your authentication events in the Workload identity page of Claude Console for more details.`; + } + throw new WorkloadIdentityError(`Token exchange failed with status ${resp.status}${requestId ? ` (request-id ${requestId})` : ""}: ${redacted}${hint}`, resp.status, redacted, requestId); + } + const data = await parseTokenResponse(resp, requestId); + const expiresIn = Number(data.expires_in); + if (!Number.isFinite(expiresIn)) { + throw new WorkloadIdentityError(`Token endpoint response missing required fields: ${JSON.stringify(redactSensitive(data))}`, resp.status, redactSensitive(data), requestId); + } + return { + token: data.access_token, + expiresAt: nowAsSeconds() + expiresIn + }; + }; +} +var init_oidc_federation = __esm({ + "node_modules/@anthropic-ai/sdk/lib/credentials/oidc-federation.mjs"() { + init_types(); + init_time(); + init_version3(); + } +}); + +// node_modules/@anthropic-ai/sdk/lib/credentials/user-oauth.mjs +function userOAuthProvider(config) { + return async (opts) => { + const { fs: fs3 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); + await checkCredentialsFileSafety(config.credentialsPath, config.onSafetyWarning); + let raw; + try { + raw = await fs3.promises.readFile(config.credentialsPath, "utf-8"); + } catch (err) { + throw new WorkloadIdentityError(`Credentials file not found at ${config.credentialsPath}: ${err}`); + } + let creds; + try { + creds = JSON.parse(raw); + } catch (err) { + throw new WorkloadIdentityError(`Credentials file at ${config.credentialsPath} is not valid JSON: ${err}`); + } + const accessToken = creds.access_token; + if (!accessToken) { + throw new WorkloadIdentityError(`Credentials file at ${config.credentialsPath} must include 'access_token'`); + } + const expiresAt = creds.expires_at; + if (!opts?.forceRefresh && (expiresAt == null || nowAsSeconds() < expiresAt - MANDATORY_REFRESH_THRESHOLD_IN_SECONDS)) { + return { token: accessToken, expiresAt: expiresAt ?? null }; + } + const refreshToken = creds.refresh_token; + if (!config.clientId || !refreshToken) { + throw new WorkloadIdentityError(`Access token at ${config.credentialsPath} has expired and no refresh is available (client_id ${config.clientId ? "set" : "empty"}, refresh_token ${refreshToken ? "set" : "empty"})`); + } + requireSecureTokenEndpoint(config.baseURL); + const body = { + grant_type: GRANT_TYPE_REFRESH_TOKEN, + refresh_token: refreshToken, + client_id: config.clientId + }; + const url = `${config.baseURL}${TOKEN_ENDPOINT}`; + let resp; + try { + resp = await config.fetch(url, { + method: "POST", + headers: { + "Content-Type": "application/json", + "anthropic-beta": OAUTH_API_BETA_HEADER, + "User-Agent": config.userAgent || `anthropic-sdk-typescript/${VERSION2} userOAuthProvider` + }, + body: JSON.stringify(body) + }); + } catch (err) { + throw new WorkloadIdentityError(`User OAuth refresh failed to reach token endpoint: ${err}`); + } + const requestId = resp.headers.get("Request-Id"); + if (!resp.ok) { + const text2 = await resp.text().catch(() => ""); + throw new WorkloadIdentityError(`User OAuth refresh failed (HTTP ${resp.status}): ${redactSensitive(text2)}`, resp.status, redactSensitive(text2), requestId); + } + const data = await parseTokenResponse(resp, requestId); + const expiresIn = Number(data.expires_in); + if (!Number.isFinite(expiresIn)) { + throw new WorkloadIdentityError(`User OAuth refresh response missing or invalid expires_in: ${JSON.stringify(redactSensitive(data))}`, resp.status, redactSensitive(data), requestId); + } + const newExpiresAt = nowAsSeconds() + expiresIn; + const newRefreshToken = data.refresh_token || refreshToken; + await writeCredentialsFileAtomic(config.credentialsPath, { + ...creds, + version: CREDENTIALS_FILE_VERSION, + type: "oauth_token", + access_token: data.access_token, + expires_at: newExpiresAt, + refresh_token: newRefreshToken + }); + return { token: data.access_token, expiresAt: newExpiresAt }; + }; +} +var init_user_oauth = __esm({ + "node_modules/@anthropic-ai/sdk/lib/credentials/user-oauth.mjs"() { + init_credentials2(); + init_types(); + init_time(); + init_version3(); + } +}); + +// node_modules/@anthropic-ai/sdk/lib/credentials/credential-chain.mjs +function resolveCredentialsFromConfig(config, options) { + const credentialsPath = config.authentication.credentials_path ?? null; + const effectiveBaseURL = (config.base_url || options.baseURL).replace(/\/+$/, ""); + const provider2 = buildProvider(config, credentialsPath, effectiveBaseURL, options); + const extraHeaders = {}; + if (config.workspace_id && config.authentication.type === "user_oauth") { + extraHeaders["anthropic-workspace-id"] = config.workspace_id; + } + return { provider: provider2, extraHeaders, baseURL: config.base_url || void 0 }; +} +async function defaultCredentials(options, profile) { + const loaded = await loadConfigWithSource(profile); + if (!loaded) { + return null; + } + const { config, fromFile } = loaded; + const withPath = config.authentication.credentials_path || !fromFile ? config : { + ...config, + authentication: { + ...config.authentication, + credentials_path: await getCredentialsPath(config, profile) ?? void 0 + } + }; + return resolveCredentialsFromConfig(withPath, options); +} +function buildProvider(config, credentialsPath, baseURL, options) { + switch (config.authentication.type) { + case "oidc_federation": { + const auth = config.authentication; + const identityProvider = resolveIdentityTokenProvider(auth); + if (!identityProvider) { + throw new WorkloadIdentityError("oidc_federation config requires an identity token (set authentication.identity_token, ANTHROPIC_IDENTITY_TOKEN_FILE, or ANTHROPIC_IDENTITY_TOKEN)"); + } + if (!auth.federation_rule_id) { + throw new WorkloadIdentityError("oidc_federation config requires 'federation_rule_id'. Set it in authentication.federation_rule_id in your profile, or via ANTHROPIC_FEDERATION_RULE_ID (profile takes precedence)."); + } + if (!config.organization_id) { + throw new WorkloadIdentityError("oidc_federation config requires organization_id (set ANTHROPIC_ORGANIZATION_ID or config.organization_id)"); + } + const exchange = oidcFederationProvider({ + identityTokenProvider: identityProvider, + federationRuleId: auth.federation_rule_id, + organizationId: config.organization_id, + serviceAccountId: auth.service_account_id, + workspaceId: config.workspace_id, + baseURL, + fetch: options.fetch, + userAgent: options.userAgent + }); + if (credentialsPath) { + return cachedExchangeProvider(exchange, credentialsPath, options.onCacheWriteError, options.onSafetyWarning); + } + return exchange; + } + case "user_oauth": { + if (!credentialsPath) { + throw new WorkloadIdentityError("user_oauth config requires authentication.credentials_path (or load via a profile so it defaults to /credentials/.json)"); + } + return userOAuthProvider({ + credentialsPath, + clientId: config.authentication.client_id, + baseURL, + fetch: options.fetch, + userAgent: options.userAgent, + onSafetyWarning: options.onSafetyWarning + }); + } + default: { + const t = config.authentication.type; + throw new WorkloadIdentityError(`authentication.type "${t}" is not a known authentication type`); + } + } +} +function resolveIdentityTokenProvider(auth) { + if (auth.identity_token) { + const source = auth.identity_token.source; + if (source !== "file") { + throw new WorkloadIdentityError(`identity_token.source "${source}" is not supported by this SDK version (only "file")`); + } + if (!auth.identity_token.path) { + throw new WorkloadIdentityError(`identity_token.source "file" requires a non-empty path`); + } + return identityTokenFromFile(auth.identity_token.path); + } + const tokenFile = readEnv2("ANTHROPIC_IDENTITY_TOKEN_FILE"); + if (tokenFile) { + return identityTokenFromFile(tokenFile); + } + const tokenValue = readEnv2("ANTHROPIC_IDENTITY_TOKEN"); + if (tokenValue) { + return identityTokenFromValue(tokenValue); + } + return null; +} +function cachedExchangeProvider(exchange, credentialsPath, onCacheWriteError, onSafetyWarning) { + return async (opts) => { + const { fs: fs3 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); + await checkCredentialsFileSafety(credentialsPath, onSafetyWarning); + let existing; + try { + const raw = await fs3.promises.readFile(credentialsPath, "utf-8"); + existing = JSON.parse(raw); + const token = existing?.["access_token"]; + if (token && !opts?.forceRefresh) { + const expiresAt = existing?.["expires_at"]; + if (expiresAt == null || nowAsSeconds() < expiresAt - MANDATORY_REFRESH_THRESHOLD_IN_SECONDS) { + return { token, expiresAt: expiresAt ?? null }; + } + } + } catch (err) { + const code = err?.code; + if (code !== "ENOENT" && !(err instanceof SyntaxError)) { + onCacheWriteError?.(err); + } + } + const result = await exchange(opts); + try { + await writeCredentialsFileAtomic(credentialsPath, { + ...existing ?? {}, + version: CREDENTIALS_FILE_VERSION, + type: "oauth_token", + access_token: result.token, + expires_at: result.expiresAt + }); + } catch (err) { + onCacheWriteError?.(err); + } + return result; + }; +} +var init_credential_chain = __esm({ + "node_modules/@anthropic-ai/sdk/lib/credentials/credential-chain.mjs"() { + init_env2(); + init_credentials2(); + init_types(); + init_time(); + init_identity_token(); + init_oidc_federation(); + init_user_oauth(); + } +}); + +// node_modules/@anthropic-ai/sdk/internal/decoders/line.mjs +function findNewlineIndex2(buffer, startIndex) { + const newline = 10; + const carriage = 13; + for (let i = startIndex ?? 0; i < buffer.length; i++) { + if (buffer[i] === newline) { + return { preceding: i, index: i + 1, carriage: false }; + } + if (buffer[i] === carriage) { + return { preceding: i, index: i + 1, carriage: true }; + } + } + return null; +} +var _LineDecoder_buffer2, _LineDecoder_carriageReturnIndex, LineDecoder2; +var init_line2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/decoders/line.mjs"() { + init_tslib2(); + init_bytes2(); + LineDecoder2 = /* @__PURE__ */ (() => { + class LineDecoder3 { + constructor() { + _LineDecoder_buffer2.set(this, void 0); + _LineDecoder_carriageReturnIndex.set(this, void 0); + __classPrivateFieldSet2(this, _LineDecoder_buffer2, new Uint8Array(), "f"); + __classPrivateFieldSet2(this, _LineDecoder_carriageReturnIndex, null, "f"); + } + decode(chunk) { + if (chunk == null) { + return []; + } + const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk) : typeof chunk === "string" ? encodeUTF82(chunk) : chunk; + __classPrivateFieldSet2(this, _LineDecoder_buffer2, concatBytes([__classPrivateFieldGet2(this, _LineDecoder_buffer2, "f"), binaryChunk]), "f"); + const lines2 = []; + let patternIndex; + while ((patternIndex = findNewlineIndex2(__classPrivateFieldGet2(this, _LineDecoder_buffer2, "f"), __classPrivateFieldGet2(this, _LineDecoder_carriageReturnIndex, "f"))) != null) { + if (patternIndex.carriage && __classPrivateFieldGet2(this, _LineDecoder_carriageReturnIndex, "f") == null) { + __classPrivateFieldSet2(this, _LineDecoder_carriageReturnIndex, patternIndex.index, "f"); + continue; + } + if (__classPrivateFieldGet2(this, _LineDecoder_carriageReturnIndex, "f") != null && (patternIndex.index !== __classPrivateFieldGet2(this, _LineDecoder_carriageReturnIndex, "f") + 1 || patternIndex.carriage)) { + lines2.push(decodeUTF82(__classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").subarray(0, __classPrivateFieldGet2(this, _LineDecoder_carriageReturnIndex, "f") - 1))); + __classPrivateFieldSet2(this, _LineDecoder_buffer2, __classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").subarray(__classPrivateFieldGet2(this, _LineDecoder_carriageReturnIndex, "f")), "f"); + __classPrivateFieldSet2(this, _LineDecoder_carriageReturnIndex, null, "f"); + continue; + } + const endIndex = __classPrivateFieldGet2(this, _LineDecoder_carriageReturnIndex, "f") !== null ? patternIndex.preceding - 1 : patternIndex.preceding; + const line = decodeUTF82(__classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").subarray(0, endIndex)); + lines2.push(line); + __classPrivateFieldSet2(this, _LineDecoder_buffer2, __classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").subarray(patternIndex.index), "f"); + __classPrivateFieldSet2(this, _LineDecoder_carriageReturnIndex, null, "f"); + } + return lines2; + } + flush() { + if (!__classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").length) { + return []; + } + return this.decode("\n"); + } + } + _LineDecoder_buffer2 = /* @__PURE__ */ new WeakMap(), _LineDecoder_carriageReturnIndex = /* @__PURE__ */ new WeakMap(); + LineDecoder3.NEWLINE_CHARS = /* @__PURE__ */ new Set(["\n", "\r"]); + LineDecoder3.NEWLINE_REGEXP = /\r\n|[\n\r]/g; + return LineDecoder3; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/core/streaming.mjs +async function* _iterSSEMessages2(response, controller) { + if (!response.body) { + controller.abort(); + if (typeof globalThis.navigator !== "undefined" && globalThis.navigator.product === "ReactNative") { + throw new AnthropicError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`); + } + throw new AnthropicError(`Attempted to iterate over a response with no body`); + } + const sseDecoder = new SSEDecoder2(); + const lineDecoder = new LineDecoder2(); + const iter = ReadableStreamToAsyncIterable2(response.body); + for await (const chunk of iter) { + for (const line of lineDecoder.decode(chunk)) { + const sse = sseDecoder.decode(line); + if (sse) + yield sse; + } + } + for (const line of lineDecoder.flush()) { + const sse = sseDecoder.decode(line); + if (sse) + yield sse; + } +} +function partition2(str2, delimiter) { + const index = str2.indexOf(delimiter); + if (index !== -1) { + return [str2.substring(0, index), delimiter, str2.substring(index + delimiter.length)]; + } + return [str2, "", ""]; +} +var _Stream_client2, Stream2, SSEDecoder2; +var init_streaming3 = __esm({ + "node_modules/@anthropic-ai/sdk/core/streaming.mjs"() { + init_tslib2(); + init_error3(); + init_shims2(); + init_line2(); + init_shims2(); + init_errors2(); + init_values2(); + init_bytes2(); + init_log2(); + init_error3(); + init_request_signal(); + Stream2 = /* @__PURE__ */ (() => { + class Stream3 { + constructor(iterator, controller, client) { + this.iterator = iterator; + _Stream_client2.set(this, void 0); + this.controller = controller; + __classPrivateFieldSet2(this, _Stream_client2, client, "f"); + } + /** + * Iterate the raw Server-Sent Events from `response` — `{event, data, raw}` + * objects, before any JSON parsing or event-name filtering. + * + * This reads `response.body` directly (not a clone), so the response is + * consumed. Use this in middleware that fully replaces the stream body; for + * read-only observation of parsed events, use `ctx.parse()` instead. + */ + static rawEvents(response, controller = new AbortController()) { + return _iterSSEMessages2(response, controller); + } + static fromSSEResponse(response, controller, client) { + let consumed = false; + const logger = client ? loggerFor2(client) : console; + async function* iterator() { + if (consumed) { + throw new AnthropicError("Cannot iterate over a consumed stream, use `.tee()` to split the stream."); + } + consumed = true; + let done = false; + try { + for await (const sse of _iterSSEMessages2(response, controller)) { + if (sse.event === "completion") { + try { + yield JSON.parse(sse.data); + } catch (e) { + logger.error(`Could not parse message into JSON:`, sse.data); + logger.error(`From chunk:`, sse.raw); + throw e; + } + } + if (sse.event === "message_start" || sse.event === "message_delta" || sse.event === "message_stop" || sse.event === "content_block_start" || sse.event === "content_block_delta" || sse.event === "content_block_stop" || sse.event === "message" || sse.event === "user.message" || sse.event === "user.interrupt" || sse.event === "user.tool_confirmation" || sse.event === "user.custom_tool_result" || sse.event === "user.tool_result" || sse.event === "agent.message" || sse.event === "agent.thinking" || sse.event === "agent.tool_use" || sse.event === "agent.tool_result" || sse.event === "agent.mcp_tool_use" || sse.event === "agent.mcp_tool_result" || sse.event === "agent.custom_tool_use" || sse.event === "agent.thread_context_compacted" || sse.event === "session.status_running" || sse.event === "session.status_idle" || sse.event === "session.status_rescheduled" || sse.event === "session.status_terminated" || sse.event === "session.error" || sse.event === "session.deleted" || sse.event === "session.updated" || sse.event === "span.model_request_start" || sse.event === "span.model_request_end" || sse.event === "span.outcome_evaluation_start" || sse.event === "span.outcome_evaluation_ongoing" || sse.event === "span.outcome_evaluation_end" || sse.event === "user.define_outcome" || sse.event === "agent.thread_message_received" || sse.event === "agent.thread_message_sent" || sse.event === "agent.session_thread_message_received" || sse.event === "agent.session_thread_message_sent" || sse.event === "session.thread_created" || sse.event === "session.thread_status_created" || sse.event === "session.thread_status_running" || sse.event === "session.thread_status_idle" || sse.event === "session.thread_status_rescheduled" || sse.event === "session.thread_status_terminated" || sse.event === "event_start" || sse.event === "event_delta" || sse.event === "system.message") { + try { + yield JSON.parse(sse.data); + } catch (e) { + logger.error(`Could not parse message into JSON:`, sse.data); + logger.error(`From chunk:`, sse.raw); + throw e; + } + } + if (sse.event === "ping") { + continue; + } + if (sse.event === "error") { + const body = safeJSON2(sse.data) ?? sse.data; + const type = body?.error?.type; + throw new APIError2(void 0, body, void 0, response.headers, type); + } + } + done = true; + } catch (e) { + if (isAbortError2(e)) + return; + throw e; + } finally { + if (!done) + controller.abort(); + releaseRequestSignal(controller); + } + } + return new Stream3(iterator, controller, client); + } + /** + * Generates a Stream from a newline-separated ReadableStream + * where each item is a JSON value. + */ + static fromReadableStream(readableStream, controller, client) { + let consumed = false; + async function* iterLines() { + const lineDecoder = new LineDecoder2(); + const iter = ReadableStreamToAsyncIterable2(readableStream); + for await (const chunk of iter) { + for (const line of lineDecoder.decode(chunk)) { + yield line; + } + } + for (const line of lineDecoder.flush()) { + yield line; + } + } + async function* iterator() { + if (consumed) { + throw new AnthropicError("Cannot iterate over a consumed stream, use `.tee()` to split the stream."); + } + consumed = true; + let done = false; + try { + for await (const line of iterLines()) { + if (done) + continue; + if (line) + yield JSON.parse(line); + } + done = true; + } catch (e) { + if (isAbortError2(e)) + return; + throw e; + } finally { + if (!done) + controller.abort(); + releaseRequestSignal(controller); + } + } + return new Stream3(iterator, controller, client); + } + [(_Stream_client2 = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() { + return this.iterator(); + } + /** + * Splits the stream into two streams which can be + * independently read from at different speeds. + */ + tee() { + const left = []; + const right = []; + const iterator = this.iterator(); + const teeIterator = (queue2) => { + return { + next: () => { + if (queue2.length === 0) { + const result = iterator.next(); + left.push(result); + right.push(result); + } + return queue2.shift(); + } + }; + }; + return [ + new Stream3(() => teeIterator(left), this.controller, __classPrivateFieldGet2(this, _Stream_client2, "f")), + new Stream3(() => teeIterator(right), this.controller, __classPrivateFieldGet2(this, _Stream_client2, "f")) + ]; + } + /** + * Converts this stream to a newline-separated ReadableStream of + * JSON stringified values in the stream + * which can be turned back into a Stream with `Stream.fromReadableStream()`. + */ + toReadableStream() { + const self = this; + let iter; + return makeReadableStream2({ + async start() { + iter = self[Symbol.asyncIterator](); + }, + async pull(ctrl) { + try { + const { value: value2, done } = await iter.next(); + if (done) + return ctrl.close(); + const bytes2 = encodeUTF82(JSON.stringify(value2) + "\n"); + ctrl.enqueue(bytes2); + } catch (err) { + ctrl.error(err); + } + }, + async cancel() { + await iter.return?.(); + } + }); + } + } + return Stream3; + })(); + SSEDecoder2 = class { + constructor() { + this.event = null; + this.data = []; + this.chunks = []; + } + decode(line) { + if (line.endsWith("\r")) { + line = line.substring(0, line.length - 1); + } + if (!line) { + if (!this.event && !this.data.length) + return null; + const sse = { + event: this.event, + data: this.data.join("\n"), + raw: this.chunks + }; + this.event = null; + this.data = []; + this.chunks = []; + return sse; + } + this.chunks.push(line); + if (line.startsWith(":")) { + return null; + } + let [fieldname, _, value2] = partition2(line, ":"); + if (value2.startsWith(" ")) { + value2 = value2.substring(1); + } + if (fieldname === "event") { + this.event = value2; + } else if (fieldname === "data") { + this.data.push(value2); + } + return null; + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/parse.mjs +async function defaultParseResponse2(client, props) { + const { response, requestLogID, retryOfRequestLogID, startTime } = props; + const body = await (async () => { + if (props.options.stream) { + loggerFor2(client).debug("response", response.status, response.url, response.headers, response.body); + return Stream2.fromSSEResponse(response, props.controller, client); + } + if (response.status === 204) { + return null; + } + if (props.options.__binaryResponse) { + return response; + } + const contentType = response.headers.get("content-type"); + const mediaType = contentType?.split(";")[0]?.trim(); + const isJSON = mediaType?.includes("application/json") || mediaType?.endsWith("+json"); + if (isJSON) { + const contentLength = response.headers.get("content-length"); + if (contentLength === "0") { + return void 0; + } + const json = await response.json(); + return addResponseIDs(json, response); + } + const text2 = await response.text(); + return text2; + })().finally(() => { + if (!props.options.stream && !props.options.__binaryResponse) { + releaseRequestSignal(props.controller); + } + }); + debugLogRequestDetails(loggerFor2(client), `[${requestLogID}] response parsed`, { + retryOfRequestLogID, + url: response.url, + status: response.status, + body, + durationMs: Date.now() - startTime + }); + return body; +} +function addResponseIDs(value2, response) { + if (!value2 || typeof value2 !== "object" || Array.isArray(value2)) { + return value2; + } + return Object.defineProperties(value2, { + _request_id: { value: response.headers.get("request-id"), enumerable: false }, + _workspace_id: { value: response.headers.get("anthropic-workspace-id"), enumerable: false } + }); +} +var init_parse2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/parse.mjs"() { + init_streaming3(); + init_log2(); + init_request_signal(); + } +}); + +// node_modules/@anthropic-ai/sdk/core/middleware.mjs +function isFetchOriginError(err) { + return typeof err === "object" && err !== null && fetchOriginErrors.has(err); +} +function isRetryableError(err) { + const seen = /* @__PURE__ */ new Set(); + while (typeof err === "object" && err !== null && !seen.has(err)) { + seen.add(err); + if (isFetchOriginError(err) || isAbortError2(err) || err instanceof APIConnectionError2 || err instanceof RetryableError) { + return true; + } + err = err.cause; + } + return false; +} +function wrapFetchWithMiddleware(fetchFn, middleware, options, client) { + return async (url, init = {}) => { + if (middleware.length === 0) { + return fetchFn.call(void 0, url, init); + } + const headers = init.headers instanceof Headers ? init.headers : new Headers(init.headers); + const response = await applyMiddleware(fetchFn, middleware, options, client)({ + ...init, + headers, + url: typeof url === "string" ? url : url instanceof URL ? url.href : url.url + }); + if (response.bodyUsed || response.body?.locked) { + throw new AnthropicError("middleware consumed the response body; use response.clone() to inspect it, or return new Response(body, response) to consume and replace it"); + } + return response; + }; +} +function createMiddlewareContext(options, client) { + const cache = /* @__PURE__ */ new WeakMap(); + return { + options, + // Resolved per chain, so changes to the client's `logLevel`/`logger` + // apply to subsequent requests. + logger: client ? loggerFor2(client) : defaultLogger(), + parse(response) { + if (options?.stream && response.ok) { + return parseMiddlewareResponse(response, options, client); + } + let parsed = cache.get(response); + if (!parsed) { + parsed = parseMiddlewareResponse(response, options, client); + cache.set(response, parsed); + } + return parsed; + } + }; +} +async function parseMiddlewareResponse(response, options, client) { + if (response.bodyUsed || response.body?.locked) { + throw new AnthropicError("cannot ctx.parse() a response whose body was already consumed; call ctx.parse() instead of reading the body, or read via response.clone()"); + } + if (options?.stream && response.ok) { + return Stream2.fromSSEResponse(response.clone(), new AbortController(), client); + } + if (response.status === 204) { + return null; + } + if (options?.__binaryResponse) { + return response; + } + const contentType = response.headers.get("content-type"); + const mediaType = contentType?.split(";")[0]?.trim(); + const isJSON = mediaType?.includes("application/json") || mediaType?.endsWith("+json"); + if (isJSON) { + if (response.headers.get("content-length") === "0") { + return void 0; + } + return addResponseIDs(await response.clone().json(), response); + } + return await response.clone().text(); +} +function applyMiddleware(fetchFn, middleware, options, client) { + let next = async ({ url, ...init }) => { + try { + return await fetchFn.call(void 0, url, init); + } catch (err) { + const error = castToError2(err); + fetchOriginErrors.add(error); + throw error; + } + }; + const ctx = createMiddlewareContext(options, client); + for (let i = middleware.length - 1; i >= 0; i--) { + const mw = middleware[i]; + const nextInner = next; + next = async (request2) => mw(request2, nextInner, ctx); + } + return next; +} +var fetchOriginErrors; +var init_middleware = __esm({ + "node_modules/@anthropic-ai/sdk/core/middleware.mjs"() { + init_errors2(); + init_parse2(); + init_log2(); + init_error3(); + init_streaming3(); + fetchOriginErrors = /* @__PURE__ */ new WeakSet(); + } +}); + +// node_modules/@anthropic-ai/sdk/core/api-promise.mjs +var _APIPromise_client2, APIPromise2; +var init_api_promise2 = __esm({ + "node_modules/@anthropic-ai/sdk/core/api-promise.mjs"() { + init_tslib2(); + init_parse2(); + APIPromise2 = /* @__PURE__ */ (() => { + class APIPromise3 extends Promise { + constructor(client, responsePromise, parseResponse2 = defaultParseResponse2) { + super((resolve2) => { + resolve2(null); + }); + this.responsePromise = responsePromise; + this.parseResponse = parseResponse2; + _APIPromise_client2.set(this, void 0); + __classPrivateFieldSet2(this, _APIPromise_client2, client, "f"); + } + _thenUnwrap(transform) { + return new APIPromise3(__classPrivateFieldGet2(this, _APIPromise_client2, "f"), this.responsePromise, async (client, props) => addResponseIDs(transform(await this.parseResponse(client, props), props), props.response)); + } + /** + * Gets the raw `Response` instance instead of parsing the response + * data. + * + * If you want to parse the response body but still get the `Response` + * instance, you can use {@link withResponse()}. + * + * 👋 Getting the wrong TypeScript type for `Response`? + * Try setting `"moduleResolution": "NodeNext"` or add `"lib": ["DOM"]` + * to your `tsconfig.json`. + */ + asResponse() { + return this.responsePromise.then((p) => p.response); + } + /** + * Gets the parsed response data, the raw `Response` instance and the ID of the request, + * returned via the `request-id` header which is useful for debugging requests and resporting + * issues to Anthropic. + * + * If you just want to get the raw `Response` instance without parsing it, + * you can use {@link asResponse()}. + * + * 👋 Getting the wrong TypeScript type for `Response`? + * Try setting `"moduleResolution": "NodeNext"` or add `"lib": ["DOM"]` + * to your `tsconfig.json`. + */ + async withResponse() { + const [data, response] = await Promise.all([this.parse(), this.asResponse()]); + return { + data, + response, + request_id: response.headers.get("request-id"), + workspace_id: response.headers.get("anthropic-workspace-id") + }; + } + parse() { + if (!this.parsedPromise) { + this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet2(this, _APIPromise_client2, "f"), data)); + } + return this.parsedPromise; + } + then(onfulfilled, onrejected) { + return this.parse().then(onfulfilled, onrejected); + } + catch(onrejected) { + return this.parse().catch(onrejected); + } + finally(onfinally) { + return this.parse().finally(onfinally); + } + } + _APIPromise_client2 = /* @__PURE__ */ new WeakMap(); + return APIPromise3; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/core/pagination.mjs +var _AbstractPage_client2, AbstractPage2, PagePromise2, Page2, PageCursor, BidirectionalPageCursor; +var init_pagination2 = __esm({ + "node_modules/@anthropic-ai/sdk/core/pagination.mjs"() { + init_tslib2(); + init_error3(); + init_parse2(); + init_api_promise2(); + init_values2(); + AbstractPage2 = /* @__PURE__ */ (() => { + class AbstractPage3 { + constructor(client, response, body, options) { + _AbstractPage_client2.set(this, void 0); + __classPrivateFieldSet2(this, _AbstractPage_client2, client, "f"); + this.options = options; + this.response = response; + this.body = body; + } + hasNextPage() { + const items = this.getPaginatedItems(); + if (!items.length) + return false; + return this.nextPageRequestOptions() != null; + } + async getNextPage() { + const nextOptions = this.nextPageRequestOptions(); + if (!nextOptions) { + throw new AnthropicError("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`."); + } + return await __classPrivateFieldGet2(this, _AbstractPage_client2, "f").requestAPIList(this.constructor, nextOptions); + } + async *iterPages() { + let page3 = this; + yield page3; + while (page3.hasNextPage()) { + page3 = await page3.getNextPage(); + yield page3; + } + } + async *[(_AbstractPage_client2 = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() { + for await (const page3 of this.iterPages()) { + for (const item of page3.getPaginatedItems()) { + yield item; + } + } + } + } + return AbstractPage3; + })(); + PagePromise2 = /* @__PURE__ */ (() => { + class PagePromise3 extends APIPromise2 { + constructor(client, request2, Page3) { + super(client, request2, async (client2, props) => new Page3(client2, props.response, await defaultParseResponse2(client2, props), props.options)); + } + /** + * Allow auto-paginating iteration on an unawaited list call, eg: + * + * for await (const item of client.items.list()) { + * console.log(item) + * } + */ + async *[Symbol.asyncIterator]() { + const page3 = await this; + for await (const item of page3) { + yield item; + } + } + } + return PagePromise3; + })(); + Page2 = class extends AbstractPage2 { + constructor(client, response, body, options) { + super(client, response, body, options); + this.data = body.data || []; + this.has_more = body.has_more || false; + this.first_id = body.first_id || null; + this.last_id = body.last_id || null; + } + getPaginatedItems() { + return this.data ?? []; + } + hasNextPage() { + if (this.has_more === false) { + return false; + } + return super.hasNextPage(); + } + nextPageRequestOptions() { + if (this.options.query?.["before_id"]) { + const first_id = this.first_id; + if (!first_id) { + return null; + } + return { + ...this.options, + query: { + ...maybeObj2(this.options.query), + before_id: first_id + } + }; + } + const cursor = this.last_id; + if (!cursor) { + return null; + } + return { + ...this.options, + query: { + ...maybeObj2(this.options.query), + after_id: cursor + } + }; + } + }; + PageCursor = class extends AbstractPage2 { + constructor(client, response, body, options) { + super(client, response, body, options); + this.data = body.data || []; + this.next_page = body.next_page || null; + } + getPaginatedItems() { + return this.data ?? []; + } + nextPageRequestOptions() { + const cursor = this.next_page; + if (!cursor) { + return null; + } + return { + ...this.options, + query: { + ...maybeObj2(this.options.query), + page: cursor + } + }; + } + }; + BidirectionalPageCursor = class extends AbstractPage2 { + constructor(client, response, body, options) { + super(client, response, body, options); + this.data = body.data || []; + this.next_page = body.next_page || null; + this.prev_page = body.prev_page || null; + } + getPaginatedItems() { + return this.data ?? []; + } + nextPageRequestOptions() { + const cursor = this.next_page; + if (!cursor) { + return null; + } + return { + ...this.options, + query: { + ...maybeObj2(this.options.query), + page: cursor + } + }; + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/uploads.mjs +function makeFile2(fileBits, fileName, options) { + checkFileSupport2(); + return new File(fileBits, fileName ?? "", options); +} +function getName2(value2, stripPath) { + const val = typeof value2 === "object" && value2 !== null && ("name" in value2 && value2.name && String(value2.name) || "url" in value2 && value2.url && String(value2.url) || "filename" in value2 && value2.filename && String(value2.filename) || "path" in value2 && value2.path && String(value2.path)) || ""; + return stripPath ? val.split(/[\\/]/).pop() || void 0 : val; +} +function supportsFormData2(fetchObject) { + const fetch2 = typeof fetchObject === "function" ? fetchObject : fetchObject.fetch; + const cached = supportsFormDataMap2.get(fetch2); + if (cached) + return cached; + const promise = (async () => { + try { + const FetchResponse = "Response" in fetch2 ? fetch2.Response : (await fetch2("data:,")).constructor; + const data = new FormData(); + if (data.toString() === await new FetchResponse(data).text()) { + return false; + } + return true; + } catch { + return true; + } + })(); + supportsFormDataMap2.set(fetch2, promise); + return promise; +} +var checkFileSupport2, isAsyncIterable2, multipartFormRequestOptions2, supportsFormDataMap2, createForm2, addFormValue2; +var init_uploads4 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/uploads.mjs"() { + init_shims2(); + checkFileSupport2 = () => { + if (typeof File === "undefined") { + const { process: process2 } = globalThis; + const isOldNode = typeof process2?.versions?.node === "string" && parseInt(process2.versions.node.split(".")) < 20; + throw new Error("`File` is not defined as a global, which is required for file uploads." + (isOldNode ? " Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`." : "")); + } + }; + isAsyncIterable2 = (value2) => value2 != null && typeof value2 === "object" && typeof value2[Symbol.asyncIterator] === "function"; + multipartFormRequestOptions2 = async (opts, fetch2, stripFilenames = true) => { + return { ...opts, body: await createForm2(opts.body, fetch2, stripFilenames) }; + }; + supportsFormDataMap2 = /* @__PURE__ */ new WeakMap(); + createForm2 = async (body, fetch2, stripFilenames = true) => { + if (!await supportsFormData2(fetch2)) { + throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class."); + } + const form = new FormData(); + await Promise.all(Object.entries(body || {}).map(([key, value2]) => addFormValue2(form, key, value2, stripFilenames))); + return form; + }; + addFormValue2 = async (form, key, value2, stripFilenames) => { + if (value2 === void 0) + return; + if (value2 == null) { + throw new TypeError(`Received null for "${key}"; to pass null in FormData, you must use the string 'null'`); + } + if (typeof value2 === "string" || typeof value2 === "number" || typeof value2 === "boolean") { + form.append(key, String(value2)); + } else if (value2 instanceof Response) { + let options = {}; + const contentType = value2.headers.get("Content-Type"); + if (contentType) { + options = { type: contentType }; + } + form.append(key, makeFile2([await value2.blob()], getName2(value2, stripFilenames), options)); + } else if (isAsyncIterable2(value2)) { + form.append(key, makeFile2([await new Response(ReadableStreamFrom2(value2)).blob()], getName2(value2, stripFilenames))); + } else if (value2 instanceof Blob) { + const isFile = typeof File !== "undefined" && value2 instanceof File; + const name = isFile ? value2.name : getName2(value2, stripFilenames); + form.append(key, makeFile2([value2], name, { type: value2.type })); + } else if (Array.isArray(value2)) { + await Promise.all(value2.map((entry2) => addFormValue2(form, key + "[]", entry2, stripFilenames))); + } else if (typeof value2.then === "function") { + throw new TypeError(`Received a Promise for "${key}"; await it first, e.g. \`await toFile(...)\``); + } else if (value2 instanceof ArrayBuffer || ArrayBuffer.isView(value2)) { + throw new TypeError(`Received ${value2.constructor.name} for "${key}"; to upload raw bytes, wrap them with \`await toFile(bytes, 'filename')\``); + } else if (typeof value2 === "object") { + await Promise.all(Object.entries(value2).map(([name, prop]) => addFormValue2(form, `${key}[${name}]`, prop, stripFilenames))); + } else { + throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value2} instead`); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/to-file.mjs +async function toFile2(value2, name, options) { + checkFileSupport2(); + value2 = await value2; + name || (name = value2 instanceof File ? value2.name : getName2(value2, true)); + if (isFileLike2(value2)) { + if (value2 instanceof File && name == null && options == null) { + return value2; + } + return makeFile2([await value2.arrayBuffer()], name ?? value2.name, { + type: value2.type, + lastModified: value2.lastModified, + ...options + }); + } + if (isResponseLike2(value2)) { + const blob = await value2.blob(); + name || (name = new URL(value2.url).pathname.split(/[\\/]/).pop()); + return makeFile2(await getBytes2(blob), name, options); + } + const parts = await getBytes2(value2); + if (!options?.type) { + const type = parts.find((part) => typeof part === "object" && "type" in part && part.type); + if (typeof type === "string") { + options = { ...options, type }; + } + } + return makeFile2(parts, name, options); +} +async function getBytes2(value2) { + let parts = []; + if (typeof value2 === "string" || ArrayBuffer.isView(value2) || // includes Uint8Array, Buffer, etc. + value2 instanceof ArrayBuffer) { + parts.push(value2); + } else if (isBlobLike2(value2)) { + parts.push(value2 instanceof Blob ? value2 : await value2.arrayBuffer()); + } else if (isAsyncIterable2(value2)) { + for await (const chunk of value2) { + parts.push(...await getBytes2(chunk)); + } + } else { + const constructor = value2?.constructor?.name; + throw new Error(`Unexpected data type: ${typeof value2}${constructor ? `; constructor: ${constructor}` : ""}${propsForError2(value2)}`); + } + return parts; +} +function propsForError2(value2) { + if (typeof value2 !== "object" || value2 === null) + return ""; + const props = Object.getOwnPropertyNames(value2); + return `; props: [${props.map((p) => `"${p}"`).join(", ")}]`; +} +var isBlobLike2, isFileLike2, isResponseLike2; +var init_to_file2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/to-file.mjs"() { + init_uploads4(); + init_uploads4(); + isBlobLike2 = (value2) => value2 != null && typeof value2 === "object" && typeof value2.size === "number" && typeof value2.type === "string" && typeof value2.text === "function" && typeof value2.slice === "function" && typeof value2.arrayBuffer === "function"; + isFileLike2 = (value2) => value2 != null && typeof value2 === "object" && typeof value2.name === "string" && typeof value2.lastModified === "number" && isBlobLike2(value2); + isResponseLike2 = (value2) => value2 != null && typeof value2 === "object" && typeof value2.url === "string" && typeof value2.blob === "function"; + } +}); + +// node_modules/@anthropic-ai/sdk/core/uploads.mjs +var init_uploads5 = __esm({ + "node_modules/@anthropic-ai/sdk/core/uploads.mjs"() { + init_to_file2(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/shared.mjs +var init_shared2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/shared.mjs"() { + } +}); + +// node_modules/@anthropic-ai/sdk/core/resource.mjs +var APIResource2; +var init_resource2 = __esm({ + "node_modules/@anthropic-ai/sdk/core/resource.mjs"() { + APIResource2 = class { + constructor(client) { + this._client = client; + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/headers.mjs +function* iterateHeaders2(headers) { + if (!headers) + return; + if (brand_privateNullableHeaders2 in headers) { + const { values, nulls } = headers; + yield* values.entries(); + for (const name of nulls) { + yield [name, null]; + } + return; + } + let shouldClear = false; + let iter; + if (headers instanceof Headers) { + iter = headers.entries(); + } else if (isReadonlyArray2(headers)) { + iter = headers; + } else { + shouldClear = true; + iter = Object.entries(headers ?? {}); + } + for (let row of iter) { + const name = row[0]; + if (typeof name !== "string") + throw new TypeError("expected header name to be a string"); + const values = isReadonlyArray2(row[1]) ? row[1] : [row[1]]; + let didClear = false; + for (const value2 of values) { + if (value2 === void 0) + continue; + if (shouldClear && !didClear) { + didClear = true; + yield [name, clearSentinel]; + } + yield [name, value2]; + } + } +} +var brand_privateNullableHeaders2, clearSentinel, APPEND_HEADERS, appendHeaderValue, buildHeaders2; +var init_headers3 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/headers.mjs"() { + init_values2(); + brand_privateNullableHeaders2 = /* @__PURE__ */ Symbol.for("brand.privateNullableHeaders"); + clearSentinel = /* @__PURE__ */ Symbol("clear"); + APPEND_HEADERS = /* @__PURE__ */ new Set(["x-stainless-helper"]); + appendHeaderValue = (existing, addition) => { + const tokens = existing ? existing.split(",").map((t) => t.trim()).filter(Boolean) : []; + for (const tok of addition.split(",").map((t) => t.trim())) { + if (tok && !tokens.includes(tok)) + tokens.push(tok); + } + return tokens.join(", "); + }; + buildHeaders2 = (newHeaders) => { + const targetHeaders = new Headers(); + const nullHeaders = /* @__PURE__ */ new Set(); + for (const headers of newHeaders) { + const seenHeaders = /* @__PURE__ */ new Set(); + for (const [name, value2] of iterateHeaders2(headers)) { + const lowerName = name.toLowerCase(); + if (APPEND_HEADERS.has(lowerName)) { + if (value2 === clearSentinel) + continue; + if (value2 === null) { + targetHeaders.delete(name); + nullHeaders.add(lowerName); + } else { + targetHeaders.set(name, appendHeaderValue(targetHeaders.get(name), value2)); + nullHeaders.delete(lowerName); + } + continue; + } + if (value2 === clearSentinel || !seenHeaders.has(lowerName)) { + targetHeaders.delete(name); + seenHeaders.add(lowerName); + if (value2 === clearSentinel) + continue; + } + if (value2 === null) { + targetHeaders.delete(name); + nullHeaders.add(lowerName); + } else { + targetHeaders.append(name, value2); + nullHeaders.delete(lowerName); + } + } + } + return { [brand_privateNullableHeaders2]: true, values: targetHeaders, nulls: nullHeaders }; + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/path.mjs +function encodeURIPath2(str2) { + return str2.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g, encodeURIComponent); +} +var EMPTY2, createPathTagFunction2, path3; +var init_path2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/path.mjs"() { + init_error3(); + EMPTY2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null)); + createPathTagFunction2 = (pathEncoder = encodeURIPath2) => function path5(statics, ...params) { + if (statics.length === 1) + return statics[0]; + let postPath = false; + const invalidSegments = []; + const path6 = statics.reduce((previousValue, currentValue, index) => { + if (/[?#]/.test(currentValue)) { + postPath = true; + } + const value2 = params[index]; + let encoded = (postPath ? encodeURIComponent : pathEncoder)("" + value2); + if (index !== params.length && (value2 == null || typeof value2 === "object" && // handle values from other realms + value2.toString === Object.getPrototypeOf(Object.getPrototypeOf(value2.hasOwnProperty ?? EMPTY2) ?? EMPTY2)?.toString)) { + encoded = value2 + ""; + invalidSegments.push({ + start: previousValue.length + currentValue.length, + length: encoded.length, + error: `Value of type ${Object.prototype.toString.call(value2).slice(8, -1)} is not a valid path parameter` + }); + } + return previousValue + currentValue + (index === params.length ? "" : encoded); + }, ""); + const pathOnly = path6.split(/[?#]/, 1)[0]; + const invalidSegmentPattern = /(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi; + let match; + while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) { + invalidSegments.push({ + start: match.index, + length: match[0].length, + error: `Value "${match[0]}" can't be safely passed as a path parameter` + }); + } + invalidSegments.sort((a, b) => a.start - b.start); + if (invalidSegments.length > 0) { + let lastEnd = 0; + const underline = invalidSegments.reduce((acc, segment) => { + const spaces = " ".repeat(segment.start - lastEnd); + const arrows = "^".repeat(segment.length); + lastEnd = segment.start + segment.length; + return acc + spaces + arrows; + }, ""); + throw new AnthropicError(`Path parameters result in path with invalid segments: +${invalidSegments.map((e) => e.error).join("\n")} +${path6} +${underline}`); + } + return path6; + }; + path3 = /* @__PURE__ */ createPathTagFunction2(encodeURIPath2); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/deployment-runs.mjs +var DeploymentRuns; +var init_deployment_runs = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/deployment-runs.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + DeploymentRuns = class extends APIResource2 { + /** + * Get Deployment Run + * + * @example + * ```ts + * const betaManagedAgentsDeploymentRun = + * await client.beta.deploymentRuns.retrieve( + * 'deployment_run_id', + * ); + * ``` + */ + retrieve(deploymentRunID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/deployment_runs/${deploymentRunID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List Deployment Runs + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsDeploymentRun of client.beta.deploymentRuns.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/deployment_runs?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/deployments.mjs +var Deployments; +var init_deployments = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/deployments.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Deployments = class extends APIResource2 { + /** + * Create Deployment + * + * @example + * ```ts + * const betaManagedAgentsDeployment = + * await client.beta.deployments.create({ + * agent: 'string', + * environment_id: 'x', + * initial_events: [ + * { + * content: [ + * { + * text: 'Where is my order #1234?', + * type: 'text', + * }, + * ], + * type: 'user.message', + * }, + * ], + * name: 'x', + * }); + * ``` + */ + create(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/deployments?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Get Deployment + * + * @example + * ```ts + * const betaManagedAgentsDeployment = + * await client.beta.deployments.retrieve( + * 'depl_011CZkZcDH3vPqd7xnEfwTai', + * ); + * ``` + */ + retrieve(deploymentID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/deployments/${deploymentID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Update Deployment + * + * @example + * ```ts + * const betaManagedAgentsDeployment = + * await client.beta.deployments.update( + * 'depl_011CZkZcDH3vPqd7xnEfwTai', + * ); + * ``` + */ + update(deploymentID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/deployments/${deploymentID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List Deployments + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsDeployment of client.beta.deployments.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/deployments?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Archive Deployment + * + * @example + * ```ts + * const betaManagedAgentsDeployment = + * await client.beta.deployments.archive( + * 'depl_011CZkZcDH3vPqd7xnEfwTai', + * ); + * ``` + */ + archive(deploymentID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/deployments/${deploymentID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Pause Deployment + * + * @example + * ```ts + * const betaManagedAgentsDeployment = + * await client.beta.deployments.pause( + * 'depl_011CZkZcDH3vPqd7xnEfwTai', + * ); + * ``` + */ + pause(deploymentID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/deployments/${deploymentID}/pause?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Run Deployment Now + * + * @example + * ```ts + * const betaManagedAgentsDeploymentRun = + * await client.beta.deployments.run( + * 'depl_011CZkZcDH3vPqd7xnEfwTai', + * ); + * ``` + */ + run(deploymentID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/deployments/${deploymentID}/run?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Unpause Deployment + * + * @example + * ```ts + * const betaManagedAgentsDeployment = + * await client.beta.deployments.unpause( + * 'depl_011CZkZcDH3vPqd7xnEfwTai', + * ); + * ``` + */ + unpause(deploymentID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/deployments/${deploymentID}/unpause?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/dreams.mjs +var Dreams; +var init_dreams = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/dreams.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Dreams = class extends APIResource2 { + /** + * Start an asynchronous job that uses past sessions to produce a reorganized + * version of a memory store and get back the dream to poll for the result. + * + * By default the dream writes its result to a new memory store and doesn't change + * the input memory store. The response has `status` set to `pending` and an empty + * `outputs` array. Poll the dream until `status` is `completed`, `failed`, or + * `canceled`. + * + * See the + * [Dreams guide](https://platform.claude.com/docs/en/managed-agents/dreams#create-a-dream) + * to learn more about creating dreams. + * + * @example + * ```ts + * const betaDream = await client.beta.dreams.create({ + * inputs: [{ memory_store_id: 'x', type: 'memory_store' }], + * model: 'string', + * }); + * ``` + */ + create(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/dreams?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "dreaming-2026-04-21"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Get a dream by ID to check its status, output memory store, and token usage. + * + * Archived dreams are returned too. + * + * See the + * [Dreams guide](https://platform.claude.com/docs/en/managed-agents/dreams#track-progress) + * for how to poll a dream and what each status means. + * + * @example + * ```ts + * const betaDream = await client.beta.dreams.retrieve( + * 'dream_id', + * ); + * ``` + */ + retrieve(dreamID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/dreams/${dreamID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "dreaming-2026-04-21"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List the dreams in the workspace, newest first. + * + * Archived dreams are left out unless `include_archived` is `true`. + * + * See the + * [Dreams guide](https://platform.claude.com/docs/en/managed-agents/dreams#list-dreams) + * for how to page through dreams. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaDream of client.beta.dreams.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/dreams?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "dreaming-2026-04-21"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Hide a `completed`, `failed`, or `canceled` dream from the default list of + * dreams. + * + * Archiving a `pending` or `running` dream returns a 400 error, so cancel it + * first. Archiving an archived dream returns it unchanged. An archived dream can + * still be fetched by ID. Archiving can't be undone. + * + * See the + * [Dreams guide](https://platform.claude.com/docs/en/managed-agents/dreams#archive-a-dream) + * to learn more about archiving dreams. + * + * @example + * ```ts + * const betaDream = await client.beta.dreams.archive( + * 'dream_id', + * ); + * ``` + */ + archive(dreamID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/dreams/${dreamID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "dreaming-2026-04-21"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Stop a `pending` or `running` dream. + * + * The response shows `status` as `canceled`, unless the dream reached `completed` + * or `failed` first. `usage` can keep changing after the response. Canceling a + * `canceled` dream returns it unchanged. Canceling a `completed` or `failed` dream + * returns a 400 error. + * + * See the + * [Dreams guide](https://platform.claude.com/docs/en/managed-agents/dreams#cancel-a-dream) + * to learn more about canceling dreams. + * + * @example + * ```ts + * const betaDream = await client.beta.dreams.cancel( + * 'dream_id', + * ); + * ``` + */ + cancel(dreamID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/dreams/${dreamID}/cancel?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "dreaming-2026-04-21"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/stainless-helper-header.mjs +function helperHeader(value2) { + return { [STAINLESS_HELPER_HEADER]: value2 }; +} +function wasCreatedByStainlessHelper(value2) { + return typeof value2 === "object" && value2 !== null && SDK_HELPER_SYMBOL in value2; +} +function collectStainlessHelpers(tools, messages) { + const helpers = /* @__PURE__ */ new Set(); + if (tools) { + for (const tool of tools) { + if (wasCreatedByStainlessHelper(tool)) { + helpers.add(tool[SDK_HELPER_SYMBOL]); + } + } + } + if (messages) { + for (const message of messages) { + if (wasCreatedByStainlessHelper(message)) { + helpers.add(message[SDK_HELPER_SYMBOL]); + } + const content = message.content; + if (Array.isArray(content)) { + for (const block of content) { + if (wasCreatedByStainlessHelper(block)) { + helpers.add(block[SDK_HELPER_SYMBOL]); + } + const definition = block?.tool?.definition; + if (wasCreatedByStainlessHelper(definition)) { + helpers.add(definition[SDK_HELPER_SYMBOL]); + } + } + } + } + } + return Array.from(helpers); +} +function stainlessHelperHeader(tools, messages) { + const helpers = collectStainlessHelpers(tools, messages); + if (helpers.length === 0) + return {}; + return { [STAINLESS_HELPER_HEADER]: helpers.join(", ") }; +} +function stainlessHelperHeaderFromFile(file2) { + if (wasCreatedByStainlessHelper(file2)) { + return { [STAINLESS_HELPER_HEADER]: file2[SDK_HELPER_SYMBOL] }; + } + return {}; +} +var STAINLESS_HELPER_HEADER, STAINLESS_HELPER_METHOD_HEADER, SDK_HELPER_SYMBOL; +var init_stainless_helper_header = __esm({ + "node_modules/@anthropic-ai/sdk/internal/stainless-helper-header.mjs"() { + STAINLESS_HELPER_HEADER = "x-stainless-helper"; + STAINLESS_HELPER_METHOD_HEADER = "x-stainless-helper-method"; + SDK_HELPER_SYMBOL = /* @__PURE__ */ Symbol("anthropic.sdk.stainlessHelper"); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/files.mjs +var Files5; +var init_files5 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/files.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_stainless_helper_header(); + init_uploads4(); + init_path2(); + Files5 = class extends APIResource2 { + /** + * List Files + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaFileMetadata of client.beta.files.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/files?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Delete File + * + * @example + * ```ts + * const betaDeletedFile = await client.beta.files.delete( + * 'file_id', + * ); + * ``` + */ + delete(fileID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.delete(path3`/v1/files/${fileID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Download File + * + * @example + * ```ts + * const response = await client.beta.files.download( + * 'file_id', + * ); + * + * const content = await response.blob(); + * console.log(content); + * ``` + */ + download(fileID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/files/${fileID}/content?beta=true`, { + ...options, + headers: buildHeaders2([ + { + Accept: "application/binary", + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]), + __binaryResponse: true + }); + } + /** + * Get File Metadata + * + * @example + * ```ts + * const betaFileMetadata = + * await client.beta.files.retrieveMetadata('file_id'); + * ``` + */ + retrieveMetadata(fileID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/files/${fileID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Upload File + * + * @example + * ```ts + * const betaFileMetadata = await client.beta.files.upload({ + * file: fs.createReadStream('path/to/file'), + * }); + * ``` + */ + upload(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/files?beta=true", multipartFormRequestOptions2({ + body, + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + stainlessHelperHeaderFromFile(body.file), + options?.headers + ]) + }, this._client)); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/models.mjs +var Models2; +var init_models3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/models.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Models2 = class extends APIResource2 { + /** + * Get a specific model. + * + * The Models API response can be used to determine information about a specific + * model or resolve a model alias to a model ID. + * + * @example + * ```ts + * const betaModelInfo = await client.beta.models.retrieve( + * 'model_id', + * ); + * ``` + */ + retrieve(modelID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/models/${modelID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List available models. + * + * The Models API response can be used to determine which models are available for + * use in the API. More recently released models are listed first. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaModelInfo of client.beta.models.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/models?beta=true", Page2, { + query, + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/user-profiles.mjs +var UserProfiles; +var init_user_profiles = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/user-profiles.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + UserProfiles = class extends APIResource2 { + /** + * Create User Profile + * + * @example + * ```ts + * const betaUserProfile = + * await client.beta.userProfiles.create(); + * ``` + */ + create(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/user_profiles?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "user-profiles-2026-08-18"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Get User Profile + * + * @example + * ```ts + * const betaUserProfile = + * await client.beta.userProfiles.retrieve( + * 'uprof_011CZkZCu8hGbp5mYRQgUmz9', + * ); + * ``` + */ + retrieve(userProfileID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/user_profiles/${userProfileID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "user-profiles-2026-08-18"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Update User Profile + * + * @example + * ```ts + * const betaUserProfile = + * await client.beta.userProfiles.update( + * 'uprof_011CZkZCu8hGbp5mYRQgUmz9', + * ); + * ``` + */ + update(userProfileID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/user_profiles/${userProfileID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "user-profiles-2026-08-18"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List User Profiles + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaUserProfile of client.beta.userProfiles.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/user_profiles?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "user-profiles-2026-08-18"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Create Enrollment URL + * + * @example + * ```ts + * const betaUserProfileEnrollmentURL = + * await client.beta.userProfiles.createEnrollmentURL( + * 'uprof_011CZkZCu8hGbp5mYRQgUmz9', + * ); + * ``` + */ + createEnrollmentURL(userProfileID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/user_profiles/${userProfileID}/enrollment_url?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "user-profiles-2026-08-18"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@stablelib/base64/lib/base64.js +var require_base64 = __commonJS({ + "node_modules/@stablelib/base64/lib/base64.js"(exports) { + "use strict"; + var __extends = exports && exports.__extends || /* @__PURE__ */ (function() { + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { + d2.__proto__ = b2; + } || function(d2, b2) { + for (var p in b2) if (b2.hasOwnProperty(p)) d2[p] = b2[p]; + }; + return extendStatics(d, b); + }; + return function(d, b) { + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(exports, "__esModule", { value: true }); + var INVALID_BYTE = 256; + var Coder = ( + /** @class */ + (function() { + function Coder2(_paddingCharacter) { + if (_paddingCharacter === void 0) { + _paddingCharacter = "="; + } + this._paddingCharacter = _paddingCharacter; + } + Coder2.prototype.encodedLength = function(length) { + if (!this._paddingCharacter) { + return (length * 8 + 5) / 6 | 0; + } + return (length + 2) / 3 * 4 | 0; + }; + Coder2.prototype.encode = function(data) { + var out = ""; + var i = 0; + for (; i < data.length - 2; i += 3) { + var c = data[i] << 16 | data[i + 1] << 8 | data[i + 2]; + out += this._encodeByte(c >>> 3 * 6 & 63); + out += this._encodeByte(c >>> 2 * 6 & 63); + out += this._encodeByte(c >>> 1 * 6 & 63); + out += this._encodeByte(c >>> 0 * 6 & 63); + } + var left = data.length - i; + if (left > 0) { + var c = data[i] << 16 | (left === 2 ? data[i + 1] << 8 : 0); + out += this._encodeByte(c >>> 3 * 6 & 63); + out += this._encodeByte(c >>> 2 * 6 & 63); + if (left === 2) { + out += this._encodeByte(c >>> 1 * 6 & 63); + } else { + out += this._paddingCharacter || ""; + } + out += this._paddingCharacter || ""; + } + return out; + }; + Coder2.prototype.maxDecodedLength = function(length) { + if (!this._paddingCharacter) { + return (length * 6 + 7) / 8 | 0; + } + return length / 4 * 3 | 0; + }; + Coder2.prototype.decodedLength = function(s) { + return this.maxDecodedLength(s.length - this._getPaddingLength(s)); + }; + Coder2.prototype.decode = function(s) { + if (s.length === 0) { + return new Uint8Array(0); + } + var paddingLength = this._getPaddingLength(s); + var length = s.length - paddingLength; + var out = new Uint8Array(this.maxDecodedLength(length)); + var op2 = 0; + var i = 0; + var haveBad = 0; + var v0 = 0, v1 = 0, v2 = 0, v3 = 0; + for (; i < length - 4; i += 4) { + v0 = this._decodeChar(s.charCodeAt(i + 0)); + v1 = this._decodeChar(s.charCodeAt(i + 1)); + v2 = this._decodeChar(s.charCodeAt(i + 2)); + v3 = this._decodeChar(s.charCodeAt(i + 3)); + out[op2++] = v0 << 2 | v1 >>> 4; + out[op2++] = v1 << 4 | v2 >>> 2; + out[op2++] = v2 << 6 | v3; + haveBad |= v0 & INVALID_BYTE; + haveBad |= v1 & INVALID_BYTE; + haveBad |= v2 & INVALID_BYTE; + haveBad |= v3 & INVALID_BYTE; + } + if (i < length - 1) { + v0 = this._decodeChar(s.charCodeAt(i)); + v1 = this._decodeChar(s.charCodeAt(i + 1)); + out[op2++] = v0 << 2 | v1 >>> 4; + haveBad |= v0 & INVALID_BYTE; + haveBad |= v1 & INVALID_BYTE; + } + if (i < length - 2) { + v2 = this._decodeChar(s.charCodeAt(i + 2)); + out[op2++] = v1 << 4 | v2 >>> 2; + haveBad |= v2 & INVALID_BYTE; + } + if (i < length - 3) { + v3 = this._decodeChar(s.charCodeAt(i + 3)); + out[op2++] = v2 << 6 | v3; + haveBad |= v3 & INVALID_BYTE; + } + if (haveBad !== 0) { + throw new Error("Base64Coder: incorrect characters for decoding"); + } + return out; + }; + Coder2.prototype._encodeByte = function(b) { + var result = b; + result += 65; + result += 25 - b >>> 8 & 0 - 65 - 26 + 97; + result += 51 - b >>> 8 & 26 - 97 - 52 + 48; + result += 61 - b >>> 8 & 52 - 48 - 62 + 43; + result += 62 - b >>> 8 & 62 - 43 - 63 + 47; + return String.fromCharCode(result); + }; + Coder2.prototype._decodeChar = function(c) { + var result = INVALID_BYTE; + result += (42 - c & c - 44) >>> 8 & -INVALID_BYTE + c - 43 + 62; + result += (46 - c & c - 48) >>> 8 & -INVALID_BYTE + c - 47 + 63; + result += (47 - c & c - 58) >>> 8 & -INVALID_BYTE + c - 48 + 52; + result += (64 - c & c - 91) >>> 8 & -INVALID_BYTE + c - 65 + 0; + result += (96 - c & c - 123) >>> 8 & -INVALID_BYTE + c - 97 + 26; + return result; + }; + Coder2.prototype._getPaddingLength = function(s) { + var paddingLength = 0; + if (this._paddingCharacter) { + for (var i = s.length - 1; i >= 0; i--) { + if (s[i] !== this._paddingCharacter) { + break; + } + paddingLength++; + } + if (s.length < 4 || paddingLength > 2) { + throw new Error("Base64Coder: incorrect padding"); + } + } + return paddingLength; + }; + return Coder2; + })() + ); + exports.Coder = Coder; + var stdCoder = new Coder(); + function encode3(data) { + return stdCoder.encode(data); + } + exports.encode = encode3; + function decode(s) { + return stdCoder.decode(s); + } + exports.decode = decode; + var URLSafeCoder = ( + /** @class */ + (function(_super) { + __extends(URLSafeCoder2, _super); + function URLSafeCoder2() { + return _super !== null && _super.apply(this, arguments) || this; + } + URLSafeCoder2.prototype._encodeByte = function(b) { + var result = b; + result += 65; + result += 25 - b >>> 8 & 0 - 65 - 26 + 97; + result += 51 - b >>> 8 & 26 - 97 - 52 + 48; + result += 61 - b >>> 8 & 52 - 48 - 62 + 45; + result += 62 - b >>> 8 & 62 - 45 - 63 + 95; + return String.fromCharCode(result); + }; + URLSafeCoder2.prototype._decodeChar = function(c) { + var result = INVALID_BYTE; + result += (44 - c & c - 46) >>> 8 & -INVALID_BYTE + c - 45 + 62; + result += (94 - c & c - 96) >>> 8 & -INVALID_BYTE + c - 95 + 63; + result += (47 - c & c - 58) >>> 8 & -INVALID_BYTE + c - 48 + 52; + result += (64 - c & c - 91) >>> 8 & -INVALID_BYTE + c - 65 + 0; + result += (96 - c & c - 123) >>> 8 & -INVALID_BYTE + c - 97 + 26; + return result; + }; + return URLSafeCoder2; + })(Coder) + ); + exports.URLSafeCoder = URLSafeCoder; + var urlSafeCoder = new URLSafeCoder(); + function encodeURLSafe(data) { + return urlSafeCoder.encode(data); + } + exports.encodeURLSafe = encodeURLSafe; + function decodeURLSafe(s) { + return urlSafeCoder.decode(s); + } + exports.decodeURLSafe = decodeURLSafe; + exports.encodedLength = function(length) { + return stdCoder.encodedLength(length); + }; + exports.maxDecodedLength = function(length) { + return stdCoder.maxDecodedLength(length); + }; + exports.decodedLength = function(s) { + return stdCoder.decodedLength(s); + }; + } +}); + +// node_modules/fast-sha256/sha256.js +var require_sha256 = __commonJS({ + "node_modules/fast-sha256/sha256.js"(exports, module) { + (function(root, factory) { + var exports2 = {}; + factory(exports2); + var sha256 = exports2["default"]; + for (var k in exports2) { + sha256[k] = exports2[k]; + } + if (typeof module === "object" && typeof module.exports === "object") { + module.exports = sha256; + } else if (typeof define === "function" && define.amd) { + define(function() { + return sha256; + }); + } else { + root.sha256 = sha256; + } + })(exports, function(exports2) { + "use strict"; + exports2.__esModule = true; + exports2.digestLength = 32; + exports2.blockSize = 64; + var K = new Uint32Array([ + 1116352408, + 1899447441, + 3049323471, + 3921009573, + 961987163, + 1508970993, + 2453635748, + 2870763221, + 3624381080, + 310598401, + 607225278, + 1426881987, + 1925078388, + 2162078206, + 2614888103, + 3248222580, + 3835390401, + 4022224774, + 264347078, + 604807628, + 770255983, + 1249150122, + 1555081692, + 1996064986, + 2554220882, + 2821834349, + 2952996808, + 3210313671, + 3336571891, + 3584528711, + 113926993, + 338241895, + 666307205, + 773529912, + 1294757372, + 1396182291, + 1695183700, + 1986661051, + 2177026350, + 2456956037, + 2730485921, + 2820302411, + 3259730800, + 3345764771, + 3516065817, + 3600352804, + 4094571909, + 275423344, + 430227734, + 506948616, + 659060556, + 883997877, + 958139571, + 1322822218, + 1537002063, + 1747873779, + 1955562222, + 2024104815, + 2227730452, + 2361852424, + 2428436474, + 2756734187, + 3204031479, + 3329325298 + ]); + function hashBlocks(w, v, p, pos, len) { + var a, b, c, d, e, f, g, h, u, i, j, t1, t2; + while (len >= 64) { + a = v[0]; + b = v[1]; + c = v[2]; + d = v[3]; + e = v[4]; + f = v[5]; + g = v[6]; + h = v[7]; + for (i = 0; i < 16; i++) { + j = pos + i * 4; + w[i] = (p[j] & 255) << 24 | (p[j + 1] & 255) << 16 | (p[j + 2] & 255) << 8 | p[j + 3] & 255; + } + for (i = 16; i < 64; i++) { + u = w[i - 2]; + t1 = (u >>> 17 | u << 32 - 17) ^ (u >>> 19 | u << 32 - 19) ^ u >>> 10; + u = w[i - 15]; + t2 = (u >>> 7 | u << 32 - 7) ^ (u >>> 18 | u << 32 - 18) ^ u >>> 3; + w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0); + } + for (i = 0; i < 64; i++) { + t1 = (((e >>> 6 | e << 32 - 6) ^ (e >>> 11 | e << 32 - 11) ^ (e >>> 25 | e << 32 - 25)) + (e & f ^ ~e & g) | 0) + (h + (K[i] + w[i] | 0) | 0) | 0; + t2 = ((a >>> 2 | a << 32 - 2) ^ (a >>> 13 | a << 32 - 13) ^ (a >>> 22 | a << 32 - 22)) + (a & b ^ a & c ^ b & c) | 0; + h = g; + g = f; + f = e; + e = d + t1 | 0; + d = c; + c = b; + b = a; + a = t1 + t2 | 0; + } + v[0] += a; + v[1] += b; + v[2] += c; + v[3] += d; + v[4] += e; + v[5] += f; + v[6] += g; + v[7] += h; + pos += 64; + len -= 64; + } + return pos; + } + var Hash = ( + /** @class */ + (function() { + function Hash2() { + this.digestLength = exports2.digestLength; + this.blockSize = exports2.blockSize; + this.state = new Int32Array(8); + this.temp = new Int32Array(64); + this.buffer = new Uint8Array(128); + this.bufferLength = 0; + this.bytesHashed = 0; + this.finished = false; + this.reset(); + } + Hash2.prototype.reset = function() { + this.state[0] = 1779033703; + this.state[1] = 3144134277; + this.state[2] = 1013904242; + this.state[3] = 2773480762; + this.state[4] = 1359893119; + this.state[5] = 2600822924; + this.state[6] = 528734635; + this.state[7] = 1541459225; + this.bufferLength = 0; + this.bytesHashed = 0; + this.finished = false; + return this; + }; + Hash2.prototype.clean = function() { + for (var i = 0; i < this.buffer.length; i++) { + this.buffer[i] = 0; + } + for (var i = 0; i < this.temp.length; i++) { + this.temp[i] = 0; + } + this.reset(); + }; + Hash2.prototype.update = function(data, dataLength) { + if (dataLength === void 0) { + dataLength = data.length; + } + if (this.finished) { + throw new Error("SHA256: can't update because hash was finished."); + } + var dataPos = 0; + this.bytesHashed += dataLength; + if (this.bufferLength > 0) { + while (this.bufferLength < 64 && dataLength > 0) { + this.buffer[this.bufferLength++] = data[dataPos++]; + dataLength--; + } + if (this.bufferLength === 64) { + hashBlocks(this.temp, this.state, this.buffer, 0, 64); + this.bufferLength = 0; + } + } + if (dataLength >= 64) { + dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength); + dataLength %= 64; + } + while (dataLength > 0) { + this.buffer[this.bufferLength++] = data[dataPos++]; + dataLength--; + } + return this; + }; + Hash2.prototype.finish = function(out) { + if (!this.finished) { + var bytesHashed = this.bytesHashed; + var left = this.bufferLength; + var bitLenHi = bytesHashed / 536870912 | 0; + var bitLenLo = bytesHashed << 3; + var padLength = bytesHashed % 64 < 56 ? 64 : 128; + this.buffer[left] = 128; + for (var i = left + 1; i < padLength - 8; i++) { + this.buffer[i] = 0; + } + this.buffer[padLength - 8] = bitLenHi >>> 24 & 255; + this.buffer[padLength - 7] = bitLenHi >>> 16 & 255; + this.buffer[padLength - 6] = bitLenHi >>> 8 & 255; + this.buffer[padLength - 5] = bitLenHi >>> 0 & 255; + this.buffer[padLength - 4] = bitLenLo >>> 24 & 255; + this.buffer[padLength - 3] = bitLenLo >>> 16 & 255; + this.buffer[padLength - 2] = bitLenLo >>> 8 & 255; + this.buffer[padLength - 1] = bitLenLo >>> 0 & 255; + hashBlocks(this.temp, this.state, this.buffer, 0, padLength); + this.finished = true; + } + for (var i = 0; i < 8; i++) { + out[i * 4 + 0] = this.state[i] >>> 24 & 255; + out[i * 4 + 1] = this.state[i] >>> 16 & 255; + out[i * 4 + 2] = this.state[i] >>> 8 & 255; + out[i * 4 + 3] = this.state[i] >>> 0 & 255; + } + return this; + }; + Hash2.prototype.digest = function() { + var out = new Uint8Array(this.digestLength); + this.finish(out); + return out; + }; + Hash2.prototype._saveState = function(out) { + for (var i = 0; i < this.state.length; i++) { + out[i] = this.state[i]; + } + }; + Hash2.prototype._restoreState = function(from, bytesHashed) { + for (var i = 0; i < this.state.length; i++) { + this.state[i] = from[i]; + } + this.bytesHashed = bytesHashed; + this.finished = false; + this.bufferLength = 0; + }; + return Hash2; + })() + ); + exports2.Hash = Hash; + var HMAC = ( + /** @class */ + (function() { + function HMAC2(key) { + this.inner = new Hash(); + this.outer = new Hash(); + this.blockSize = this.inner.blockSize; + this.digestLength = this.inner.digestLength; + var pad = new Uint8Array(this.blockSize); + if (key.length > this.blockSize) { + new Hash().update(key).finish(pad).clean(); + } else { + for (var i = 0; i < key.length; i++) { + pad[i] = key[i]; + } + } + for (var i = 0; i < pad.length; i++) { + pad[i] ^= 54; + } + this.inner.update(pad); + for (var i = 0; i < pad.length; i++) { + pad[i] ^= 54 ^ 92; + } + this.outer.update(pad); + this.istate = new Uint32Array(8); + this.ostate = new Uint32Array(8); + this.inner._saveState(this.istate); + this.outer._saveState(this.ostate); + for (var i = 0; i < pad.length; i++) { + pad[i] = 0; + } + } + HMAC2.prototype.reset = function() { + this.inner._restoreState(this.istate, this.inner.blockSize); + this.outer._restoreState(this.ostate, this.outer.blockSize); + return this; + }; + HMAC2.prototype.clean = function() { + for (var i = 0; i < this.istate.length; i++) { + this.ostate[i] = this.istate[i] = 0; + } + this.inner.clean(); + this.outer.clean(); + }; + HMAC2.prototype.update = function(data) { + this.inner.update(data); + return this; + }; + HMAC2.prototype.finish = function(out) { + if (this.outer.finished) { + this.outer.finish(out); + } else { + this.inner.finish(out); + this.outer.update(out, this.digestLength).finish(out); + } + return this; + }; + HMAC2.prototype.digest = function() { + var out = new Uint8Array(this.digestLength); + this.finish(out); + return out; + }; + return HMAC2; + })() + ); + exports2.HMAC = HMAC; + function hash(data) { + var h = new Hash().update(data); + var digest = h.digest(); + h.clean(); + return digest; + } + exports2.hash = hash; + exports2["default"] = hash; + function hmac(key, data) { + var h = new HMAC(key).update(data); + var digest = h.digest(); + h.clean(); + return digest; + } + exports2.hmac = hmac; + function fillBuffer(buffer, hmac2, info, counter) { + var num2 = counter[0]; + if (num2 === 0) { + throw new Error("hkdf: cannot expand more"); + } + hmac2.reset(); + if (num2 > 1) { + hmac2.update(buffer); + } + if (info) { + hmac2.update(info); + } + hmac2.update(counter); + hmac2.finish(buffer); + counter[0]++; + } + var hkdfSalt = new Uint8Array(exports2.digestLength); + function hkdf(key, salt, info, length) { + if (salt === void 0) { + salt = hkdfSalt; + } + if (length === void 0) { + length = 32; + } + var counter = new Uint8Array([1]); + var okm = hmac(salt, key); + var hmac_ = new HMAC(okm); + var buffer = new Uint8Array(hmac_.digestLength); + var bufpos = buffer.length; + var out = new Uint8Array(length); + for (var i = 0; i < length; i++) { + if (bufpos === buffer.length) { + fillBuffer(buffer, hmac_, info, counter); + bufpos = 0; + } + out[i] = buffer[bufpos++]; + } + hmac_.clean(); + buffer.fill(0); + counter.fill(0); + return out; + } + exports2.hkdf = hkdf; + function pbkdf2(password, salt, iterations, dkLen) { + var prf = new HMAC(password); + var len = prf.digestLength; + var ctr = new Uint8Array(4); + var t = new Uint8Array(len); + var u = new Uint8Array(len); + var dk = new Uint8Array(dkLen); + for (var i = 0; i * len < dkLen; i++) { + var c = i + 1; + ctr[0] = c >>> 24 & 255; + ctr[1] = c >>> 16 & 255; + ctr[2] = c >>> 8 & 255; + ctr[3] = c >>> 0 & 255; + prf.reset(); + prf.update(salt); + prf.update(ctr); + prf.finish(u); + for (var j = 0; j < len; j++) { + t[j] = u[j]; + } + for (var j = 2; j <= iterations; j++) { + prf.reset(); + prf.update(u).finish(u); + for (var k = 0; k < len; k++) { + t[k] ^= u[k]; + } + } + for (var j = 0; j < len && i * len + j < dkLen; j++) { + dk[i * len + j] = t[j]; + } + } + for (var i = 0; i < len; i++) { + t[i] = u[i] = 0; + } + for (var i = 0; i < 4; i++) { + ctr[i] = 0; + } + prf.clean(); + return dk; + } + exports2.pbkdf2 = pbkdf2; + }); + } +}); + +// node_modules/standardwebhooks/dist/timing_safe_equal.js +var require_timing_safe_equal = __commonJS({ + "node_modules/standardwebhooks/dist/timing_safe_equal.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.timingSafeEqual = timingSafeEqual; + function assert(expr, msg = "") { + if (!expr) { + throw new Error(msg); + } + } + function timingSafeEqual(a, b) { + if (a.byteLength !== b.byteLength) { + return false; + } + if (!(a instanceof DataView)) { + a = new DataView(ArrayBuffer.isView(a) ? a.buffer : a); + } + if (!(b instanceof DataView)) { + b = new DataView(ArrayBuffer.isView(b) ? b.buffer : b); + } + assert(a instanceof DataView); + assert(b instanceof DataView); + const length = a.byteLength; + let out = 0; + let i = -1; + while (++i < length) { + out |= a.getUint8(i) ^ b.getUint8(i); + } + return out === 0; + } + } +}); + +// node_modules/standardwebhooks/dist/index.js +var require_dist2 = __commonJS({ + "node_modules/standardwebhooks/dist/index.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.Webhook = exports.WebhookVerificationError = void 0; + var base64 = require_base64(); + var sha256 = require_sha256(); + var timing_safe_equal_1 = require_timing_safe_equal(); + var WEBHOOK_TOLERANCE_IN_SECONDS = 5 * 60; + var ExtendableError = class _ExtendableError extends Error { + constructor(message) { + super(message); + Object.setPrototypeOf(this, _ExtendableError.prototype); + this.name = "ExtendableError"; + this.stack = new Error(message).stack; + } + }; + var WebhookVerificationError = class _WebhookVerificationError extends ExtendableError { + constructor(message) { + super(message); + Object.setPrototypeOf(this, _WebhookVerificationError.prototype); + this.name = "WebhookVerificationError"; + } + }; + exports.WebhookVerificationError = WebhookVerificationError; + var Webhook2 = class _Webhook { + constructor(secret, options) { + if ((options === null || options === void 0 ? void 0 : options.format) === "raw") { + if (secret instanceof Uint8Array) { + this.key = secret; + } else { + this.key = Uint8Array.from(secret, (c) => c.charCodeAt(0)); + } + } else { + if (typeof secret !== "string") { + throw new Error("Expected secret to be of type string"); + } + if (secret.startsWith(_Webhook.prefix)) { + secret = secret.substring(_Webhook.prefix.length); + } + this.key = base64.decode(secret); + } + if (this.key.length === 0) { + throw new Error("Secret can't be empty."); + } + } + verify(payload, headers, options) { + var _a6; + const jsonParse = (_a6 = options === null || options === void 0 ? void 0 : options.jsonParse) !== null && _a6 !== void 0 ? _a6 : true; + const normalizedHeaders = {}; + for (const key of Object.keys(headers)) { + normalizedHeaders[key.toLowerCase()] = headers[key]; + } + const msgId = normalizedHeaders["webhook-id"]; + const msgSignature = normalizedHeaders["webhook-signature"]; + const msgTimestamp = normalizedHeaders["webhook-timestamp"]; + if (!msgSignature || !msgId || !msgTimestamp) { + throw new WebhookVerificationError("Missing required headers"); + } + const timestamp2 = this.verifyTimestamp(msgTimestamp); + const computedSignature = this.sign(msgId, timestamp2, payload); + const expectedSignature = computedSignature.split(",")[1]; + const passedSignatures = msgSignature.split(" "); + const encoder6 = new globalThis.TextEncoder(); + for (const versionedSignature of passedSignatures) { + const [version, signature] = versionedSignature.split(","); + if (version !== "v1") { + continue; + } + if ((0, timing_safe_equal_1.timingSafeEqual)(encoder6.encode(signature), encoder6.encode(expectedSignature))) { + const payloadString = payload.toString(); + if (payloadString === "") { + return void 0; + } + if (jsonParse) { + return JSON.parse(payloadString); + } else { + return void 0; + } + } + } + throw new WebhookVerificationError("No matching signature found"); + } + sign(msgId, timestamp2, payload) { + if (typeof payload === "string") { + } else if (payload.constructor.name === "Buffer") { + payload = payload.toString(); + } else { + throw new Error("Expected payload to be of type string or Buffer."); + } + const encoder6 = new TextEncoder(); + const timestampNumber = Math.floor(timestamp2.getTime() / 1e3); + const toSign = encoder6.encode(`${msgId}.${timestampNumber}.${payload}`); + const expectedSignature = base64.encode(sha256.hmac(this.key, toSign)); + return `v1,${expectedSignature}`; + } + verifyTimestamp(timestampHeader) { + const now = Math.floor(Date.now() / 1e3); + const timestamp2 = parseInt(timestampHeader, 10); + if (Number.isNaN(timestamp2)) { + throw new WebhookVerificationError("Invalid Signature Headers"); + } + if (now - timestamp2 > WEBHOOK_TOLERANCE_IN_SECONDS) { + throw new WebhookVerificationError("Message timestamp too old"); + } + if (timestamp2 > now + WEBHOOK_TOLERANCE_IN_SECONDS) { + throw new WebhookVerificationError("Message timestamp too new"); + } + return new Date(timestamp2 * 1e3); + } + }; + exports.Webhook = Webhook2; + Webhook2.prefix = "whsec_"; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/webhooks.mjs +var import_standardwebhooks, Webhooks2; +var init_webhooks2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/webhooks.mjs"() { + init_resource2(); + import_standardwebhooks = __toESM(require_dist2(), 1); + Webhooks2 = class extends APIResource2 { + /** + * Parses a webhook payload into an event without verifying its signature. Prefer + * `unwrap()` unless you have already verified the signature yourself. + */ + parseUnverified(body) { + return JSON.parse(body); + } + /** + * Verifies the webhook signature from the `webhook-id`, `webhook-timestamp` and + * `webhook-signature` headers using your webhook signing key, then parses the + * payload into an event. Fails if the signature is missing or invalid. + */ + unwrap(body, options) { + const headers = options?.headers; + if (headers == null) + throw new Error("Webhook headers are required in order to verify the signature"); + const keyStr = options.key === void 0 ? this._client.webhookKey : options.key; + if (!keyStr) + throw new Error("Webhook key must not be null or empty in order to unwrap"); + const wh = new import_standardwebhooks.Webhook(keyStr); + wh.verify(body, headers); + return JSON.parse(body); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/agents/versions.mjs +var Versions2; +var init_versions2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/agents/versions.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Versions2 = class extends APIResource2 { + /** + * List Agent Versions + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsAgent of client.beta.agents.versions.list( + * 'agent_011CZkYpogX7uDKUyvBTophP', + * )) { + * // ... + * } + * ``` + */ + list(agentID, params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/agents/${agentID}/versions?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/agents/agents.mjs +var Agents2; +var init_agents2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/agents/agents.mjs"() { + init_resource2(); + init_versions2(); + init_versions2(); + init_pagination2(); + init_headers3(); + init_path2(); + Agents2 = /* @__PURE__ */ (() => { + class Agents3 extends APIResource2 { + constructor() { + super(...arguments); + this.versions = new Versions2(this._client); + } + /** + * Create Agent + * + * @example + * ```ts + * const betaManagedAgentsAgent = + * await client.beta.agents.create({ + * model: 'claude-opus-5', + * name: 'My First Agent', + * }); + * ``` + */ + create(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/agents?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Get Agent + * + * @example + * ```ts + * const betaManagedAgentsAgent = + * await client.beta.agents.retrieve( + * 'agent_011CZkYpogX7uDKUyvBTophP', + * ); + * ``` + */ + retrieve(agentID, params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.get(path3`/v1/agents/${agentID}?beta=true`, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Update Agent + * + * @example + * ```ts + * const betaManagedAgentsAgent = + * await client.beta.agents.update( + * 'agent_011CZkYpogX7uDKUyvBTophP', + * { description: 'updated' }, + * ); + * ``` + */ + update(agentID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/agents/${agentID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List Agents + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsAgent of client.beta.agents.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/agents?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Archive Agent + * + * @example + * ```ts + * const betaManagedAgentsAgent = + * await client.beta.agents.archive( + * 'agent_011CZkYpogX7uDKUyvBTophP', + * ); + * ``` + */ + archive(agentID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/agents/${agentID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + } + Agents3.Versions = Versions2; + return Agents3; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/abort.mjs +function linkAbort(external, controller) { + if (!external) + return () => { + }; + if (external.aborted) { + controller.abort(); + return () => { + }; + } + const onAbort = () => controller.abort(); + external.addEventListener("abort", onAbort); + return () => external.removeEventListener("abort", onAbort); +} +var init_abort3 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/abort.mjs"() { + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/backoff.mjs +function isStatus(e, code) { + return e instanceof APIError2 && e.status === code; +} +function is4xx(e) { + return e instanceof APIError2 && typeof e.status === "number" && e.status >= 400 && e.status < 500; +} +function isFatal4xx(e) { + return is4xx(e) && !isStatus(e, 408) && !isStatus(e, 409) && !isStatus(e, 429); +} +function backoff(attempt, baseMs, capMs) { + return Math.min(baseMs * 2 ** attempt, capMs); +} +function jitter(lowMs, highMs) { + return lowMs + Math.random() * (highMs - lowMs); +} +function applyJitter(ms) { + return ms * (1 - Math.random() * 0.25); +} +var init_backoff = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/backoff.mjs"() { + init_error3(); + } +}); + +// node_modules/@anthropic-ai/sdk/lib/helper-client.mjs +function copyClientForHelper(client, { authToken, helper }) { + if (!authToken) { + throw new AnthropicError(`copyClientForHelper: expected a non-empty authToken but received ${JSON.stringify(authToken)}`); + } + const internal = client; + const parentDefaults = internal._options.defaultHeaders; + const parentAuthExtraHeaders = internal._authState?.extraHeaders; + const inheritedAuthExtraHeaders = parentAuthExtraHeaders ? Object.fromEntries(Object.entries(parentAuthExtraHeaders).filter(([name]) => { + const lower = name.toLowerCase(); + return lower !== "authorization" && lower !== "x-api-key"; + })) : void 0; + const defaultHeaders = buildHeaders2([ + inheritedAuthExtraHeaders, + parentDefaults, + { [STAINLESS_HELPER_HEADER]: helper } + ]); + return client.withOptions({ + apiKey: null, + authToken, + baseURL: client.baseURL, + credentials: void 0, + defaultHeaders + }); +} +var init_helper_client = __esm({ + "node_modules/@anthropic-ai/sdk/lib/helper-client.mjs"() { + init_error3(); + init_headers3(); + init_stainless_helper_header(); + } +}); + +// node_modules/@anthropic-ai/sdk/lib/environments/poller.mjs +function backoff2(attempt) { + return backoff(attempt, POLL_BACKOFF_BASE_MS, POLL_BACKOFF_CAP_MS); +} +function defaultWorkerId() { + const env = globalThis.process?.env; + const host = env?.["HOSTNAME"]; + return host ? `${host}-${uuid42()}` : uuid42(); +} +var _WorkPoller_runnerClient, _WorkPoller_consumed, _WorkPoller_controller, _WorkPoller_detachExternal, _WorkPoller_autoStop, _WorkPoller_drain, _WorkPoller_blockMs, _WorkPoller_reclaimOlderThanMs, _WorkPoller_requestOpts, _IdleLog_log, _IdleLog_environmentId, _IdleLog_idleSince, _IdleLog_lastReport, POLL_BLOCK_MS, POLL_BACKOFF_BASE_MS, POLL_BACKOFF_CAP_MS, IDLE_REPORT_INTERVAL_MS, WorkPoller, IdleLog; +var init_poller = __esm({ + "node_modules/@anthropic-ai/sdk/lib/environments/poller.mjs"() { + init_tslib2(); + init_error3(); + init_log2(); + init_sleep2(); + init_uuid2(); + init_abort3(); + init_headers3(); + init_backoff(); + init_helper_client(); + POLL_BLOCK_MS = 999; + POLL_BACKOFF_BASE_MS = 1e3; + POLL_BACKOFF_CAP_MS = 6e4; + IDLE_REPORT_INTERVAL_MS = 3e5; + WorkPoller = /* @__PURE__ */ (() => { + class WorkPoller2 { + constructor(opts) { + _WorkPoller_runnerClient.set(this, void 0); + _WorkPoller_consumed.set(this, false); + _WorkPoller_controller.set(this, void 0); + _WorkPoller_detachExternal.set(this, void 0); + _WorkPoller_autoStop.set(this, void 0); + _WorkPoller_drain.set(this, void 0); + _WorkPoller_blockMs.set(this, void 0); + _WorkPoller_reclaimOlderThanMs.set(this, void 0); + _WorkPoller_requestOpts.set(this, void 0); + this.client = opts.client; + this.environmentId = opts.environmentId; + this.environmentKey = opts.environmentKey; + this.workerId = opts.workerId ?? defaultWorkerId(); + __classPrivateFieldSet2(this, _WorkPoller_runnerClient, copyClientForHelper(opts.client, { + authToken: opts.environmentKey, + helper: "environments-work-poller" + }), "f"); + __classPrivateFieldSet2(this, _WorkPoller_autoStop, opts.autoStop ?? true, "f"); + __classPrivateFieldSet2(this, _WorkPoller_drain, opts.drain ?? false, "f"); + __classPrivateFieldSet2(this, _WorkPoller_blockMs, opts.blockMs === void 0 ? POLL_BLOCK_MS : opts.blockMs, "f"); + __classPrivateFieldSet2(this, _WorkPoller_reclaimOlderThanMs, opts.reclaimOlderThanMs ?? null, "f"); + __classPrivateFieldSet2(this, _WorkPoller_requestOpts, opts.requestOptions, "f"); + __classPrivateFieldSet2(this, _WorkPoller_controller, new AbortController(), "f"); + __classPrivateFieldSet2(this, _WorkPoller_detachExternal, linkAbort(opts.signal, __classPrivateFieldGet2(this, _WorkPoller_controller, "f")), "f"); + } + /** Read-only view of this iterator's abort signal. */ + get signal() { + return __classPrivateFieldGet2(this, _WorkPoller_controller, "f").signal; + } + /** Abort the iterator. The current `for await` will exit cleanly. */ + abort() { + __classPrivateFieldGet2(this, _WorkPoller_controller, "f").abort(); + } + async *[(_WorkPoller_runnerClient = /* @__PURE__ */ new WeakMap(), _WorkPoller_consumed = /* @__PURE__ */ new WeakMap(), _WorkPoller_controller = /* @__PURE__ */ new WeakMap(), _WorkPoller_detachExternal = /* @__PURE__ */ new WeakMap(), _WorkPoller_autoStop = /* @__PURE__ */ new WeakMap(), _WorkPoller_drain = /* @__PURE__ */ new WeakMap(), _WorkPoller_blockMs = /* @__PURE__ */ new WeakMap(), _WorkPoller_reclaimOlderThanMs = /* @__PURE__ */ new WeakMap(), _WorkPoller_requestOpts = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() { + if (__classPrivateFieldGet2(this, _WorkPoller_consumed, "f")) { + throw new AnthropicError("Cannot iterate over a consumed WorkPoller"); + } + __classPrivateFieldSet2(this, _WorkPoller_consumed, true, "f"); + const log = loggerFor2(this.client); + log.info("poller starting", { + component: "work-poller", + environment_id: this.environmentId + }); + const idle = new IdleLog(log, this.environmentId); + try { + let attempt = 0; + while (!__classPrivateFieldGet2(this, _WorkPoller_controller, "f").signal.aborted) { + let work; + try { + work = await __classPrivateFieldGet2(this, _WorkPoller_runnerClient, "f").beta.environments.work.poll(this.environmentId, { + "Anthropic-Worker-ID": this.workerId, + ...__classPrivateFieldGet2(this, _WorkPoller_blockMs, "f") !== null ? { block_ms: __classPrivateFieldGet2(this, _WorkPoller_blockMs, "f") } : {}, + ...__classPrivateFieldGet2(this, _WorkPoller_reclaimOlderThanMs, "f") !== null ? { reclaim_older_than_ms: __classPrivateFieldGet2(this, _WorkPoller_reclaimOlderThanMs, "f") } : {} + }, { headers: buildHeaders2([__classPrivateFieldGet2(this, _WorkPoller_requestOpts, "f")?.headers]), signal: __classPrivateFieldGet2(this, _WorkPoller_controller, "f").signal }); + } catch (e) { + if (__classPrivateFieldGet2(this, _WorkPoller_controller, "f").signal.aborted) + return; + if (isFatal4xx(e)) { + log.error("poll failed permanently, stopping poller", { error: String(e) }); + throw e; + } + const wait = applyJitter(backoff2(attempt)); + log.warn("poll failed, backing off", { error: String(e), backoff_ms: wait }); + attempt++; + await sleep2(wait, __classPrivateFieldGet2(this, _WorkPoller_controller, "f").signal); + continue; + } + attempt = 0; + if (work == null) { + if (__classPrivateFieldGet2(this, _WorkPoller_drain, "f")) + return; + idle.onEmptyPoll(); + await sleep2(jitter(1e3, 3e3), __classPrivateFieldGet2(this, _WorkPoller_controller, "f").signal); + continue; + } + idle.onClaim(); + log.info("claimed work", { + component: "work-poller", + environment_id: this.environmentId, + work_id: work.id, + work_type: work.data.type + }); + try { + await __classPrivateFieldGet2(this, _WorkPoller_runnerClient, "f").beta.environments.work.ack(work.id, { environment_id: work.environment_id }, { headers: buildHeaders2([__classPrivateFieldGet2(this, _WorkPoller_requestOpts, "f")?.headers]), signal: __classPrivateFieldGet2(this, _WorkPoller_controller, "f").signal }); + } catch (e) { + log.error("ack failed", { work_id: work.id, error: String(e) }); + continue; + } + try { + yield work; + } finally { + if (__classPrivateFieldGet2(this, _WorkPoller_autoStop, "f")) { + try { + await __classPrivateFieldGet2(this, _WorkPoller_runnerClient, "f").beta.environments.work.stop(work.id, { environment_id: work.environment_id }, { headers: buildHeaders2([__classPrivateFieldGet2(this, _WorkPoller_requestOpts, "f")?.headers]) }); + } catch (e) { + if (!isStatus(e, 409)) + log.warn("stop failed", { work_id: work.id, error: String(e) }); + } + } + } + } + } finally { + __classPrivateFieldGet2(this, _WorkPoller_detachExternal, "f").call(this); + } + } + } + return WorkPoller2; + })(); + IdleLog = /* @__PURE__ */ (() => { + class IdleLog2 { + constructor(log, environmentId) { + _IdleLog_log.set(this, void 0); + _IdleLog_environmentId.set(this, void 0); + _IdleLog_idleSince.set(this, void 0); + _IdleLog_lastReport.set(this, 0); + __classPrivateFieldSet2(this, _IdleLog_log, log, "f"); + __classPrivateFieldSet2(this, _IdleLog_environmentId, environmentId, "f"); + } + onEmptyPoll() { + const now = Date.now(); + const fields = { component: "work-poller", environment_id: __classPrivateFieldGet2(this, _IdleLog_environmentId, "f") }; + if (__classPrivateFieldGet2(this, _IdleLog_idleSince, "f") === void 0) { + __classPrivateFieldSet2(this, _IdleLog_idleSince, __classPrivateFieldSet2(this, _IdleLog_lastReport, now, "f"), "f"); + __classPrivateFieldGet2(this, _IdleLog_log, "f").info("idle; polling for work", fields); + } else if (now - __classPrivateFieldGet2(this, _IdleLog_lastReport, "f") >= IDLE_REPORT_INTERVAL_MS) { + __classPrivateFieldSet2(this, _IdleLog_lastReport, now, "f"); + __classPrivateFieldGet2(this, _IdleLog_log, "f").info(`still polling; idle for ${Math.round((now - __classPrivateFieldGet2(this, _IdleLog_idleSince, "f")) / 1e3)}s`, fields); + } else { + __classPrivateFieldGet2(this, _IdleLog_log, "f").debug("poll returned no work", fields); + } + } + onClaim() { + __classPrivateFieldSet2(this, _IdleLog_idleSince, void 0, "f"); + } + } + _IdleLog_log = /* @__PURE__ */ new WeakMap(), _IdleLog_environmentId = /* @__PURE__ */ new WeakMap(), _IdleLog_idleSince = /* @__PURE__ */ new WeakMap(), _IdleLog_lastReport = /* @__PURE__ */ new WeakMap(); + return IdleLog2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/async-queue.mjs +var _AsyncQueue_items, _AsyncQueue_waiters, _AsyncQueue_closed, AsyncQueue; +var init_async_queue = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/async-queue.mjs"() { + init_tslib2(); + AsyncQueue = /* @__PURE__ */ (() => { + class AsyncQueue2 { + constructor() { + _AsyncQueue_items.set(this, []); + _AsyncQueue_waiters.set(this, []); + _AsyncQueue_closed.set(this, false); + } + /** Enqueue an item, or hand it directly to a waiting reader. Returns `false` once closed. */ + push(item) { + if (__classPrivateFieldGet2(this, _AsyncQueue_closed, "f")) + return false; + const w = __classPrivateFieldGet2(this, _AsyncQueue_waiters, "f").shift(); + if (w) + w({ done: false, value: item }); + else + __classPrivateFieldGet2(this, _AsyncQueue_items, "f").push(item); + return true; + } + /** Mark the queue done. Idempotent; wakes every pending reader with `done: true`. */ + close() { + if (__classPrivateFieldGet2(this, _AsyncQueue_closed, "f")) + return; + __classPrivateFieldSet2(this, _AsyncQueue_closed, true, "f"); + while (__classPrivateFieldGet2(this, _AsyncQueue_waiters, "f").length > 0) { + const w = __classPrivateFieldGet2(this, _AsyncQueue_waiters, "f").shift(); + w({ done: true, value: void 0 }); + } + } + /** + * Resolve with the next item, or `done: true` once the queue is closed and + * drained. When `signal` is supplied, aborting it resolves a pending read + * with `done: true` (cancellation is pushed down here rather than handled by + * an outer `Promise.race`). + */ + next(signal) { + if (__classPrivateFieldGet2(this, _AsyncQueue_items, "f").length > 0) { + return Promise.resolve({ done: false, value: __classPrivateFieldGet2(this, _AsyncQueue_items, "f").shift() }); + } + if (__classPrivateFieldGet2(this, _AsyncQueue_closed, "f") || signal?.aborted) { + return Promise.resolve({ done: true, value: void 0 }); + } + return new Promise((resolve2) => { + const waiter = (r) => { + signal?.removeEventListener("abort", onAbort); + resolve2(r); + }; + const onAbort = () => { + const idx = __classPrivateFieldGet2(this, _AsyncQueue_waiters, "f").indexOf(waiter); + if (idx >= 0) + __classPrivateFieldGet2(this, _AsyncQueue_waiters, "f").splice(idx, 1); + resolve2({ done: true, value: void 0 }); + }; + __classPrivateFieldGet2(this, _AsyncQueue_waiters, "f").push(waiter); + signal?.addEventListener("abort", onAbort, { once: true }); + }); + } + /** Synchronously remove and return the next buffered item, or `undefined` if empty. */ + tryShift() { + return __classPrivateFieldGet2(this, _AsyncQueue_items, "f").shift(); + } + } + _AsyncQueue_items = /* @__PURE__ */ new WeakMap(), _AsyncQueue_waiters = /* @__PURE__ */ new WeakMap(), _AsyncQueue_closed = /* @__PURE__ */ new WeakMap(); + return AsyncQueue2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/lib/tools/ToolError.mjs +var ToolError; +var init_ToolError = __esm({ + "node_modules/@anthropic-ai/sdk/lib/tools/ToolError.mjs"() { + ToolError = /* @__PURE__ */ (() => { + class ToolError2 extends Error { + constructor(content) { + const message = typeof content === "string" ? content : content.map((block) => { + if (block.type === "text") + return block.text; + return `[${block.type}]`; + }).join(" "); + super(message); + this.name = "ToolError"; + this.content = content; + } + } + return ToolError2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/lib/tools/BetaRunnableTool.mjs +function toolName(tool) { + return "name" in tool ? tool.name : "mcp_server_name" in tool ? tool.mcp_server_name : tool.type; +} +function toolErrorContent(e) { + return e instanceof ToolError ? e.content : `Error: ${e instanceof Error ? e.message : String(e)}`; +} +async function runRunnableTool(tool, rawInput, context) { + try { + const input = tool.parse ? tool.parse(rawInput) : rawInput; + const content = await tool.run(input, context); + return { content, isError: false }; + } catch (e) { + return { content: toolErrorContent(e), isError: true }; + } +} +var init_BetaRunnableTool = __esm({ + "node_modules/@anthropic-ai/sdk/lib/tools/BetaRunnableTool.mjs"() { + init_ToolError(); + } +}); + +// node_modules/@anthropic-ai/sdk/lib/tools/SessionToolRunner.mjs +function isEndTurnIdle(ev) { + return ev.type === "session.status_idle" && ev.stop_reason?.type === "end_turn"; +} +function buildResultEvent(ev, isError, content) { + if (ev.type === "agent.custom_tool_use") { + return { type: "user.custom_tool_result", custom_tool_use_id: ev.id, is_error: isError, content }; + } + return { type: "user.tool_result", tool_use_id: ev.id, is_error: isError, content }; +} +function toSessionContent(content) { + if (typeof content === "string") + return [{ type: "text", text: content || "(no output)" }]; + const out = content.map((b) => { + if (b.type === "text") + return { type: "text", text: b.text || "(no output)" }; + if (b.type === "image" || b.type === "document") + return b; + if (b.type === "search_result") { + return { + type: "search_result", + source: b.source, + title: b.title, + content: b.content.map((c) => ({ type: "text", text: c.text })), + citations: { enabled: b.citations?.enabled ?? false } + }; + } + return { type: "text", text: JSON.stringify(b) }; + }); + return out.length > 0 ? out : [{ type: "text", text: "(no output)" }]; +} +var _IdleClock_maxIdleMs, _IdleClock_onExpire, _IdleClock_blockers, _IdleClock_armPending, _IdleClock_timer, _SessionToolRunner_instances, _SessionToolRunner_consumed, _SessionToolRunner_controller, _SessionToolRunner_detachExternal, _SessionToolRunner_requestOpts, _SessionToolRunner_toolByName, _SessionToolRunner_logger, _SessionToolRunner_seen, _SessionToolRunner_answered, _SessionToolRunner_confirmationVerdicts, _SessionToolRunner_awaitingConfirmation, _SessionToolRunner_results, _SessionToolRunner_inFlightCount, _SessionToolRunner_sendRetryWindowMs, _SessionToolRunner_onIdle, _SessionToolRunner_idleClock, _SessionToolRunner_requestOptions, _SessionToolRunner_streamLoop, _SessionToolRunner_reconcile, _SessionToolRunner_ingestHistory, _SessionToolRunner_handleStreamEvent, _SessionToolRunner_routeToolEvent, _SessionToolRunner_noteConfirmation, _SessionToolRunner_applyVerdict, _SessionToolRunner_surfaceCall, _SessionToolRunner_execute, _SessionToolRunner_sendResult, _SessionToolRunner_drain, STREAM_BACKOFF_START_MS, STREAM_BACKOFF_CAP_MS, TOOL_TIMEOUT_MS, DRAIN_TIMEOUT_MS, SEND_BACKOFF_START_MS, SEND_BACKOFF_CAP_MS, SEND_RETRY_WINDOW_MS, DEFAULT_MAX_IDLE_MS, IdleClock, SessionToolRunner; +var init_SessionToolRunner = __esm({ + "node_modules/@anthropic-ai/sdk/lib/tools/SessionToolRunner.mjs"() { + init_tslib2(); + init_error3(); + init_log2(); + init_sleep2(); + init_backoff(); + init_abort3(); + init_async_queue(); + init_headers3(); + init_stainless_helper_header(); + init_BetaRunnableTool(); + STREAM_BACKOFF_START_MS = 500; + STREAM_BACKOFF_CAP_MS = 1e4; + TOOL_TIMEOUT_MS = 12e4; + DRAIN_TIMEOUT_MS = 3e4; + SEND_BACKOFF_START_MS = 1e3; + SEND_BACKOFF_CAP_MS = 3e4; + SEND_RETRY_WINDOW_MS = 5 * 6e4; + DEFAULT_MAX_IDLE_MS = 6e4; + IdleClock = /* @__PURE__ */ (() => { + class IdleClock2 { + constructor(maxIdleMs, onExpire) { + _IdleClock_maxIdleMs.set(this, void 0); + _IdleClock_onExpire.set(this, void 0); + _IdleClock_blockers.set(this, /* @__PURE__ */ new Set()); + _IdleClock_armPending.set(this, false); + _IdleClock_timer.set(this, void 0); + __classPrivateFieldSet2(this, _IdleClock_maxIdleMs, maxIdleMs, "f"); + __classPrivateFieldSet2(this, _IdleClock_onExpire, onExpire, "f"); + } + /** + * Arm on `status_idle{end_turn}`; disarm otherwise. `user.tool_confirmation` + * is neutral: it signals neither agent activity nor an idle, and its effect + * on the clock flows through {@link block} / {@link unblock} instead — + * disarming here would discard the pending arm the verdict is about to + * settle. + */ + noteEvent(ev) { + if (ev.type === "user.tool_confirmation") + return; + if (isEndTurnIdle(ev)) + this.arm(); + else + this.disarm(); + } + /** Register gated work that must resolve before an idle countdown starts. */ + block(toolUseId) { + __classPrivateFieldGet2(this, _IdleClock_blockers, "f").add(toolUseId); + if (__classPrivateFieldGet2(this, _IdleClock_timer, "f") !== void 0) { + __classPrivateFieldSet2(this, _IdleClock_armPending, true, "f"); + clearTimeout(__classPrivateFieldGet2(this, _IdleClock_timer, "f")); + __classPrivateFieldSet2(this, _IdleClock_timer, void 0, "f"); + } + } + /** + * Retire gated work (a no-op for ids never blocked); applies a pending arm — + * with a fresh full `maxIdleMs` window — once the last blocker retires. + */ + unblock(toolUseId) { + __classPrivateFieldGet2(this, _IdleClock_blockers, "f").delete(toolUseId); + if (__classPrivateFieldGet2(this, _IdleClock_blockers, "f").size === 0 && __classPrivateFieldGet2(this, _IdleClock_armPending, "f")) + this.arm(); + } + /** + * (Re)start the idle countdown — or, while blockers are outstanding, hold + * the arm pending instead. Stopping then would drop a held call when its + * verdict later arrives, or cut the runner off before a released call's + * result can drive the next turn. + */ + arm() { + if (__classPrivateFieldGet2(this, _IdleClock_maxIdleMs, "f") <= 0) + return; + if (__classPrivateFieldGet2(this, _IdleClock_blockers, "f").size > 0) { + __classPrivateFieldSet2(this, _IdleClock_armPending, true, "f"); + return; + } + __classPrivateFieldSet2(this, _IdleClock_armPending, false, "f"); + if (__classPrivateFieldGet2(this, _IdleClock_timer, "f") !== void 0) + clearTimeout(__classPrivateFieldGet2(this, _IdleClock_timer, "f")); + __classPrivateFieldSet2(this, _IdleClock_timer, setTimeout(__classPrivateFieldGet2(this, _IdleClock_onExpire, "f"), __classPrivateFieldGet2(this, _IdleClock_maxIdleMs, "f")), "f"); + } + /** + * Cancel the idle countdown and any pending arm. Blockers persist — they + * track real outstanding work, retired only by {@link unblock}. + */ + disarm() { + __classPrivateFieldSet2(this, _IdleClock_armPending, false, "f"); + if (__classPrivateFieldGet2(this, _IdleClock_timer, "f") !== void 0) { + clearTimeout(__classPrivateFieldGet2(this, _IdleClock_timer, "f")); + __classPrivateFieldSet2(this, _IdleClock_timer, void 0, "f"); + } + } + } + _IdleClock_maxIdleMs = /* @__PURE__ */ new WeakMap(), _IdleClock_onExpire = /* @__PURE__ */ new WeakMap(), _IdleClock_blockers = /* @__PURE__ */ new WeakMap(), _IdleClock_armPending = /* @__PURE__ */ new WeakMap(), _IdleClock_timer = /* @__PURE__ */ new WeakMap(); + return IdleClock2; + })(); + SessionToolRunner = /* @__PURE__ */ (() => { + class SessionToolRunner2 { + constructor(sessionId, opts) { + _SessionToolRunner_instances.add(this); + _SessionToolRunner_consumed.set(this, false); + _SessionToolRunner_controller.set(this, void 0); + _SessionToolRunner_detachExternal.set(this, void 0); + _SessionToolRunner_requestOpts.set(this, void 0); + _SessionToolRunner_toolByName.set(this, void 0); + _SessionToolRunner_logger.set(this, void 0); + _SessionToolRunner_seen.set(this, /* @__PURE__ */ new Set()); + _SessionToolRunner_answered.set(this, /* @__PURE__ */ new Set()); + _SessionToolRunner_confirmationVerdicts.set(this, /* @__PURE__ */ new Map()); + _SessionToolRunner_awaitingConfirmation.set(this, /* @__PURE__ */ new Map()); + _SessionToolRunner_results.set(this, new AsyncQueue()); + _SessionToolRunner_inFlightCount.set(this, 0); + _SessionToolRunner_sendRetryWindowMs.set(this, SEND_RETRY_WINDOW_MS); + _SessionToolRunner_onIdle.set(this, null); + _SessionToolRunner_idleClock.set(this, void 0); + this.client = opts.client; + this.sessionId = sessionId; + this.tools = opts.tools; + this.maxIdleMs = opts.maxIdleMs ?? DEFAULT_MAX_IDLE_MS; + __classPrivateFieldSet2(this, _SessionToolRunner_logger, loggerFor2(opts.client), "f"); + __classPrivateFieldSet2(this, _SessionToolRunner_toolByName, new Map(opts.tools.map((t) => [toolName(t), t])), "f"); + __classPrivateFieldSet2(this, _SessionToolRunner_controller, new AbortController(), "f"); + __classPrivateFieldSet2(this, _SessionToolRunner_detachExternal, linkAbort(opts.signal, __classPrivateFieldGet2(this, _SessionToolRunner_controller, "f")), "f"); + __classPrivateFieldSet2(this, _SessionToolRunner_requestOpts, opts.requestOptions, "f"); + __classPrivateFieldSet2(this, _SessionToolRunner_idleClock, new IdleClock(this.maxIdleMs, () => { + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").info("session idle after end_turn; stopping", { + component: "session-tool-runner", + session_id: this.sessionId, + max_idle_ms: this.maxIdleMs + }); + __classPrivateFieldGet2(this, _SessionToolRunner_controller, "f").abort(); + }), "f"); + } + /** Read-only view of this runner's abort signal. */ + get signal() { + return __classPrivateFieldGet2(this, _SessionToolRunner_controller, "f").signal; + } + /** Abort the runner. Background tasks will wind down and `for await` will exit cleanly. */ + abort() { + __classPrivateFieldGet2(this, _SessionToolRunner_controller, "f").abort(); + } + /** + * @internal + * `EnvironmentWorker` keeps this equal to the lease TTL each heartbeat + * reports; applies to a send already retrying. + */ + _setSendRetryWindow(ms) { + __classPrivateFieldSet2(this, _SessionToolRunner_sendRetryWindowMs, ms, "f"); + } + async *[(_SessionToolRunner_consumed = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_controller = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_detachExternal = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_requestOpts = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_toolByName = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_logger = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_seen = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_answered = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_confirmationVerdicts = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_awaitingConfirmation = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_results = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_inFlightCount = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_sendRetryWindowMs = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_onIdle = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_idleClock = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_instances = /* @__PURE__ */ new WeakSet(), Symbol.asyncIterator)]() { + if (__classPrivateFieldGet2(this, _SessionToolRunner_consumed, "f")) { + throw new AnthropicError("Cannot iterate over a consumed SessionToolRunner"); + } + __classPrivateFieldSet2(this, _SessionToolRunner_consumed, true, "f"); + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").info("session tool runner starting", { + component: "session-tool-runner", + session_id: this.sessionId + }); + const streamPromise = __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_streamLoop).call(this).catch((e) => { + if (!__classPrivateFieldGet2(this, _SessionToolRunner_controller, "f").signal.aborted) { + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").error("stream loop failed", { error: String(e) }); + } + __classPrivateFieldGet2(this, _SessionToolRunner_controller, "f").abort(); + }); + try { + while (true) { + const next = await __classPrivateFieldGet2(this, _SessionToolRunner_results, "f").next(__classPrivateFieldGet2(this, _SessionToolRunner_controller, "f").signal); + if (next.done) + break; + yield next.value; + } + await streamPromise; + let pending; + while ((pending = __classPrivateFieldGet2(this, _SessionToolRunner_results, "f").tryShift()) !== void 0) { + yield pending; + } + } finally { + __classPrivateFieldGet2(this, _SessionToolRunner_controller, "f").abort(); + __classPrivateFieldGet2(this, _SessionToolRunner_idleClock, "f").disarm(); + await streamPromise; + try { + await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_drain).call(this); + } catch (e) { + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").warn("drain failed", { error: String(e) }); + } + __classPrivateFieldGet2(this, _SessionToolRunner_results, "f").close(); + for (const t of this.tools) { + try { + await t.close?.(); + } catch (e) { + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").warn("tool.close failed", { tool: toolName(t), error: String(e) }); + } + } + __classPrivateFieldGet2(this, _SessionToolRunner_detachExternal, "f").call(this); + } + } + } + _SessionToolRunner_requestOptions = function _SessionToolRunner_requestOptions2() { + return { + ...__classPrivateFieldGet2(this, _SessionToolRunner_requestOpts, "f"), + headers: buildHeaders2([helperHeader("session-tool-runner"), __classPrivateFieldGet2(this, _SessionToolRunner_requestOpts, "f")?.headers]), + signal: __classPrivateFieldGet2(this, _SessionToolRunner_controller, "f").signal + }; + }, _SessionToolRunner_streamLoop = // ===== event stream ===== + async function _SessionToolRunner_streamLoop2() { + const ctrl = __classPrivateFieldGet2(this, _SessionToolRunner_controller, "f"); + let backoff3 = STREAM_BACKOFF_START_MS; + while (!ctrl.signal.aborted) { + try { + const stream5 = await this.client.beta.sessions.events.stream(this.sessionId, {}, __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_requestOptions).call(this)); + await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_reconcile).call(this); + for await (const ev of stream5) { + backoff3 = STREAM_BACKOFF_START_MS; + if (await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_handleStreamEvent).call(this, ev)) + return; + } + } catch (e) { + ctrl.signal.throwIfAborted(); + if (isFatal4xx(e)) { + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").error("permanent stream failure, shutting down", { error: String(e) }); + ctrl.abort(); + throw e; + } + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").warn("stream disconnected, reconnecting", { + error: String(e), + backoff_ms: backoff3 + }); + } + ctrl.signal.throwIfAborted(); + await sleep2(backoff3, ctrl.signal); + backoff3 = Math.min(backoff3 * 2, STREAM_BACKOFF_CAP_MS); + } + }, _SessionToolRunner_reconcile = /** + * Read full history before dispatching so a `tool_use` whose result appears + * later in the same history is not re-executed. Runs after the live stream is + * already attached (see {@link SessionToolRunner.#streamLoop}). + */ + async function _SessionToolRunner_reconcile2() { + const ctrl = __classPrivateFieldGet2(this, _SessionToolRunner_controller, "f"); + const pending = []; + let lastWasEndTurn = false; + try { + for await (const ev of this.client.beta.sessions.events.list(this.sessionId, { limit: 1e3 }, __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_requestOptions).call(this))) { + __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_ingestHistory).call(this, ev, pending); + lastWasEndTurn = isEndTurnIdle(ev); + } + } catch (e) { + ctrl.signal.throwIfAborted(); + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").warn("reconcile list failed", { error: String(e) }); + for (const ev of pending) + __classPrivateFieldGet2(this, _SessionToolRunner_seen, "f").delete(ev.id); + return; + } + const unanswered = pending.filter((ev) => !__classPrivateFieldGet2(this, _SessionToolRunner_answered, "f").has(ev.id)); + __classPrivateFieldGet2(this, _SessionToolRunner_idleClock, "f").disarm(); + for (const ev of unanswered) + await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_routeToolEvent).call(this, ev); + for (const held2 of [...__classPrivateFieldGet2(this, _SessionToolRunner_awaitingConfirmation, "f").values()]) { + const verdict = __classPrivateFieldGet2(this, _SessionToolRunner_confirmationVerdicts, "f").get(held2.id); + if (verdict !== void 0) + await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_applyVerdict).call(this, held2, verdict); + } + const outstanding = unanswered.filter((ev) => !__classPrivateFieldGet2(this, _SessionToolRunner_answered, "f").has(ev.id) && !__classPrivateFieldGet2(this, _SessionToolRunner_awaitingConfirmation, "f").has(ev.id)); + if (lastWasEndTurn && outstanding.length === 0) + __classPrivateFieldGet2(this, _SessionToolRunner_idleClock, "f").arm(); + else + __classPrivateFieldGet2(this, _SessionToolRunner_idleClock, "f").disarm(); + }, _SessionToolRunner_ingestHistory = function _SessionToolRunner_ingestHistory2(ev, pending) { + if (ev.type === "agent.tool_use" || ev.type === "agent.custom_tool_use") { + __classPrivateFieldGet2(this, _SessionToolRunner_seen, "f").add(ev.id); + if (!__classPrivateFieldGet2(this, _SessionToolRunner_answered, "f").has(ev.id)) + pending.push(ev); + } else if (ev.type === "user.tool_result") { + __classPrivateFieldGet2(this, _SessionToolRunner_answered, "f").add(ev.tool_use_id); + } else if (ev.type === "user.custom_tool_result") { + __classPrivateFieldGet2(this, _SessionToolRunner_answered, "f").add(ev.custom_tool_use_id); + } else if (ev.type === "user.tool_confirmation") { + if (!__classPrivateFieldGet2(this, _SessionToolRunner_answered, "f").has(ev.tool_use_id)) + __classPrivateFieldGet2(this, _SessionToolRunner_confirmationVerdicts, "f").set(ev.tool_use_id, ev.result); + } + }, _SessionToolRunner_handleStreamEvent = /** Returns true when the runner should exit. */ + async function _SessionToolRunner_handleStreamEvent2(ev) { + __classPrivateFieldGet2(this, _SessionToolRunner_idleClock, "f").noteEvent(ev); + switch (ev.type) { + case "agent.tool_use": + case "agent.custom_tool_use": + if (!__classPrivateFieldGet2(this, _SessionToolRunner_seen, "f").has(ev.id)) { + __classPrivateFieldGet2(this, _SessionToolRunner_seen, "f").add(ev.id); + await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_routeToolEvent).call(this, ev); + } + return false; + case "user.tool_confirmation": + await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_noteConfirmation).call(this, ev); + return false; + case "user.tool_result": + __classPrivateFieldGet2(this, _SessionToolRunner_answered, "f").add(ev.tool_use_id); + return false; + case "user.custom_tool_result": + __classPrivateFieldGet2(this, _SessionToolRunner_answered, "f").add(ev.custom_tool_use_id); + return false; + case "session.status_terminated": + case "session.deleted": + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").info("session terminated", { + component: "session-tool-runner", + session_id: this.sessionId + }); + __classPrivateFieldGet2(this, _SessionToolRunner_controller, "f").abort(); + return true; + default: + return false; + } + }, _SessionToolRunner_routeToolEvent = // ===== confirmation gating (always_ask tools) ===== + /** + * Dispatch `ev`, honoring its evaluated permission. A call the server gated + * (`evaluated_permission == "ask"`) is held until its `user.tool_confirmation` + * arrives. Fails closed: only an explicit `allow` verdict releases a gated + * call; a server-side `deny` overrides any recorded verdict; an unrecognized + * permission is held like `ask` and an unrecognized verdict is denied. + */ + async function _SessionToolRunner_routeToolEvent2(ev) { + const permission = ev.evaluated_permission; + const verdict = permission === "deny" ? "deny" : __classPrivateFieldGet2(this, _SessionToolRunner_confirmationVerdicts, "f").get(ev.id); + if (verdict === void 0) { + if (permission === void 0 || permission === "allow") { + await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_execute).call(this, ev, void 0); + } else if (!__classPrivateFieldGet2(this, _SessionToolRunner_awaitingConfirmation, "f").has(ev.id)) { + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").info("tool call awaiting confirmation; holding", { + component: "session-tool-runner", + session_id: this.sessionId, + tool: ev.name, + tool_use_id: ev.id + }); + __classPrivateFieldGet2(this, _SessionToolRunner_awaitingConfirmation, "f").set(ev.id, ev); + __classPrivateFieldGet2(this, _SessionToolRunner_idleClock, "f").block(ev.id); + } + return; + } + await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_applyVerdict).call(this, ev, verdict); + }, _SessionToolRunner_noteConfirmation = /** Record an allow/deny verdict and release the held call it gates, if any. */ + async function _SessionToolRunner_noteConfirmation2(ev) { + __classPrivateFieldGet2(this, _SessionToolRunner_confirmationVerdicts, "f").set(ev.tool_use_id, ev.result); + const held2 = __classPrivateFieldGet2(this, _SessionToolRunner_awaitingConfirmation, "f").get(ev.tool_use_id); + if (held2 === void 0) + return; + await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_applyVerdict).call(this, held2, ev.result); + }, _SessionToolRunner_applyVerdict = /** + * Dispatch or resolve a gated call according to its verdict. + * + * The idle-clock blocker accounting lives here: a denial retires the held + * call's blocker, while an allow keeps one on the call — taking it now if the + * verdict was already known when the call was routed, so it was never held — + * until `#execute` has finished with it. The countdown must not run over + * gated work that is still in flight. + */ + async function _SessionToolRunner_applyVerdict2(ev, verdict) { + const wasHeld = __classPrivateFieldGet2(this, _SessionToolRunner_awaitingConfirmation, "f").delete(ev.id); + if (verdict === "allow") { + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").info("tool call confirmed", { + component: "session-tool-runner", + session_id: this.sessionId, + tool: ev.name, + tool_use_id: ev.id + }); + if (!wasHeld) + __classPrivateFieldGet2(this, _SessionToolRunner_idleClock, "f").block(ev.id); + try { + await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_execute).call(this, ev, "allow"); + } finally { + __classPrivateFieldGet2(this, _SessionToolRunner_idleClock, "f").unblock(ev.id); + } + return; + } + if (wasHeld) + __classPrivateFieldGet2(this, _SessionToolRunner_idleClock, "f").unblock(ev.id); + __classPrivateFieldGet2(this, _SessionToolRunner_answered, "f").add(ev.id); + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").info("tool call denied; not executing", { + component: "session-tool-runner", + session_id: this.sessionId, + tool: ev.name, + tool_use_id: ev.id + }); + __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_surfaceCall).call(this, { + event: ev, + toolUseId: ev.id, + name: ev.name, + isError: false, + posted: false, + confirmation: "deny" + }); + }, _SessionToolRunner_surfaceCall = function _SessionToolRunner_surfaceCall2(call) { + __classPrivateFieldGet2(this, _SessionToolRunner_results, "f").push(call); + }, _SessionToolRunner_execute = // ===== tool execution ===== + async function _SessionToolRunner_execute2(ev, confirmation) { + var _a6, _b; + if (__classPrivateFieldGet2(this, _SessionToolRunner_answered, "f").has(ev.id)) + return; + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").info("executing tool", { + component: "session-tool-runner", + session_id: this.sessionId, + tool: ev.name, + tool_use_id: ev.id + }); + __classPrivateFieldSet2(this, _SessionToolRunner_inFlightCount, (_a6 = __classPrivateFieldGet2(this, _SessionToolRunner_inFlightCount, "f"), _a6++, _a6), "f"); + try { + const tool = __classPrivateFieldGet2(this, _SessionToolRunner_toolByName, "f").get(ev.name); + if (!tool) { + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").info("tool not owned by this runner; leaving the tool_use_id pending for its owner", { + component: "session-tool-runner", + session_id: this.sessionId, + tool: ev.name, + tool_use_id: ev.id + }); + __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_surfaceCall).call(this, { + event: ev, + toolUseId: ev.id, + name: ev.name, + isError: false, + posted: false, + confirmation + }); + return; + } + let content; + let isError; + const toolCtrl = new AbortController(); + const detachTool = linkAbort(__classPrivateFieldGet2(this, _SessionToolRunner_controller, "f").signal, toolCtrl); + const timer = setTimeout(() => toolCtrl.abort(), TOOL_TIMEOUT_MS); + try { + const outcome = await runRunnableTool(tool, ev.input, { + toolUse: ev, + toolUseBlock: ev, + signal: toolCtrl.signal + }); + content = outcome.content; + isError = outcome.isError; + } finally { + clearTimeout(timer); + detachTool(); + } + const result = buildResultEvent(ev, isError, toSessionContent(content)); + const posted = await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_sendResult).call(this, result, ev.id); + __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_surfaceCall).call(this, { + event: ev, + result, + toolUseId: ev.id, + name: ev.name, + isError, + posted, + confirmation + }); + } finally { + __classPrivateFieldSet2(this, _SessionToolRunner_inFlightCount, (_b = __classPrivateFieldGet2(this, _SessionToolRunner_inFlightCount, "f"), _b--, _b), "f"); + if (__classPrivateFieldGet2(this, _SessionToolRunner_inFlightCount, "f") === 0) + __classPrivateFieldGet2(this, _SessionToolRunner_onIdle, "f")?.call(this); + } + }, _SessionToolRunner_sendResult = async function _SessionToolRunner_sendResult2(result, toolUseId) { + const ctrl = __classPrivateFieldGet2(this, _SessionToolRunner_controller, "f"); + const start = Date.now(); + let lastErr; + let attempt = 0; + while (true) { + attempt++; + ctrl.signal.throwIfAborted(); + try { + await this.client.beta.sessions.events.send(this.sessionId, { events: [result] }, __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_requestOptions).call(this)); + __classPrivateFieldGet2(this, _SessionToolRunner_answered, "f").add(toolUseId); + return true; + } catch (e) { + lastErr = e; + if (isFatal4xx(e)) + break; + const remainingMs = __classPrivateFieldGet2(this, _SessionToolRunner_sendRetryWindowMs, "f") - (Date.now() - start); + if (remainingMs <= 0) + break; + const waitMs = Math.min(applyJitter(backoff(attempt - 1, SEND_BACKOFF_START_MS, SEND_BACKOFF_CAP_MS)), remainingMs); + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").warn("tool result send failed; retrying", { + tool_use_id: toolUseId, + attempt, + backoff_ms: waitMs, + error: String(e) + }); + await sleep2(waitMs, ctrl.signal); + } + } + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").error("failed to send tool result", { + tool_use_id: toolUseId, + attempts: attempt, + error: String(lastErr) + }); + return false; + }, _SessionToolRunner_drain = /** Wait (bounded) for in-flight tool executions to finish during teardown. */ + async function _SessionToolRunner_drain2() { + if (__classPrivateFieldGet2(this, _SessionToolRunner_inFlightCount, "f") === 0) + return; + await Promise.race([new Promise((r) => __classPrivateFieldSet2(this, _SessionToolRunner_onIdle, r, "f")), sleep2(DRAIN_TIMEOUT_MS)]); + __classPrivateFieldSet2(this, _SessionToolRunner_onIdle, null, "f"); + if (__classPrivateFieldGet2(this, _SessionToolRunner_inFlightCount, "f") > 0) { + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").warn("drain timeout exceeded"); + } + }; + return SessionToolRunner2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/tools/agent-toolset/sync-interval.mjs +function checkMemorySyncInterval(ms, option) { + if (!(ms >= MIN_MEMORY_SYNC_INTERVAL_MS)) { + throw new AnthropicError(`${option} must be at least ${MIN_MEMORY_SYNC_INTERVAL_MS}ms (got ${ms}); to run without memory sync, pass \`memorySyncIntervalMs: null\` to the worker instead`); + } +} +var DEFAULT_MEMORY_SYNC_INTERVAL_MS, MIN_MEMORY_SYNC_INTERVAL_MS; +var init_sync_interval = __esm({ + "node_modules/@anthropic-ai/sdk/tools/agent-toolset/sync-interval.mjs"() { + init_error3(); + DEFAULT_MEMORY_SYNC_INTERVAL_MS = 15e3; + MIN_MEMORY_SYNC_INTERVAL_MS = 5e3; + } +}); + +// node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.mjs +var node_browser_exports2 = {}; +__export(node_browser_exports2, { + BashSession: () => BashSession, + BashTimeoutError: () => BashTimeoutError, + DEFAULT_MEMORY_SYNC_INTERVAL_MS: () => DEFAULT_MEMORY_SYNC_INTERVAL_MS, + MARKER_PATH: () => MARKER_PATH, + MEMORY_FLUSH_TIMEOUT_MS: () => MEMORY_FLUSH_TIMEOUT_MS, + MIN_MEMORY_SYNC_INTERVAL_MS: () => MIN_MEMORY_SYNC_INTERVAL_MS, + SessionMemoryError: () => SessionMemoryError, + SessionMemoryStores: () => SessionMemoryStores, + betaAgentToolset20260401: () => betaAgentToolset20260401, + betaBashTool: () => betaBashTool, + betaEditTool: () => betaEditTool, + betaGlobTool: () => betaGlobTool, + betaGrepTool: () => betaGrepTool, + betaReadTool: () => betaReadTool, + betaWriteTool: () => betaWriteTool, + extractSkillArchive: () => extractSkillArchive, + resolvePath: () => resolvePath, + setupSkills: () => setupSkills +}); +function nodeOnly(name) { + throw new AnthropicError(`${name} requires Node.js or a Node-compatible runtime`); +} +function setupSkills(_ctx) { + return nodeOnly("setupSkills"); +} +function extractSkillArchive(_resp, _dest) { + return nodeOnly("extractSkillArchive"); +} +function betaAgentToolset20260401(_ctx) { + return nodeOnly("betaAgentToolset20260401"); +} +function resolvePath(_ctx, _p) { + return nodeOnly("resolvePath"); +} +function betaBashTool(_ctx) { + return nodeOnly("betaBashTool"); +} +function betaReadTool(_ctx) { + return nodeOnly("betaReadTool"); +} +function betaWriteTool(_ctx) { + return nodeOnly("betaWriteTool"); +} +function betaEditTool(_ctx) { + return nodeOnly("betaEditTool"); +} +function betaGlobTool(_ctx) { + return nodeOnly("betaGlobTool"); +} +function betaGrepTool(_ctx) { + return nodeOnly("betaGrepTool"); +} +var MEMORY_FLUSH_TIMEOUT_MS, MARKER_PATH, SessionMemoryError, SessionMemoryStores, BashTimeoutError, BashSession; +var init_node_browser2 = __esm({ + "node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.mjs"() { + init_error3(); + init_sync_interval(); + MEMORY_FLUSH_TIMEOUT_MS = 3e4; + MARKER_PATH = ".anthropic-memory-store"; + SessionMemoryError = class extends AnthropicError { + constructor(message, cause) { + super(message); + this.name = "SessionMemoryError"; + if (cause !== void 0) + this.cause = cause; + } + }; + SessionMemoryStores = class { + constructor(_client, _opts) { + nodeOnly("SessionMemoryStores"); + } + get roots() { + return nodeOnly("SessionMemoryStores"); + } + get readOnlyRoots() { + return nodeOnly("SessionMemoryStores"); + } + download(_session) { + return nodeOnly("SessionMemoryStores"); + } + finish() { + return nodeOnly("SessionMemoryStores"); + } + /** @internal */ + syncAll(_final) { + return nodeOnly("SessionMemoryStores"); + } + syncIfDue() { + return nodeOnly("SessionMemoryStores"); + } + flushWrites(_signal) { + return nodeOnly("SessionMemoryStores"); + } + dispose() { + return nodeOnly("SessionMemoryStores"); + } + }; + BashTimeoutError = class extends AnthropicError { + constructor(timeoutMs) { + super(`bash command timed out after ${timeoutMs}ms`); + this.name = "BashTimeoutError"; + this.timeoutMs = timeoutMs; + } + }; + BashSession = class { + constructor(_dir, _env) { + nodeOnly("BashSession"); + } + get closed() { + return nodeOnly("BashSession"); + } + exec(_command, _opts = {}) { + return nodeOnly("BashSession"); + } + close() { + nodeOnly("BashSession"); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/lib/environments/worker.mjs +function hasMemoryStore(session) { + return session.resources.some((r) => r.type === "memory_store"); +} +function sessionsTokenFromSecret(secret) { + if (!secret) + return null; + let parsed; + try { + const normalized = secret.replace(/-/g, "+").replace(/_/g, "/"); + const padded = normalized.padEnd(Math.ceil(normalized.length / 4) * 4, "="); + parsed = JSON.parse(decodeUTF82(fromBase642(padded))); + } catch { + return null; + } + if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) + return null; + const token = parsed.sessions_token; + return typeof token === "string" && token !== "" ? token : null; +} +async function withTimeout(p, ms) { + let timer; + try { + return await Promise.race([ + p.then(() => false, () => false), + new Promise((resolve2) => { + timer = setTimeout(() => resolve2(true), ms); + }) + ]); + } finally { + if (timer !== void 0) + clearTimeout(timer); + } +} +async function forceStop(client, work, log, requestOptions) { + try { + await client.beta.environments.work.stop( + work.id, + { environment_id: work.environment_id, force: true }, + // Caller's headers pass through; the helper-tag header is on the scoped + // sub-client's default_headers via copyClientForHelper, so no per-call + // re-stamping needed. + { ...requestOptions, headers: buildHeaders2([requestOptions?.headers]) } + ); + } catch (e) { + if (!isStatus(e, 409)) { + log.error("force-stop on exit failed", { work_id: work.id, error: String(e) }); + } + } +} +function serverLeaseState(e) { + let node = e instanceof APIError2 ? e.error : void 0; + for (const key of ["error", "details", "current_state"]) { + if (!isObj2(node)) + return {}; + node = node[key]; + } + return isObj2(node) ? node : {}; +} +async function heartbeatLoop(client, work, lease, logger, requestOptions, onLeaseTtl) { + let intervalMs = HEARTBEAT_DEFAULT_MS; + let ttlMs = HEARTBEAT_TTL_DEFAULT_MS; + let lastSuccessMs = Date.now(); + let last = NO_HEARTBEAT_SENTINEL; + const beat = async () => { + const beatCtrl = new AbortController(); + const detach = linkAbort(lease.signal, beatCtrl); + const cutoff = setTimeout(() => beatCtrl.abort(), intervalMs); + try { + const resp = await client.beta.environments.work.heartbeat(work.id, { environment_id: work.environment_id, expected_last_heartbeat: last }, { ...requestOptions, headers: buildHeaders2([requestOptions?.headers]), signal: beatCtrl.signal }); + lastSuccessMs = Date.now(); + last = resp.last_heartbeat; + if (resp.ttl_seconds > 0) { + ttlMs = resp.ttl_seconds * 1e3; + intervalMs = Math.max(1e3, Math.min(ttlMs / 2, HEARTBEAT_DEFAULT_MS)); + onLeaseTtl?.(ttlMs); + } + if (resp.state === "stopping" || resp.state === "stopped") { + logger.info("heartbeat signals shutdown", { work_id: work.id, state: resp.state }); + lease.finish("control_plane_stop"); + } + if (!resp.lease_extended) { + logger.warn("lease not extended, shutting down", { work_id: work.id }); + lease.finish("control_plane_stop"); + } + } catch (e) { + lease.signal.throwIfAborted(); + if (isStatus(e, 412)) { + const server = serverLeaseState(e); + logger.error("lease lost: heartbeat precondition failed", { + work_id: work.id, + server_state: server["state"], + server_ttl_seconds: server["ttl_seconds"], + server_last_heartbeat: server["last_heartbeat"] + }); + lease.finish("lease_lost"); + return; + } + if (isFatal4xx(e)) { + logger.error("permanent heartbeat failure", { work_id: work.id, error: String(e) }); + lease.finish("heartbeat_rejected"); + throw e; + } + if (Date.now() - lastSuccessMs > ttlMs) { + logger.error("lease assumed lost: no successful heartbeat in ttl", { + work_id: work.id, + ttl_ms: ttlMs, + error: String(e) + }); + lease.finish("assumed_lost"); + return; + } + logger.warn("transient heartbeat failure", { work_id: work.id, error: String(e) }); + } finally { + clearTimeout(cutoff); + detach(); + } + }; + await beat(); + while (!lease.signal.aborted) { + await sleep2(intervalMs, lease.signal); + lease.signal.throwIfAborted(); + await beat(); + } +} +var _EnvironmentWorker_instances, _EnvironmentWorker_signal, _EnvironmentWorker_handleItem, _Lease_ctrl, _Lease_endReason, HEARTBEAT_DEFAULT_MS, HEARTBEAT_TTL_DEFAULT_MS, NO_HEARTBEAT_SENTINEL, EnvironmentWorker, Lease; +var init_worker = __esm({ + "node_modules/@anthropic-ai/sdk/lib/environments/worker.mjs"() { + init_tslib2(); + init_error3(); + init_log2(); + init_base642(); + init_bytes2(); + init_env2(); + init_sleep2(); + init_backoff(); + init_abort3(); + init_values2(); + init_headers3(); + init_SessionToolRunner(); + init_poller(); + init_helper_client(); + init_sync_interval(); + HEARTBEAT_DEFAULT_MS = 3e4; + HEARTBEAT_TTL_DEFAULT_MS = 9e4; + NO_HEARTBEAT_SENTINEL = "NO_HEARTBEAT"; + EnvironmentWorker = /* @__PURE__ */ (() => { + class EnvironmentWorker2 { + constructor(opts) { + _EnvironmentWorker_instances.add(this); + _EnvironmentWorker_signal.set(this, void 0); + if (opts.unrestrictedPaths !== void 0) { + throw new AnthropicError("The `unrestrictedPaths` option you passed to EnvironmentWorker (or client.beta.environments.work.worker()) is no longer supported. The worker's file tools (read, write, edit, glob, grep) are now always confined to `workdir` plus the session's memory folders. Remove `unrestrictedPaths` from your options; to let the file tools reach any other directory, add it to `AgentToolContext.allowedRoots` from a `tools` factory."); + } + this.client = opts.client; + this.environmentId = opts.environmentId; + this.environmentKey = opts.environmentKey; + this.tools = opts.tools; + this.workdir = opts.workdir ?? process.cwd(); + this.maxFileBytes = opts.maxFileBytes; + this.maxIdleMs = opts.maxIdleMs; + if (opts.memorySyncIntervalMs != null) { + checkMemorySyncInterval(opts.memorySyncIntervalMs, "memorySyncIntervalMs"); + } + this.memorySyncIntervalMs = opts.memorySyncIntervalMs; + this.memorySyncDeletions = opts.memorySyncDeletions ?? "enabled"; + this.workerId = opts.workerId; + this.requestOptions = opts.requestOptions; + __classPrivateFieldSet2(this, _EnvironmentWorker_signal, opts.signal, "f"); + } + /** + * Poll the environment and service each claimed session until the supplied + * signal (or the one passed to the constructor) aborts. Throws if + * `environmentId` / `environmentKey` were not provided to the constructor. + */ + async run(signal) { + const { environmentId, environmentKey } = this; + if (environmentId === void 0 || environmentKey === void 0) { + throw new AnthropicError("EnvironmentWorker.run: environmentId and environmentKey are required to poll for work"); + } + const externalSignal = signal ?? __classPrivateFieldGet2(this, _EnvironmentWorker_signal, "f"); + const poller = new WorkPoller({ + client: this.client, + environmentId, + environmentKey, + ...this.workerId !== void 0 ? { workerId: this.workerId } : {}, + ...externalSignal ? { signal: externalSignal } : {}, + ...this.requestOptions !== void 0 ? { requestOptions: this.requestOptions } : {}, + // The per-item handler stops or releases every work item on exit; let it + // be the single owner of `work.stop` rather than double-posting from the + // poller. + autoStop: false + }); + for await (const work of poller) { + try { + await __classPrivateFieldGet2(this, _EnvironmentWorker_instances, "m", _EnvironmentWorker_handleItem).call(this, work, environmentKey, poller.signal); + } catch (e) { + if (poller.signal?.aborted) + throw e; + loggerFor2(this.client).error("work item failed", { work_id: work.id, error: String(e) }); + } + } + } + /** + * Service a single, already-claimed work item without the poll loop: build the + * per-session {@link AgentToolContext} (workdir from this worker's options), + * download the session agent's skills (`setupSkills`), run a + * {@link SessionToolRunner} for the session while heartbeating the work-item + * lease, and force-stop the work item on exit (whether the runner finishes + * normally, throws, or the control plane signals shutdown). The one + * exception is a lost lease: the item then belongs to the queue or another + * worker and is left alone. + * + * Use this when something else does the claiming — e.g. a `worker poll + * --on-work` script that hands an already-claimed item to a fresh process. The + * work id / environment id / session id each fall back to `ANTHROPIC_WORK_ID` / + * `ANTHROPIC_ENVIRONMENT_ID` / `ANTHROPIC_SESSION_ID` (the env vars that + * command sets) when not passed; the environment key resolves from this + * option, then the worker's own `environmentKey`, then + * `ANTHROPIC_ENVIRONMENT_KEY`, and is needed only when the work item's + * `secret` yields no sessions token — a host that receives only the + * per-item secret runs without ever holding the key. With no arguments + * inside that command it just works. Throws a clear error naming the first + * required value still missing after resolution, and — rather than ever + * running unauthenticated — when neither a sessions token nor an + * environment key resolved. Throws `SessionMemoryError` when the + * session has memory stores attached but they cannot be mounted — the work + * item carried no sessions token (unless `memorySyncIntervalMs` turned + * memory off), or a store failed to download. + * + * `workSecret` is the work item's per-item `secret` payload from the poll + * response, falling back to `ANTHROPIC_WORK_SECRET`; unlike the others it is + * optional — when present, the sessions token extracted from it is preferred + * as the Bearer credential for this item's heartbeat / force-stop / session + * calls; when absent (or undecodable) those calls use the environment key. + */ + async handleItem(opts) { + const workId = opts?.workId ?? readEnv2("ANTHROPIC_WORK_ID"); + const environmentId = opts?.environmentId ?? readEnv2("ANTHROPIC_ENVIRONMENT_ID"); + const sessionId = opts?.sessionId ?? readEnv2("ANTHROPIC_SESSION_ID"); + const environmentKey = (opts?.environmentKey ?? this.environmentKey ?? readEnv2("ANTHROPIC_ENVIRONMENT_KEY")) || void 0; + const workSecret = opts?.workSecret || readEnv2("ANTHROPIC_WORK_SECRET") || null; + if (!workId) { + throw new AnthropicError("handleItem: workId is required \u2014 pass it or set ANTHROPIC_WORK_ID"); + } + if (!environmentId) { + throw new AnthropicError("handleItem: environmentId is required \u2014 pass it or set ANTHROPIC_ENVIRONMENT_ID"); + } + if (!sessionId) { + throw new AnthropicError("handleItem: sessionId is required \u2014 pass it or set ANTHROPIC_SESSION_ID"); + } + if (!environmentKey && !workSecret) { + throw new AnthropicError("handleItem: environmentKey is required when there is no work secret \u2014 pass it, construct the worker with it, or set ANTHROPIC_ENVIRONMENT_KEY"); + } + const work = { + id: workId, + environment_id: environmentId, + secret: workSecret, + data: { type: "session", id: sessionId } + }; + await __classPrivateFieldGet2(this, _EnvironmentWorker_instances, "m", _EnvironmentWorker_handleItem).call(this, work, environmentKey, opts?.signal ?? __classPrivateFieldGet2(this, _EnvironmentWorker_signal, "f")); + } + } + _EnvironmentWorker_signal = /* @__PURE__ */ new WeakMap(), _EnvironmentWorker_instances = /* @__PURE__ */ new WeakSet(), _EnvironmentWorker_handleItem = /** + * The per-item body shared by {@link EnvironmentWorker.run}'s poll loop and + * {@link EnvironmentWorker.handleItem}: run a {@link SessionToolRunner} for the + * work item's session while heartbeating its lease, force-stopping on exit + * unless the lease was lost. Non-session work items are ignored. + * + * When the poll response carried a per-item `secret` (a short-lived payload + * scoped to this work item), the sessions token extracted from it is + * preferred over `environmentKey` as the Bearer credential for those + * per-item calls; a missing/undecodable secret falls back to + * `environmentKey` unchanged. + */ + async function _EnvironmentWorker_handleItem2(work, environmentKey, externalSignal) { + const log = loggerFor2(this.client); + const sessionsToken = sessionsTokenFromSecret(work.secret); + const itemCredential = sessionsToken ?? environmentKey; + if (itemCredential === void 0) { + throw new AnthropicError("handleItem: the work item carried a secret payload but no sessions token could be extracted, and there is no environment key to fall back to; the poller must issue a secret whose payload carries `sessions_token`, or provide the environment key (pass it, construct the worker with it, or set ANTHROPIC_ENVIRONMENT_KEY)"); + } + if (work.secret && sessionsToken === null) { + log.warn("work item carried a secret payload but no sessions token could be extracted; falling back to the environment key", { work_id: work.id }); + } + const sessionClient = copyClientForHelper(this.client, { + authToken: itemCredential, + helper: "environments-worker" + }); + const sessionId = work.data.id; + const ctrl = new AbortController(); + const detachExternal = linkAbort(externalSignal, ctrl); + const lease = new Lease(ctrl); + const agentToolset = await Promise.resolve().then(() => (init_node_browser2(), node_browser_exports2)); + let leaseTtlMs; + let runner; + const heartbeatPromise = heartbeatLoop(sessionClient, work, lease, log, this.requestOptions, (ttlMs) => { + leaseTtlMs = ttlMs; + runner?._setSendRetryWindow(ttlMs); + }).catch((e) => { + if (!ctrl.signal.aborted) + log.error("heartbeat loop failed", { work_id: work.id, error: String(e) }); + ctrl.abort(); + }); + let cleanupSkills = async () => { + }; + let stores; + let cleanEnd = false; + try { + if (work.data.type !== "session") { + log.debug("skipping non-session work item", { work_id: work.id, type: work.data.type }); + return; + } + const session = await sessionClient.beta.sessions.retrieve(sessionId); + if (sessionsToken === null && this.memorySyncIntervalMs !== null && hasMemoryStore(session)) { + throw new agentToolset.SessionMemoryError(`cannot mount the session's memories: the work item carried no sessions token (work_id=${work.id}, session_id=${sessionId}); the memory endpoints reject the environment key, so the poller must issue a per-item \`secret\` carrying \`sessions_token\`, or set \`memorySyncIntervalMs: null\` to run without memory`); + } + const ctx = { + workdir: this.workdir, + // The scoped sub-client, not the parent: the skill download + // `setupSkills` performs for this session rides the same per-item + // credential as every other per-item call. + client: sessionClient, + session, + ...this.maxFileBytes !== void 0 ? { maxFileBytes: this.maxFileBytes } : {} + }; + try { + cleanupSkills = await agentToolset.setupSkills(ctx); + } catch (e) { + log.warn("skill setup failed", { session_id: sessionId, work_id: work.id, error: String(e) }); + } + if (sessionsToken !== null && this.memorySyncIntervalMs !== null) { + stores = new agentToolset.SessionMemoryStores(sessionClient, { + workdir: this.workdir, + ...this.memorySyncIntervalMs !== void 0 ? { syncIntervalMs: this.memorySyncIntervalMs } : {}, + syncDeletions: this.memorySyncDeletions + }); + await stores.download(session); + ctx.allowedRoots = stores.roots; + ctx.readOnlyRoots = stores.readOnlyRoots; + } else { + log.debug("memory stores disabled for this item", { work_id: work.id }); + } + const tools = typeof this.tools === "function" ? this.tools(ctx) : this.tools ?? agentToolset.betaAgentToolset20260401(ctx); + runner = new SessionToolRunner(sessionId, { + client: sessionClient, + tools, + ...this.maxIdleMs !== void 0 ? { maxIdleMs: this.maxIdleMs } : {}, + ...this.requestOptions !== void 0 ? { requestOptions: this.requestOptions } : {}, + signal: ctrl.signal + }); + if (leaseTtlMs !== void 0) + runner._setSendRetryWindow(leaseTtlMs); + for await (const _ of runner) { + if (stores) + await stores.syncIfDue(); + } + cleanEnd = !ctrl.signal.aborted; + } finally { + try { + await cleanupSkills().catch((e) => { + log.warn("skill cleanup failed", { session_id: sessionId, work_id: work.id, error: String(e) }); + }); + } finally { + if (stores) { + const boundMs = agentToolset.MEMORY_FLUSH_TIMEOUT_MS; + if (cleanEnd) { + const finishCutOff = await withTimeout(stores.finish(), boundMs); + if (finishCutOff) { + log.warn(`final memory sync cut off after ${boundMs}ms; the flush that follows still uploads changed files`, { session_id: sessionId, work_id: work.id }); + } + } + const flushBound = new AbortController(); + const flushCutOff = await withTimeout(stores.flushWrites(flushBound.signal), boundMs); + if (flushCutOff) { + flushBound.abort(); + log.warn(`memory flush cut off after ${boundMs}ms; changed files it had not uploaded yet are not saved`, { session_id: sessionId, work_id: work.id }); + } + await stores.dispose().catch((e) => { + log.warn("memory store cleanup failed", { + session_id: sessionId, + work_id: work.id, + error: String(e) + }); + }); + } + } + lease.finish("runner_done"); + detachExternal(); + await heartbeatPromise; + if (lease.lost) { + log.info("lease lost; released without stopping it", { session_id: sessionId, work_id: work.id }); + } else { + await forceStop(sessionClient, work, log, this.requestOptions); + } + } + }; + return EnvironmentWorker2; + })(); + Lease = /* @__PURE__ */ (() => { + class Lease2 { + constructor(ctrl) { + _Lease_ctrl.set(this, void 0); + _Lease_endReason.set(this, void 0); + __classPrivateFieldSet2(this, _Lease_ctrl, ctrl, "f"); + } + get signal() { + return __classPrivateFieldGet2(this, _Lease_ctrl, "f").signal; + } + finish(reason) { + __classPrivateFieldSet2(this, _Lease_endReason, __classPrivateFieldGet2(this, _Lease_endReason, "f") ?? reason, "f"); + __classPrivateFieldGet2(this, _Lease_ctrl, "f").abort(); + } + /** True once the item belongs to the queue or another worker. */ + get lost() { + return __classPrivateFieldGet2(this, _Lease_endReason, "f") === "lease_lost" || __classPrivateFieldGet2(this, _Lease_endReason, "f") === "assumed_lost"; + } + } + _Lease_ctrl = /* @__PURE__ */ new WeakMap(), _Lease_endReason = /* @__PURE__ */ new WeakMap(); + return Lease2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/environments/work.mjs +var Work; +var init_work = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/environments/work.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + init_poller(); + init_worker(); + Work = /* @__PURE__ */ (() => { + class Work2 extends APIResource2 { + /** + * Note: these endpoints are called automatically by the pre-built environment + * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted + * sandbox environments. They are included here as a reference; you do not need to + * invoke them directly. + * + * Retrieve detailed information about a specific work item. + * + * @example + * ```ts + * const betaSelfHostedWork = + * await client.beta.environments.work.retrieve('work_id', { + * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * }); + * ``` + */ + retrieve(workID, params, options) { + const { environment_id, betas, workspace_id } = params; + return this._client.get(path3`/v1/environments/${environment_id}/work/${workID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Note: these endpoints are called automatically by the pre-built environment + * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted + * sandbox environments. They are included here as a reference; you do not need to + * invoke them directly. + * + * Update work item metadata with merge semantics. + * + * @example + * ```ts + * const betaSelfHostedWork = + * await client.beta.environments.work.update('work_id', { + * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * metadata: { foo: 'string' }, + * }); + * ``` + */ + update(workID, params, options) { + const { environment_id, betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/environments/${environment_id}/work/${workID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Note: these endpoints are called automatically by the pre-built environment + * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted + * sandbox environments. They are included here as a reference; you do not need to + * invoke them directly. + * + * List work items in an environment. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaSelfHostedWork of client.beta.environments.work.list( + * 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * )) { + * // ... + * } + * ``` + */ + list(environmentID, params = {}, options) { + const { betas, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/environments/${environmentID}/work?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString() }, + options?.headers + ]) + }); + } + /** + * Note: these endpoints are called automatically by the pre-built environment + * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted + * sandbox environments. They are included here as a reference; you do not need to + * invoke them directly. + * + * Acknowledge receipt of a work item, transitioning it from 'queued' to 'starting' + * and removing it from the queue. + * + * @example + * ```ts + * const betaSelfHostedWork = + * await client.beta.environments.work.ack('work_id', { + * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * }); + * ``` + */ + ack(workID, params, options) { + const { environment_id, betas } = params; + return this._client.post(path3`/v1/environments/${environment_id}/work/${workID}/ack?beta=true`, { + ...options, + headers: buildHeaders2([ + { "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString() }, + options?.headers + ]) + }); + } + /** + * Note: these endpoints are called automatically by the pre-built environment + * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted + * sandbox environments. They are included here as a reference; you do not need to + * invoke them directly. + * + * Record a heartbeat for a work item to maintain the lease. + * + * @example + * ```ts + * const betaSelfHostedWorkHeartbeatResponse = + * await client.beta.environments.work.heartbeat('work_id', { + * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * }); + * ``` + */ + heartbeat(workID, params, options) { + const { environment_id, desired_ttl_seconds, expected_last_heartbeat, betas } = params; + return this._client.post(path3`/v1/environments/${environment_id}/work/${workID}/heartbeat?beta=true`, { + query: { desired_ttl_seconds, expected_last_heartbeat }, + ...options, + headers: buildHeaders2([ + { "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString() }, + options?.headers + ]) + }); + } + /** + * Note: these endpoints are called automatically by the pre-built environment + * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted + * sandbox environments. They are included here as a reference; you do not need to + * invoke them directly. + * + * Long poll for work items in the queue. + * + * @example + * ```ts + * const betaSelfHostedWork = + * await client.beta.environments.work.poll( + * 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * ); + * ``` + */ + poll(environmentID, params = {}, options) { + const { betas, "Anthropic-Worker-ID": anthropicWorkerID, ...query } = params ?? {}; + return this._client.get(path3`/v1/environments/${environmentID}/work/poll?beta=true`, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...anthropicWorkerID != null ? { "Anthropic-Worker-ID": anthropicWorkerID } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Get statistics about the work queue for an environment. + * + * @example + * ```ts + * const betaSelfHostedWorkQueueStats = + * await client.beta.environments.work.stats( + * 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * ); + * ``` + */ + stats(environmentID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/environments/${environmentID}/work/stats?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Note: these endpoints are called automatically by the pre-built environment + * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted + * sandbox environments. They are included here as a reference; you do not need to + * invoke them directly. + * + * Stop a work item, initiating graceful or forced shutdown. + * + * @example + * ```ts + * const betaSelfHostedWork = + * await client.beta.environments.work.stop('work_id', { + * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * }); + * ``` + */ + stop(workID, params, options) { + const { environment_id, betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/environments/${environment_id}/work/${workID}/stop?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Continuously claim work from a self-hosted environment, ack each item, + * and yield it. Posts `stop` automatically when the consumer's loop body + * returns or when iteration ends. + * + * @example + * ```ts + * for await (const work of client.beta.environments.work.poller({ + * environmentId, + * environmentKey, + * })) { + * if (work.data.type !== 'session') continue; + * // ...service the work... + * } + * ``` + */ + poller(opts) { + return new WorkPoller({ ...opts, client: this._client }); + } + worker(opts) { + return new EnvironmentWorker({ ...opts, client: this._client }); + } + } + Work2.WorkPoller = WorkPoller; + Work2.EnvironmentWorker = EnvironmentWorker; + return Work2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/environments/environments.mjs +var Environments2; +var init_environments2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/environments/environments.mjs"() { + init_resource2(); + init_work(); + init_work(); + init_pagination2(); + init_headers3(); + init_path2(); + Environments2 = /* @__PURE__ */ (() => { + class Environments3 extends APIResource2 { + constructor() { + super(...arguments); + this.work = new Work(this._client); + } + /** + * Create a new environment with the specified configuration. + * + * @example + * ```ts + * const betaEnvironment = + * await client.beta.environments.create({ + * name: 'python-data-analysis', + * }); + * ``` + */ + create(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/environments?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Retrieve a specific environment by ID. + * + * @example + * ```ts + * const betaEnvironment = + * await client.beta.environments.retrieve( + * 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * ); + * ``` + */ + retrieve(environmentID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/environments/${environmentID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Update an existing environment's configuration. + * + * @example + * ```ts + * const betaEnvironment = + * await client.beta.environments.update( + * 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * ); + * ``` + */ + update(environmentID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/environments/${environmentID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List environments with pagination support. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaEnvironment of client.beta.environments.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/environments?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Delete an environment by ID. Returns a confirmation of the deletion. + * + * @example + * ```ts + * const betaEnvironmentDeleteResponse = + * await client.beta.environments.delete( + * 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * ); + * ``` + */ + delete(environmentID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.delete(path3`/v1/environments/${environmentID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Archive an environment by ID. Archived environments cannot be used to create new + * sessions. + * + * @example + * ```ts + * const betaEnvironment = + * await client.beta.environments.archive( + * 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * ); + * ``` + */ + archive(environmentID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/environments/${environmentID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + } + Environments3.Work = Work; + return Environments3; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memories.mjs +var Memories; +var init_memories = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memories.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Memories = class extends APIResource2 { + /** + * Create a memory + * + * @example + * ```ts + * const betaManagedAgentsMemory = + * await client.beta.memoryStores.memories.create( + * 'memory_store_id', + * { content: 'content', path: 'xx' }, + * ); + * ``` + */ + create(memoryStoreID, params, options) { + const { view: view2, betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/memory_stores/${memoryStoreID}/memories?beta=true`, { + query: { view: view2 }, + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Retrieve a memory + * + * @example + * ```ts + * const betaManagedAgentsMemory = + * await client.beta.memoryStores.memories.retrieve( + * 'memory_id', + * { memory_store_id: 'memory_store_id' }, + * ); + * ``` + */ + retrieve(memoryID, params, options) { + const { memory_store_id, betas, workspace_id, ...query } = params; + return this._client.get(path3`/v1/memory_stores/${memory_store_id}/memories/${memoryID}?beta=true`, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Update a memory + * + * @example + * ```ts + * const betaManagedAgentsMemory = + * await client.beta.memoryStores.memories.update( + * 'memory_id', + * { memory_store_id: 'memory_store_id' }, + * ); + * ``` + */ + update(memoryID, params, options) { + const { memory_store_id, view: view2, betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/memory_stores/${memory_store_id}/memories/${memoryID}?beta=true`, { + query: { view: view2 }, + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List memories + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsMemoryListItem of client.beta.memoryStores.memories.list( + * 'memory_store_id', + * )) { + * // ... + * } + * ``` + */ + list(memoryStoreID, params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/memory_stores/${memoryStoreID}/memories?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Delete a memory + * + * @example + * ```ts + * const betaManagedAgentsDeletedMemory = + * await client.beta.memoryStores.memories.delete( + * 'memory_id', + * { memory_store_id: 'memory_store_id' }, + * ); + * ``` + */ + delete(memoryID, params, options) { + const { memory_store_id, expected_content_sha256, betas, workspace_id } = params; + return this._client.delete(path3`/v1/memory_stores/${memory_store_id}/memories/${memoryID}?beta=true`, { + query: { expected_content_sha256 }, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-versions.mjs +var MemoryVersions; +var init_memory_versions = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-versions.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + MemoryVersions = class extends APIResource2 { + /** + * Retrieve a memory version + * + * @example + * ```ts + * const betaManagedAgentsMemoryVersion = + * await client.beta.memoryStores.memoryVersions.retrieve( + * 'memory_version_id', + * { memory_store_id: 'memory_store_id' }, + * ); + * ``` + */ + retrieve(memoryVersionID, params, options) { + const { memory_store_id, betas, workspace_id, ...query } = params; + return this._client.get(path3`/v1/memory_stores/${memory_store_id}/memory_versions/${memoryVersionID}?beta=true`, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List memory versions + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsMemoryVersion of client.beta.memoryStores.memoryVersions.list( + * 'memory_store_id', + * )) { + * // ... + * } + * ``` + */ + list(memoryStoreID, params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/memory_stores/${memoryStoreID}/memory_versions?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Redact a memory version + * + * @example + * ```ts + * const betaManagedAgentsMemoryVersion = + * await client.beta.memoryStores.memoryVersions.redact( + * 'memory_version_id', + * { memory_store_id: 'memory_store_id' }, + * ); + * ``` + */ + redact(memoryVersionID, params, options) { + const { memory_store_id, betas, workspace_id } = params; + return this._client.post(path3`/v1/memory_stores/${memory_store_id}/memory_versions/${memoryVersionID}/redact?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-stores.mjs +var MemoryStores; +var init_memory_stores = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-stores.mjs"() { + init_resource2(); + init_memories(); + init_memories(); + init_memory_versions(); + init_memory_versions(); + init_pagination2(); + init_headers3(); + init_path2(); + MemoryStores = /* @__PURE__ */ (() => { + class MemoryStores2 extends APIResource2 { + constructor() { + super(...arguments); + this.memories = new Memories(this._client); + this.memoryVersions = new MemoryVersions(this._client); + } + /** + * Create a memory store + * + * @example + * ```ts + * const betaManagedAgentsMemoryStore = + * await client.beta.memoryStores.create({ name: 'x' }); + * ``` + */ + create(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/memory_stores?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Retrieve a memory store + * + * @example + * ```ts + * const betaManagedAgentsMemoryStore = + * await client.beta.memoryStores.retrieve( + * 'memory_store_id', + * ); + * ``` + */ + retrieve(memoryStoreID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/memory_stores/${memoryStoreID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Update a memory store + * + * @example + * ```ts + * const betaManagedAgentsMemoryStore = + * await client.beta.memoryStores.update('memory_store_id'); + * ``` + */ + update(memoryStoreID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/memory_stores/${memoryStoreID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List memory stores + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsMemoryStore of client.beta.memoryStores.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/memory_stores?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Delete a memory store + * + * @example + * ```ts + * const betaManagedAgentsDeletedMemoryStore = + * await client.beta.memoryStores.delete('memory_store_id'); + * ``` + */ + delete(memoryStoreID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.delete(path3`/v1/memory_stores/${memoryStoreID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Archive a memory store + * + * @example + * ```ts + * const betaManagedAgentsMemoryStore = + * await client.beta.memoryStores.archive('memory_store_id'); + * ``` + */ + archive(memoryStoreID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/memory_stores/${memoryStoreID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + } + MemoryStores2.Memories = Memories; + MemoryStores2.MemoryVersions = MemoryVersions; + return MemoryStores2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/error.mjs +var init_error4 = __esm({ + "node_modules/@anthropic-ai/sdk/error.mjs"() { + init_error3(); + } +}); + +// node_modules/@anthropic-ai/sdk/internal/decoders/jsonl.mjs +var JSONLDecoder; +var init_jsonl = __esm({ + "node_modules/@anthropic-ai/sdk/internal/decoders/jsonl.mjs"() { + init_error3(); + init_shims2(); + init_line2(); + JSONLDecoder = /* @__PURE__ */ (() => { + class JSONLDecoder2 { + constructor(iterator, controller) { + this.iterator = iterator; + this.controller = controller; + } + async *decoder() { + const lineDecoder = new LineDecoder2(); + for await (const chunk of this.iterator) { + for (const line of lineDecoder.decode(chunk)) { + yield JSON.parse(line); + } + } + for (const line of lineDecoder.flush()) { + yield JSON.parse(line); + } + } + [Symbol.asyncIterator]() { + return this.decoder(); + } + static fromResponse(response, controller) { + if (!response.body) { + controller.abort(); + if (typeof globalThis.navigator !== "undefined" && globalThis.navigator.product === "ReactNative") { + throw new AnthropicError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`); + } + throw new AnthropicError(`Attempted to iterate over a response with no body`); + } + return new JSONLDecoder2(ReadableStreamToAsyncIterable2(response.body), controller); + } + } + return JSONLDecoder2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/messages/batches.mjs +var Batches2; +var init_batches2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/messages/batches.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_jsonl(); + init_error4(); + init_path2(); + Batches2 = class extends APIResource2 { + /** + * Send a batch of Message creation requests. + * + * The Message Batches API can be used to process multiple Messages API requests at + * once. Once a Message Batch is created, it begins processing immediately. Batches + * can take up to 24 hours to complete. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * const betaMessageBatch = + * await client.beta.messages.batches.create({ + * requests: [ + * { + * custom_id: 'my-custom-id-1', + * params: { + * max_tokens: 1024, + * messages: [ + * { content: 'Hello, world', role: 'user' }, + * ], + * model: 'claude-opus-5', + * }, + * }, + * ], + * }); + * ``` + */ + create(params, options) { + const { betas, user_profile_id, workspace_id, ...body } = params; + return this._client.post("/v1/messages/batches?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), + ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * This endpoint is idempotent and can be used to poll for Message Batch + * completion. To access the results of a Message Batch, make a request to the + * `results_url` field in the response. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * const betaMessageBatch = + * await client.beta.messages.batches.retrieve( + * 'message_batch_id', + * ); + * ``` + */ + retrieve(messageBatchID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/messages/batches/${messageBatchID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List all Message Batches within a Workspace. Most recently created batches are + * returned first. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaMessageBatch of client.beta.messages.batches.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/messages/batches?beta=true", Page2, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Delete a Message Batch. + * + * Message Batches can only be deleted once they've finished processing. If you'd + * like to delete an in-progress batch, you must first cancel it. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * const betaDeletedMessageBatch = + * await client.beta.messages.batches.delete( + * 'message_batch_id', + * ); + * ``` + */ + delete(messageBatchID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.delete(path3`/v1/messages/batches/${messageBatchID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Batches may be canceled any time before processing ends. Once cancellation is + * initiated, the batch enters a `canceling` state, at which time the system may + * complete any in-progress, non-interruptible requests before finalizing + * cancellation. + * + * The number of canceled requests is specified in `request_counts`. To determine + * which requests were canceled, check the individual results within the batch. + * Note that cancellation may not result in any canceled requests if they were + * non-interruptible. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * const betaMessageBatch = + * await client.beta.messages.batches.cancel( + * 'message_batch_id', + * ); + * ``` + */ + cancel(messageBatchID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/messages/batches/${messageBatchID}/cancel?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Streams the results of a Message Batch as a `.jsonl` file. + * + * Each line in the file is a JSON object containing the result of a single request + * in the Message Batch. Results are not guaranteed to be in the same order as + * requests. Use the `custom_id` field to match results to requests. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * const betaMessageBatchIndividualResponse = + * await client.beta.messages.batches.results( + * 'message_batch_id', + * ); + * ``` + */ + async results(messageBatchID, params = {}, options) { + const batch = await this.retrieve(messageBatchID, params, options); + if (!batch.results_url) { + throw new AnthropicError(`No batch \`results_url\`; Has it finished processing? ${batch.processing_status} - ${batch.id}`); + } + const { betas, workspace_id } = params ?? {}; + return this._client.get(batch.results_url, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), + Accept: "application/binary", + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]), + stream: true, + __binaryResponse: true + })._thenUnwrap((_, props) => JSONLDecoder.fromResponse(props.response, props.controller)); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/constants.mjs +var MODEL_NONSTREAMING_TOKENS; +var init_constants = __esm({ + "node_modules/@anthropic-ai/sdk/internal/constants.mjs"() { + MODEL_NONSTREAMING_TOKENS = { + "claude-opus-4@20250514": 8192, + "anthropic.claude-opus-4-1-20250805-v1:0": 8192, + "claude-opus-4-1@20250805": 8192 + }; + } +}); + +// node_modules/@anthropic-ai/sdk/lib/beta-parser.mjs +function getOutputFormat(params) { + return params?.output_format ?? params?.output_config?.format; +} +function maybeParseBetaMessage(message, params, opts) { + const outputFormat = getOutputFormat(params); + if (!params || !("parse" in (outputFormat ?? {}))) { + return { + ...message, + content: message.content.map((block) => { + if (block.type === "text") { + const parsedBlock = Object.defineProperty({ ...block }, "parsed_output", { + value: null, + enumerable: false + }); + return Object.defineProperty(parsedBlock, "parsed", { + get() { + opts.logger.warn("The `parsed` property on `text` blocks is deprecated, please use `parsed_output` instead."); + return null; + }, + enumerable: false + }); + } + return block; + }), + parsed_output: null + }; + } + return parseBetaMessage(message, params, opts); +} +function parseBetaMessage(message, params, opts) { + let firstParsedOutput = null; + const content = message.content.map((block) => { + if (block.type === "text") { + const parsedOutput = parseBetaOutputFormat(params, block.text); + if (firstParsedOutput === null) { + firstParsedOutput = parsedOutput; + } + const parsedBlock = Object.defineProperty({ ...block }, "parsed_output", { + value: parsedOutput, + enumerable: false + }); + return Object.defineProperty(parsedBlock, "parsed", { + get() { + opts.logger.warn("The `parsed` property on `text` blocks is deprecated, please use `parsed_output` instead."); + return parsedOutput; + }, + enumerable: false + }); + } + return block; + }); + return { + ...message, + content, + parsed_output: firstParsedOutput + }; +} +function parseBetaOutputFormat(params, content) { + const outputFormat = getOutputFormat(params); + if (outputFormat?.type !== "json_schema") { + return null; + } + try { + if ("parse" in outputFormat) { + return outputFormat.parse(content); + } + return JSON.parse(content); + } catch (error) { + throw new AnthropicError(`Failed to parse structured output: ${error}`); + } +} +var init_beta_parser = __esm({ + "node_modules/@anthropic-ai/sdk/lib/beta-parser.mjs"() { + init_error3(); + } +}); + +// node_modules/@anthropic-ai/sdk/streaming.mjs +var init_streaming4 = __esm({ + "node_modules/@anthropic-ai/sdk/streaming.mjs"() { + init_streaming3(); + } +}); + +// node_modules/@anthropic-ai/sdk/_vendor/partial-json-parser/parser.mjs +var tokenize, strip, unstrip, generate, partialParse3; +var init_parser3 = __esm({ + "node_modules/@anthropic-ai/sdk/_vendor/partial-json-parser/parser.mjs"() { + tokenize = (input) => { + let current = 0; + let tokens = []; + while (current < input.length) { + let char = input[current]; + if (char === "\\") { + current++; + continue; + } + if (char === "{") { + tokens.push({ + type: "brace", + value: "{" + }); + current++; + continue; + } + if (char === "}") { + tokens.push({ + type: "brace", + value: "}" + }); + current++; + continue; + } + if (char === "[") { + tokens.push({ + type: "paren", + value: "[" + }); + current++; + continue; + } + if (char === "]") { + tokens.push({ + type: "paren", + value: "]" + }); + current++; + continue; + } + if (char === ":") { + tokens.push({ + type: "separator", + value: ":" + }); + current++; + continue; + } + if (char === ",") { + tokens.push({ + type: "delimiter", + value: "," + }); + current++; + continue; + } + if (char === '"') { + const start = current + 1; + let end = start; + let danglingQuote = false; + while (true) { + end = input.indexOf('"', end); + if (end === -1) { + danglingQuote = true; + break; + } + let backslashes = 0; + let i = end - 1; + while (i >= start && input[i] === "\\") { + backslashes++; + i--; + } + if (backslashes % 2 === 0) + break; + end++; + } + if (danglingQuote) { + current = input.length; + } else { + tokens.push({ + type: "string", + value: input.slice(start, end) + }); + current = end + 1; + } + continue; + } + let WHITESPACE = /\s/; + if (char && WHITESPACE.test(char)) { + current++; + continue; + } + let NUMBERS = /[0-9]/; + if (char && NUMBERS.test(char) || char === "-" || char === ".") { + let value2 = ""; + if (char === "-") { + value2 += char; + char = input[++current]; + } + while (char && (NUMBERS.test(char) || char === "." || // exponent marker, e.g. `1e10` or `1.5E-9` + char === "e" || char === "E" || // exponent sign, only valid immediately after the exponent marker + (char === "-" || char === "+") && (value2[value2.length - 1] === "e" || value2[value2.length - 1] === "E"))) { + value2 += char; + char = input[++current]; + } + tokens.push({ + type: "number", + value: value2, + unterminated: current === input.length + }); + continue; + } + let LETTERS = /[a-z]/i; + if (char && LETTERS.test(char)) { + let value2 = ""; + while (char && LETTERS.test(char)) { + if (current === input.length) { + break; + } + value2 += char; + char = input[++current]; + } + if (value2 == "true" || value2 == "false" || value2 === "null") { + tokens.push({ + type: "name", + value: value2 + }); + } else { + current++; + continue; + } + continue; + } + current++; + } + return tokens; + }; + strip = (tokens) => { + let open = []; + for (const token of tokens) { + if (token.type === "brace" || token.type === "paren") { + if (token.value === "{" || token.value === "[") { + open.push(token.value); + } else { + open.pop(); + } + } + } + let innermostOpenBracket = open[open.length - 1]; + let length = tokens.length; + let JSON_NUMBER = /^-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][-+]?[0-9]+)?$/; + while (length > 0) { + let lastToken = tokens[length - 1]; + switch (lastToken.type) { + case "separator": + length--; + continue; + case "number": + if (lastToken.unterminated || !JSON_NUMBER.test(lastToken.value)) { + length--; + continue; + } + break; + case "string": + let tokenBeforeTheLastToken = tokens[length - 2]; + if (innermostOpenBracket === "{" && (tokenBeforeTheLastToken?.type === "delimiter" || tokenBeforeTheLastToken?.type === "brace" && tokenBeforeTheLastToken.value === "{")) { + length--; + continue; + } + break; + case "delimiter": + length--; + break; + } + break; + } + return tokens.slice(0, length); + }; + unstrip = (tokens) => { + let tail = []; + tokens.map((token) => { + if (token.type === "brace") { + if (token.value === "{") { + tail.push("}"); + } else { + tail.splice(tail.lastIndexOf("}"), 1); + } + } + if (token.type === "paren") { + if (token.value === "[") { + tail.push("]"); + } else { + tail.splice(tail.lastIndexOf("]"), 1); + } + } + }); + if (tail.length > 0) { + tail.reverse().map((item) => { + if (item === "}") { + tokens.push({ + type: "brace", + value: "}" + }); + } else if (item === "]") { + tokens.push({ + type: "paren", + value: "]" + }); + } + }); + } + return tokens; + }; + generate = (tokens) => { + let output = ""; + tokens.map((token) => { + switch (token.type) { + case "string": + output += '"' + token.value + '"'; + break; + default: + output += token.value; + break; + } + }); + return output; + }; + partialParse3 = (input) => JSON.parse(generate(unstrip(strip(tokenize(input))))); + } +}); + +// node_modules/@anthropic-ai/sdk/internal/message-stream-utils.mjs +function withLazyInput(prev, jsonBuf) { + const next = {}; + for (const key of Object.keys(prev)) { + if (key !== "input") + next[key] = prev[key]; + } + Object.defineProperty(next, JSON_BUF_PROPERTY, { value: jsonBuf, enumerable: false, writable: true }); + let input; + let parsed = false; + Object.defineProperty(next, "input", { + enumerable: true, + configurable: true, + get() { + if (!parsed) { + input = jsonBuf ? partialParse3(jsonBuf) : {}; + parsed = true; + } + return input; + } + }); + return next; +} +var JSON_BUF_PROPERTY; +var init_message_stream_utils = __esm({ + "node_modules/@anthropic-ai/sdk/internal/message-stream-utils.mjs"() { + init_parser3(); + JSON_BUF_PROPERTY = "__json_buf"; + } +}); + +// node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.mjs +function tracksToolInput(content) { + return content.type === "tool_use" || content.type === "server_tool_use" || content.type === "mcp_tool_use"; +} +var _BetaMessageStream_instances, _BetaMessageStream_currentMessageSnapshot, _BetaMessageStream_params, _BetaMessageStream_connectedPromise, _BetaMessageStream_resolveConnectedPromise, _BetaMessageStream_rejectConnectedPromise, _BetaMessageStream_endPromise, _BetaMessageStream_resolveEndPromise, _BetaMessageStream_rejectEndPromise, _BetaMessageStream_listeners, _BetaMessageStream_ended, _BetaMessageStream_errored, _BetaMessageStream_aborted, _BetaMessageStream_catchingPromiseCreated, _BetaMessageStream_response, _BetaMessageStream_request_id, _BetaMessageStream_workspace_id, _BetaMessageStream_logger, _BetaMessageStream_getFinalMessage, _BetaMessageStream_getFinalText, _BetaMessageStream_handleError, _BetaMessageStream_beginRequest, _BetaMessageStream_addStreamEvent, _BetaMessageStream_endRequest, _BetaMessageStream_accumulateMessage, _BetaMessageStream_toolInputParseError, BetaMessageStream; +var init_BetaMessageStream = __esm({ + "node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.mjs"() { + init_tslib2(); + init_stainless_helper_header(); + init_error4(); + init_errors2(); + init_values2(); + init_streaming4(); + init_beta_parser(); + init_message_stream_utils(); + BetaMessageStream = /* @__PURE__ */ (() => { + class BetaMessageStream2 { + constructor(params, opts) { + _BetaMessageStream_instances.add(this); + this.messages = []; + this.receivedMessages = []; + _BetaMessageStream_currentMessageSnapshot.set(this, void 0); + _BetaMessageStream_params.set(this, null); + this.controller = new AbortController(); + _BetaMessageStream_connectedPromise.set(this, void 0); + _BetaMessageStream_resolveConnectedPromise.set(this, () => { + }); + _BetaMessageStream_rejectConnectedPromise.set(this, () => { + }); + _BetaMessageStream_endPromise.set(this, void 0); + _BetaMessageStream_resolveEndPromise.set(this, () => { + }); + _BetaMessageStream_rejectEndPromise.set(this, () => { + }); + _BetaMessageStream_listeners.set(this, {}); + _BetaMessageStream_ended.set(this, false); + _BetaMessageStream_errored.set(this, false); + _BetaMessageStream_aborted.set(this, false); + _BetaMessageStream_catchingPromiseCreated.set(this, false); + _BetaMessageStream_response.set(this, void 0); + _BetaMessageStream_request_id.set(this, void 0); + _BetaMessageStream_workspace_id.set(this, void 0); + _BetaMessageStream_logger.set(this, void 0); + _BetaMessageStream_handleError.set(this, (error) => { + __classPrivateFieldSet2(this, _BetaMessageStream_errored, true, "f"); + if (isAbortError2(error)) { + error = new APIUserAbortError2(); + } + if (error instanceof APIUserAbortError2) { + __classPrivateFieldSet2(this, _BetaMessageStream_aborted, true, "f"); + return this._emit("abort", error); + } + if (error instanceof AnthropicError) { + return this._emit("error", error); + } + if (error instanceof Error) { + const anthropicError = new AnthropicError(error.message); + anthropicError.cause = error; + return this._emit("error", anthropicError); + } + return this._emit("error", new AnthropicError(String(error))); + }); + __classPrivateFieldSet2(this, _BetaMessageStream_connectedPromise, new Promise((resolve2, reject2) => { + __classPrivateFieldSet2(this, _BetaMessageStream_resolveConnectedPromise, resolve2, "f"); + __classPrivateFieldSet2(this, _BetaMessageStream_rejectConnectedPromise, reject2, "f"); + }), "f"); + __classPrivateFieldSet2(this, _BetaMessageStream_endPromise, new Promise((resolve2, reject2) => { + __classPrivateFieldSet2(this, _BetaMessageStream_resolveEndPromise, resolve2, "f"); + __classPrivateFieldSet2(this, _BetaMessageStream_rejectEndPromise, reject2, "f"); + }), "f"); + __classPrivateFieldGet2(this, _BetaMessageStream_connectedPromise, "f").catch(() => { + }); + __classPrivateFieldGet2(this, _BetaMessageStream_endPromise, "f").catch(() => { + }); + __classPrivateFieldSet2(this, _BetaMessageStream_params, params, "f"); + __classPrivateFieldSet2(this, _BetaMessageStream_logger, opts?.logger ?? console, "f"); + } + get response() { + return __classPrivateFieldGet2(this, _BetaMessageStream_response, "f"); + } + get request_id() { + return __classPrivateFieldGet2(this, _BetaMessageStream_request_id, "f"); + } + get workspace_id() { + return __classPrivateFieldGet2(this, _BetaMessageStream_workspace_id, "f"); + } + /** + * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request, + * returned vie the `request-id` header which is useful for debugging requests and resporting + * issues to Anthropic. + * + * This is the same as the `APIPromise.withResponse()` method. + * + * This method will raise an error if you created the stream using `MessageStream.fromReadableStream` + * as no `Response` is available. + */ + async withResponse() { + __classPrivateFieldSet2(this, _BetaMessageStream_catchingPromiseCreated, true, "f"); + const response = await __classPrivateFieldGet2(this, _BetaMessageStream_connectedPromise, "f"); + if (!response) { + throw new Error("Could not resolve a `Response` object"); + } + return { + data: this, + response, + request_id: response.headers.get("request-id"), + workspace_id: response.headers.get("anthropic-workspace-id") + }; + } + /** + * Intended for use on the frontend, consuming a stream produced with + * `.toReadableStream()` on the backend. + * + * Note that messages sent to the model do not appear in `.on('message')` + * in this context. + */ + static fromReadableStream(stream5) { + const runner = new BetaMessageStream2(null); + runner._run(() => runner._fromReadableStream(stream5)); + return runner; + } + static createMessage(messages, params, options, { logger } = {}) { + const runner = new BetaMessageStream2(params, { logger }); + for (const message of params.messages) { + runner._addMessageParam(message); + } + __classPrivateFieldSet2(runner, _BetaMessageStream_params, { ...params, stream: true }, "f"); + runner._run(() => runner._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, [STAINLESS_HELPER_METHOD_HEADER]: "stream" } })); + return runner; + } + _run(executor) { + executor().then(() => { + this._emitFinal(); + this._emit("end"); + }, __classPrivateFieldGet2(this, _BetaMessageStream_handleError, "f")); + } + _addMessageParam(message) { + this.messages.push(message); + } + _addMessage(message, emit2 = true) { + this.receivedMessages.push(message); + if (emit2) { + this._emit("message", message); + } + } + async _createMessage(messages, params, options) { + const signal = options?.signal; + let abortHandler; + if (signal) { + if (signal.aborted) + this.controller.abort(); + abortHandler = this.controller.abort.bind(this.controller); + signal.addEventListener("abort", abortHandler); + } + try { + __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_beginRequest).call(this); + const { response, data: stream5 } = await messages.create({ ...params, stream: true }, { ...options, signal: this.controller.signal }).withResponse(); + this._connected(response); + for await (const event of stream5) { + __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_addStreamEvent).call(this, event); + } + if (stream5.controller.signal?.aborted) { + throw new APIUserAbortError2(); + } + __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_endRequest).call(this); + } finally { + if (signal && abortHandler) { + signal.removeEventListener("abort", abortHandler); + } + } + } + _connected(response) { + if (this.ended) + return; + __classPrivateFieldSet2(this, _BetaMessageStream_response, response, "f"); + __classPrivateFieldSet2(this, _BetaMessageStream_request_id, response?.headers.get("request-id"), "f"); + __classPrivateFieldSet2(this, _BetaMessageStream_workspace_id, response?.headers.get("anthropic-workspace-id"), "f"); + __classPrivateFieldGet2(this, _BetaMessageStream_resolveConnectedPromise, "f").call(this, response); + this._emit("connect"); + } + get ended() { + return __classPrivateFieldGet2(this, _BetaMessageStream_ended, "f"); + } + get errored() { + return __classPrivateFieldGet2(this, _BetaMessageStream_errored, "f"); + } + get aborted() { + return __classPrivateFieldGet2(this, _BetaMessageStream_aborted, "f"); + } + abort() { + this.controller.abort(); + } + /** + * Adds the listener function to the end of the listeners array for the event. + * No checks are made to see if the listener has already been added. Multiple calls passing + * the same combination of event and listener will result in the listener being added, and + * called, multiple times. + * @returns this MessageStream, so that calls can be chained + */ + on(event, listener) { + const listeners = __classPrivateFieldGet2(this, _BetaMessageStream_listeners, "f")[event] || (__classPrivateFieldGet2(this, _BetaMessageStream_listeners, "f")[event] = []); + listeners.push({ listener }); + return this; + } + /** + * Removes the specified listener from the listener array for the event. + * off() will remove, at most, one instance of a listener from the listener array. If any single + * listener has been added multiple times to the listener array for the specified event, then + * off() must be called multiple times to remove each instance. + * @returns this MessageStream, so that calls can be chained + */ + off(event, listener) { + const listeners = __classPrivateFieldGet2(this, _BetaMessageStream_listeners, "f")[event]; + if (!listeners) + return this; + const index = listeners.findIndex((l) => l.listener === listener); + if (index >= 0) + listeners.splice(index, 1); + return this; + } + /** + * Adds a one-time listener function for the event. The next time the event is triggered, + * this listener is removed and then invoked. + * @returns this MessageStream, so that calls can be chained + */ + once(event, listener) { + const listeners = __classPrivateFieldGet2(this, _BetaMessageStream_listeners, "f")[event] || (__classPrivateFieldGet2(this, _BetaMessageStream_listeners, "f")[event] = []); + listeners.push({ listener, once: true }); + return this; + } + /** + * This is similar to `.once()`, but returns a Promise that resolves the next time + * the event is triggered, instead of calling a listener callback. + * @returns a Promise that resolves the next time given event is triggered, + * or rejects if an error is emitted. (If you request the 'error' event, + * returns a promise that resolves with the error). + * + * Example: + * + * const message = await stream.emitted('message') // rejects if the stream errors + */ + emitted(event) { + return new Promise((resolve2, reject2) => { + __classPrivateFieldSet2(this, _BetaMessageStream_catchingPromiseCreated, true, "f"); + if (event !== "error") + this.once("error", reject2); + this.once(event, resolve2); + }); + } + async done() { + __classPrivateFieldSet2(this, _BetaMessageStream_catchingPromiseCreated, true, "f"); + await __classPrivateFieldGet2(this, _BetaMessageStream_endPromise, "f"); + } + get currentMessage() { + return __classPrivateFieldGet2(this, _BetaMessageStream_currentMessageSnapshot, "f"); + } + /** + * @returns a promise that resolves with the the final assistant Message response, + * or rejects if an error occurred or the stream ended prematurely without producing a Message. + * If structured outputs were used, this will be a ParsedMessage with a `parsed` field. + */ + async finalMessage() { + await this.done(); + return __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalMessage).call(this); + } + /** + * @returns a promise that resolves with the the final assistant Message's text response, concatenated + * together if there are more than one text blocks. + * Rejects if an error occurred or the stream ended prematurely without producing a Message. + */ + async finalText() { + await this.done(); + return __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalText).call(this); + } + _emit(event, ...args) { + if (__classPrivateFieldGet2(this, _BetaMessageStream_ended, "f")) + return; + if (event === "end") { + __classPrivateFieldSet2(this, _BetaMessageStream_ended, true, "f"); + __classPrivateFieldGet2(this, _BetaMessageStream_resolveEndPromise, "f").call(this); + } + const listeners = __classPrivateFieldGet2(this, _BetaMessageStream_listeners, "f")[event]; + if (listeners) { + __classPrivateFieldGet2(this, _BetaMessageStream_listeners, "f")[event] = listeners.filter((l) => !l.once); + listeners.forEach(({ listener }) => listener(...args)); + } + if (event === "abort") { + const error = args[0]; + if (!__classPrivateFieldGet2(this, _BetaMessageStream_catchingPromiseCreated, "f") && !listeners?.length) { + Promise.reject(error); + } + __classPrivateFieldGet2(this, _BetaMessageStream_rejectConnectedPromise, "f").call(this, error); + __classPrivateFieldGet2(this, _BetaMessageStream_rejectEndPromise, "f").call(this, error); + this._emit("end"); + return; + } + if (event === "error") { + const error = args[0]; + if (!__classPrivateFieldGet2(this, _BetaMessageStream_catchingPromiseCreated, "f") && !listeners?.length) { + Promise.reject(error); + } + __classPrivateFieldGet2(this, _BetaMessageStream_rejectConnectedPromise, "f").call(this, error); + __classPrivateFieldGet2(this, _BetaMessageStream_rejectEndPromise, "f").call(this, error); + this._emit("end"); + } + } + _emitFinal() { + const finalMessage = this.receivedMessages.at(-1); + if (finalMessage) { + this._emit("finalMessage", __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalMessage).call(this)); + } + } + async _fromReadableStream(readableStream, options) { + const signal = options?.signal; + let abortHandler; + if (signal) { + if (signal.aborted) + this.controller.abort(); + abortHandler = this.controller.abort.bind(this.controller); + signal.addEventListener("abort", abortHandler); + } + try { + __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_beginRequest).call(this); + this._connected(null); + const stream5 = Stream2.fromReadableStream(readableStream, this.controller); + for await (const event of stream5) { + __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_addStreamEvent).call(this, event); + } + if (stream5.controller.signal?.aborted) { + throw new APIUserAbortError2(); + } + __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_endRequest).call(this); + } finally { + if (signal && abortHandler) { + signal.removeEventListener("abort", abortHandler); + } + } + } + [(_BetaMessageStream_currentMessageSnapshot = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_params = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_connectedPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_resolveConnectedPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_rejectConnectedPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_endPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_resolveEndPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_rejectEndPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_listeners = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_ended = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_errored = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_aborted = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_catchingPromiseCreated = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_response = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_request_id = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_workspace_id = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_logger = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_handleError = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_instances = /* @__PURE__ */ new WeakSet(), _BetaMessageStream_getFinalMessage = function _BetaMessageStream_getFinalMessage2() { + if (this.receivedMessages.length === 0) { + throw new AnthropicError("stream ended without producing a Message with role=assistant"); + } + return this.receivedMessages.at(-1); + }, _BetaMessageStream_getFinalText = function _BetaMessageStream_getFinalText2() { + if (this.receivedMessages.length === 0) { + throw new AnthropicError("stream ended without producing a Message with role=assistant"); + } + const textBlocks = this.receivedMessages.at(-1).content.filter((block) => block.type === "text").map((block) => block.text); + if (textBlocks.length === 0) { + throw new AnthropicError("stream ended without producing a content block with type=text"); + } + return textBlocks.join(" "); + }, _BetaMessageStream_beginRequest = function _BetaMessageStream_beginRequest2() { + if (this.ended) + return; + __classPrivateFieldSet2(this, _BetaMessageStream_currentMessageSnapshot, void 0, "f"); + }, _BetaMessageStream_addStreamEvent = function _BetaMessageStream_addStreamEvent2(event) { + if (this.ended) + return; + const messageSnapshot = __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_accumulateMessage).call(this, event); + this._emit("streamEvent", event, messageSnapshot); + switch (event.type) { + case "content_block_delta": { + const content = messageSnapshot.content.at(-1); + switch (event.delta.type) { + case "text_delta": { + if (content.type === "text") { + this._emit("text", event.delta.text, content.text || ""); + } + break; + } + case "citations_delta": { + if (content.type === "text") { + this._emit("citation", event.delta.citation, content.citations ?? []); + } + break; + } + case "input_json_delta": { + if (tracksToolInput(content) && __classPrivateFieldGet2(this, _BetaMessageStream_listeners, "f").inputJson?.length) { + let jsonSnapshot; + try { + jsonSnapshot = content.input; + } catch (err) { + __classPrivateFieldGet2(this, _BetaMessageStream_handleError, "f").call(this, __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_toolInputParseError).call(this, content, err)); + break; + } + this._emit("inputJson", event.delta.partial_json, jsonSnapshot); + } + break; + } + case "thinking_delta": { + if (content.type === "thinking") { + this._emit("thinking", event.delta.thinking, content.thinking); + } + break; + } + case "signature_delta": { + if (content.type === "thinking") { + this._emit("signature", content.signature); + } + break; + } + case "compaction_delta": { + if (content.type === "compaction" && content.content) { + this._emit("compaction", content.content); + } + break; + } + default: + checkNever(event.delta); + } + break; + } + case "message_stop": { + this._addMessageParam(messageSnapshot); + this._addMessage(maybeParseBetaMessage(messageSnapshot, __classPrivateFieldGet2(this, _BetaMessageStream_params, "f"), { logger: __classPrivateFieldGet2(this, _BetaMessageStream_logger, "f") }), true); + break; + } + case "content_block_stop": { + this._emit("contentBlock", messageSnapshot.content.at(-1)); + break; + } + case "message_start": { + __classPrivateFieldSet2(this, _BetaMessageStream_currentMessageSnapshot, messageSnapshot, "f"); + break; + } + case "content_block_start": + case "message_delta": + break; + } + }, _BetaMessageStream_endRequest = function _BetaMessageStream_endRequest2() { + if (this.ended) { + throw new AnthropicError(`stream has ended, this shouldn't happen`); + } + const snapshot = __classPrivateFieldGet2(this, _BetaMessageStream_currentMessageSnapshot, "f"); + if (!snapshot) { + throw new AnthropicError(`request ended without sending any chunks`); + } + __classPrivateFieldSet2(this, _BetaMessageStream_currentMessageSnapshot, void 0, "f"); + return maybeParseBetaMessage(snapshot, __classPrivateFieldGet2(this, _BetaMessageStream_params, "f"), { logger: __classPrivateFieldGet2(this, _BetaMessageStream_logger, "f") }); + }, _BetaMessageStream_accumulateMessage = function _BetaMessageStream_accumulateMessage2(event) { + let snapshot = __classPrivateFieldGet2(this, _BetaMessageStream_currentMessageSnapshot, "f"); + if (event.type === "message_start") { + if (snapshot) { + throw new AnthropicError(`Unexpected event order, got ${event.type} before receiving "message_stop"`); + } + return event.message; + } + if (!snapshot) { + throw new AnthropicError(`Unexpected event order, got ${event.type} before "message_start"`); + } + switch (event.type) { + case "message_stop": + return snapshot; + case "message_delta": + snapshot.stop_reason = event.delta.stop_reason; + snapshot.stop_sequence = event.delta.stop_sequence; + snapshot.stop_details = event.delta.stop_details; + snapshot.usage.output_tokens = event.usage.output_tokens; + if (event.delta.container != null) { + snapshot.container = event.delta.container; + } + if (event.context_management != null) { + snapshot.context_management = event.context_management; + } + if (event.input_transformations != null) { + snapshot.input_transformations = event.input_transformations; + } + if (event.usage.input_tokens != null) { + snapshot.usage.input_tokens = event.usage.input_tokens; + } + if (event.usage.cache_creation_input_tokens != null) { + snapshot.usage.cache_creation_input_tokens = event.usage.cache_creation_input_tokens; + } + if (event.usage.cache_read_input_tokens != null) { + snapshot.usage.cache_read_input_tokens = event.usage.cache_read_input_tokens; + } + if (event.usage.server_tool_use != null) { + snapshot.usage.server_tool_use = event.usage.server_tool_use; + } + if (event.usage.iterations != null) { + snapshot.usage.iterations = event.usage.iterations; + } + if (event.usage.fallback_credit != null) { + snapshot.usage.fallback_credit = event.usage.fallback_credit; + } + if (event.usage.output_tokens_details != null) { + snapshot.usage.output_tokens_details = event.usage.output_tokens_details; + } + return snapshot; + case "content_block_start": + snapshot.content.push(event.content_block); + if (event.content_block.type === "fallback") { + snapshot.model = event.content_block.to.model; + } + return snapshot; + case "content_block_delta": { + const snapshotContent = snapshot.content.at(event.index); + switch (event.delta.type) { + case "text_delta": { + if (snapshotContent?.type === "text") { + snapshot.content[event.index] = { + ...snapshotContent, + text: (snapshotContent.text || "") + event.delta.text + }; + } + break; + } + case "citations_delta": { + if (snapshotContent?.type === "text") { + snapshot.content[event.index] = { + ...snapshotContent, + citations: [...snapshotContent.citations ?? [], event.delta.citation] + }; + } + break; + } + case "input_json_delta": { + if (snapshotContent && tracksToolInput(snapshotContent)) { + const jsonBuf = (snapshotContent[JSON_BUF_PROPERTY] || "") + event.delta.partial_json; + snapshot.content[event.index] = withLazyInput(snapshotContent, jsonBuf); + } + break; + } + case "thinking_delta": { + if (snapshotContent?.type === "thinking") { + snapshot.content[event.index] = { + ...snapshotContent, + thinking: snapshotContent.thinking + event.delta.thinking + }; + } + break; + } + case "signature_delta": { + if (snapshotContent?.type === "thinking") { + snapshot.content[event.index] = { + ...snapshotContent, + signature: event.delta.signature + }; + } + break; + } + case "compaction_delta": { + if (snapshotContent?.type === "compaction") { + const block = { ...snapshotContent, content: event.delta.content }; + if ("encrypted_content" in event.delta) { + block.encrypted_content = event.delta.encrypted_content; + } + snapshot.content[event.index] = block; + } + break; + } + default: + checkNever(event.delta); + } + return snapshot; + } + case "content_block_stop": { + const snapshotContent = snapshot.content.at(event.index); + if (snapshotContent && tracksToolInput(snapshotContent) && JSON_BUF_PROPERTY in snapshotContent) { + let input; + try { + input = snapshotContent.input; + } catch (err) { + input = {}; + __classPrivateFieldGet2(this, _BetaMessageStream_handleError, "f").call(this, __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_toolInputParseError).call(this, snapshotContent, err)); + } + Object.defineProperty(snapshotContent, "input", { + value: input, + enumerable: true, + configurable: true, + writable: true + }); + } + return snapshot; + } + } + }, _BetaMessageStream_toolInputParseError = function _BetaMessageStream_toolInputParseError2(block, err) { + const jsonBuf = block[JSON_BUF_PROPERTY]; + return new AnthropicError(`Unable to parse tool parameter JSON from model. Please retry your request or adjust your prompt. Error: ${err}. JSON: ${jsonBuf}`); + }, Symbol.asyncIterator)]() { + const pushQueue = []; + const readQueue = []; + let done = false; + this.on("streamEvent", (event) => { + const reader = readQueue.shift(); + if (reader) { + reader.resolve(event); + } else { + pushQueue.push(event); + } + }); + this.on("end", () => { + done = true; + for (const reader of readQueue) { + reader.resolve(void 0); + } + readQueue.length = 0; + }); + this.on("abort", (err) => { + done = true; + for (const reader of readQueue) { + reader.reject(err); + } + readQueue.length = 0; + }); + this.on("error", (err) => { + done = true; + for (const reader of readQueue) { + reader.reject(err); + } + readQueue.length = 0; + }); + return { + next: async () => { + if (!pushQueue.length) { + if (done) { + return { value: void 0, done: true }; + } + return new Promise((resolve2, reject2) => readQueue.push({ resolve: resolve2, reject: reject2 })).then((chunk2) => chunk2 ? { value: chunk2, done: false } : { value: void 0, done: true }); + } + const chunk = pushQueue.shift(); + return { value: chunk, done: false }; + }, + return: async () => { + this.abort(); + return { value: void 0, done: true }; + } + }; + } + toReadableStream() { + const stream5 = new Stream2(this[Symbol.asyncIterator].bind(this), this.controller); + return stream5.toReadableStream(); + } + } + return BetaMessageStream2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/lib/internal/BetaToolRunnerStream.mjs +var _BetaToolRunnerStream_instances, _BetaToolRunnerStream_onToolCall, _BetaToolRunnerStream_emitted, _BetaToolRunnerStream_readers, _BetaToolRunnerStream_toolCalls, _BetaToolRunnerStream_closed, _BetaToolRunnerStream_ready, _BetaToolRunnerStream_fallback, _BetaToolRunnerStream_track, _BetaToolRunnerStream_release, _BetaToolRunnerStream_removeReader, BetaToolRunnerStream; +var init_BetaToolRunnerStream = __esm({ + "node_modules/@anthropic-ai/sdk/lib/internal/BetaToolRunnerStream.mjs"() { + init_tslib2(); + init_stainless_helper_header(); + init_BetaMessageStream(); + BetaToolRunnerStream = /* @__PURE__ */ (() => { + class BetaToolRunnerStream2 extends BetaMessageStream { + constructor(params, onToolCall) { + super(params); + _BetaToolRunnerStream_instances.add(this); + _BetaToolRunnerStream_onToolCall.set(this, void 0); + _BetaToolRunnerStream_emitted.set(this, 0); + _BetaToolRunnerStream_readers.set(this, []); + _BetaToolRunnerStream_toolCalls.set(this, []); + _BetaToolRunnerStream_closed.set(this, void 0); + _BetaToolRunnerStream_ready.set(this, []); + _BetaToolRunnerStream_fallback.set(this, false); + __classPrivateFieldSet2(this, _BetaToolRunnerStream_onToolCall, onToolCall, "f"); + } + /** The `tool_use` blocks that have finished streaming, in the model's order */ + get toolCalls() { + return __classPrivateFieldGet2(this, _BetaToolRunnerStream_toolCalls, "f"); + } + /** Sends the request as `client.beta.messages.stream()` does. */ + static start(messages, params, options, onToolCall) { + const stream5 = new BetaToolRunnerStream2({ ...params, stream: true }, onToolCall); + for (const message of params.messages) { + stream5._addMessageParam(message); + } + stream5._run(() => stream5._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, [STAINLESS_HELPER_METHOD_HEADER]: "stream" } })); + return stream5; + } + _emit(event, ...args) { + var _a6; + if (event !== "streamEvent" || this.ended) { + super._emit(event, ...args); + return; + } + __classPrivateFieldSet2(this, _BetaToolRunnerStream_emitted, (_a6 = __classPrivateFieldGet2(this, _BetaToolRunnerStream_emitted, "f"), _a6++, _a6), "f"); + const [streamEvent, snapshot] = args; + const block = streamEvent.type === "content_block_stop" ? snapshot.content[streamEvent.index] : void 0; + const closed = block?.type === "tool_use" ? block : void 0; + if (closed) { + __classPrivateFieldGet2(this, _BetaToolRunnerStream_toolCalls, "f").push(closed); + } + super._emit(event, ...args); + __classPrivateFieldGet2(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_track).call(this, streamEvent, closed); + __classPrivateFieldGet2(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_release).call(this); + } + [(_BetaToolRunnerStream_onToolCall = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_emitted = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_readers = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_toolCalls = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_closed = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_ready = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_fallback = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_instances = /* @__PURE__ */ new WeakSet(), Symbol.asyncIterator)]() { + const iterator = super[Symbol.asyncIterator](); + const reader = { handled: __classPrivateFieldGet2(this, _BetaToolRunnerStream_emitted, "f") }; + __classPrivateFieldGet2(this, _BetaToolRunnerStream_readers, "f").push(reader); + let holdsEvent = false; + return { + next: async () => { + if (holdsEvent) { + holdsEvent = false; + reader.handled++; + __classPrivateFieldGet2(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_release).call(this); + } + try { + const result = await iterator.next(); + holdsEvent = !result.done; + if (result.done) { + __classPrivateFieldGet2(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_removeReader).call(this, reader); + } + return result; + } catch (error) { + __classPrivateFieldGet2(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_removeReader).call(this, reader); + throw error; + } + }, + return: async () => { + const result = iterator.return?.(); + __classPrivateFieldGet2(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_removeReader).call(this, reader); + return await result ?? { value: void 0, done: true }; + } + }; + } + } + _BetaToolRunnerStream_track = function _BetaToolRunnerStream_track2(event, closed) { + if (__classPrivateFieldGet2(this, _BetaToolRunnerStream_fallback, "f")) { + return; + } + if (event.type === "content_block_start" && event.content_block.type === "fallback") { + __classPrivateFieldSet2(this, _BetaToolRunnerStream_fallback, true, "f"); + __classPrivateFieldSet2(this, _BetaToolRunnerStream_closed, void 0, "f"); + return; + } + const movedOn = event.type === "content_block_start" || event.type === "message_delta" && event.delta.stop_reason === "tool_use"; + if (__classPrivateFieldGet2(this, _BetaToolRunnerStream_closed, "f") && movedOn) { + __classPrivateFieldGet2(this, _BetaToolRunnerStream_ready, "f").push({ toolUse: __classPrivateFieldGet2(this, _BetaToolRunnerStream_closed, "f"), event: __classPrivateFieldGet2(this, _BetaToolRunnerStream_emitted, "f") }); + __classPrivateFieldSet2(this, _BetaToolRunnerStream_closed, void 0, "f"); + } + if (closed) { + __classPrivateFieldSet2(this, _BetaToolRunnerStream_closed, closed, "f"); + } + }, _BetaToolRunnerStream_release = function _BetaToolRunnerStream_release2() { + if (this.errored || this.controller.signal.aborted) { + return; + } + const handled = Math.min(__classPrivateFieldGet2(this, _BetaToolRunnerStream_emitted, "f"), ...__classPrivateFieldGet2(this, _BetaToolRunnerStream_readers, "f").map((reader) => reader.handled)); + while (__classPrivateFieldGet2(this, _BetaToolRunnerStream_ready, "f")[0] && __classPrivateFieldGet2(this, _BetaToolRunnerStream_ready, "f")[0].event <= handled) { + __classPrivateFieldGet2(this, _BetaToolRunnerStream_onToolCall, "f").call(this, __classPrivateFieldGet2(this, _BetaToolRunnerStream_ready, "f").shift().toolUse); + } + }, _BetaToolRunnerStream_removeReader = function _BetaToolRunnerStream_removeReader2(reader) { + const index = __classPrivateFieldGet2(this, _BetaToolRunnerStream_readers, "f").indexOf(reader); + if (index >= 0) { + __classPrivateFieldGet2(this, _BetaToolRunnerStream_readers, "f").splice(index, 1); + __classPrivateFieldGet2(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_release).call(this); + } + }; + return BetaToolRunnerStream2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/promise.mjs +function promiseWithResolvers() { + let resolve2; + let reject2; + const promise = new Promise((res, rej) => { + resolve2 = res; + reject2 = rej; + }); + return { promise, resolve: resolve2, reject: reject2 }; +} +var init_promise = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/promise.mjs"() { + } +}); + +// node_modules/@anthropic-ai/sdk/lib/tools/BetaToolRunner.mjs +function rejectCompactionParam(params) { + if ("compaction" in params && params.compaction != null) { + throw new AnthropicError("`compaction` cannot be set on a tool runner: every request in the loop would compact again. Call `runner.compactBeforeNextTurn()` when the conversation should be compacted instead."); + } +} +function rejectCompactionControl(params) { + if ("compactionControl" in params && params.compactionControl != null) { + throw new AnthropicError("`compactionControl` has been removed from the tool runner. Use server-side compaction instead: call `runner.compactBeforeNextTurn()` when the conversation should be compacted."); + } +} +function rejectRunToolsEagerlyWithoutStream(params) { + if (params.runToolsEagerly && !params.stream) { + throw new TypeError("`runToolsEagerly: true` needs `stream: true` in the tool runner's params, because a reply that isn't streamed arrives whole."); + } +} +function rejectCompactionEdit(params) { + if (params.context_management?.edits?.some((edit) => edit.type.startsWith("compact_"))) { + throw new AnthropicError("`compactBeforeNextTurn()` can't be used while `context_management` has a compaction edit, because the API doesn't accept a compaction block together with one. Remove the edit first."); + } +} +function withoutCompactionIncompatibleParams(params) { + const { context_management, stop_sequences, output_format, ...kept } = params; + const withoutFormat = ({ format, ...outputConfig }) => outputConfig; + if (kept.tool_choice?.type === "any" || kept.tool_choice?.type === "tool") { + delete kept.tool_choice; + } + if (kept.output_config) { + kept.output_config = withoutFormat(kept.output_config); + } + if (Array.isArray(kept.fallbacks)) { + kept.fallbacks = kept.fallbacks.map((fallback) => fallback.output_config ? { ...fallback, output_config: withoutFormat(fallback.output_config) } : fallback); + } + return kept; +} +async function generateToolResponse(runnable, available, lastMessage, requestOptions, calls) { + if (!lastMessage || lastMessage.role !== "assistant" || !lastMessage.content || typeof lastMessage.content === "string") { + return null; + } + const toolUseBlocks = lastMessage.content.filter((content) => content.type === "tool_use"); + if (toolUseBlocks.length === 0) { + return null; + } + const toolResults = await Promise.all(toolUseBlocks.map((toolUse) => { + const call = calls?.get(toolUse.id); + if (call?.status === "started") { + return call.result; + } + const result = runToolCall(runnable, available, toolUse, requestOptions); + calls?.set(toolUse.id, { status: "started", result }); + return result; + })); + return { + role: "user", + content: toolResults + }; +} +async function runToolCall(runnable, available, toolUse, requestOptions) { + const tool = available.has(toolUse.name) ? runnable.get(toolUse.name) : void 0; + if (!tool) { + return toolNotFoundResult(toolUse); + } + try { + let input = toolUse.input; + if ("parse" in tool && tool.parse) { + input = tool.parse(input); + } + const result = await tool.run(input, { + toolUse, + toolUseBlock: toolUse, + signal: requestOptions?.signal + }); + return { + type: "tool_result", + tool_use_id: toolUse.id, + content: result + }; + } catch (error) { + return { + type: "tool_result", + tool_use_id: toolUse.id, + content: error instanceof ToolError ? error.content : `Error: ${error instanceof Error ? error.message : String(error)}`, + is_error: true + }; + } +} +function asContentParam(content) { + return content; +} +function toolNotFoundResult(toolUse) { + return { + type: "tool_result", + tool_use_id: toolUse.id, + content: `Error: Tool '${toolUse.name}' not found`, + is_error: true + }; +} +function applyToolChange(block, available) { + switch (block.type) { + case "tool_removal": + case "tool_addition": + applyToolReference(block, available); + break; + } +} +function applyToolReference(block, available) { + const name = changedToolName(block.tool); + if (name === void 0) + return; + if (block.type === "tool_removal") { + available.delete(name); + } else { + available.add(name); + } +} +function changedToolName(tool) { + switch (tool.type) { + case "tool_reference": + return tool.name; + case "tool_definition": + return "name" in tool.definition ? tool.definition.name : void 0; + default: + return void 0; + } +} +function determineNextStepFromStopReason(stopReason) { + if (stopReason === null) + return "stop"; + switch (stopReason) { + case "tool_use": + return "run_tools"; + case "pause_turn": + // pause_after_compaction hands the turn back before the model answers; sending it back + // unchanged continues it. + case "compaction": + return "resume"; + case "end_turn": + case "stop_sequence": + case "max_tokens": + case "model_context_window_exceeded": + case "refusal": + return "stop"; + default: + checkNever(stopReason); + return "stop"; + } +} +var _BetaToolRunner_instances, _BetaToolRunner_consumed, _BetaToolRunner_mutated, _BetaToolRunner_state, _BetaToolRunner_options, _BetaToolRunner_message, _BetaToolRunner_stream, _BetaToolRunner_toolResponse, _BetaToolRunner_completion, _BetaToolRunner_iterationCount, _BetaToolRunner_compaction, _BetaToolRunner_calls, _BetaToolRunner_lastStopReason, _BetaToolRunner_toolOverrides, _BetaToolRunner_pendingToolChanges, _BetaToolRunner_send, _BetaToolRunner_streamThatStartsTools, _BetaToolRunner_startedCallsSettled, _BetaToolRunner_compact, _BetaToolRunner_runnableTools, _BetaToolRunner_availableToolNames, _BetaToolRunner_recordRemovalsFromHistory, _BetaToolRunner_compactAfterFinalTurn, _BetaToolRunner_generateToolResponse, _BetaToolRunner_flushPendingToolChanges, _BetaToolRunner_pendingToolChangesMessage, BetaToolRunner; +var init_BetaToolRunner = __esm({ + "node_modules/@anthropic-ai/sdk/lib/tools/BetaToolRunner.mjs"() { + init_tslib2(); + init_ToolError(); + init_error3(); + init_BetaToolRunnerStream(); + init_headers3(); + init_promise(); + init_values2(); + init_log2(); + init_stainless_helper_header(); + BetaToolRunner = /* @__PURE__ */ (() => { + class BetaToolRunner2 { + constructor(client, params, options) { + _BetaToolRunner_instances.add(this); + this.client = client; + _BetaToolRunner_consumed.set(this, false); + _BetaToolRunner_mutated.set(this, false); + _BetaToolRunner_state.set(this, void 0); + _BetaToolRunner_options.set(this, void 0); + _BetaToolRunner_message.set(this, void 0); + _BetaToolRunner_stream.set(this, void 0); + _BetaToolRunner_toolResponse.set(this, void 0); + _BetaToolRunner_completion.set(this, void 0); + _BetaToolRunner_iterationCount.set(this, 0); + _BetaToolRunner_compaction.set(this, { status: "idle" }); + _BetaToolRunner_calls.set(this, void 0); + _BetaToolRunner_lastStopReason.set(this, null); + _BetaToolRunner_toolOverrides.set(this, /* @__PURE__ */ new Map()); + _BetaToolRunner_pendingToolChanges.set(this, []); + rejectCompactionParam(params); + rejectCompactionControl(params); + rejectRunToolsEagerlyWithoutStream(params); + __classPrivateFieldSet2(this, _BetaToolRunner_state, { + params: { + // You can't clone the entire params since there are functions as handlers. + // You also don't really need to clone params.messages, but it probably will prevent a foot gun + // somewhere. + ...params, + // Not structuredClone(): it throws on a function, and a runnable tool written by value into a + // `tool_addition` block has `run`. A JSON copy is the messages as they are sent, which drops it. + messages: JSON.parse(JSON.stringify(params.messages)) + } + }, "f"); + const collected = collectStainlessHelpers(params.tools, params.messages); + __classPrivateFieldSet2(this, _BetaToolRunner_options, { + ...options, + headers: buildHeaders2([ + helperHeader("BetaToolRunner"), + collected.length ? { [STAINLESS_HELPER_HEADER]: collected.join(", ") } : void 0, + options?.headers + ]) + }, "f"); + __classPrivateFieldSet2(this, _BetaToolRunner_completion, promiseWithResolvers(), "f"); + } + async *[(_BetaToolRunner_consumed = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_mutated = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_state = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_options = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_message = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_stream = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_toolResponse = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_completion = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_iterationCount = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_compaction = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_calls = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_lastStopReason = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_toolOverrides = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_pendingToolChanges = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_instances = /* @__PURE__ */ new WeakSet(), Symbol.asyncIterator)]() { + var _a6; + if (__classPrivateFieldGet2(this, _BetaToolRunner_consumed, "f")) { + throw new AnthropicError("Cannot iterate over a consumed stream"); + } + __classPrivateFieldSet2(this, _BetaToolRunner_consumed, true, "f"); + __classPrivateFieldSet2(this, _BetaToolRunner_mutated, true, "f"); + __classPrivateFieldSet2(this, _BetaToolRunner_toolResponse, void 0, "f"); + try { + while (true) { + try { + if (__classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.max_iterations && __classPrivateFieldGet2(this, _BetaToolRunner_iterationCount, "f") >= __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.max_iterations) { + break; + } + __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_flushPendingToolChanges).call(this); + if (__classPrivateFieldGet2(this, _BetaToolRunner_compaction, "f").status === "scheduled" && determineNextStepFromStopReason(__classPrivateFieldGet2(this, _BetaToolRunner_lastStopReason, "f")) !== "resume") { + yield* __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compact).call(this, __classPrivateFieldGet2(this, _BetaToolRunner_compaction, "f").config); + continue; + } + __classPrivateFieldSet2(this, _BetaToolRunner_mutated, false, "f"); + __classPrivateFieldSet2(this, _BetaToolRunner_toolResponse, void 0, "f"); + __classPrivateFieldSet2(this, _BetaToolRunner_iterationCount, (_a6 = __classPrivateFieldGet2(this, _BetaToolRunner_iterationCount, "f"), _a6++, _a6), "f"); + __classPrivateFieldSet2(this, _BetaToolRunner_message, void 0, "f"); + const { max_iterations, runToolsEagerly, ...params } = __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params; + yield* __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_send).call(this, params); + if (!__classPrivateFieldGet2(this, _BetaToolRunner_mutated, "f")) { + const message = await __classPrivateFieldGet2(this, _BetaToolRunner_message, "f"); + const nextStep = determineNextStepFromStopReason(message.stop_reason); + __classPrivateFieldSet2(this, _BetaToolRunner_lastStopReason, message.stop_reason, "f"); + __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.messages.push({ + role: message.role, + content: asContentParam(message.content) + }); + const { container } = __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params; + if (message.container) { + if (container == null) { + __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.container = message.container.id; + } else if (typeof container === "object" && container.id == null) { + __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.container = { ...container, id: message.container.id }; + } + } + if (nextStep === "stop") { + yield* __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compactAfterFinalTurn).call(this); + break; + } + if (nextStep === "resume") { + continue; + } + } else { + __classPrivateFieldSet2(this, _BetaToolRunner_lastStopReason, null, "f"); + } + const toolMessage = await __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_generateToolResponse).call(this, __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.messages.at(-1)); + if (toolMessage) { + __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.messages.push(toolMessage); + } else if (!__classPrivateFieldGet2(this, _BetaToolRunner_mutated, "f")) { + yield* __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compactAfterFinalTurn).call(this); + break; + } + } finally { + __classPrivateFieldGet2(this, _BetaToolRunner_stream, "f")?.abort(); + __classPrivateFieldSet2(this, _BetaToolRunner_stream, void 0, "f"); + } + } + await __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_startedCallsSettled).call(this); + if (!__classPrivateFieldGet2(this, _BetaToolRunner_message, "f")) { + throw new AnthropicError("ToolRunner concluded without a message from the server"); + } + __classPrivateFieldGet2(this, _BetaToolRunner_completion, "f").resolve(await __classPrivateFieldGet2(this, _BetaToolRunner_message, "f")); + } catch (error) { + __classPrivateFieldSet2(this, _BetaToolRunner_consumed, false, "f"); + __classPrivateFieldGet2(this, _BetaToolRunner_completion, "f").promise.catch(() => { + }); + __classPrivateFieldGet2(this, _BetaToolRunner_completion, "f").reject(error); + __classPrivateFieldSet2(this, _BetaToolRunner_completion, promiseWithResolvers(), "f"); + throw error; + } + } + setMessagesParams(paramsOrMutator) { + const params = typeof paramsOrMutator === "function" ? paramsOrMutator(__classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params) : paramsOrMutator; + rejectCompactionParam(params); + rejectRunToolsEagerlyWithoutStream(params); + if (__classPrivateFieldGet2(this, _BetaToolRunner_compaction, "f").status !== "idle") { + rejectCompactionEdit(params); + } + if (__classPrivateFieldGet2(this, _BetaToolRunner_compaction, "f").status === "in_flight" && params.messages !== __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.messages) { + throw new AnthropicError("Message params can't be changed while the conversation is being compacted, because the compaction response is about to replace them. Change them after this iteration instead."); + } + __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params = params; + __classPrivateFieldSet2(this, _BetaToolRunner_mutated, true, "f"); + __classPrivateFieldSet2(this, _BetaToolRunner_toolResponse, void 0, "f"); + } + setRequestOptions(optionsOrMutator) { + if (typeof optionsOrMutator === "function") { + __classPrivateFieldSet2(this, _BetaToolRunner_options, optionsOrMutator(__classPrivateFieldGet2(this, _BetaToolRunner_options, "f")), "f"); + } else { + __classPrivateFieldSet2(this, _BetaToolRunner_options, { ...__classPrivateFieldGet2(this, _BetaToolRunner_options, "f"), ...optionsOrMutator }, "f"); + } + } + /** + * Get the tool response for the last message from the assistant. + * Avoids redundant tool executions by caching results. With `runToolsEagerly`, it reuses the calls of + * the reply that have started and runs the rest, including the ones `deferToolCall()` is holding, so that no + * call runs twice. + * + * @returns A promise that resolves to a BetaMessageParam containing tool results, or null if no tools need to be executed + * + * @example + * const toolResponse = await runner.generateToolResponse(); + * if (toolResponse) { + * console.log('Tool results:', toolResponse.content); + * } + */ + async generateToolResponse(signal = __classPrivateFieldGet2(this, _BetaToolRunner_options, "f").signal) { + const message = await __classPrivateFieldGet2(this, _BetaToolRunner_message, "f") ?? this.params.messages.at(-1); + if (!message) { + return null; + } + return __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_generateToolResponse).call(this, message, signal); + } + /** + * Hold a tool call of the current reply until you are done with the reply, which is when it runs without + * streaming: at the end of the loop body, or when you call `generateToolResponse()`. + * + * With `runToolsEagerly` the runner otherwise starts each call while the reply streams, as soon as + * the model has moved on from it: when the next block starts, or the reply stops with `tool_use`. A call + * never starts before your stream listeners and any `for await` over the stream have handled that event, so + * you can call this from either once you have seen the call. The other calls of the reply still start early. + * It does nothing for a call that has started, outside the loop body, and without `runToolsEagerly`. + * + * @param toolUse - The `tool_use` block of the call, or its id + * + * @example + * for await (const stream of runner) { + * stream.on('contentBlock', (block) => { + * if (block.type === 'tool_use' && block.name === 'delete_file') { + * runner.deferToolCall(block); + * } + * }); + * await stream.finalMessage(); + * // No `delete_file` call has started yet. + * } + */ + deferToolCall(toolUse) { + const id = typeof toolUse === "string" ? toolUse : toolUse.id; + if (__classPrivateFieldGet2(this, _BetaToolRunner_calls, "f") && !__classPrivateFieldGet2(this, _BetaToolRunner_calls, "f").has(id)) { + __classPrivateFieldGet2(this, _BetaToolRunner_calls, "f").set(id, { status: "held" }); + } + } + /** + * The tool calls of the current reply that `deferToolCall()` is holding, in the model's order, as their + * `tool_use` blocks. A call is in the list once its block has finished streaming, so read the list when you + * are done with the stream. A call that has started is not in it. It is empty without + * `runToolsEagerly`. + * + * Held calls are listed whatever the reply's `stop_reason`, because `generateToolResponse()` runs them + * whatever it is. After `max_tokens` the input of the last call can be cut off. + * + * @example + * for await (const stream of runner) { + * stream.on('contentBlock', (block) => { + * if (block.type === 'tool_use' && block.name === 'delete_file') { + * runner.deferToolCall(block); + * } + * }); + * await stream.finalMessage(); + * + * const held = runner.deferredToolCalls; + * if (held.length > 0 && !(await confirm(held))) break; + * } + */ + get deferredToolCalls() { + const stream5 = __classPrivateFieldGet2(this, _BetaToolRunner_stream, "f"); + const calls = __classPrivateFieldGet2(this, _BetaToolRunner_calls, "f"); + if (!(stream5 instanceof BetaToolRunnerStream) || !calls) { + return []; + } + return stream5.toolCalls.filter((toolUse) => calls.get(toolUse.id)?.status === "held"); + } + /** + * Wait for the async iterator to complete. This works even if the async iterator hasn't yet started, and + * will wait for an instance to start and go to completion. + * + * @returns A promise that resolves to the final BetaMessage when the iterator completes + * + * @example + * // Start consuming the iterator + * for await (const message of runner) { + * console.log('Message:', message.content); + * } + * + * // Meanwhile, wait for completion from another part of the code + * const finalMessage = await runner.done(); + * console.log('Final response:', finalMessage.content); + */ + done() { + return __classPrivateFieldGet2(this, _BetaToolRunner_completion, "f").promise; + } + /** + * Returns a promise indicating that the stream is done. Unlike .done(), this will eagerly read the stream: + * * If the iterator has not been consumed, consume the entire iterator and return the final message from the + * assistant. + * * If the iterator has been consumed, waits for it to complete and returns the final message. + * + * @returns A promise that resolves to the final BetaMessage from the conversation + * @throws {AnthropicError} If no messages were processed during the conversation + * + * @example + * const finalMessage = await runner.runUntilDone(); + * console.log('Final response:', finalMessage.content); + */ + async runUntilDone() { + if (!__classPrivateFieldGet2(this, _BetaToolRunner_consumed, "f")) { + for await (const _ of this) { + } + } + return this.done(); + } + /** + * Get the current parameters being used by the ToolRunner. + * + * @returns A readonly view of the current ToolRunnerParams + * + * @example + * const currentParams = runner.params; + * console.log('Current model:', currentParams.model); + * console.log('Message count:', currentParams.messages.length); + */ + get params() { + return __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params; + } + /** + * Add one or more messages to the conversation history. + * + * @param messages - One or more BetaMessageParam objects to add to the conversation + * + * @example + * runner.pushMessages( + * { role: 'user', content: 'Also, what about the weather in NYC?' } + * ); + * + * @example + * // Adding multiple messages + * runner.pushMessages( + * { role: 'user', content: 'What about NYC?' }, + * { role: 'user', content: 'And Boston?' } + * ); + */ + pushMessages(...messages) { + this.setMessagesParams((params) => ({ + ...params, + messages: [...params.messages, ...messages] + })); + } + /** + * Schedule a compaction of the conversation. Once the current turn has finished, including any tool + * calls, the runner requests a summary and replaces the message history with the compaction response, + * which is yielded like any other message. Requires the `compact-2026-09-04` beta. + * + * @param compaction - The config to send, as `messages.create()` takes it. Defaults to `{ type: 'summarize' }` + * + * @example + * for await (const message of runner) { + * if (message.usage.input_tokens > 100_000) { + * runner.compactBeforeNextTurn(); + * } + * } + */ + compactBeforeNextTurn(compaction) { + if (__classPrivateFieldGet2(this, _BetaToolRunner_compaction, "f").status === "in_flight") { + return; + } + rejectCompactionEdit(__classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params); + __classPrivateFieldSet2(this, _BetaToolRunner_compaction, { status: "scheduled", config: compaction ?? { type: "summarize" } }, "f"); + } + /** + * Give the model more tools without changing `params.tools`, which would miss the prompt cache. + * + * Each tool's whole definition is sent in a `tool_addition` block with the next request, and a + * runnable tool replaces a runnable tool of the same name straight away, even for a call already in + * the message being handled. A call that started while the reply streamed keeps the old one. A raw + * definition is only sent: the runner never runs it, and stops running a tool of the same name. + * Requires the `inline-tools-2026-09-15` beta, which the runner does not add for you. + * + * @param tools - Runnable tools (for example from `betaZodTool()`) or raw tool definitions + * + * @example + * runner.addTools(queryDatabaseTool); + */ + addTools(...tools) { + for (const tool of tools) { + if ("name" in tool) { + __classPrivateFieldGet2(this, _BetaToolRunner_toolOverrides, "f").set(tool.name, "run" in tool ? tool : null); + } + __classPrivateFieldGet2(this, _BetaToolRunner_pendingToolChanges, "f").push({ type: "addition", tool }); + } + } + /** + * Take tools away from the model without changing `params.tools`, which would miss the prompt cache. + * + * The tools stop being run straight away: a call to one of them, even one in the message being + * handled, gets the same "not found" error result as a call to an unknown tool. A call that started + * while the reply streamed finishes as usual. The model is told in a `tool_removal` block with the + * next request. Use {@link addTools} to bring a tool back. + * Requires the `inline-tools-2026-09-15` beta, which the runner does not add for you. + * + * @param tools - The tools to remove, or their names + * + * @example + * runner.removeTools('query_database'); + */ + removeTools(...tools) { + for (const tool of tools) { + const name = typeof tool === "string" ? tool : tool.name; + __classPrivateFieldGet2(this, _BetaToolRunner_toolOverrides, "f").set(name, null); + __classPrivateFieldGet2(this, _BetaToolRunner_pendingToolChanges, "f").push({ type: "removal", name }); + } + } + /** + * Makes the ToolRunner directly awaitable, equivalent to calling .runUntilDone() + * This allows using `await runner` instead of `await runner.runUntilDone()` + */ + then(onfulfilled, onrejected) { + return this.runUntilDone().then(onfulfilled, onrejected); + } + } + _BetaToolRunner_send = /** + * Sends one request and yields its message, or its stream when streaming. `#message` and `#stream` are set + * before the yield, so they are there while the caller handles the item; the loop aborts the stream at the + * end of the iteration. + */ + async function* _BetaToolRunner_send2(params) { + await __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_startedCallsSettled).call(this); + __classPrivateFieldSet2(this, _BetaToolRunner_calls, void 0, "f"); + if (params.stream) { + __classPrivateFieldSet2(this, _BetaToolRunner_stream, __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.runToolsEagerly ? __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_streamThatStartsTools).call(this, params) : this.client.beta.messages.stream({ ...params }, __classPrivateFieldGet2(this, _BetaToolRunner_options, "f")), "f"); + __classPrivateFieldSet2(this, _BetaToolRunner_message, __classPrivateFieldGet2(this, _BetaToolRunner_stream, "f").finalMessage(), "f"); + __classPrivateFieldGet2(this, _BetaToolRunner_message, "f").catch(() => { + }); + yield __classPrivateFieldGet2(this, _BetaToolRunner_stream, "f"); + } else { + __classPrivateFieldSet2(this, _BetaToolRunner_message, this.client.beta.messages.create({ ...params, stream: false }, __classPrivateFieldGet2(this, _BetaToolRunner_options, "f")), "f"); + yield __classPrivateFieldGet2(this, _BetaToolRunner_message, "f"); + } + }, _BetaToolRunner_streamThatStartsTools = function _BetaToolRunner_streamThatStartsTools2(params) { + const calls = /* @__PURE__ */ new Map(); + __classPrivateFieldSet2(this, _BetaToolRunner_calls, calls, "f"); + return BetaToolRunnerStream.start(this.client.beta.messages, params, __classPrivateFieldGet2(this, _BetaToolRunner_options, "f"), (toolUse) => { + if (calls.has(toolUse.id)) { + return; + } + const result = runToolCall(__classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_runnableTools).call(this), __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_availableToolNames).call(this), toolUse, __classPrivateFieldGet2(this, _BetaToolRunner_options, "f")); + result.catch(() => { + }); + calls.set(toolUse.id, { status: "started", result }); + }); + }, _BetaToolRunner_startedCallsSettled = /** Waits for the calls of the last streamed reply that have started, whether or not their results were sent. */ + async function _BetaToolRunner_startedCallsSettled2() { + const started = [...__classPrivateFieldGet2(this, _BetaToolRunner_calls, "f")?.values() ?? []].filter((call) => call.status === "started"); + await Promise.allSettled(started.map((call) => call.result)); + }, _BetaToolRunner_compact = async function* _BetaToolRunner_compact2(compaction) { + rejectCompactionEdit(__classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params); + const { max_iterations, runToolsEagerly, ...requestParams } = __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params; + const params = withoutCompactionIncompatibleParams(requestParams); + __classPrivateFieldSet2(this, _BetaToolRunner_compaction, { status: "in_flight" }, "f"); + __classPrivateFieldSet2(this, _BetaToolRunner_toolResponse, void 0, "f"); + const lastMessage = __classPrivateFieldGet2(this, _BetaToolRunner_message, "f"); + try { + yield* __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_send).call(this, { ...params, compaction }); + const message = await __classPrivateFieldGet2(this, _BetaToolRunner_message, "f"); + if (message.content.some((block) => block.type === "compaction" && block.content)) { + __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_recordRemovalsFromHistory).call(this); + __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.messages = [{ role: message.role, content: message.content }]; + } else { + loggerFor2(this.client).warn("Compaction produced no summary; keeping the conversation as it is."); + __classPrivateFieldSet2(this, _BetaToolRunner_message, lastMessage, "f"); + } + } finally { + __classPrivateFieldSet2(this, _BetaToolRunner_compaction, { status: "idle" }, "f"); + } + }, _BetaToolRunner_runnableTools = function _BetaToolRunner_runnableTools2() { + const runnable = /* @__PURE__ */ new Map(); + for (const tool of __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.tools) { + if ("run" in tool) { + runnable.set(tool.name, tool); + } + } + for (const [name, tool] of __classPrivateFieldGet2(this, _BetaToolRunner_toolOverrides, "f")) { + if (tool) { + runnable.set(name, tool); + } else { + runnable.delete(name); + } + } + return runnable; + }, _BetaToolRunner_availableToolNames = function _BetaToolRunner_availableToolNames2() { + const available = new Set(__classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_runnableTools).call(this).keys()); + for (const message of [...__classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.messages, __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_pendingToolChangesMessage).call(this)]) { + if (typeof message.content === "string") { + continue; + } + for (const block of message.content) { + if (message.role === "system") { + applyToolChange(block, available); + } else if (message.role === "assistant" && block.type === "compaction") { + for (const change of block.tool_changes ?? []) { + applyToolChange(change, available); + } + } + } + } + return available; + }, _BetaToolRunner_recordRemovalsFromHistory = function _BetaToolRunner_recordRemovalsFromHistory2() { + const available = __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_availableToolNames).call(this); + for (const name of __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_runnableTools).call(this).keys()) { + if (!available.has(name)) { + __classPrivateFieldGet2(this, _BetaToolRunner_toolOverrides, "f").set(name, null); + } + } + }, _BetaToolRunner_compactAfterFinalTurn = async function* _BetaToolRunner_compactAfterFinalTurn2() { + if (__classPrivateFieldGet2(this, _BetaToolRunner_compaction, "f").status !== "scheduled") { + return; + } + const lastContent = __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.messages.at(-1)?.content; + if (Array.isArray(lastContent) && lastContent.some((block) => block.type === "tool_use")) { + loggerFor2(this.client).warn("The pending compaction was skipped because the last turn ended with tool calls that were not run. Call `compactBeforeNextTurn()` again if you continue the conversation."); + __classPrivateFieldSet2(this, _BetaToolRunner_compaction, { status: "idle" }, "f"); + return; + } + yield* __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compact).call(this, __classPrivateFieldGet2(this, _BetaToolRunner_compaction, "f").config); + }, _BetaToolRunner_generateToolResponse = async function _BetaToolRunner_generateToolResponse2(lastMessage, signal = __classPrivateFieldGet2(this, _BetaToolRunner_options, "f").signal) { + if (__classPrivateFieldGet2(this, _BetaToolRunner_toolResponse, "f") !== void 0) { + return __classPrivateFieldGet2(this, _BetaToolRunner_toolResponse, "f"); + } + __classPrivateFieldSet2(this, _BetaToolRunner_toolResponse, generateToolResponse(__classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_runnableTools).call(this), __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_availableToolNames).call(this), lastMessage, { ...__classPrivateFieldGet2(this, _BetaToolRunner_options, "f"), signal }, __classPrivateFieldGet2(this, _BetaToolRunner_calls, "f")), "f"); + return __classPrivateFieldGet2(this, _BetaToolRunner_toolResponse, "f"); + }, _BetaToolRunner_flushPendingToolChanges = function _BetaToolRunner_flushPendingToolChanges2() { + if (__classPrivateFieldGet2(this, _BetaToolRunner_lastStopReason, "f") === "pause_turn" || __classPrivateFieldGet2(this, _BetaToolRunner_pendingToolChanges, "f").length === 0) { + return; + } + __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.messages.push(__classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_pendingToolChangesMessage).call(this)); + __classPrivateFieldSet2(this, _BetaToolRunner_pendingToolChanges, [], "f"); + }, _BetaToolRunner_pendingToolChangesMessage = function _BetaToolRunner_pendingToolChangesMessage2() { + const content = []; + for (const change of __classPrivateFieldGet2(this, _BetaToolRunner_pendingToolChanges, "f")) { + if (change.type === "removal") { + content.push({ type: "tool_removal", tool: { type: "tool_reference", name: change.name } }); + continue; + } + let definition = change.tool; + if ("run" in change.tool) { + const { run: run2, parse: parse2, close, ...rest } = change.tool; + definition = rest; + } + content.push({ type: "tool_addition", tool: { type: "tool_definition", definition } }); + } + return { role: "system", content }; + }; + return BetaToolRunner2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.mjs +function transformOutputFormat(params) { + if (!params.output_format) { + return params; + } + if (params.output_config?.format) { + throw new AnthropicError("Both output_format and output_config.format were provided. Please use only output_config.format (output_format is deprecated)."); + } + const { output_format, ...rest } = params; + return { + ...rest, + output_config: { + ...params.output_config, + format: output_format + } + }; +} +var DEPRECATED_MODELS, MODELS_TO_WARN_WITH_THINKING_ENABLED, Messages3; +var init_messages3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.mjs"() { + init_error4(); + init_batches2(); + init_resource2(); + init_constants(); + init_headers3(); + init_stainless_helper_header(); + init_beta_parser(); + init_BetaMessageStream(); + init_BetaToolRunner(); + init_ToolError(); + init_batches2(); + DEPRECATED_MODELS = {}; + MODELS_TO_WARN_WITH_THINKING_ENABLED = ["claude-mythos-preview", "claude-opus-4-6"]; + Messages3 = /* @__PURE__ */ (() => { + class Messages5 extends APIResource2 { + constructor() { + super(...arguments); + this.batches = new Batches2(this._client); + } + create(params, options) { + const modifiedParams = transformOutputFormat(params); + const { betas, user_profile_id, workspace_id, ...body } = modifiedParams; + if (body.model in DEPRECATED_MODELS) { + console.warn(`The model '${body.model}' is deprecated and will reach end-of-life on ${DEPRECATED_MODELS[body.model]} +Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`); + } + if (MODELS_TO_WARN_WITH_THINKING_ENABLED.includes(body.model) && body.thinking && body.thinking.type === "enabled") { + console.warn(`Using Claude with ${body.model} and 'thinking.type=enabled' is deprecated. Use 'thinking.type=adaptive' instead which results in better model performance in our testing: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking`); + } + let timeout = options?.timeout ?? this._client._options.timeout; + if (!body.stream && timeout == null) { + const maxNonstreamingTokens = MODEL_NONSTREAMING_TOKENS[body.model] ?? void 0; + timeout = this._client.calculateNonstreamingTimeout(body.max_tokens, maxNonstreamingTokens); + } + const helperHeader2 = stainlessHelperHeader(body.tools, body.messages); + return this._client.post("/v1/messages?beta=true", { + body, + timeout: timeout ?? 6e5, + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + helperHeader2, + options?.headers + ]), + stream: modifiedParams.stream ?? false + }); + } + /** + * Send a structured list of input messages with text and/or image content, along with an expected `output_format` and + * the response will be automatically parsed and available in the `parsed_output` property of the message. + * + * @example + * ```ts + * const message = await client.beta.messages.parse({ + * model: 'claude-3-5-sonnet-20241022', + * max_tokens: 1024, + * messages: [{ role: 'user', content: 'What is 2+2?' }], + * output_format: zodOutputFormat(z.object({ answer: z.number() }), 'math'), + * }); + * + * console.log(message.parsed_output?.answer); // 4 + * ``` + */ + parse(params, options) { + options = { + ...options, + headers: buildHeaders2([ + { "anthropic-beta": [...params.betas ?? [], "structured-outputs-2025-12-15"].toString() }, + options?.headers + ]) + }; + return this.create(params, options).then((message) => parseBetaMessage(message, params, { logger: this._client.logger ?? console })); + } + /** + * Create a Message stream + */ + stream(body, options) { + return BetaMessageStream.createMessage(this, body, options); + } + /** + * Count the number of tokens in a Message. + * + * The Token Count API can be used to count the number of tokens in a Message, + * including tools, images, and documents, without creating it. + * + * Learn more about token counting in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/token-counting) + * + * @example + * ```ts + * const betaMessageTokensCount = + * await client.beta.messages.countTokens({ + * messages: [{ content: 'Hello, world', role: 'user' }], + * model: 'claude-opus-5', + * }); + * ``` + */ + countTokens(params, options) { + const modifiedParams = transformOutputFormat(params); + const { betas, user_profile_id, workspace_id, ...body } = modifiedParams; + return this._client.post("/v1/messages/count_tokens?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "token-counting-2024-11-01"].toString(), + ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + toolRunner(body, options) { + return new BetaToolRunner(this._client, body, options); + } + } + Messages5.Batches = Batches2; + Messages5.BetaToolRunner = BetaToolRunner; + Messages5.ToolError = ToolError; + return Messages5; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.mjs +var APIKeys3; +var init_api_keys3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.mjs"() { + init_resource2(); + init_pagination2(); + init_path2(); + APIKeys3 = class extends APIResource2 { + /** + * Get API Key + * + * @example + * ```ts + * const betaAPIKey = + * await client.beta.organization.apiKeys.retrieve( + * 'api_key_id', + * ); + * ``` + */ + retrieve(apiKeyID, options) { + return this._client.get(path3`/v1/organizations/api_keys/${apiKeyID}?beta=true`, options); + } + /** + * Update API Key + * + * @example + * ```ts + * const betaAPIKey = + * await client.beta.organization.apiKeys.update( + * 'api_key_id', + * ); + * ``` + */ + update(apiKeyID, body, options) { + return this._client.post(path3`/v1/organizations/api_keys/${apiKeyID}?beta=true`, { body, ...options }); + } + /** + * List API Keys + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaAPIKey of client.beta.organization.apiKeys.list()) { + * // ... + * } + * ``` + */ + list(query = {}, options) { + return this._client.getAPIList("/v1/organizations/api_keys?beta=true", Page2, { + query, + ...options + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.mjs +var ComplianceSettings; +var init_compliance_settings = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.mjs"() { + init_resource2(); + ComplianceSettings = class extends APIResource2 { + /** + * Retrieve your organization's Compliance Settings. + * + * Compliance Settings is a singleton resource: there is exactly one per + * organization, addressed without an identifier. The `state` field reflects + * whether the Compliance API is enabled. An organization with a parent + * organization reads the state inherited from the parent's configuration. + * + * @example + * ```ts + * const betaComplianceSettings = + * await client.beta.organization.complianceSettings.retrieve(); + * ``` + */ + retrieve(options) { + return this._client.get("/v1/organizations/compliance_settings?beta=true", options); + } + /** + * Update your organization's Compliance Settings. + * + * Setting `state` to `enabled` turns on the Compliance API and begins capturing + * organization activity events. Setting it to `disabled` turns both off. `state` + * reflects whether the Compliance API is enabled. + * + * A request that sets `state` to its current value succeeds and leaves the + * resource unchanged. A `disabled` request stays in effect until a later `enabled` + * request or the organization's next provisioning action that enables Access + * Transparency: enabling Access Transparency also enables the Compliance API, + * which serves its activity events, so such provisioning (including re-runs) + * re-enables the Compliance API even after a `disabled` request. Automated + * provisioning never disables compliance settings. + * + * @example + * ```ts + * const betaComplianceSettings = + * await client.beta.organization.complianceSettings.update({ + * state: { type: 'enabled' }, + * }); + * ``` + */ + update(body, options) { + return this._client.post("/v1/organizations/compliance_settings?beta=true", { body, ...options }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.mjs +var ExternalKeys; +var init_external_keys = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.mjs"() { + init_resource2(); + init_pagination2(); + init_path2(); + ExternalKeys = class extends APIResource2 { + /** + * Create an external key config owned by the caller's organization. + * + * @example + * ```ts + * const betaExternalKey = + * await client.beta.organization.externalKeys.create({ + * provider_config: { + * kms_arn: + * 'arn:aws:kms:us-east-1:111122223333:key/abcd1234-5678-90ab-cdef-000011112222', + * type: 'aws', + * }, + * }); + * ``` + */ + create(body, options) { + return this._client.post("/v1/organizations/external_keys?beta=true", { body, ...options }); + } + /** + * Retrieve a single external key config in the caller's organization by ID. + * + * @example + * ```ts + * const betaExternalKey = + * await client.beta.organization.externalKeys.retrieve( + * 'external_key_id', + * ); + * ``` + */ + retrieve(externalKeyID, options) { + return this._client.get(path3`/v1/organizations/external_keys/${externalKeyID}?beta=true`, options); + } + /** + * Partially update an external key config. Omitted fields are left unchanged. + * + * `display_name` is always editable. `geo` and `provider_config` cannot be changed + * once any workspace references this config, because previously encrypted data + * requires the original key identity to decrypt. + * + * @example + * ```ts + * const betaExternalKey = + * await client.beta.organization.externalKeys.update( + * 'external_key_id', + * ); + * ``` + */ + update(externalKeyID, body, options) { + return this._client.post(path3`/v1/organizations/external_keys/${externalKeyID}?beta=true`, { + body, + ...options + }); + } + /** + * List external key configs in the caller's organization. + * + * Results are ordered by creation time (newest first). Use the `next_page` cursor + * from the response to fetch subsequent pages. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaExternalKey of client.beta.organization.externalKeys.list()) { + * // ... + * } + * ``` + */ + list(query = {}, options) { + return this._client.getAPIList("/v1/organizations/external_keys?beta=true", PageCursor, { + query, + ...options + }); + } + /** + * Delete an external key config. + * + * The request is rejected if any workspace still references this config. + * + * @example + * ```ts + * const externalKey = + * await client.beta.organization.externalKeys.delete( + * 'external_key_id', + * ); + * ``` + */ + delete(externalKeyID, options) { + return this._client.delete(path3`/v1/organizations/external_keys/${externalKeyID}?beta=true`, options); + } + /** + * Validate an external key config against the customer's KMS. + * + * Anthropic performs an encrypt/decrypt roundtrip against the configured KMS key + * and waits up to 30 seconds for the result. The response status is `success` if + * the roundtrip succeeded, or `failure` with an error message if it failed or + * timed out. + * + * @example + * ```ts + * const response = + * await client.beta.organization.externalKeys.validate( + * 'external_key_id', + * ); + * ``` + */ + validate(externalKeyID, options) { + return this._client.post(path3`/v1/organizations/external_keys/${externalKeyID}/validate?beta=true`, options); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.mjs +var Invites2; +var init_invites2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.mjs"() { + init_resource2(); + init_pagination2(); + init_path2(); + Invites2 = class extends APIResource2 { + /** + * Invite a user to join the organization by email. + * + * On plans that draw members from a finite pool of purchased seats, the invite + * automatically consumes a seat from the lowest tier with availability; there is + * no seat-tier parameter. When no seat is free the request fails with a 400 error + * rather than purchasing a seat. + * + * @example + * ```ts + * const betaOrganizationInvite = + * await client.beta.organization.invites.create({ + * email: 'user@emaildomain.com', + * role: 'user', + * }); + * ``` + */ + create(body, options) { + return this._client.post("/v1/organizations/invites?beta=true", { body, ...options }); + } + /** + * Retrieve an invite by ID. + * + * @example + * ```ts + * const betaOrganizationInvite = + * await client.beta.organization.invites.retrieve( + * 'invite_id', + * ); + * ``` + */ + retrieve(inviteID, options) { + return this._client.get(path3`/v1/organizations/invites/${inviteID}?beta=true`, options); + } + /** + * List the organization's invites. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaOrganizationInvite of client.beta.organization.invites.list()) { + * // ... + * } + * ``` + */ + list(query = {}, options) { + return this._client.getAPIList("/v1/organizations/invites?beta=true", Page2, { + query, + ...options + }); + } + /** + * Delete a pending invite. + * + * @example + * ```ts + * const invite = + * await client.beta.organization.invites.delete( + * 'invite_id', + * ); + * ``` + */ + delete(inviteID, options) { + return this._client.delete(path3`/v1/organizations/invites/${inviteID}?beta=true`, options); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.mjs +var RateLimits2; +var init_rate_limits2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.mjs"() { + init_resource2(); + init_pagination2(); + RateLimits2 = class extends APIResource2 { + /** + * List Messages API rate limits for your organization. + * + * Each entry corresponds to one rate-limit group (either a model family or an + * API-surface category such as the Files API or Message Batches) and contains the + * set of limiter values that apply to it. + * + * When `limit` is omitted, every matching entry is returned in a single page; when + * `limit` truncates the result, follow `next_page` to fetch the remaining entries. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaOrganizationRateLimit of client.beta.organization.rateLimits.list()) { + * // ... + * } + * ``` + */ + list(query = {}, options) { + return this._client.getAPIList("/v1/organizations/rate_limits?beta=true", PageCursor, { query, ...options }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/users.mjs +var Users4; +var init_users4 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/users.mjs"() { + init_resource2(); + init_pagination2(); + init_path2(); + Users4 = class extends APIResource2 { + /** + * Retrieve a member of the organization by user ID. + * + * @example + * ```ts + * const betaOrganizationUser = + * await client.beta.organization.users.retrieve('user_id'); + * ``` + */ + retrieve(userID, options) { + return this._client.get(path3`/v1/organizations/users/${userID}?beta=true`, options); + } + /** + * Update a member's organization role. + * + * @example + * ```ts + * const betaOrganizationUser = + * await client.beta.organization.users.update('user_id', { + * role: 'user', + * }); + * ``` + */ + update(userID, body, options) { + return this._client.post(path3`/v1/organizations/users/${userID}?beta=true`, { body, ...options }); + } + /** + * List the organization's members. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaOrganizationUser of client.beta.organization.users.list()) { + * // ... + * } + * ``` + */ + list(query = {}, options) { + return this._client.getAPIList("/v1/organizations/users?beta=true", Page2, { + query, + ...options + }); + } + /** + * Remove a member from the organization. + * + * @example + * ```ts + * const user = await client.beta.organization.users.remove( + * 'user_id', + * ); + * ``` + */ + remove(userID, options) { + return this._client.delete(path3`/v1/organizations/users/${userID}?beta=true`, options); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.mjs +var Issuers; +var init_issuers = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Issuers = class extends APIResource2 { + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Register an OIDC issuer that Anthropic will trust for workload identity + * federation in your organization. + * + * The `jwks` field controls how the issuer's signing keys are obtained and takes + * one of three shapes selected by `type`: `discovery` (resolve keys through OIDC + * discovery), `explicit_url` (fetch keys from a fixed JWKS URL), or `inline` + * (provide a static key set). When `jwks.type` is `discovery` and no + * `discovery_base` is set, the issuer URL must be publicly reachable over HTTPS so + * Anthropic can fetch the discovery document; for `explicit_url` and `inline` + * modes the issuer URL is only matched as the JWT's `iss` claim and is not + * fetched. + * + * @example + * ```ts + * const betaFederationIssuer = + * await client.beta.organization.federation.issuers.create({ + * issuer_url: 'x', + * name: 'x', + * }); + * ``` + */ + create(params, options) { + const { betas, ...body } = params; + return this._client.post("/v1/organizations/federation_issuers?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Retrieve a federation issuer by its ID (`fdis_...`). + * + * @example + * ```ts + * const betaFederationIssuer = + * await client.beta.organization.federation.issuers.retrieve( + * 'federation_issuer_id', + * ); + * ``` + */ + retrieve(federationIssuerID, params = {}, options) { + const { betas } = params ?? {}; + return this._client.get(path3`/v1/organizations/federation_issuers/${federationIssuerID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Partially update a federation issuer. + * + * Setting `jwks` replaces the full JWKS shape at once. Archived issuers cannot be + * updated; this returns 400. Create a new issuer instead. + * + * Updating an issuer that backs a rule with a scope outside `workspace:developer` + * or `workspace:inference` requires a Console session. + * + * @example + * ```ts + * const betaFederationIssuer = + * await client.beta.organization.federation.issuers.update( + * 'federation_issuer_id', + * ); + * ``` + */ + update(federationIssuerID, params, options) { + const { betas, ...body } = params; + return this._client.post(path3`/v1/organizations/federation_issuers/${federationIssuerID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * List federation issuers in your organization. + * + * Archived issuers are excluded unless `include_archived=true`. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaFederationIssuer of client.beta.organization.federation.issuers.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, ...query } = params ?? {}; + return this._client.getAPIList("/v1/organizations/federation_issuers?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Archive a federation issuer. + * + * Idempotent; re-archiving returns the issuer with its original `archived_at`. + * Rejected with 400 if any live (non-archived) federation rule still references + * the issuer; archive those rules first (a rule's issuer cannot be changed), or + * recreate them against another issuer. + * + * @example + * ```ts + * const betaFederationIssuer = + * await client.beta.organization.federation.issuers.archive( + * 'federation_issuer_id', + * ); + * ``` + */ + archive(federationIssuerID, params = {}, options) { + const { betas } = params ?? {}; + return this._client.post(path3`/v1/organizations/federation_issuers/${federationIssuerID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.mjs +var Workspaces; +var init_workspaces = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Workspaces = class extends APIResource2 { + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * List workspaces where this federation rule is enabled. + * + * Returns all workspace enablements in a single response; the `limit` and `page` + * parameters are accepted but have no effect, and `next_page` is always `null`. + * Returns explicit per-workspace enablements only; for rules with + * `applies_to_all_workspaces` or a legacy single `workspace_id`, check those + * fields on the rule itself. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaFederationRuleWorkspace of client.beta.organization.federation.rules.workspaces.list( + * 'federation_rule_id', + * )) { + * // ... + * } + * ``` + */ + list(federationRuleID, params = {}, options) { + const { betas, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/organizations/federation_rules/${federationRuleID}/workspaces?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Enable a federation rule for a workspace. + * + * Idempotent; re-enabling returns the existing enablement. The rule and workspace + * must both belong to your organization. Membership of the rule's target service + * account in this workspace is not checked at enablement: token exchange into this + * workspace is rejected unless the target is a member (it is implicitly a member + * of the default workspace). Archived rules are rejected with 400. OAuth callers + * may only manage rules whose `oauth_scope` is `workspace:developer` or + * `workspace:inference`; other scopes require a Console session. + * + * @example + * ```ts + * const betaFederationRuleWorkspace = + * await client.beta.organization.federation.rules.workspaces.add( + * 'federation_rule_id', + * { workspace_id: 'workspace_id' }, + * ); + * ``` + */ + add(federationRuleID, params, options) { + const { betas, ...body } = params; + return this._client.post(path3`/v1/organizations/federation_rules/${federationRuleID}/workspaces?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Disable a federation rule for a workspace. + * + * Idempotent; succeeds even if the enablement was already removed. OAuth callers + * may only manage rules whose `oauth_scope` is `workspace:developer` or + * `workspace:inference`; other scopes require a Console session. + * + * @example + * ```ts + * const workspace = + * await client.beta.organization.federation.rules.workspaces.remove( + * 'workspace_id', + * { federation_rule_id: 'federation_rule_id' }, + * ); + * ``` + */ + remove(workspaceID, params, options) { + const { federation_rule_id, betas } = params; + return this._client.delete(path3`/v1/organizations/federation_rules/${federation_rule_id}/workspaces/${workspaceID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.mjs +var Rules; +var init_rules = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.mjs"() { + init_resource2(); + init_workspaces(); + init_workspaces(); + init_pagination2(); + init_headers3(); + init_path2(); + Rules = /* @__PURE__ */ (() => { + class Rules2 extends APIResource2 { + constructor() { + super(...arguments); + this.workspaces = new Workspaces(this._client); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Create a federation rule owned by your organization. + * + * The referenced issuer and the target service account must already exist in the + * same organization; invalid references are rejected with a 400 error. The + * workspace reference is validated. Membership is not checked at rule creation: + * token exchange resolves a single enabled workspace per call and is rejected + * unless the target service account is a member of that workspace (it is + * implicitly a member of the default workspace). Rules on well-known shared + * issuers (GitHub Actions, GitLab, Buildkite, Terraform Cloud, Google) must + * constrain tenant identity via an identity-bearing claim, a tenant-pinning + * subject prefix (such as `repo:YOUR_ORG/...`), or a CEL condition referencing one + * of those identity claims (e.g. `claims.repository_owner`). OAuth callers may + * only manage rules whose `oauth_scope` is `workspace:developer` or + * `workspace:inference`; other scopes require a Console session. + * + * @example + * ```ts + * const betaFederationRule = + * await client.beta.organization.federation.rules.create({ + * issuer_id: 'issuer_id', + * match: {}, + * name: 'x', + * oauth_scope: 'x', + * target: { + * service_account_id: 'svac_01SDCCSbTxrXDpWc1phhtcfK', + * type: 'service_account', + * }, + * }); + * ``` + */ + create(params, options) { + const { betas, ...body } = params; + return this._client.post("/v1/organizations/federation_rules?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Retrieve a federation rule by its ID (`fdrl_...`). + * + * @example + * ```ts + * const betaFederationRule = + * await client.beta.organization.federation.rules.retrieve( + * 'federation_rule_id', + * ); + * ``` + */ + retrieve(federationRuleID, params = {}, options) { + const { betas } = params ?? {}; + return this._client.get(path3`/v1/organizations/federation_rules/${federationRuleID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Partially update a federation rule. + * + * `issuer_id` is immutable. `match` and `target` are replaced as whole objects + * when set. Referenced service accounts and workspaces must exist in your + * organization; invalid references are rejected with a 400 error. Archived rules + * cannot be updated; this returns 400. Create a new rule instead. Rules on + * well-known shared issuers (GitHub Actions, GitLab, Buildkite, Terraform Cloud, + * Google) must constrain tenant identity via an identity-bearing claim, a + * tenant-pinning subject prefix (such as `repo:YOUR_ORG/...`), or a CEL condition + * referencing one of those identity claims (e.g. `claims.repository_owner`). On + * these issuers the requirement is re-checked on every update; if an existing + * rule's stored match does not yet constrain tenant identity, any update (even a + * rename or description change) must also supply a conforming `match` in the same + * request. OAuth callers may only manage rules whose `oauth_scope` is + * `workspace:developer` or `workspace:inference`; other scopes require a Console + * session. + * + * @example + * ```ts + * const betaFederationRule = + * await client.beta.organization.federation.rules.update( + * 'federation_rule_id', + * ); + * ``` + */ + update(federationRuleID, params, options) { + const { betas, ...body } = params; + return this._client.post(path3`/v1/organizations/federation_rules/${federationRuleID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * List federation rules in your organization. + * + * Optionally filter by issuer with `issuer_id`. Archived rules are excluded unless + * `include_archived=true`. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaFederationRule of client.beta.organization.federation.rules.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, ...query } = params ?? {}; + return this._client.getAPIList("/v1/organizations/federation_rules?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Archive a federation rule. + * + * Token exchange through this rule stops immediately. Idempotent; re-archiving + * returns the rule with its original `archived_at`. Archiving clears the rule's + * workspace targeting (`workspace_id` and `workspace_ids` are emptied). Tokens + * already minted before archive remain valid until they expire. OAuth callers may + * only manage rules whose `oauth_scope` is `workspace:developer` or + * `workspace:inference`; other scopes require a Console session. + * + * @example + * ```ts + * const betaFederationRule = + * await client.beta.organization.federation.rules.archive( + * 'federation_rule_id', + * ); + * ``` + */ + archive(federationRuleID, params = {}, options) { + const { betas } = params ?? {}; + return this._client.post(path3`/v1/organizations/federation_rules/${federationRuleID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + } + Rules2.Workspaces = Workspaces; + return Rules2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.mjs +var Federation; +var init_federation = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.mjs"() { + init_resource2(); + init_issuers(); + init_issuers(); + init_rules(); + init_rules(); + Federation = /* @__PURE__ */ (() => { + class Federation2 extends APIResource2 { + constructor() { + super(...arguments); + this.issuers = new Issuers(this._client); + this.rules = new Rules(this._client); + } + } + Federation2.Issuers = Issuers; + Federation2.Rules = Rules; + return Federation2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.mjs +var Workspaces2; +var init_workspaces2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Workspaces2 = class extends APIResource2 { + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * List the workspaces a service account is a member of. + * + * Each entry includes the service account's `workspace_role` in that workspace. + * Use `limit` and the `next_page` cursor to paginate. When the service account has + * no explicit default-workspace membership, the implicit (`implicit: true`) + * membership is returned as the first entry on the first page; with `limit=1` the + * first page may return up to 2 entries (the implicit entry plus one explicit + * membership) so a pagination cursor can be derived. Memberships are returned only + * while the service account is active. Without a `page` cursor, an archived + * service account returns an empty list. A `page` cursor that does not match an + * active membership returns a 400 invalid-request error. A cursor stops matching + * when the membership is removed, the workspace is deleted, or the service account + * is archived. Restart pagination from the first page to recover. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaServiceAccountWorkspaceMember of client.beta.organization.serviceAccounts.workspaces.list( + * 'service_account_id', + * )) { + * // ... + * } + * ``` + */ + list(serviceAccountID, params = {}, options) { + const { betas, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/organizations/service_accounts/${serviceAccountID}/workspaces?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Add a service account to a workspace with the given `workspace_role`. + * + * Mirror of `POST /workspaces/{workspace_id}/service_accounts`, addressed from the + * service-account side; both create the same membership. If the service account is + * already an explicit member of the workspace, its `workspace_role` is replaced + * with the value supplied here. Archived workspaces return 400. Archived service + * accounts cannot be added and are rejected. + * + * @example + * ```ts + * const betaServiceAccountWorkspaceMember = + * await client.beta.organization.serviceAccounts.workspaces.add( + * 'service_account_id', + * { + * workspace_id: 'workspace_id', + * workspace_role: 'workspace_admin', + * }, + * ); + * ``` + */ + add(serviceAccountID, params, options) { + const { betas, ...body } = params; + return this._client.post(path3`/v1/organizations/service_accounts/${serviceAccountID}/workspaces?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Remove a service account from a workspace. + * + * Mirror of + * `DELETE /workspaces/{workspace_id}/service_accounts/{service_account_id}`, + * addressed from the service-account side. Removal is idempotent (returns 200 even + * if the membership was already removed). A DELETE against the implicit + * default-workspace membership returns 200 but is a no-op and the membership + * persists; deleting an explicit default-workspace row reverts to the implicit + * `workspace_user` membership. Archived workspaces return 400. + * + * @example + * ```ts + * const workspace = + * await client.beta.organization.serviceAccounts.workspaces.remove( + * 'workspace_id', + * { service_account_id: 'service_account_id' }, + * ); + * ``` + */ + remove(workspaceID, params, options) { + const { service_account_id, betas } = params; + return this._client.delete(path3`/v1/organizations/service_accounts/${service_account_id}/workspaces/${workspaceID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.mjs +var ServiceAccounts2; +var init_service_accounts2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.mjs"() { + init_resource2(); + init_workspaces2(); + init_workspaces2(); + init_pagination2(); + init_headers3(); + init_path2(); + ServiceAccounts2 = /* @__PURE__ */ (() => { + class ServiceAccounts4 extends APIResource2 { + constructor() { + super(...arguments); + this.workspaces = new Workspaces2(this._client); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Create a service account. + * + * A service account is a named workload identity that federation rules target. + * `organization_role` is `developer` (default) or `admin`; a rule may only be + * created or retargeted to grant `org:admin` scope when the target's + * `organization_role` is `admin`. Creating an `admin`-role service account + * requires an interactive credential (a user OAuth token or a Console session) — a + * workload may only create `developer`-role service accounts. + * + * @example + * ```ts + * const betaServiceAccount = + * await client.beta.organization.serviceAccounts.create({ + * name: 'ci-deploy-bot', + * }); + * ``` + */ + create(params, options) { + const { betas, ...body } = params; + return this._client.post("/v1/organizations/service_accounts?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Retrieve a service account by its ID (`svac_...`). + * + * @example + * ```ts + * const betaServiceAccount = + * await client.beta.organization.serviceAccounts.retrieve( + * 'service_account_id', + * ); + * ``` + */ + retrieve(serviceAccountID, params = {}, options) { + const { betas } = params ?? {}; + return this._client.get(path3`/v1/organizations/service_accounts/${serviceAccountID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Update a service account. + * + * Only `description` and `organization_role` are mutable; `name` cannot be + * changed. Archived service accounts cannot be updated; this returns 400. Setting + * `organization_role` to `admin` (even when unchanged) requires an interactive + * credential (a user OAuth token or a Console session). + * + * @example + * ```ts + * const betaServiceAccount = + * await client.beta.organization.serviceAccounts.update( + * 'service_account_id', + * ); + * ``` + */ + update(serviceAccountID, params, options) { + const { betas, ...body } = params; + return this._client.post(path3`/v1/organizations/service_accounts/${serviceAccountID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * List service accounts in the caller's organization. + * + * Results are ordered by creation time, newest first. Use `limit` and the + * `next_page` cursor to paginate; set `include_archived=true` to include archived + * service accounts. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaServiceAccount of client.beta.organization.serviceAccounts.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, ...query } = params ?? {}; + return this._client.getAPIList("/v1/organizations/service_accounts?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Archive a service account. + * + * Idempotent; re-archiving returns the service account with its original + * `archived_at`. Rejected with 400 if any live (non-archived) federation rule + * still targets this service account, same as issuer archival; archive those rules + * first or change their target to another service account. + * + * @example + * ```ts + * const betaServiceAccount = + * await client.beta.organization.serviceAccounts.archive( + * 'service_account_id', + * ); + * ``` + */ + archive(serviceAccountID, params = {}, options) { + const { betas } = params ?? {}; + return this._client.post(path3`/v1/organizations/service_accounts/${serviceAccountID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + } + ServiceAccounts4.Workspaces = Workspaces2; + return ServiceAccounts4; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.mjs +var Members; +var init_members = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.mjs"() { + init_resource2(); + init_pagination2(); + init_path2(); + Members = class extends APIResource2 { + /** + * Get Workspace Member + * + * @example + * ```ts + * const betaWorkspaceMember = + * await client.beta.organization.workspaces.members.retrieve( + * 'user_id', + * { workspace_id: 'workspace_id' }, + * ); + * ``` + */ + retrieve(userID, params, options) { + const { workspace_id } = params; + return this._client.get(path3`/v1/organizations/workspaces/${workspace_id}/members/${userID}?beta=true`, options); + } + /** + * Update Workspace Member + * + * @example + * ```ts + * const betaWorkspaceMember = + * await client.beta.organization.workspaces.members.update( + * 'user_id', + * { + * workspace_id: 'workspace_id', + * workspace_role: 'workspace_admin', + * }, + * ); + * ``` + */ + update(userID, params, options) { + const { workspace_id, ...body } = params; + return this._client.post(path3`/v1/organizations/workspaces/${workspace_id}/members/${userID}?beta=true`, { + body, + ...options + }); + } + /** + * List Workspace Members + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaWorkspaceMember of client.beta.organization.workspaces.members.list( + * 'workspace_id', + * )) { + * // ... + * } + * ``` + */ + list(workspaceID, query = {}, options) { + return this._client.getAPIList(path3`/v1/organizations/workspaces/${workspaceID}/members?beta=true`, Page2, { query, ...options }); + } + /** + * Create Workspace Member + * + * @example + * ```ts + * const betaWorkspaceMember = + * await client.beta.organization.workspaces.members.add( + * 'workspace_id', + * { + * user_id: 'user_01WCz1FkmYMm4gnmykNKUu3Q', + * workspace_role: 'workspace_admin', + * }, + * ); + * ``` + */ + add(workspaceID, body, options) { + return this._client.post(path3`/v1/organizations/workspaces/${workspaceID}/members?beta=true`, { + body, + ...options + }); + } + /** + * Delete Workspace Member + * + * @example + * ```ts + * const member = + * await client.beta.organization.workspaces.members.remove( + * 'user_id', + * { workspace_id: 'workspace_id' }, + * ); + * ``` + */ + remove(userID, params, options) { + const { workspace_id } = params; + return this._client.delete(path3`/v1/organizations/workspaces/${workspace_id}/members/${userID}?beta=true`, options); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.mjs +var RateLimits3; +var init_rate_limits3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.mjs"() { + init_resource2(); + init_pagination2(); + init_path2(); + RateLimits3 = class extends APIResource2 { + /** + * List a workspace's rate limits. + * + * By default, returns only the groups and limiter types that have a + * workspace-level override. With `include_inherited=true`, returns every group + * with organization-level limits the workspace can see, listing for each the + * values it inherits from the organization as well as its own overrides. Each + * value's `source` says which it is. + * + * When `limit` is omitted, every matching entry is returned in a single page; when + * `limit` truncates the result, follow `next_page` to fetch the remaining entries. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaWorkspaceRateLimit of client.beta.organization.workspaces.rateLimits.list( + * 'workspace_id', + * )) { + * // ... + * } + * ``` + */ + list(workspaceID, query = {}, options) { + return this._client.getAPIList(path3`/v1/organizations/workspaces/${workspaceID}/rate_limits?beta=true`, PageCursor, { query, ...options }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.mjs +var ServiceAccounts3; +var init_service_accounts3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + ServiceAccounts3 = class extends APIResource2 { + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Retrieve a service account's membership in a workspace. + * + * Returns the membership record, including the service account's `workspace_role` + * in this workspace. Archived workspaces return 400. For the default workspace, + * returns the implicit (`implicit: true`) membership when no explicit membership + * exists; an explicitly added membership is returned with its assigned role. An + * archived service account returns 404. + * + * @example + * ```ts + * const betaServiceAccountWorkspaceMember = + * await client.beta.organization.workspaces.serviceAccounts.retrieve( + * 'service_account_id', + * { workspace_id: 'workspace_id' }, + * ); + * ``` + */ + retrieve(serviceAccountID, params, options) { + const { workspace_id, betas } = params; + return this._client.get(path3`/v1/organizations/workspaces/${workspace_id}/service_accounts/${serviceAccountID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Change a service account's role in a workspace. + * + * The new `workspace_role` replaces the current one. Only explicit memberships can + * be updated; to set a role on the implicit default-workspace membership, add the + * service account explicitly with + * `POST /workspaces/{workspace_id}/service_accounts`. Archived workspaces + * return 400. Archived service accounts cannot be updated and are rejected. + * + * @example + * ```ts + * const betaServiceAccountWorkspaceMember = + * await client.beta.organization.workspaces.serviceAccounts.update( + * 'service_account_id', + * { + * workspace_id: 'workspace_id', + * workspace_role: 'workspace_admin', + * }, + * ); + * ``` + */ + update(serviceAccountID, params, options) { + const { workspace_id, betas, ...body } = params; + return this._client.post(path3`/v1/organizations/workspaces/${workspace_id}/service_accounts/${serviceAccountID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * List the service accounts that are members of a workspace. + * + * Each entry includes the service account's `workspace_role`. Use `limit` and the + * `next_page` cursor to paginate. Archived workspaces return 400; use + * `GET /service_accounts/{id}/workspaces` to audit memberships of an archived + * workspace. The implicit default-workspace membership is not included in this + * list. Memberships of archived service accounts are omitted from the results. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaServiceAccountWorkspaceMember of client.beta.organization.workspaces.serviceAccounts.list( + * 'workspace_id', + * )) { + * // ... + * } + * ``` + */ + list(workspaceID, params = {}, options) { + const { betas, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/organizations/workspaces/${workspaceID}/service_accounts?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Add a service account to a workspace with the given `workspace_role`. + * + * The role determines what the service account can do in the workspace and which + * workspace-scoped permissions it can be granted when authenticating through + * federation. Every service account is already an implicit `workspace_user` member + * of the default workspace; adding it explicitly assigns a chosen role. If the + * service account is already an explicit member of the workspace, its + * `workspace_role` is replaced with the value supplied here. Archived workspaces + * return 400. Archived service accounts cannot be added and are rejected. + * + * @example + * ```ts + * const betaServiceAccountWorkspaceMember = + * await client.beta.organization.workspaces.serviceAccounts.add( + * 'workspace_id', + * { + * service_account_id: 'service_account_id', + * workspace_role: 'workspace_admin', + * }, + * ); + * ``` + */ + add(workspaceID, params, options) { + const { betas, ...body } = params; + return this._client.post(path3`/v1/organizations/workspaces/${workspaceID}/service_accounts?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Remove a service account from a workspace. + * + * Removal is idempotent (returns 200 even if the membership was already removed). + * A DELETE against the implicit default-workspace membership returns 200 but is a + * no-op and the membership persists; deleting an explicit default-workspace row + * reverts to the implicit `workspace_user` membership. Archived workspaces + * return 400. + * + * @example + * ```ts + * const serviceAccount = + * await client.beta.organization.workspaces.serviceAccounts.remove( + * 'service_account_id', + * { workspace_id: 'workspace_id' }, + * ); + * ``` + */ + remove(serviceAccountID, params, options) { + const { workspace_id, betas } = params; + return this._client.delete(path3`/v1/organizations/workspaces/${workspace_id}/service_accounts/${serviceAccountID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.mjs +var Workspaces3; +var init_workspaces3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.mjs"() { + init_resource2(); + init_members(); + init_members(); + init_rate_limits3(); + init_rate_limits3(); + init_service_accounts3(); + init_service_accounts3(); + init_pagination2(); + init_headers3(); + init_path2(); + Workspaces3 = /* @__PURE__ */ (() => { + class Workspaces4 extends APIResource2 { + constructor() { + super(...arguments); + this.rateLimits = new RateLimits3(this._client); + this.members = new Members(this._client); + this.serviceAccounts = new ServiceAccounts3(this._client); + } + /** + * Create Workspace + * + * @example + * ```ts + * const betaWorkspace = + * await client.beta.organization.workspaces.create({ + * name: 'x', + * }); + * ``` + */ + create(params, options) { + const { betas, ...body } = params; + return this._client.post("/v1/organizations/workspaces?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * Get Workspace + * + * @example + * ```ts + * const betaWorkspace = + * await client.beta.organization.workspaces.retrieve( + * 'workspace_id', + * ); + * ``` + */ + retrieve(workspaceID, options) { + return this._client.get(path3`/v1/organizations/workspaces/${workspaceID}?beta=true`, options); + } + /** + * Update Workspace + * + * @example + * ```ts + * const betaWorkspace = + * await client.beta.organization.workspaces.update( + * 'workspace_id', + * ); + * ``` + */ + update(workspaceID, body, options) { + return this._client.post(path3`/v1/organizations/workspaces/${workspaceID}?beta=true`, { + body, + ...options + }); + } + /** + * List Workspaces + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaWorkspace of client.beta.organization.workspaces.list()) { + * // ... + * } + * ``` + */ + list(query = {}, options) { + return this._client.getAPIList("/v1/organizations/workspaces?beta=true", Page2, { + query, + ...options + }); + } + /** + * Archive Workspace + * + * @example + * ```ts + * const betaWorkspace = + * await client.beta.organization.workspaces.archive( + * 'workspace_id', + * ); + * ``` + */ + archive(workspaceID, options) { + return this._client.post(path3`/v1/organizations/workspaces/${workspaceID}/archive?beta=true`, options); + } + } + Workspaces4.RateLimits = RateLimits3; + Workspaces4.Members = Members; + Workspaces4.ServiceAccounts = ServiceAccounts3; + return Workspaces4; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.mjs +var Organization2; +var init_organization2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.mjs"() { + init_resource2(); + init_api_keys3(); + init_api_keys3(); + init_compliance_settings(); + init_compliance_settings(); + init_external_keys(); + init_external_keys(); + init_invites2(); + init_invites2(); + init_rate_limits2(); + init_rate_limits2(); + init_users4(); + init_users4(); + init_federation(); + init_federation(); + init_service_accounts2(); + init_service_accounts2(); + init_workspaces3(); + init_workspaces3(); + Organization2 = /* @__PURE__ */ (() => { + class Organization3 extends APIResource2 { + constructor() { + super(...arguments); + this.apiKeys = new APIKeys3(this._client); + this.externalKeys = new ExternalKeys(this._client); + this.federation = new Federation(this._client); + this.invites = new Invites2(this._client); + this.serviceAccounts = new ServiceAccounts2(this._client); + this.users = new Users4(this._client); + this.workspaces = new Workspaces3(this._client); + this.rateLimits = new RateLimits2(this._client); + this.complianceSettings = new ComplianceSettings(this._client); + } + /** + * Retrieve information about the organization associated with the authenticated + * API key. + * + * @example + * ```ts + * const betaOrganization = + * await client.beta.organization.retrieve(); + * ``` + */ + retrieve(options) { + return this._client.get("/v1/organizations/me?beta=true", options); + } + } + Organization3.APIKeys = APIKeys3; + Organization3.ExternalKeys = ExternalKeys; + Organization3.Federation = Federation; + Organization3.Invites = Invites2; + Organization3.ServiceAccounts = ServiceAccounts2; + Organization3.Users = Users4; + Organization3.Workspaces = Workspaces3; + Organization3.RateLimits = RateLimits2; + Organization3.ComplianceSettings = ComplianceSettings; + return Organization3; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/sessions/events.mjs +var Events2; +var init_events2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/sessions/events.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + init_SessionToolRunner(); + Events2 = /* @__PURE__ */ (() => { + class Events4 extends APIResource2 { + /** + * List Events + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsSessionEvent of client.beta.sessions.events.list( + * 'sesn_011CZkZAtmR3yMPDzynEDxu7', + * )) { + * // ... + * } + * ``` + */ + list(sessionID, params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/sessions/${sessionID}/events?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Send Events + * + * @example + * ```ts + * const betaManagedAgentsSendSessionEvents = + * await client.beta.sessions.events.send( + * 'sesn_011CZkZAtmR3yMPDzynEDxu7', + * { + * events: [ + * { + * content: [ + * { + * text: 'Where is my order #1234?', + * type: 'text', + * }, + * ], + * type: 'user.message', + * }, + * ], + * }, + * ); + * ``` + */ + send(sessionID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/sessions/${sessionID}/events?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Stream Events + * + * @example + * ```ts + * const betaManagedAgentsStreamSessionEvents = + * await client.beta.sessions.events.stream( + * 'sesn_011CZkZAtmR3yMPDzynEDxu7', + * ); + * ``` + */ + stream(sessionID, params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.get(path3`/v1/sessions/${sessionID}/events/stream?beta=true`, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]), + stream: true + }); + } + /** + * Attach to a session and dispatch every incoming `agent.tool_use` and + * `agent.custom_tool_use` event to a local tool registry, sending the matching + * result back (`user.tool_result` / `user.custom_tool_result`). The + * sessions-side counterpart to `client.beta.messages.toolRunner`: yields one + * entry per completed tool call so callers can observe each dispatch (and + * `break` to abort cleanly). + * + * @example + * ```ts + * import { betaAgentToolset20260401 } from '@anthropic-ai/sdk/tools/agent-toolset/node'; + * + * for await (const call of client.beta.sessions.events.toolRunner(work.data.id, { + * tools: [...betaAgentToolset20260401({ workdir }), myTool], + * })) { + * console.log(`${call.name} -> ${call.isError ? 'error' : 'ok'}`); + * } + * ``` + */ + toolRunner(sessionID, opts) { + return new SessionToolRunner(sessionID, { ...opts, client: this._client }); + } + } + Events4.SessionToolRunner = SessionToolRunner; + return Events4; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/sessions/resources.mjs +var Resources; +var init_resources2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/sessions/resources.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Resources = class extends APIResource2 { + /** + * Get Session Resource + * + * @example + * ```ts + * const resource = + * await client.beta.sessions.resources.retrieve( + * 'sesrsc_011CZkZBJq5dWxk9fVLNcPht', + * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, + * ); + * ``` + */ + retrieve(resourceID, params, options) { + const { session_id, betas, workspace_id } = params; + return this._client.get(path3`/v1/sessions/${session_id}/resources/${resourceID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Update Session Resource + * + * @example + * ```ts + * const resource = + * await client.beta.sessions.resources.update( + * 'sesrsc_011CZkZBJq5dWxk9fVLNcPht', + * { + * session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7', + * authorization_token: 'ghp_exampletoken', + * }, + * ); + * ``` + */ + update(resourceID, params, options) { + const { session_id, betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/sessions/${session_id}/resources/${resourceID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List Session Resources + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsSessionResource of client.beta.sessions.resources.list( + * 'sesn_011CZkZAtmR3yMPDzynEDxu7', + * )) { + * // ... + * } + * ``` + */ + list(sessionID, params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/sessions/${sessionID}/resources?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Delete Session Resource + * + * @example + * ```ts + * const betaManagedAgentsDeleteSessionResource = + * await client.beta.sessions.resources.delete( + * 'sesrsc_011CZkZBJq5dWxk9fVLNcPht', + * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, + * ); + * ``` + */ + delete(resourceID, params, options) { + const { session_id, betas, workspace_id } = params; + return this._client.delete(path3`/v1/sessions/${session_id}/resources/${resourceID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Add Session Resource + * + * @example + * ```ts + * const betaManagedAgentsFileResource = + * await client.beta.sessions.resources.add( + * 'sesn_011CZkZAtmR3yMPDzynEDxu7', + * { + * file_id: 'file_011CNha8iCJcU1wXNR6q4V8w', + * type: 'file', + * }, + * ); + * ``` + */ + add(sessionID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/sessions/${sessionID}/resources?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/events.mjs +var Events3; +var init_events3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/events.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Events3 = class extends APIResource2 { + /** + * List Session Thread Events + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsSessionEvent of client.beta.sessions.threads.events.list( + * 'sthr_011CZkZVWa6oIjw0rgXZpnBt', + * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, + * )) { + * // ... + * } + * ``` + */ + list(threadID, params, options) { + const { session_id, betas, workspace_id, ...query } = params; + return this._client.getAPIList(path3`/v1/sessions/${session_id}/threads/${threadID}/events?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Stream Session Thread Events + * + * @example + * ```ts + * const betaManagedAgentsStreamSessionThreadEvents = + * await client.beta.sessions.threads.events.stream( + * 'sthr_011CZkZVWa6oIjw0rgXZpnBt', + * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, + * ); + * ``` + */ + stream(threadID, params, options) { + const { session_id, betas, workspace_id, ...query } = params; + return this._client.get(path3`/v1/sessions/${session_id}/threads/${threadID}/stream?beta=true`, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]), + stream: true + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/threads.mjs +var Threads3; +var init_threads3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/threads.mjs"() { + init_resource2(); + init_events3(); + init_events3(); + init_pagination2(); + init_headers3(); + init_path2(); + Threads3 = /* @__PURE__ */ (() => { + class Threads4 extends APIResource2 { + constructor() { + super(...arguments); + this.events = new Events3(this._client); + } + /** + * Get Session Thread + * + * @example + * ```ts + * const betaManagedAgentsSessionThread = + * await client.beta.sessions.threads.retrieve( + * 'sthr_011CZkZVWa6oIjw0rgXZpnBt', + * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, + * ); + * ``` + */ + retrieve(threadID, params, options) { + const { session_id, betas, workspace_id } = params; + return this._client.get(path3`/v1/sessions/${session_id}/threads/${threadID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List Session Threads + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsSessionThread of client.beta.sessions.threads.list( + * 'sesn_011CZkZAtmR3yMPDzynEDxu7', + * )) { + * // ... + * } + * ``` + */ + list(sessionID, params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/sessions/${sessionID}/threads?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Archive Session Thread + * + * @example + * ```ts + * const betaManagedAgentsSessionThread = + * await client.beta.sessions.threads.archive( + * 'sthr_011CZkZVWa6oIjw0rgXZpnBt', + * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, + * ); + * ``` + */ + archive(threadID, params, options) { + const { session_id, betas, workspace_id } = params; + return this._client.post(path3`/v1/sessions/${session_id}/threads/${threadID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + } + Threads4.Events = Events3; + return Threads4; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/sessions/sessions.mjs +var Sessions5; +var init_sessions5 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/sessions/sessions.mjs"() { + init_resource2(); + init_events2(); + init_events2(); + init_resources2(); + init_resources2(); + init_threads3(); + init_threads3(); + init_pagination2(); + init_headers3(); + init_path2(); + Sessions5 = /* @__PURE__ */ (() => { + class Sessions6 extends APIResource2 { + constructor() { + super(...arguments); + this.events = new Events2(this._client); + this.resources = new Resources(this._client); + this.threads = new Threads3(this._client); + } + /** + * Create Session + * + * @example + * ```ts + * const betaManagedAgentsSession = + * await client.beta.sessions.create({ + * agent: 'agent_011CZkYpogX7uDKUyvBTophP', + * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * }); + * ``` + */ + create(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/sessions?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Get Session + * + * @example + * ```ts + * const betaManagedAgentsSession = + * await client.beta.sessions.retrieve( + * 'sesn_011CZkZAtmR3yMPDzynEDxu7', + * ); + * ``` + */ + retrieve(sessionID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/sessions/${sessionID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Update Session + * + * @example + * ```ts + * const betaManagedAgentsSession = + * await client.beta.sessions.update( + * 'sesn_011CZkZAtmR3yMPDzynEDxu7', + * ); + * ``` + */ + update(sessionID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/sessions/${sessionID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List Sessions + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsSession of client.beta.sessions.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/sessions?beta=true", BidirectionalPageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Delete Session + * + * @example + * ```ts + * const betaManagedAgentsDeletedSession = + * await client.beta.sessions.delete( + * 'sesn_011CZkZAtmR3yMPDzynEDxu7', + * ); + * ``` + */ + delete(sessionID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.delete(path3`/v1/sessions/${sessionID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Archive Session + * + * @example + * ```ts + * const betaManagedAgentsSession = + * await client.beta.sessions.archive( + * 'sesn_011CZkZAtmR3yMPDzynEDxu7', + * ); + * ``` + */ + archive(sessionID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/sessions/${sessionID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + } + Sessions6.Events = Events2; + Sessions6.Resources = Resources; + Sessions6.Threads = Threads3; + return Sessions6; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.mjs +var Versions3; +var init_versions3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_uploads4(); + init_path2(); + Versions3 = class extends APIResource2 { + /** + * Create Skill Version + * + * @example + * ```ts + * const betaSkillVersion = + * await client.beta.skills.versions.create('skill_id', { + * files: [fs.createReadStream('path/to/file')], + * }); + * ``` + */ + create(skillID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/skills/${skillID}/versions?beta=true`, multipartFormRequestOptions2({ + body, + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }, this._client, false)); + } + /** + * Get Skill Version + * + * @example + * ```ts + * const betaSkillVersion = + * await client.beta.skills.versions.retrieve('version', { + * skill_id: 'skill_id', + * }); + * ``` + */ + retrieve(version, params, options) { + const { skill_id, betas, workspace_id } = params; + return this._client.get(path3`/v1/skills/${skill_id}/versions/${version}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List Skill Versions + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaSkillVersion of client.beta.skills.versions.list( + * 'skill_id', + * )) { + * // ... + * } + * ``` + */ + list(skillID, params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/skills/${skillID}/versions?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Delete Skill Version + * + * @example + * ```ts + * const betaDeletedSkillVersion = + * await client.beta.skills.versions.delete('version', { + * skill_id: 'skill_id', + * }); + * ``` + */ + delete(version, params, options) { + const { skill_id, betas, workspace_id } = params; + return this._client.delete(path3`/v1/skills/${skill_id}/versions/${version}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Download a skill version's content as a zip archive. + * + * @example + * ```ts + * const response = await client.beta.skills.versions.download( + * 'version', + * { skill_id: 'skill_id' }, + * ); + * + * const content = await response.blob(); + * console.log(content); + * ``` + */ + download(version, params, options) { + const { skill_id, betas, workspace_id } = params; + return this._client.get(path3`/v1/skills/${skill_id}/versions/${version}/content?beta=true`, { + ...options, + headers: buildHeaders2([ + { + Accept: "application/binary", + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]), + __binaryResponse: true + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.mjs +var Skills2; +var init_skills2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.mjs"() { + init_resource2(); + init_versions3(); + init_versions3(); + init_pagination2(); + init_headers3(); + init_uploads4(); + init_path2(); + Skills2 = /* @__PURE__ */ (() => { + class Skills4 extends APIResource2 { + constructor() { + super(...arguments); + this.versions = new Versions3(this._client); + } + /** + * Create Skill + * + * @example + * ```ts + * const betaSkill = await client.beta.skills.create({ + * files: [fs.createReadStream('path/to/file')], + * }); + * ``` + */ + create(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/skills?beta=true", multipartFormRequestOptions2({ + body, + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }, this._client, false)); + } + /** + * Get Skill + * + * @example + * ```ts + * const betaSkill = await client.beta.skills.retrieve( + * 'skill_id', + * ); + * ``` + */ + retrieve(skillID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/skills/${skillID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List Skills + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaSkill of client.beta.skills.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/skills?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Delete Skill + * + * @example + * ```ts + * const betaDeletedSkill = await client.beta.skills.delete( + * 'skill_id', + * ); + * ``` + */ + delete(skillID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.delete(path3`/v1/skills/${skillID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + } + Skills4.Versions = Versions3; + return Skills4; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/tunnels/certificates.mjs +var Certificates3; +var init_certificates3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/tunnels/certificates.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Certificates3 = class extends APIResource2 { + /** + * The Tunnels API is in research preview. It requires the + * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a + * deprecation period. It supersedes the Admin API endpoints at + * `/v1/organizations/tunnels`, which remain available during a migration window. + * + * Registers a public CA certificate on a tunnel. Anthropic verifies the gateway's + * server certificate against this CA when it terminates the inner TLS session. A + * tunnel holds at most two non-archived certificates. + * + * @example + * ```ts + * const betaTunnelCertificate = + * await client.beta.tunnels.certificates.create( + * 'tunnel_id', + * { ca_certificate_pem: 'ca_certificate_pem' }, + * ); + * ``` + */ + create(tunnelID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/tunnels/${tunnelID}/certificates?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * The Tunnels API is in research preview. It requires the + * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a + * deprecation period. It supersedes the Admin API endpoints at + * `/v1/organizations/tunnels`, which remain available during a migration window. + * + * Fetches a tunnel certificate by ID. + * + * @example + * ```ts + * const betaTunnelCertificate = + * await client.beta.tunnels.certificates.retrieve( + * 'certificate_id', + * { tunnel_id: 'tunnel_id' }, + * ); + * ``` + */ + retrieve(certificateID, params, options) { + const { tunnel_id, betas, workspace_id } = params; + return this._client.get(path3`/v1/tunnels/${tunnel_id}/certificates/${certificateID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * The Tunnels API is in research preview. It requires the + * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a + * deprecation period. It supersedes the Admin API endpoints at + * `/v1/organizations/tunnels`, which remain available during a migration window. + * + * Lists the certificates registered on a tunnel. Archived certificates are + * excluded unless include_archived is set. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaTunnelCertificate of client.beta.tunnels.certificates.list( + * 'tunnel_id', + * )) { + * // ... + * } + * ``` + */ + list(tunnelID, params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/tunnels/${tunnelID}/certificates?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * The Tunnels API is in research preview. It requires the + * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a + * deprecation period. It supersedes the Admin API endpoints at + * `/v1/organizations/tunnels`, which remain available during a migration window. + * + * Archives a tunnel certificate, removing it from the set Anthropic trusts for the + * tunnel. The certificate record is retained. Archiving the last non-archived + * certificate is permitted; the tunnel rejects MCP traffic until a new certificate + * is added. + * + * @example + * ```ts + * const betaTunnelCertificate = + * await client.beta.tunnels.certificates.archive( + * 'certificate_id', + * { tunnel_id: 'tunnel_id' }, + * ); + * ``` + */ + archive(certificateID, params, options) { + const { tunnel_id, betas, workspace_id } = params; + return this._client.post(path3`/v1/tunnels/${tunnel_id}/certificates/${certificateID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/tunnels/tunnels.mjs +var Tunnels; +var init_tunnels = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/tunnels/tunnels.mjs"() { + init_resource2(); + init_certificates3(); + init_certificates3(); + init_pagination2(); + init_headers3(); + init_path2(); + Tunnels = /* @__PURE__ */ (() => { + class Tunnels2 extends APIResource2 { + constructor() { + super(...arguments); + this.certificates = new Certificates3(this._client); + } + /** + * The Tunnels API is in research preview. It requires the + * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a + * deprecation period. It supersedes the Admin API endpoints at + * `/v1/organizations/tunnels`, which remain available during a migration window. + * + * Creates a tunnel. Creation allocates a fresh hostname and provisions the tunnel; + * it is not idempotent. The new tunnel rejects MCP traffic until at least one CA + * certificate is added. + * + * @example + * ```ts + * const betaTunnel = await client.beta.tunnels.create(); + * ``` + */ + create(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/tunnels?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * The Tunnels API is in research preview. It requires the + * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a + * deprecation period. It supersedes the Admin API endpoints at + * `/v1/organizations/tunnels`, which remain available during a migration window. + * + * Fetches a tunnel by ID. + * + * @example + * ```ts + * const betaTunnel = await client.beta.tunnels.retrieve( + * 'tunnel_id', + * ); + * ``` + */ + retrieve(tunnelID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/tunnels/${tunnelID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * The Tunnels API is in research preview. It requires the + * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a + * deprecation period. It supersedes the Admin API endpoints at + * `/v1/organizations/tunnels`, which remain available during a migration window. + * + * Lists tunnels. Results are ordered by creation time, newest first; archived + * tunnels are excluded unless include_archived is set. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaTunnel of client.beta.tunnels.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/tunnels?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * The Tunnels API is in research preview. It requires the + * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a + * deprecation period. It supersedes the Admin API endpoints at + * `/v1/organizations/tunnels`, which remain available during a migration window. + * + * Archives a tunnel. Archival is irreversible: every non-archived certificate on + * the tunnel is archived in the same operation, the hostname is retired and never + * re-allocated, and the tunnel token is invalidated. Retrying against an + * already-archived tunnel returns the existing record unchanged. + * + * @example + * ```ts + * const betaTunnel = await client.beta.tunnels.archive( + * 'tunnel_id', + * ); + * ``` + */ + archive(tunnelID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/tunnels/${tunnelID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * The Tunnels API is in research preview. It requires the + * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a + * deprecation period. It supersedes the Admin API endpoints at + * `/v1/organizations/tunnels`, which remain available during a migration window. + * + * Reveals a tunnel's connector token. The value is fetched live on each call; + * Anthropic does not store it. Repeated calls return the same value until the + * token is rotated. Exposed as POST so the token does not appear in intermediary + * access logs. + * + * @example + * ```ts + * const betaTunnelToken = + * await client.beta.tunnels.revealToken('tunnel_id'); + * ``` + */ + revealToken(tunnelID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/tunnels/${tunnelID}/reveal_token?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * The Tunnels API is in research preview. It requires the + * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a + * deprecation period. It supersedes the Admin API endpoints at + * `/v1/organizations/tunnels`, which remain available during a migration window. + * + * Rotates a tunnel's connector token. Rotation invalidates the current token for + * new connections and returns a fresh value; established connections are not + * severed. A connector restarted after rotation must use the new value. + * + * @example + * ```ts + * const betaTunnelToken = + * await client.beta.tunnels.rotateToken('tunnel_id'); + * ``` + */ + rotateToken(tunnelID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/tunnels/${tunnelID}/rotate_token?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + } + Tunnels2.Certificates = Certificates3; + return Tunnels2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/vaults/credentials.mjs +var Credentials2; +var init_credentials3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/vaults/credentials.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Credentials2 = class extends APIResource2 { + /** + * Create Credential + * + * @example + * ```ts + * const betaManagedAgentsCredential = + * await client.beta.vaults.credentials.create( + * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', + * { + * auth: { + * token: 'bearer_exampletoken', + * mcp_server_url: + * 'https://example-server.modelcontextprotocol.io/sse', + * type: 'static_bearer', + * }, + * }, + * ); + * ``` + */ + create(vaultID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/vaults/${vaultID}/credentials?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Get Credential + * + * @example + * ```ts + * const betaManagedAgentsCredential = + * await client.beta.vaults.credentials.retrieve( + * 'vcrd_011CZkZEMt8gZan2iYOQfSkw', + * { vault_id: 'vlt_011CZkZDLs7fYzm1hXNPeRjv' }, + * ); + * ``` + */ + retrieve(credentialID, params, options) { + const { vault_id, betas, workspace_id } = params; + return this._client.get(path3`/v1/vaults/${vault_id}/credentials/${credentialID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Update Credential + * + * @example + * ```ts + * const betaManagedAgentsCredential = + * await client.beta.vaults.credentials.update( + * 'vcrd_011CZkZEMt8gZan2iYOQfSkw', + * { vault_id: 'vlt_011CZkZDLs7fYzm1hXNPeRjv' }, + * ); + * ``` + */ + update(credentialID, params, options) { + const { vault_id, betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/vaults/${vault_id}/credentials/${credentialID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List Credentials + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsCredential of client.beta.vaults.credentials.list( + * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', + * )) { + * // ... + * } + * ``` + */ + list(vaultID, params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/vaults/${vaultID}/credentials?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Delete Credential + * + * @example + * ```ts + * const betaManagedAgentsDeletedCredential = + * await client.beta.vaults.credentials.delete( + * 'vcrd_011CZkZEMt8gZan2iYOQfSkw', + * { vault_id: 'vlt_011CZkZDLs7fYzm1hXNPeRjv' }, + * ); + * ``` + */ + delete(credentialID, params, options) { + const { vault_id, betas, workspace_id } = params; + return this._client.delete(path3`/v1/vaults/${vault_id}/credentials/${credentialID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Archive Credential + * + * @example + * ```ts + * const betaManagedAgentsCredential = + * await client.beta.vaults.credentials.archive( + * 'vcrd_011CZkZEMt8gZan2iYOQfSkw', + * { vault_id: 'vlt_011CZkZDLs7fYzm1hXNPeRjv' }, + * ); + * ``` + */ + archive(credentialID, params, options) { + const { vault_id, betas, workspace_id } = params; + return this._client.post(path3`/v1/vaults/${vault_id}/credentials/${credentialID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Validate Credential + * + * @example + * ```ts + * const betaManagedAgentsCredentialValidation = + * await client.beta.vaults.credentials.mcpOAuthValidate( + * 'vcrd_011CZkZEMt8gZan2iYOQfSkw', + * { vault_id: 'vlt_011CZkZDLs7fYzm1hXNPeRjv' }, + * ); + * ``` + */ + mcpOAuthValidate(credentialID, params, options) { + const { vault_id, betas, workspace_id } = params; + return this._client.post(path3`/v1/vaults/${vault_id}/credentials/${credentialID}/mcp_oauth_validate?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/vaults/vaults.mjs +var Vaults2; +var init_vaults2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/vaults/vaults.mjs"() { + init_resource2(); + init_credentials3(); + init_credentials3(); + init_pagination2(); + init_headers3(); + init_path2(); + Vaults2 = /* @__PURE__ */ (() => { + class Vaults3 extends APIResource2 { + constructor() { + super(...arguments); + this.credentials = new Credentials2(this._client); + } + /** + * Create Vault + * + * @example + * ```ts + * const betaManagedAgentsVault = + * await client.beta.vaults.create({ + * display_name: 'Example vault', + * }); + * ``` + */ + create(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/vaults?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Get Vault + * + * @example + * ```ts + * const betaManagedAgentsVault = + * await client.beta.vaults.retrieve( + * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', + * ); + * ``` + */ + retrieve(vaultID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/vaults/${vaultID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Update Vault + * + * @example + * ```ts + * const betaManagedAgentsVault = + * await client.beta.vaults.update( + * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', + * ); + * ``` + */ + update(vaultID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/vaults/${vaultID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List Vaults + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsVault of client.beta.vaults.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/vaults?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Delete Vault + * + * @example + * ```ts + * const betaManagedAgentsDeletedVault = + * await client.beta.vaults.delete( + * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', + * ); + * ``` + */ + delete(vaultID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.delete(path3`/v1/vaults/${vaultID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Archive Vault + * + * @example + * ```ts + * const betaManagedAgentsVault = + * await client.beta.vaults.archive( + * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', + * ); + * ``` + */ + archive(vaultID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/vaults/${vaultID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + } + Vaults3.Credentials = Credentials2; + return Vaults3; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/beta.mjs +var Beta2; +var init_beta2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/beta.mjs"() { + init_resource2(); + init_deployment_runs(); + init_deployment_runs(); + init_deployments(); + init_deployments(); + init_dreams(); + init_dreams(); + init_files5(); + init_files5(); + init_models3(); + init_models3(); + init_user_profiles(); + init_user_profiles(); + init_webhooks2(); + init_webhooks2(); + init_agents2(); + init_agents2(); + init_environments2(); + init_environments2(); + init_memory_stores(); + init_memory_stores(); + init_messages3(); + init_messages3(); + init_organization2(); + init_organization2(); + init_sessions5(); + init_sessions5(); + init_skills2(); + init_skills2(); + init_tunnels(); + init_tunnels(); + init_vaults2(); + init_vaults2(); + Beta2 = /* @__PURE__ */ (() => { + class Beta3 extends APIResource2 { + constructor() { + super(...arguments); + this.models = new Models2(this._client); + this.messages = new Messages3(this._client); + this.agents = new Agents2(this._client); + this.environments = new Environments2(this._client); + this.sessions = new Sessions5(this._client); + this.deployments = new Deployments(this._client); + this.deploymentRuns = new DeploymentRuns(this._client); + this.vaults = new Vaults2(this._client); + this.memoryStores = new MemoryStores(this._client); + this.files = new Files5(this._client); + this.skills = new Skills2(this._client); + this.webhooks = new Webhooks2(this._client); + this.userProfiles = new UserProfiles(this._client); + this.dreams = new Dreams(this._client); + this.tunnels = new Tunnels(this._client); + this.organization = new Organization2(this._client); + } + } + Beta3.Models = Models2; + Beta3.Messages = Messages3; + Beta3.Agents = Agents2; + Beta3.Environments = Environments2; + Beta3.Sessions = Sessions5; + Beta3.Deployments = Deployments; + Beta3.DeploymentRuns = DeploymentRuns; + Beta3.Vaults = Vaults2; + Beta3.MemoryStores = MemoryStores; + Beta3.Files = Files5; + Beta3.Skills = Skills2; + Beta3.Webhooks = Webhooks2; + Beta3.UserProfiles = UserProfiles; + Beta3.Dreams = Dreams; + Beta3.Tunnels = Tunnels; + Beta3.Organization = Organization2; + return Beta3; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/completions.mjs +var Completions3; +var init_completions4 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/completions.mjs"() { + init_resource2(); + init_headers3(); + Completions3 = class extends APIResource2 { + create(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/complete", { + body, + timeout: this._client._options.timeout ?? 6e5, + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]), + stream: params.stream ?? false + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/files.mjs +var Files6; +var init_files6 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/files.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_stainless_helper_header(); + init_uploads4(); + init_path2(); + Files6 = class extends APIResource2 { + /** + * List Files + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const fileMetadata of client.files.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/files", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + /** + * Delete File + * + * @example + * ```ts + * const deletedFile = await client.files.delete('file_id'); + * ``` + */ + delete(fileID, params = {}, options) { + const { workspace_id } = params ?? {}; + return this._client.delete(path3`/v1/files/${fileID}`, { + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + /** + * Download File + * + * @example + * ```ts + * const response = await client.files.download('file_id'); + * + * const content = await response.blob(); + * console.log(content); + * ``` + */ + download(fileID, params = {}, options) { + const { workspace_id } = params ?? {}; + return this._client.get(path3`/v1/files/${fileID}/content`, { + ...options, + headers: buildHeaders2([ + { + Accept: "application/binary", + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]), + __binaryResponse: true + }); + } + /** + * Get File Metadata + * + * @example + * ```ts + * const fileMetadata = await client.files.retrieveMetadata( + * 'file_id', + * ); + * ``` + */ + retrieveMetadata(fileID, params = {}, options) { + const { workspace_id } = params ?? {}; + return this._client.get(path3`/v1/files/${fileID}`, { + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + /** + * Upload File + * + * @example + * ```ts + * const fileMetadata = await client.files.upload({ + * file: fs.createReadStream('path/to/file'), + * }); + * ``` + */ + upload(params, options) { + const { workspace_id, ...body } = params; + return this._client.post("/v1/files", multipartFormRequestOptions2({ + body, + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + stainlessHelperHeaderFromFile(body.file), + options?.headers + ]) + }, this._client)); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/lib/parser.mjs +function getOutputFormat2(params) { + return params?.output_config?.format; +} +function maybeParseMessage(message, params, opts) { + const outputFormat = getOutputFormat2(params); + if (!params || !("parse" in (outputFormat ?? {}))) { + return { + ...message, + content: message.content.map((block) => { + if (block.type === "text") { + const parsedBlock = Object.defineProperty({ ...block }, "parsed_output", { + value: null, + enumerable: false + }); + return parsedBlock; + } + return block; + }), + parsed_output: null + }; + } + return parseMessage(message, params, opts); +} +function parseMessage(message, params, opts) { + let firstParsedOutput = null; + const content = message.content.map((block) => { + if (block.type === "text") { + const parsedOutput = parseOutputFormat(params, block.text); + if (firstParsedOutput === null) { + firstParsedOutput = parsedOutput; + } + const parsedBlock = Object.defineProperty({ ...block }, "parsed_output", { + value: parsedOutput, + enumerable: false + }); + return parsedBlock; + } + return block; + }); + return { + ...message, + content, + parsed_output: firstParsedOutput + }; +} +function parseOutputFormat(params, content) { + const outputFormat = getOutputFormat2(params); + if (outputFormat?.type !== "json_schema") { + return null; + } + try { + if ("parse" in outputFormat) { + return outputFormat.parse(content); + } + return JSON.parse(content); + } catch (error) { + throw new AnthropicError(`Failed to parse structured output: ${error}`); + } +} +var init_parser4 = __esm({ + "node_modules/@anthropic-ai/sdk/lib/parser.mjs"() { + init_error3(); + } +}); + +// node_modules/@anthropic-ai/sdk/lib/MessageStream.mjs +function tracksToolInput2(content) { + return content.type === "tool_use" || content.type === "server_tool_use"; +} +var _MessageStream_instances, _MessageStream_currentMessageSnapshot, _MessageStream_params, _MessageStream_connectedPromise, _MessageStream_resolveConnectedPromise, _MessageStream_rejectConnectedPromise, _MessageStream_endPromise, _MessageStream_resolveEndPromise, _MessageStream_rejectEndPromise, _MessageStream_listeners, _MessageStream_ended, _MessageStream_errored, _MessageStream_aborted, _MessageStream_catchingPromiseCreated, _MessageStream_response, _MessageStream_request_id, _MessageStream_workspace_id, _MessageStream_logger, _MessageStream_getFinalMessage, _MessageStream_getFinalText, _MessageStream_handleError, _MessageStream_beginRequest, _MessageStream_addStreamEvent, _MessageStream_endRequest, _MessageStream_accumulateMessage, MessageStream; +var init_MessageStream = __esm({ + "node_modules/@anthropic-ai/sdk/lib/MessageStream.mjs"() { + init_tslib2(); + init_stainless_helper_header(); + init_errors2(); + init_values2(); + init_error4(); + init_streaming4(); + init_parser4(); + init_message_stream_utils(); + MessageStream = /* @__PURE__ */ (() => { + class MessageStream2 { + constructor(params, opts) { + _MessageStream_instances.add(this); + this.messages = []; + this.receivedMessages = []; + _MessageStream_currentMessageSnapshot.set(this, void 0); + _MessageStream_params.set(this, null); + this.controller = new AbortController(); + _MessageStream_connectedPromise.set(this, void 0); + _MessageStream_resolveConnectedPromise.set(this, () => { + }); + _MessageStream_rejectConnectedPromise.set(this, () => { + }); + _MessageStream_endPromise.set(this, void 0); + _MessageStream_resolveEndPromise.set(this, () => { + }); + _MessageStream_rejectEndPromise.set(this, () => { + }); + _MessageStream_listeners.set(this, {}); + _MessageStream_ended.set(this, false); + _MessageStream_errored.set(this, false); + _MessageStream_aborted.set(this, false); + _MessageStream_catchingPromiseCreated.set(this, false); + _MessageStream_response.set(this, void 0); + _MessageStream_request_id.set(this, void 0); + _MessageStream_workspace_id.set(this, void 0); + _MessageStream_logger.set(this, void 0); + _MessageStream_handleError.set(this, (error) => { + __classPrivateFieldSet2(this, _MessageStream_errored, true, "f"); + if (isAbortError2(error)) { + error = new APIUserAbortError2(); + } + if (error instanceof APIUserAbortError2) { + __classPrivateFieldSet2(this, _MessageStream_aborted, true, "f"); + return this._emit("abort", error); + } + if (error instanceof AnthropicError) { + return this._emit("error", error); + } + if (error instanceof Error) { + const anthropicError = new AnthropicError(error.message); + anthropicError.cause = error; + return this._emit("error", anthropicError); + } + return this._emit("error", new AnthropicError(String(error))); + }); + __classPrivateFieldSet2(this, _MessageStream_connectedPromise, new Promise((resolve2, reject2) => { + __classPrivateFieldSet2(this, _MessageStream_resolveConnectedPromise, resolve2, "f"); + __classPrivateFieldSet2(this, _MessageStream_rejectConnectedPromise, reject2, "f"); + }), "f"); + __classPrivateFieldSet2(this, _MessageStream_endPromise, new Promise((resolve2, reject2) => { + __classPrivateFieldSet2(this, _MessageStream_resolveEndPromise, resolve2, "f"); + __classPrivateFieldSet2(this, _MessageStream_rejectEndPromise, reject2, "f"); + }), "f"); + __classPrivateFieldGet2(this, _MessageStream_connectedPromise, "f").catch(() => { + }); + __classPrivateFieldGet2(this, _MessageStream_endPromise, "f").catch(() => { + }); + __classPrivateFieldSet2(this, _MessageStream_params, params, "f"); + __classPrivateFieldSet2(this, _MessageStream_logger, opts?.logger ?? console, "f"); + } + get response() { + return __classPrivateFieldGet2(this, _MessageStream_response, "f"); + } + get request_id() { + return __classPrivateFieldGet2(this, _MessageStream_request_id, "f"); + } + get workspace_id() { + return __classPrivateFieldGet2(this, _MessageStream_workspace_id, "f"); + } + /** + * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request, + * returned vie the `request-id` header which is useful for debugging requests and resporting + * issues to Anthropic. + * + * This is the same as the `APIPromise.withResponse()` method. + * + * This method will raise an error if you created the stream using `MessageStream.fromReadableStream` + * as no `Response` is available. + */ + async withResponse() { + __classPrivateFieldSet2(this, _MessageStream_catchingPromiseCreated, true, "f"); + const response = await __classPrivateFieldGet2(this, _MessageStream_connectedPromise, "f"); + if (!response) { + throw new Error("Could not resolve a `Response` object"); + } + return { + data: this, + response, + request_id: response.headers.get("request-id"), + workspace_id: response.headers.get("anthropic-workspace-id") + }; + } + /** + * Intended for use on the frontend, consuming a stream produced with + * `.toReadableStream()` on the backend. + * + * Note that messages sent to the model do not appear in `.on('message')` + * in this context. + */ + static fromReadableStream(stream5) { + const runner = new MessageStream2(null); + runner._run(() => runner._fromReadableStream(stream5)); + return runner; + } + static createMessage(messages, params, options, { logger } = {}) { + const runner = new MessageStream2(params, { logger }); + for (const message of params.messages) { + runner._addMessageParam(message); + } + __classPrivateFieldSet2(runner, _MessageStream_params, { ...params, stream: true }, "f"); + runner._run(() => runner._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, [STAINLESS_HELPER_METHOD_HEADER]: "stream" } })); + return runner; + } + _run(executor) { + executor().then(() => { + this._emitFinal(); + this._emit("end"); + }, __classPrivateFieldGet2(this, _MessageStream_handleError, "f")); + } + _addMessageParam(message) { + this.messages.push(message); + } + _addMessage(message, emit2 = true) { + this.receivedMessages.push(message); + if (emit2) { + this._emit("message", message); + } + } + async _createMessage(messages, params, options) { + const signal = options?.signal; + let abortHandler; + if (signal) { + if (signal.aborted) + this.controller.abort(); + abortHandler = this.controller.abort.bind(this.controller); + signal.addEventListener("abort", abortHandler); + } + try { + __classPrivateFieldGet2(this, _MessageStream_instances, "m", _MessageStream_beginRequest).call(this); + const { response, data: stream5 } = await messages.create({ ...params, stream: true }, { ...options, signal: this.controller.signal }).withResponse(); + this._connected(response); + for await (const event of stream5) { + __classPrivateFieldGet2(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event); + } + if (stream5.controller.signal?.aborted) { + throw new APIUserAbortError2(); + } + __classPrivateFieldGet2(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this); + } finally { + if (signal && abortHandler) { + signal.removeEventListener("abort", abortHandler); + } + } + } + _connected(response) { + if (this.ended) + return; + __classPrivateFieldSet2(this, _MessageStream_response, response, "f"); + __classPrivateFieldSet2(this, _MessageStream_request_id, response?.headers.get("request-id"), "f"); + __classPrivateFieldSet2(this, _MessageStream_workspace_id, response?.headers.get("anthropic-workspace-id"), "f"); + __classPrivateFieldGet2(this, _MessageStream_resolveConnectedPromise, "f").call(this, response); + this._emit("connect"); + } + get ended() { + return __classPrivateFieldGet2(this, _MessageStream_ended, "f"); + } + get errored() { + return __classPrivateFieldGet2(this, _MessageStream_errored, "f"); + } + get aborted() { + return __classPrivateFieldGet2(this, _MessageStream_aborted, "f"); + } + abort() { + this.controller.abort(); + } + /** + * Adds the listener function to the end of the listeners array for the event. + * No checks are made to see if the listener has already been added. Multiple calls passing + * the same combination of event and listener will result in the listener being added, and + * called, multiple times. + * @returns this MessageStream, so that calls can be chained + */ + on(event, listener) { + const listeners = __classPrivateFieldGet2(this, _MessageStream_listeners, "f")[event] || (__classPrivateFieldGet2(this, _MessageStream_listeners, "f")[event] = []); + listeners.push({ listener }); + return this; + } + /** + * Removes the specified listener from the listener array for the event. + * off() will remove, at most, one instance of a listener from the listener array. If any single + * listener has been added multiple times to the listener array for the specified event, then + * off() must be called multiple times to remove each instance. + * @returns this MessageStream, so that calls can be chained + */ + off(event, listener) { + const listeners = __classPrivateFieldGet2(this, _MessageStream_listeners, "f")[event]; + if (!listeners) + return this; + const index = listeners.findIndex((l) => l.listener === listener); + if (index >= 0) + listeners.splice(index, 1); + return this; + } + /** + * Adds a one-time listener function for the event. The next time the event is triggered, + * this listener is removed and then invoked. + * @returns this MessageStream, so that calls can be chained + */ + once(event, listener) { + const listeners = __classPrivateFieldGet2(this, _MessageStream_listeners, "f")[event] || (__classPrivateFieldGet2(this, _MessageStream_listeners, "f")[event] = []); + listeners.push({ listener, once: true }); + return this; + } + /** + * This is similar to `.once()`, but returns a Promise that resolves the next time + * the event is triggered, instead of calling a listener callback. + * @returns a Promise that resolves the next time given event is triggered, + * or rejects if an error is emitted. (If you request the 'error' event, + * returns a promise that resolves with the error). + * + * Example: + * + * const message = await stream.emitted('message') // rejects if the stream errors + */ + emitted(event) { + return new Promise((resolve2, reject2) => { + __classPrivateFieldSet2(this, _MessageStream_catchingPromiseCreated, true, "f"); + if (event !== "error") + this.once("error", reject2); + this.once(event, resolve2); + }); + } + async done() { + __classPrivateFieldSet2(this, _MessageStream_catchingPromiseCreated, true, "f"); + await __classPrivateFieldGet2(this, _MessageStream_endPromise, "f"); + } + get currentMessage() { + return __classPrivateFieldGet2(this, _MessageStream_currentMessageSnapshot, "f"); + } + /** + * @returns a promise that resolves with the the final assistant Message response, + * or rejects if an error occurred or the stream ended prematurely without producing a Message. + * If structured outputs were used, this will be a ParsedMessage with a `parsed_output` field. + */ + async finalMessage() { + await this.done(); + return __classPrivateFieldGet2(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this); + } + /** + * @returns a promise that resolves with the the final assistant Message's text response, concatenated + * together if there are more than one text blocks. + * Rejects if an error occurred or the stream ended prematurely without producing a Message. + */ + async finalText() { + await this.done(); + return __classPrivateFieldGet2(this, _MessageStream_instances, "m", _MessageStream_getFinalText).call(this); + } + _emit(event, ...args) { + if (__classPrivateFieldGet2(this, _MessageStream_ended, "f")) + return; + if (event === "end") { + __classPrivateFieldSet2(this, _MessageStream_ended, true, "f"); + __classPrivateFieldGet2(this, _MessageStream_resolveEndPromise, "f").call(this); + } + const listeners = __classPrivateFieldGet2(this, _MessageStream_listeners, "f")[event]; + if (listeners) { + __classPrivateFieldGet2(this, _MessageStream_listeners, "f")[event] = listeners.filter((l) => !l.once); + listeners.forEach(({ listener }) => listener(...args)); + } + if (event === "abort") { + const error = args[0]; + if (!__classPrivateFieldGet2(this, _MessageStream_catchingPromiseCreated, "f") && !listeners?.length) { + Promise.reject(error); + } + __classPrivateFieldGet2(this, _MessageStream_rejectConnectedPromise, "f").call(this, error); + __classPrivateFieldGet2(this, _MessageStream_rejectEndPromise, "f").call(this, error); + this._emit("end"); + return; + } + if (event === "error") { + const error = args[0]; + if (!__classPrivateFieldGet2(this, _MessageStream_catchingPromiseCreated, "f") && !listeners?.length) { + Promise.reject(error); + } + __classPrivateFieldGet2(this, _MessageStream_rejectConnectedPromise, "f").call(this, error); + __classPrivateFieldGet2(this, _MessageStream_rejectEndPromise, "f").call(this, error); + this._emit("end"); + } + } + _emitFinal() { + const finalMessage = this.receivedMessages.at(-1); + if (finalMessage) { + this._emit("finalMessage", __classPrivateFieldGet2(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this)); + } + } + async _fromReadableStream(readableStream, options) { + const signal = options?.signal; + let abortHandler; + if (signal) { + if (signal.aborted) + this.controller.abort(); + abortHandler = this.controller.abort.bind(this.controller); + signal.addEventListener("abort", abortHandler); + } + try { + __classPrivateFieldGet2(this, _MessageStream_instances, "m", _MessageStream_beginRequest).call(this); + this._connected(null); + const stream5 = Stream2.fromReadableStream(readableStream, this.controller); + for await (const event of stream5) { + __classPrivateFieldGet2(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event); + } + if (stream5.controller.signal?.aborted) { + throw new APIUserAbortError2(); + } + __classPrivateFieldGet2(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this); + } finally { + if (signal && abortHandler) { + signal.removeEventListener("abort", abortHandler); + } + } + } + [(_MessageStream_currentMessageSnapshot = /* @__PURE__ */ new WeakMap(), _MessageStream_params = /* @__PURE__ */ new WeakMap(), _MessageStream_connectedPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_resolveConnectedPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_rejectConnectedPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_endPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_resolveEndPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_rejectEndPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_listeners = /* @__PURE__ */ new WeakMap(), _MessageStream_ended = /* @__PURE__ */ new WeakMap(), _MessageStream_errored = /* @__PURE__ */ new WeakMap(), _MessageStream_aborted = /* @__PURE__ */ new WeakMap(), _MessageStream_catchingPromiseCreated = /* @__PURE__ */ new WeakMap(), _MessageStream_response = /* @__PURE__ */ new WeakMap(), _MessageStream_request_id = /* @__PURE__ */ new WeakMap(), _MessageStream_workspace_id = /* @__PURE__ */ new WeakMap(), _MessageStream_logger = /* @__PURE__ */ new WeakMap(), _MessageStream_handleError = /* @__PURE__ */ new WeakMap(), _MessageStream_instances = /* @__PURE__ */ new WeakSet(), _MessageStream_getFinalMessage = function _MessageStream_getFinalMessage2() { + if (this.receivedMessages.length === 0) { + throw new AnthropicError("stream ended without producing a Message with role=assistant"); + } + return this.receivedMessages.at(-1); + }, _MessageStream_getFinalText = function _MessageStream_getFinalText2() { + if (this.receivedMessages.length === 0) { + throw new AnthropicError("stream ended without producing a Message with role=assistant"); + } + const textBlocks = this.receivedMessages.at(-1).content.filter((block) => block.type === "text").map((block) => block.text); + if (textBlocks.length === 0) { + throw new AnthropicError("stream ended without producing a content block with type=text"); + } + return textBlocks.join(" "); + }, _MessageStream_beginRequest = function _MessageStream_beginRequest2() { + if (this.ended) + return; + __classPrivateFieldSet2(this, _MessageStream_currentMessageSnapshot, void 0, "f"); + }, _MessageStream_addStreamEvent = function _MessageStream_addStreamEvent2(event) { + if (this.ended) + return; + const messageSnapshot = __classPrivateFieldGet2(this, _MessageStream_instances, "m", _MessageStream_accumulateMessage).call(this, event); + this._emit("streamEvent", event, messageSnapshot); + switch (event.type) { + case "content_block_delta": { + const content = messageSnapshot.content.at(-1); + switch (event.delta.type) { + case "text_delta": { + if (content.type === "text") { + this._emit("text", event.delta.text, content.text || ""); + } + break; + } + case "citations_delta": { + if (content.type === "text") { + this._emit("citation", event.delta.citation, content.citations ?? []); + } + break; + } + case "input_json_delta": { + if (tracksToolInput2(content) && __classPrivateFieldGet2(this, _MessageStream_listeners, "f").inputJson?.length) { + this._emit("inputJson", event.delta.partial_json, content.input); + } + break; + } + case "thinking_delta": { + if (content.type === "thinking") { + this._emit("thinking", event.delta.thinking, content.thinking); + } + break; + } + case "signature_delta": { + if (content.type === "thinking") { + this._emit("signature", content.signature); + } + break; + } + default: + checkNever(event.delta); + } + break; + } + case "message_stop": { + this._addMessageParam(messageSnapshot); + this._addMessage(maybeParseMessage(messageSnapshot, __classPrivateFieldGet2(this, _MessageStream_params, "f"), { logger: __classPrivateFieldGet2(this, _MessageStream_logger, "f") }), true); + break; + } + case "content_block_stop": { + this._emit("contentBlock", messageSnapshot.content.at(-1)); + break; + } + case "message_start": { + __classPrivateFieldSet2(this, _MessageStream_currentMessageSnapshot, messageSnapshot, "f"); + break; + } + case "content_block_start": + case "message_delta": + break; + } + }, _MessageStream_endRequest = function _MessageStream_endRequest2() { + if (this.ended) { + throw new AnthropicError(`stream has ended, this shouldn't happen`); + } + const snapshot = __classPrivateFieldGet2(this, _MessageStream_currentMessageSnapshot, "f"); + if (!snapshot) { + throw new AnthropicError(`request ended without sending any chunks`); + } + __classPrivateFieldSet2(this, _MessageStream_currentMessageSnapshot, void 0, "f"); + return maybeParseMessage(snapshot, __classPrivateFieldGet2(this, _MessageStream_params, "f"), { logger: __classPrivateFieldGet2(this, _MessageStream_logger, "f") }); + }, _MessageStream_accumulateMessage = function _MessageStream_accumulateMessage2(event) { + let snapshot = __classPrivateFieldGet2(this, _MessageStream_currentMessageSnapshot, "f"); + if (event.type === "message_start") { + if (snapshot) { + throw new AnthropicError(`Unexpected event order, got ${event.type} before receiving "message_stop"`); + } + return event.message; + } + if (!snapshot) { + throw new AnthropicError(`Unexpected event order, got ${event.type} before "message_start"`); + } + switch (event.type) { + case "message_stop": + return snapshot; + case "message_delta": + snapshot.stop_reason = event.delta.stop_reason; + snapshot.stop_sequence = event.delta.stop_sequence; + snapshot.stop_details = event.delta.stop_details; + snapshot.usage.output_tokens = event.usage.output_tokens; + if (event.delta.container != null) { + snapshot.container = event.delta.container; + } + if (event.usage.input_tokens != null) { + snapshot.usage.input_tokens = event.usage.input_tokens; + } + if (event.usage.cache_creation_input_tokens != null) { + snapshot.usage.cache_creation_input_tokens = event.usage.cache_creation_input_tokens; + } + if (event.usage.cache_read_input_tokens != null) { + snapshot.usage.cache_read_input_tokens = event.usage.cache_read_input_tokens; + } + if (event.usage.server_tool_use != null) { + snapshot.usage.server_tool_use = event.usage.server_tool_use; + } + if (event.usage.output_tokens_details != null) { + snapshot.usage.output_tokens_details = event.usage.output_tokens_details; + } + return snapshot; + case "content_block_start": + snapshot.content.push({ ...event.content_block }); + return snapshot; + case "content_block_delta": { + const snapshotContent = snapshot.content.at(event.index); + switch (event.delta.type) { + case "text_delta": { + if (snapshotContent?.type === "text") { + snapshot.content[event.index] = { + ...snapshotContent, + text: (snapshotContent.text || "") + event.delta.text + }; + } + break; + } + case "citations_delta": { + if (snapshotContent?.type === "text") { + snapshot.content[event.index] = { + ...snapshotContent, + citations: [...snapshotContent.citations ?? [], event.delta.citation] + }; + } + break; + } + case "input_json_delta": { + if (snapshotContent && tracksToolInput2(snapshotContent)) { + const jsonBuf = (snapshotContent[JSON_BUF_PROPERTY] || "") + event.delta.partial_json; + snapshot.content[event.index] = withLazyInput(snapshotContent, jsonBuf); + } + break; + } + case "thinking_delta": { + if (snapshotContent?.type === "thinking") { + snapshot.content[event.index] = { + ...snapshotContent, + thinking: snapshotContent.thinking + event.delta.thinking + }; + } + break; + } + case "signature_delta": { + if (snapshotContent?.type === "thinking") { + snapshot.content[event.index] = { + ...snapshotContent, + signature: event.delta.signature + }; + } + break; + } + default: + checkNever(event.delta); + } + return snapshot; + } + case "content_block_stop": { + const snapshotContent = snapshot.content.at(event.index); + if (snapshotContent && tracksToolInput2(snapshotContent) && JSON_BUF_PROPERTY in snapshotContent) { + Object.defineProperty(snapshotContent, "input", { + value: snapshotContent.input, + enumerable: true, + configurable: true, + writable: true + }); + } + return snapshot; + } + } + }, Symbol.asyncIterator)]() { + const pushQueue = []; + const readQueue = []; + let done = false; + this.on("streamEvent", (event) => { + const reader = readQueue.shift(); + if (reader) { + reader.resolve(event); + } else { + pushQueue.push(event); + } + }); + this.on("end", () => { + done = true; + for (const reader of readQueue) { + reader.resolve(void 0); + } + readQueue.length = 0; + }); + this.on("abort", (err) => { + done = true; + for (const reader of readQueue) { + reader.reject(err); + } + readQueue.length = 0; + }); + this.on("error", (err) => { + done = true; + for (const reader of readQueue) { + reader.reject(err); + } + readQueue.length = 0; + }); + return { + next: async () => { + if (!pushQueue.length) { + if (done) { + return { value: void 0, done: true }; + } + return new Promise((resolve2, reject2) => readQueue.push({ resolve: resolve2, reject: reject2 })).then((chunk2) => chunk2 ? { value: chunk2, done: false } : { value: void 0, done: true }); + } + const chunk = pushQueue.shift(); + return { value: chunk, done: false }; + }, + return: async () => { + this.abort(); + return { value: void 0, done: true }; + } + }; + } + toReadableStream() { + const stream5 = new Stream2(this[Symbol.asyncIterator].bind(this), this.controller); + return stream5.toReadableStream(); + } + } + return MessageStream2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/messages/batches.mjs +var Batches3; +var init_batches3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/messages/batches.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_jsonl(); + init_error4(); + init_path2(); + Batches3 = class extends APIResource2 { + /** + * Send a batch of Message creation requests. + * + * The Message Batches API can be used to process multiple Messages API requests at + * once. Once a Message Batch is created, it begins processing immediately. Batches + * can take up to 24 hours to complete. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * const messageBatch = await client.messages.batches.create({ + * requests: [ + * { + * custom_id: 'my-custom-id-1', + * params: { + * max_tokens: 1024, + * messages: [ + * { content: 'Hello, world', role: 'user' }, + * ], + * model: 'claude-opus-5', + * }, + * }, + * ], + * }); + * ``` + */ + create(params, options) { + const { user_profile_id, workspace_id, ...body } = params; + return this._client.post("/v1/messages/batches", { + body, + ...options, + headers: buildHeaders2([ + { + ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * This endpoint is idempotent and can be used to poll for Message Batch + * completion. To access the results of a Message Batch, make a request to the + * `results_url` field in the response. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * const messageBatch = await client.messages.batches.retrieve( + * 'message_batch_id', + * ); + * ``` + */ + retrieve(messageBatchID, params = {}, options) { + const { workspace_id } = params ?? {}; + return this._client.get(path3`/v1/messages/batches/${messageBatchID}`, { + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + /** + * List all Message Batches within a Workspace. Most recently created batches are + * returned first. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const messageBatch of client.messages.batches.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/messages/batches", Page2, { + query, + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + /** + * Delete a Message Batch. + * + * Message Batches can only be deleted once they've finished processing. If you'd + * like to delete an in-progress batch, you must first cancel it. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * const deletedMessageBatch = + * await client.messages.batches.delete('message_batch_id'); + * ``` + */ + delete(messageBatchID, params = {}, options) { + const { workspace_id } = params ?? {}; + return this._client.delete(path3`/v1/messages/batches/${messageBatchID}`, { + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + /** + * Batches may be canceled any time before processing ends. Once cancellation is + * initiated, the batch enters a `canceling` state, at which time the system may + * complete any in-progress, non-interruptible requests before finalizing + * cancellation. + * + * The number of canceled requests is specified in `request_counts`. To determine + * which requests were canceled, check the individual results within the batch. + * Note that cancellation may not result in any canceled requests if they were + * non-interruptible. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * const messageBatch = await client.messages.batches.cancel( + * 'message_batch_id', + * ); + * ``` + */ + cancel(messageBatchID, params = {}, options) { + const { workspace_id } = params ?? {}; + return this._client.post(path3`/v1/messages/batches/${messageBatchID}/cancel`, { + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + /** + * Streams the results of a Message Batch as a `.jsonl` file. + * + * Each line in the file is a JSON object containing the result of a single request + * in the Message Batch. Results are not guaranteed to be in the same order as + * requests. Use the `custom_id` field to match results to requests. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * const messageBatchIndividualResponse = + * await client.messages.batches.results('message_batch_id'); + * ``` + */ + async results(messageBatchID, params = {}, options) { + const batch = await this.retrieve(messageBatchID, params, options); + if (!batch.results_url) { + throw new AnthropicError(`No batch \`results_url\`; Has it finished processing? ${batch.processing_status} - ${batch.id}`); + } + const { workspace_id } = params ?? {}; + return this._client.get(batch.results_url, { + ...options, + headers: buildHeaders2([ + { + Accept: "application/binary", + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]), + stream: true, + __binaryResponse: true + })._thenUnwrap((_, props) => JSONLDecoder.fromResponse(props.response, props.controller)); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/messages/messages.mjs +var Messages4, DEPRECATED_MODELS2, MODELS_TO_WARN_WITH_THINKING_ENABLED2; +var init_messages4 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/messages/messages.mjs"() { + init_resource2(); + init_headers3(); + init_stainless_helper_header(); + init_MessageStream(); + init_parser4(); + init_batches3(); + init_batches3(); + init_constants(); + Messages4 = /* @__PURE__ */ (() => { + class Messages5 extends APIResource2 { + constructor() { + super(...arguments); + this.batches = new Batches3(this._client); + } + create(params, options) { + const { user_profile_id, workspace_id, ...body } = params; + if (body.model in DEPRECATED_MODELS2) { + console.warn(`The model '${body.model}' is deprecated and will reach end-of-life on ${DEPRECATED_MODELS2[body.model]} +Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`); + } + if (MODELS_TO_WARN_WITH_THINKING_ENABLED2.includes(body.model) && body.thinking && body.thinking.type === "enabled") { + console.warn(`Using Claude with ${body.model} and 'thinking.type=enabled' is deprecated. Use 'thinking.type=adaptive' instead which results in better model performance in our testing: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking`); + } + let timeout = options?.timeout ?? this._client._options.timeout; + if (!body.stream && timeout == null) { + const maxNonstreamingTokens = MODEL_NONSTREAMING_TOKENS[body.model] ?? void 0; + timeout = this._client.calculateNonstreamingTimeout(body.max_tokens, maxNonstreamingTokens); + } + const helperHeader2 = stainlessHelperHeader(body.tools, body.messages); + return this._client.post("/v1/messages", { + body, + timeout: timeout ?? 6e5, + ...options, + headers: buildHeaders2([ + { + ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + helperHeader2, + options?.headers + ]), + stream: params.stream ?? false + }); + } + /** + * Send a structured list of input messages with text and/or image content, along with an expected `output_config.format` and + * the response will be automatically parsed and available in the `parsed_output` property of the message. + * + * @example + * ```ts + * const message = await client.messages.parse({ + * model: 'claude-sonnet-4-5-20250929', + * max_tokens: 1024, + * messages: [{ role: 'user', content: 'What is 2+2?' }], + * output_config: { + * format: zodOutputFormat(z.object({ answer: z.number() })), + * }, + * }); + * + * console.log(message.parsed_output?.answer); // 4 + * ``` + */ + parse(params, options) { + return this.create(params, options).then((message) => parseMessage(message, params, { logger: this._client.logger ?? console })); + } + /** + * Create a Message stream. + * + * If `output_config.format` is provided with a parseable format (like `zodOutputFormat()`), + * the final message will include a `parsed_output` property with the parsed content. + * + * @example + * ```ts + * const stream = client.messages.stream({ + * model: 'claude-sonnet-4-5-20250929', + * max_tokens: 1024, + * messages: [{ role: 'user', content: 'What is 2+2?' }], + * output_config: { + * format: zodOutputFormat(z.object({ answer: z.number() })), + * }, + * }); + * + * const message = await stream.finalMessage(); + * console.log(message.parsed_output?.answer); // 4 + * ``` + */ + stream(body, options) { + return MessageStream.createMessage(this, body, options, { logger: this._client.logger ?? console }); + } + /** + * Count the number of tokens in a Message. + * + * The Token Count API can be used to count the number of tokens in a Message, + * including tools, images, and documents, without creating it. + * + * Learn more about token counting in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/token-counting) + * + * @example + * ```ts + * const messageTokensCount = + * await client.messages.countTokens({ + * messages: [{ content: 'Hello, world', role: 'user' }], + * model: 'claude-opus-5', + * }); + * ``` + */ + countTokens(params, options) { + const { user_profile_id, workspace_id, ...body } = params; + return this._client.post("/v1/messages/count_tokens", { + body, + ...options, + headers: buildHeaders2([ + { + ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + } + Messages5.Batches = Batches3; + return Messages5; + })(); + DEPRECATED_MODELS2 = {}; + MODELS_TO_WARN_WITH_THINKING_ENABLED2 = ["claude-mythos-preview", "claude-opus-4-6"]; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/models.mjs +var Models3; +var init_models4 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/models.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Models3 = class extends APIResource2 { + /** + * Get a specific model. + * + * The Models API response can be used to determine information about a specific + * model or resolve a model alias to a model ID. + * + * @example + * ```ts + * const modelInfo = await client.models.retrieve('model_id'); + * ``` + */ + retrieve(modelID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/models/${modelID}`, { + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List available models. + * + * The Models API response can be used to determine which models are available for + * use in the API. More recently released models are listed first. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const modelInfo of client.models.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/models", Page2, { + query, + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/skills/versions.mjs +var Versions4; +var init_versions4 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/skills/versions.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_uploads4(); + init_path2(); + Versions4 = class extends APIResource2 { + /** + * Create Skill Version + * + * @example + * ```ts + * const skillVersion = await client.skills.versions.create( + * 'skill_id', + * { files: [fs.createReadStream('path/to/file')] }, + * ); + * ``` + */ + create(skillID, params, options) { + const { workspace_id, ...body } = params; + return this._client.post(path3`/v1/skills/${skillID}/versions`, multipartFormRequestOptions2({ + body, + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }, this._client, false)); + } + /** + * Get Skill Version + * + * @example + * ```ts + * const skillVersion = await client.skills.versions.retrieve( + * 'version', + * { skill_id: 'skill_id' }, + * ); + * ``` + */ + retrieve(version, params, options) { + const { skill_id, workspace_id } = params; + return this._client.get(path3`/v1/skills/${skill_id}/versions/${version}`, { + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + /** + * List Skill Versions + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const skillVersion of client.skills.versions.list( + * 'skill_id', + * )) { + * // ... + * } + * ``` + */ + list(skillID, params = {}, options) { + const { workspace_id, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/skills/${skillID}/versions`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + /** + * Delete Skill Version + * + * @example + * ```ts + * const deletedSkillVersion = + * await client.skills.versions.delete('version', { + * skill_id: 'skill_id', + * }); + * ``` + */ + delete(version, params, options) { + const { skill_id, workspace_id } = params; + return this._client.delete(path3`/v1/skills/${skill_id}/versions/${version}`, { + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/skills/skills.mjs +var Skills3; +var init_skills3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/skills/skills.mjs"() { + init_resource2(); + init_versions4(); + init_versions4(); + init_pagination2(); + init_headers3(); + init_uploads4(); + init_path2(); + Skills3 = /* @__PURE__ */ (() => { + class Skills4 extends APIResource2 { + constructor() { + super(...arguments); + this.versions = new Versions4(this._client); + } + /** + * Create Skill + * + * @example + * ```ts + * const skill = await client.skills.create({ + * files: [fs.createReadStream('path/to/file')], + * }); + * ``` + */ + create(params, options) { + const { workspace_id, ...body } = params; + return this._client.post("/v1/skills", multipartFormRequestOptions2({ + body, + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }, this._client, false)); + } + /** + * Get Skill + * + * @example + * ```ts + * const skill = await client.skills.retrieve('skill_id'); + * ``` + */ + retrieve(skillID, params = {}, options) { + const { workspace_id } = params ?? {}; + return this._client.get(path3`/v1/skills/${skillID}`, { + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + /** + * List Skills + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const skill of client.skills.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/skills", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + /** + * Delete Skill + * + * @example + * ```ts + * const deletedSkill = await client.skills.delete('skill_id'); + * ``` + */ + delete(skillID, params = {}, options) { + const { workspace_id } = params ?? {}; + return this._client.delete(path3`/v1/skills/${skillID}`, { + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + } + Skills4.Versions = Versions4; + return Skills4; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/index.mjs +var init_resources3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/index.mjs"() { + init_shared2(); + init_beta2(); + init_completions4(); + init_files6(); + init_messages4(); + init_models4(); + init_skills3(); + } +}); + +// node_modules/@anthropic-ai/sdk/client.mjs +var _BaseAnthropic_instances, _a5, _BaseAnthropic_encoder, _BaseAnthropic_baseURLOverridden, HUMAN_PROMPT, AI_PROMPT, BaseAnthropic, Anthropic; +var init_client2 = __esm({ + "node_modules/@anthropic-ai/sdk/client.mjs"() { + init_tslib2(); + init_values2(); + init_sleep2(); + init_errors2(); + init_detect_platform2(); + init_request_signal(); + init_shims2(); + init_request_options2(); + init_query2(); + init_version3(); + init_error3(); + init_types(); + init_token_cache(); + init_credential_chain(); + init_middleware(); + init_pagination2(); + init_uploads5(); + init_resources3(); + init_api_promise2(); + init_completions4(); + init_files6(); + init_models4(); + init_beta2(); + init_messages4(); + init_skills3(); + init_detect_platform2(); + init_headers3(); + init_env2(); + init_log2(); + init_values2(); + HUMAN_PROMPT = "\\n\\nHuman:"; + AI_PROMPT = "\\n\\nAssistant:"; + BaseAnthropic = /* @__PURE__ */ (() => { + class BaseAnthropic2 { + /** + * The active credential provider. Default credential resolution runs once + * at construction time. If it fails, the error is surfaced on every + * request and the client must be reconstructed — there is no retry path. + * + * Clones returned by {@link withOptions} share the parent's auth state + * (provider, token cache, pending resolution, and any resolution error) + * unless the caller passes an explicit `apiKey`, `authToken`, + * `credentials`, `config`, or `profile` override. + */ + get credentials() { + return this._authState.provider; + } + /** + * API Client for interfacing with the Anthropic API. + * + * @param {string | null | undefined} [opts.apiKey=process.env['ANTHROPIC_API_KEY'] ?? null] + * @param {string | null | undefined} [opts.authToken=process.env['ANTHROPIC_AUTH_TOKEN'] ?? null] + * @param {string | null | undefined} [opts.webhookKey=process.env['ANTHROPIC_WEBHOOK_SIGNING_KEY'] ?? null] + * @param {string} [opts.baseURL=process.env['ANTHROPIC_BASE_URL'] ?? https://api.anthropic.com] - Override the default base URL for the API. + * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out. + * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls. + * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation. + * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request. + * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API. + * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API. + * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers. + */ + constructor({ baseURL = readEnv2("ANTHROPIC_BASE_URL"), apiKey, authToken, webhookKey = readEnv2("ANTHROPIC_WEBHOOK_SIGNING_KEY") ?? null, ...opts } = {}) { + _BaseAnthropic_instances.add(this); + this._requestAuthFlags = /* @__PURE__ */ new WeakMap(); + _BaseAnthropic_encoder.set(this, void 0); + if (apiKey === void 0) { + apiKey = opts.profile != null ? null : readEnv2("ANTHROPIC_API_KEY") ?? null; + } + if (authToken === void 0) { + authToken = opts.profile != null ? null : readEnv2("ANTHROPIC_AUTH_TOKEN") ?? null; + } + if (opts.profile != null && (opts.credentials != null || opts.config != null)) { + throw new TypeError("Pass at most one of `profile`, `credentials`, or `config`."); + } + const options = { + apiKey, + authToken, + webhookKey, + ...opts, + baseURL: baseURL || `https://api.anthropic.com` + }; + if (!options.dangerouslyAllowBrowser && isRunningInBrowser2()) { + throw new AnthropicError("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew Anthropic({ apiKey, dangerouslyAllowBrowser: true });\n"); + } + this.baseURL = options.baseURL; + this._baseURLIsExplicit = opts.__baseURLIsExplicit ?? !!baseURL; + this.timeout = options.timeout ?? _a5.DEFAULT_TIMEOUT; + this.logger = options.logger ?? console; + this.logLevel = defaultLogLevel; + this.logLevel = parseLogLevel2(options.logLevel, "ClientOptions.logLevel", loggerFor2(this)) ?? parseLogLevel2(readEnv2("ANTHROPIC_LOG"), "process.env['ANTHROPIC_LOG']", loggerFor2(this)) ?? defaultLogLevel; + this.fetchOptions = options.fetchOptions; + this.maxRetries = validatePositiveInteger2("maxRetries", options.maxRetries ?? 2); + this.fetch = options.fetch ?? getDefaultFetch2(); + __classPrivateFieldSet2(this, _BaseAnthropic_encoder, FallbackEncoder2, "f"); + this.middleware = [...options.middleware ?? []]; + const customHeadersEnv = readEnv2("ANTHROPIC_CUSTOM_HEADERS"); + if (customHeadersEnv) { + const parsed = {}; + for (const line of customHeadersEnv.split("\n")) { + const colon = line.indexOf(":"); + if (colon >= 0) { + parsed[line.substring(0, colon).trim()] = line.substring(colon + 1).trim(); + } + } + options.defaultHeaders = { ...parsed, ...options.defaultHeaders }; + } + const inherited = opts.__auth; + delete options.__auth; + delete options.__baseURLIsExplicit; + this._options = options; + this.apiKey = typeof apiKey === "string" ? apiKey : null; + this.authToken = authToken; + this.webhookKey = webhookKey; + if (inherited) { + this._authState = inherited; + if (!this._baseURLIsExplicit && inherited.baseURL) { + this.baseURL = inherited.baseURL; + } + } else { + this._authState = { provider: null, tokenCache: null, resolution: null, error: null, extraHeaders: {} }; + if (this.apiKey == null && this.authToken == null) { + const credentials = options.credentials ?? null; + if (credentials) { + this._authState.provider = credentials; + this._authState.tokenCache = this._makeTokenCache(credentials); + } else if (options.config != null) { + const result = resolveCredentialsFromConfig(options.config, this._credentialResolverOptions()); + this._authState.provider = result.provider; + this._authState.tokenCache = this._makeTokenCache(result.provider); + this._authState.extraHeaders = result.extraHeaders; + this._applyCredentialBaseURL(result.baseURL); + } else if (options.profile != null) { + this._authState.resolution = this._resolveDefaultCredentials(options.profile); + } else if (this._shouldResolveDefaultCredentials()) { + this._authState.resolution = this._resolveDefaultCredentials(); + } + } + } + } + /** + * Whether to lazily resolve auth from the default credential chain when no + * explicit auth is configured. Called once from the constructor, so + * overrides must not depend on subclass instance state. Subclasses that + * bring their own auth scheme return false so unrelated local credentials + * are never resolved or allowed to supply a base URL. + */ + _shouldResolveDefaultCredentials() { + return true; + } + /** + * Stores a profile/config-supplied base URL on the shared auth state and, if + * the caller did not pin `baseURL` via constructor option or env, adopts it + * as this client's outbound API host. Precedence: ctor opt > env > profile > + * hardcoded default. + */ + _applyCredentialBaseURL(baseURL) { + if (!baseURL) + return; + const normalized = baseURL.replace(/\/+$/, ""); + this._authState.baseURL = normalized; + if (!this._baseURLIsExplicit) { + this.baseURL = normalized; + } + } + /** + * Options bag passed into the credential chain. `baseURL` here is only the + * fallback host for the token-exchange POST when the config itself omits + * `base_url`; the chain returns the config's own `base_url` (if any) on + * {@link CredentialResult.baseURL}, which {@link _applyCredentialBaseURL} + * then adopts for outbound API requests. The two are deliberately decoupled + * so this fallback never round-trips into precedence. + */ + _credentialResolverOptions() { + return { + baseURL: this.baseURL, + fetch: this._credentialsFetch(), + userAgent: this.getUserAgent(), + onCacheWriteError: (err) => { + loggerFor2(this).debug("credential cache write failed (best-effort)", err); + }, + onSafetyWarning: (msg) => { + loggerFor2(this).warn(msg); + } + }; + } + /** + * A `Fetch` for first-party credential token-exchange requests (OIDC + * federation jwt-bearer grants, user-OAuth refresh grants) that routes + * through this client's middleware chain, so middleware observes token + * traffic like any other request. Only client-level middleware applies: + * a minted token is shared across requests, so attributing the exchange + * to any one request's per-request middleware would be arbitrary. For the + * same reason, `ctx.options` is undefined for these requests. + */ + _credentialsFetch() { + return wrapFetchWithMiddleware(this.fetch, this.middleware, void 0, this); + } + _makeTokenCache(provider2) { + return new TokenCache(provider2, (err) => { + loggerFor2(this).debug("advisory token refresh failed; serving cached token", err); + }); + } + /** + * Create a new client instance re-using the same options given to the + * current client with optional overriding. + */ + withOptions(options) { + const overridesStructuredAuth = "credentials" in options || "config" in options || "profile" in options; + const overridesAuth = "apiKey" in options || "authToken" in options || overridesStructuredAuth; + const internal = { + ...this._options, + // Only forward baseURL when the caller (or env) explicitly chose it. + // For a non-explicit parent, this.baseURL may have been mutated to the + // profile-resolved host; pinning that as the clone's options.baseURL + // would make _options on the clone misreport caller intent and would + // leave the clone stuck on the parent's host across an auth override. + // The clone instead receives the construction-time value via + // ...this._options above and re-adopts the profile host through the + // shared _authState.baseURL + __baseURLIsExplicit=false path. + ...this._baseURLIsExplicit ? { baseURL: this.baseURL } : {}, + maxRetries: this.maxRetries, + timeout: this.timeout, + logger: this.logger, + logLevel: this.logLevel, + fetch: this.fetch, + fetchOptions: this.fetchOptions, + middleware: this.middleware, + apiKey: this.apiKey, + authToken: this.authToken, + webhookKey: this.webhookKey, + // credentials: this.credentials is a no-op when __auth is shared (the + // ctor takes the inherited path and ignores options.credentials); when + // overridesAuth is true via apiKey/authToken only, it lets the clone + // build a fresh TokenCache around the parent's provider. + credentials: this.credentials, + // When the caller passes a structured-credential override, drop inherited + // structured-credential options so only `...options` supplies them — + // otherwise an inherited `credentials`/`config`/`profile` would trip the + // mutual-exclusion check or precedence over the override. + ...overridesStructuredAuth ? { credentials: void 0, config: void 0, profile: void 0 } : {}, + ...options, + // Always set __auth so any stale value from ...this._options is + // overwritten. undefined means "build fresh auth from these options". + __auth: overridesAuth ? void 0 : this._authState, + __baseURLIsExplicit: "baseURL" in options ? true : this._baseURLIsExplicit + }; + return new this.constructor(internal); + } + /** + * Lazily resolves credentials from config files or environment variables. + * Called once from the constructor when no explicit auth is provided, or + * when an explicit `profile` was passed (in which case a missing/unresolved + * profile is surfaced as an error instead of falling through to "no auth"). + * The returned promise is stored and awaited on the first request. + */ + async _resolveDefaultCredentials(profile) { + try { + const result = await defaultCredentials(this._credentialResolverOptions(), profile); + if (result) { + this._authState.provider = result.provider; + this._authState.tokenCache = this._makeTokenCache(result.provider); + this._authState.extraHeaders = result.extraHeaders; + this._applyCredentialBaseURL(result.baseURL); + } else if (profile != null) { + throw new AnthropicError(`Profile "${profile}" could not be resolved (no /configs/${profile}.json found).`); + } + } catch (err) { + this._authState.error = err; + } finally { + this._authState.resolution = null; + } + } + defaultQuery() { + return this._options.defaultQuery; + } + validateHeaders({ values, nulls }) { + if (values.get("x-api-key") || values.get("authorization")) { + return; + } + if (this._authState.error) { + throw this._authState.error; + } + if (this._authState.tokenCache || this._authState.resolution) { + return; + } + if (this.apiKey && values.get("x-api-key")) { + return; + } + if (nulls.has("x-api-key")) { + return; + } + if (this.authToken && values.get("authorization")) { + return; + } + if (nulls.has("authorization")) { + return; + } + throw new Error('Could not resolve authentication method. Expected one of apiKey, authToken, credentials, config, or profile to be set. Or for one of the "X-Api-Key" or "Authorization" headers to be explicitly omitted'); + } + _authFlags(opts) { + let flags = this._requestAuthFlags.get(opts); + if (!flags) { + flags = { usedTokenCache: false, didRefreshFor401: false }; + this._requestAuthFlags.set(opts, flags); + } + return flags; + } + async authHeaders(opts) { + if (this._authState.resolution) { + await this._authState.resolution; + } + if (this._authState.error) { + return void 0; + } + if (this._authState.tokenCache && this.apiKey == null) { + const token = await this._authState.tokenCache.getToken(); + this._authFlags(opts).usedTokenCache = true; + return buildHeaders2([{ Authorization: `Bearer ${token}` }]); + } + return buildHeaders2([await this.apiKeyAuth(opts), await this.bearerAuth(opts)]); + } + async apiKeyAuth(opts) { + if (this.apiKey == null) { + return void 0; + } + return buildHeaders2([{ "X-Api-Key": this.apiKey }]); + } + async bearerAuth(opts) { + if (this.authToken == null) { + return void 0; + } + return buildHeaders2([{ Authorization: `Bearer ${this.authToken}` }]); + } + stringifyQuery(query) { + return stringifyQuery2(query); + } + getUserAgent() { + return `Anthropic/JS ${VERSION2}`; + } + makeStatusError(status, error, message, headers) { + return APIError2.generate(status, error, message, headers); + } + buildURL(path5, query, defaultBaseURL) { + const baseURL = !__classPrivateFieldGet2(this, _BaseAnthropic_instances, "m", _BaseAnthropic_baseURLOverridden).call(this) && defaultBaseURL || this.baseURL; + const url = isAbsoluteURL2(path5) ? new URL(path5) : new URL(baseURL + (baseURL.endsWith("/") && path5.startsWith("/") ? path5.slice(1) : path5)); + const defaultQuery = this.defaultQuery(); + const pathQuery = Object.fromEntries(url.searchParams); + if (!isEmptyObj2(defaultQuery) || !isEmptyObj2(pathQuery)) { + query = { ...pathQuery, ...defaultQuery, ...query }; + } + if (typeof query === "object" && query && !Array.isArray(query)) { + url.search = this.stringifyQuery(query); + } + return url.toString(); + } + _calculateNonstreamingTimeout(maxTokens) { + const defaultTimeout = 10 * 60; + const expectedTimeout = 60 * 60 * maxTokens / 128e3; + if (expectedTimeout > defaultTimeout) { + throw new AnthropicError("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#streaming-responses for more details"); + } + return defaultTimeout * 1e3; + } + /** + * Used as a callback for mutating the given `FinalRequestOptions` object. + */ + async prepareOptions(options) { + } + /** + * Used as a callback for mutating the given `RequestInit` object. + * + * This is useful for cases where you want to add certain headers based off of + * the request properties, e.g. `method` or `url`. + * + * Runs after all middleware (including {@link backendMiddleware}), + * immediately before each underlying fetch call, so it sees exactly what + * goes over the wire. Middleware may replay a request by calling `next()` + * more than once, so this hook can run multiple times per attempt: + * overrides must be idempotent and overwrite headers from a previous + * invocation rather than append to them. + */ + async prepareRequest(request2, { url, options }) { + if (this._authState.tokenCache && this.apiKey == null) { + const headers = request2.headers instanceof Headers ? request2.headers : new Headers(request2.headers); + for (const [k, v] of Object.entries(this._authState.extraHeaders)) { + if (!headers.has(k)) + headers.set(k, v); + } + const existing = headers.get("anthropic-beta")?.split(",").map((s) => s.trim()); + if (!existing?.includes(OAUTH_API_BETA_HEADER)) { + headers.set("anthropic-beta", [...existing ?? [], OAUTH_API_BETA_HEADER].join(",")); + } + request2.headers = headers; + } + } + /** + * Internal {@link Middleware} composed innermost in the chain — inside both + * client-level and per-request middleware, immediately around the underlying + * `fetch`. Subclasses for third-party backends override this to adapt the + * canonical Anthropic-shaped request to the backend's wire shape (URL/body + * rewriting, request signing) and to normalize the wire response back to the + * canonical shape (e.g. AWS EventStream to SSE). + * + * Running inside the user's middleware means user middleware always observes + * canonical Anthropic-shaped traffic, and the adaptation re-runs (e.g. + * re-signs) on every `next()` invocation, covering whatever the middleware + * mutated. + * + * Errors thrown here follow the middleware error policy: they propagate to + * the caller as-is — no retries, no `APIConnectionError` wrapping — unless + * retryable (see {@link Middleware}); throw a `RetryableError` to opt into + * the retry path. + */ + backendMiddleware() { + return []; + } + get(path5, opts) { + return this.methodRequest("get", path5, opts); + } + post(path5, opts) { + return this.methodRequest("post", path5, opts); + } + patch(path5, opts) { + return this.methodRequest("patch", path5, opts); + } + put(path5, opts) { + return this.methodRequest("put", path5, opts); + } + delete(path5, opts) { + return this.methodRequest("delete", path5, opts); + } + methodRequest(method2, path5, opts) { + return this.request(Promise.resolve(opts).then((opts2) => { + return { method: method2, path: path5, ...opts2 }; + })); + } + request(options, remainingRetries = null) { + return new APIPromise2(this, this.makeRequest(options, remainingRetries, void 0)); + } + async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) { + const options = await optionsInput; + let maxRetries = validatePositiveInteger2("maxRetries", options.maxRetries ?? this.maxRetries); + if (this.isStreamBody(options.body)) { + maxRetries = 0; + } + if (retriesRemaining == null) { + retriesRemaining = maxRetries; + this._requestAuthFlags.delete(options); + } + await this.prepareOptions(options); + const { req, url, timeout } = await this.buildRequest(options, { + retryCount: maxRetries - retriesRemaining + }); + const requestLogID = "log_" + (Math.random() * (1 << 24) | 0).toString(16).padStart(6, "0"); + const retryLogStr = retryOfRequestLogID === void 0 ? "" : `, retryOf: ${retryOfRequestLogID}`; + const startTime = Date.now(); + if (options.signal?.aborted) { + throw new APIUserAbortError2(); + } + const controller = new AbortController(); + const response = await this.fetchWithTimeout(url, req, timeout, controller, options, { + requestLogID, + retryOfRequestLogID + }).catch(castToError2); + const headersTime = Date.now(); + if (response instanceof globalThis.Error) { + releaseRequestSignal(controller); + const retryMessage = `retrying, ${retriesRemaining} attempts remaining`; + if (options.signal?.aborted) { + throw new APIUserAbortError2(); + } + const isTimeout = isAbortError2(response) || /timed? ?out/i.test(String(response) + ("cause" in response ? String(response.cause) : "")); + const hasMiddleware = this.middleware.length > 0 || !!options.middleware?.length || this.backendMiddleware().length > 0; + if (hasMiddleware && !isTimeout && !isRetryableError(response)) { + loggerFor2(this).info(`[${requestLogID}] middleware error (not retryable)`); + debugLogRequestDetails(loggerFor2(this), `[${requestLogID}] middleware error (not retryable)`, { + retryOfRequestLogID, + url, + durationMs: headersTime - startTime, + message: response.message + }); + throw response; + } + if (retriesRemaining) { + loggerFor2(this).info(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} - ${retryMessage}`); + debugLogRequestDetails(loggerFor2(this), `[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} (${retryMessage})`, { + retryOfRequestLogID, + url, + durationMs: headersTime - startTime, + message: response.message + }); + return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID); + } + loggerFor2(this).info(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} - error; no more retries left`); + debugLogRequestDetails(loggerFor2(this), `[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} (error; no more retries left)`, { + retryOfRequestLogID, + url, + durationMs: headersTime - startTime, + message: response.message + }); + if (isTimeout) { + throw new APIConnectionTimeoutError2(); + } + if (hasMiddleware && !isFetchOriginError(response)) { + throw response; + } + throw new APIConnectionError2({ cause: response }); + } + const specialHeaders = [...response.headers.entries()].filter(([name]) => name === "request-id" || name === "anthropic-workspace-id").map(([name, value2]) => ", " + name + ": " + JSON.stringify(value2)).join(""); + const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? "succeeded" : "failed"} with status ${response.status} in ${headersTime - startTime}ms`; + if (!response.ok) { + const shouldRetry = await this.shouldRetry(response, options); + if (retriesRemaining && shouldRetry) { + const retryMessage2 = `retrying, ${retriesRemaining} attempts remaining`; + await CancelReadableStream2(response.body); + releaseRequestSignal(controller); + loggerFor2(this).info(`${responseInfo} - ${retryMessage2}`); + debugLogRequestDetails(loggerFor2(this), `[${requestLogID}] response error (${retryMessage2})`, { + retryOfRequestLogID, + url: response.url, + status: response.status, + headers: response.headers, + durationMs: headersTime - startTime + }); + return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers); + } + const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`; + loggerFor2(this).info(`${responseInfo} - ${retryMessage}`); + const errText = await response.text().catch((err2) => castToError2(err2).message); + const errJSON = safeJSON2(errText); + const errMessage = errJSON ? void 0 : errText; + debugLogRequestDetails(loggerFor2(this), `[${requestLogID}] response error (${retryMessage})`, { + retryOfRequestLogID, + url: response.url, + status: response.status, + headers: response.headers, + message: errMessage, + durationMs: Date.now() - startTime + }); + releaseRequestSignal(controller); + const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers); + throw err; + } + loggerFor2(this).info(responseInfo); + debugLogRequestDetails(loggerFor2(this), `[${requestLogID}] response start`, { + retryOfRequestLogID, + url: response.url, + status: response.status, + headers: response.headers, + durationMs: headersTime - startTime + }); + armAbandonmentBackstop(response.body ?? response, controller); + return { response, options, controller, requestLogID, retryOfRequestLogID, startTime }; + } + getAPIList(path5, Page3, opts) { + return this.requestAPIList(Page3, opts && "then" in opts ? opts.then((opts2) => ({ method: "get", path: path5, ...opts2 })) : { method: "get", path: path5, ...opts }); + } + requestAPIList(Page3, options) { + const request2 = this.makeRequest(options, null, void 0); + return new PagePromise2(this, request2, Page3); + } + async fetchWithTimeout(url, init, ms, controller, requestOptions, logCtx) { + const { signal, method: method2, ...options } = init || {}; + const abort = this._makeAbort(controller); + if (signal) { + signal.addEventListener("abort", abort, { once: true }); + registerRequestSignalCleanup(controller, signal, abort); + } + const isReadableBody = globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream || typeof options.body === "object" && options.body !== null && Symbol.asyncIterator in options.body; + const fetchOptions = { + signal: controller.signal, + ...isReadableBody ? { duplex: "half" } : {}, + method: "GET", + ...options + }; + if (method2) { + fetchOptions.method = method2.toUpperCase(); + } + const baseFetch = this.fetch; + const timedFetch = async (innerUrl, innerInit) => { + const timeout = setTimeout(abort, ms); + try { + return await baseFetch.call(void 0, innerUrl, innerInit); + } finally { + clearTimeout(timeout); + } + }; + const innerFetch = requestOptions === void 0 ? timedFetch : (async (innerUrl, innerInit = {}) => { + const innerUrlStr = typeof innerUrl === "string" ? innerUrl : innerUrl instanceof URL ? innerUrl.href : innerUrl.url; + innerInit.headers = innerInit.headers instanceof Headers ? innerInit.headers : new Headers(innerInit.headers); + await this.prepareRequest(innerInit, { url: innerUrlStr, options: requestOptions }); + if (logCtx) { + debugLogRequestDetails(loggerFor2(this), `[${logCtx.requestLogID}] sending request`, { + retryOfRequestLogID: logCtx.retryOfRequestLogID, + method: innerInit.method, + url: innerUrlStr, + options: requestOptions, + headers: innerInit.headers + }); + } + return timedFetch(innerUrl, innerInit); + }); + const requestMiddleware = requestOptions?.middleware; + const backendMiddleware = this.backendMiddleware(); + const allMiddleware = requestMiddleware?.length || backendMiddleware.length ? [...this.middleware, ...requestMiddleware ?? [], ...backendMiddleware] : this.middleware; + return await wrapFetchWithMiddleware(innerFetch, allMiddleware, requestOptions, this)(url, fetchOptions); + } + async shouldRetry(response, options) { + const flags = this._authFlags(options); + if (response.status === 401 && this._authState.tokenCache && flags.usedTokenCache && !flags.didRefreshFor401) { + flags.didRefreshFor401 = true; + this._authState.tokenCache.invalidate(); + return true; + } + const shouldRetryHeader = response.headers.get("x-should-retry"); + if (shouldRetryHeader === "true") + return true; + if (shouldRetryHeader === "false") + return false; + if (response.status === 408) + return true; + if (response.status === 409) + return true; + if (response.status === 429) + return true; + if (response.status >= 500) + return true; + return false; + } + async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) { + let timeoutMillis; + const retryAfterMillisHeader = responseHeaders?.get("retry-after-ms"); + if (retryAfterMillisHeader) { + const timeoutMs = parseFloat(retryAfterMillisHeader); + if (!Number.isNaN(timeoutMs)) { + timeoutMillis = timeoutMs; + } + } + const retryAfterHeader = responseHeaders?.get("retry-after"); + if (retryAfterHeader && !timeoutMillis) { + const timeoutSeconds = parseFloat(retryAfterHeader); + if (!Number.isNaN(timeoutSeconds)) { + timeoutMillis = timeoutSeconds * 1e3; + } else { + timeoutMillis = Date.parse(retryAfterHeader) - Date.now(); + } + } + if (timeoutMillis === void 0 || !(timeoutMillis > 0 && timeoutMillis <= 2 ** 31 - 1)) { + const maxRetries = options.maxRetries ?? this.maxRetries; + timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries); + } + await sleep2(timeoutMillis, options.signal ?? void 0); + return this.makeRequest(options, retriesRemaining - 1, requestLogID); + } + calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) { + const initialRetryDelay = 0.5; + const maxRetryDelay = 8; + const numRetries = maxRetries - retriesRemaining; + const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay); + const jitter2 = 1 - Math.random() * 0.25; + return sleepSeconds * jitter2 * 1e3; + } + calculateNonstreamingTimeout(maxTokens, maxNonstreamingTokens) { + const maxTime = 60 * 60 * 1e3; + const defaultTime = 60 * 10 * 1e3; + const expectedTime = maxTime * maxTokens / 128e3; + if (expectedTime > defaultTime || maxNonstreamingTokens != null && maxTokens > maxNonstreamingTokens) { + throw new AnthropicError("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#long-requests for more details"); + } + return defaultTime; + } + async buildRequest(inputOptions, { retryCount = 0 } = {}) { + const options = { ...inputOptions }; + const { method: method2, path: path5, query, defaultBaseURL } = options; + if (this._authState.resolution) { + await this._authState.resolution; + } + if (!this._baseURLIsExplicit && this._authState.baseURL && this.baseURL !== this._authState.baseURL) { + this.baseURL = this._authState.baseURL; + } + const url = this.buildURL(path5, query, defaultBaseURL); + if ("timeout" in options) + validatePositiveInteger2("timeout", options.timeout); + options.timeout = options.timeout ?? this.timeout; + const { bodyHeaders, body } = this.buildBody({ options }); + const reqHeaders = await this.buildHeaders({ + options: inputOptions, + method: method2, + bodyHeaders, + retryCount, + timeout: options.timeout + }); + const req = { + method: method2, + headers: reqHeaders, + ...options.signal && { signal: options.signal }, + ...globalThis.ReadableStream && body instanceof globalThis.ReadableStream && { duplex: "half" }, + ...body && { body }, + ...this.fetchOptions ?? {}, + ...options.fetchOptions ?? {} + }; + return { req, url, timeout: options.timeout }; + } + async buildHeaders({ options, method: method2, bodyHeaders, retryCount, timeout }) { + const headers = buildHeaders2([ + { + Accept: "application/json", + "User-Agent": this.getUserAgent(), + "X-Stainless-Retry-Count": String(retryCount), + "X-Stainless-Timeout": String(Math.trunc(timeout / 1e3)), + ...getPlatformHeaders2(), + ...this._options.dangerouslyAllowBrowser ? { "anthropic-dangerous-direct-browser-access": "true" } : void 0, + "anthropic-version": "2023-06-01" + }, + await this.authHeaders(options), + this._options.defaultHeaders, + bodyHeaders, + options.headers + ]); + this.validateHeaders(headers); + return headers.values; + } + _makeAbort(controller) { + return () => controller.abort(); + } + buildBody({ options: { body, headers: rawHeaders } }) { + if (!body) { + return { bodyHeaders: void 0, body: void 0 }; + } + const headers = buildHeaders2([rawHeaders]); + if ( + // Pass raw type verbatim + ArrayBuffer.isView(body) || body instanceof ArrayBuffer || body instanceof DataView || typeof body === "string" && // Preserve legacy string encoding behavior for now + headers.values.has("content-type") || // `Blob` is superset of `File` + globalThis.Blob && body instanceof globalThis.Blob || // `FormData` -> `multipart/form-data` + body instanceof FormData || // `URLSearchParams` -> `application/x-www-form-urlencoded` + body instanceof URLSearchParams || // Send chunked stream (each chunk has own `length`) + globalThis.ReadableStream && body instanceof globalThis.ReadableStream + ) { + return { bodyHeaders: void 0, body }; + } else if (this.isStreamBody(body)) { + return { bodyHeaders: void 0, body: ReadableStreamFrom2(body) }; + } else if (typeof body === "object" && headers.values.get("content-type") === "application/x-www-form-urlencoded") { + return { + bodyHeaders: { "content-type": "application/x-www-form-urlencoded" }, + body: this.stringifyQuery(body) + }; + } else { + return __classPrivateFieldGet2(this, _BaseAnthropic_encoder, "f").call(this, { body, headers }); + } + } + /** + * Whether `body` is sent as a stream, which can be read only once: + * a `ReadableStream`, an async iterable or an iterator. + */ + isStreamBody(body) { + if (globalThis.ReadableStream && body instanceof globalThis.ReadableStream) { + return true; + } + return typeof body === "object" && body !== null && (Symbol.asyncIterator in body || Symbol.iterator in body && "next" in body && typeof body.next === "function"); + } + } + _a5 = BaseAnthropic2, _BaseAnthropic_encoder = /* @__PURE__ */ new WeakMap(), _BaseAnthropic_instances = /* @__PURE__ */ new WeakSet(), _BaseAnthropic_baseURLOverridden = function _BaseAnthropic_baseURLOverridden2() { + return this.baseURL !== "https://api.anthropic.com"; + }; + BaseAnthropic2.Anthropic = _a5; + BaseAnthropic2.DEFAULT_TIMEOUT = 6e5; + BaseAnthropic2.AnthropicError = AnthropicError; + BaseAnthropic2.APIError = APIError2; + BaseAnthropic2.APIConnectionError = APIConnectionError2; + BaseAnthropic2.APIConnectionTimeoutError = APIConnectionTimeoutError2; + BaseAnthropic2.APIUserAbortError = APIUserAbortError2; + BaseAnthropic2.NotFoundError = NotFoundError2; + BaseAnthropic2.ConflictError = ConflictError2; + BaseAnthropic2.RateLimitError = RateLimitError2; + BaseAnthropic2.BadRequestError = BadRequestError2; + BaseAnthropic2.AuthenticationError = AuthenticationError2; + BaseAnthropic2.InternalServerError = InternalServerError2; + BaseAnthropic2.PermissionDeniedError = PermissionDeniedError2; + BaseAnthropic2.UnprocessableEntityError = UnprocessableEntityError2; + BaseAnthropic2.toFile = toFile2; + BaseAnthropic2.HUMAN_PROMPT = HUMAN_PROMPT; + BaseAnthropic2.AI_PROMPT = AI_PROMPT; + return BaseAnthropic2; + })(); + Anthropic = /* @__PURE__ */ (() => { + class Anthropic2 extends BaseAnthropic { + constructor() { + super(...arguments); + this.completions = new Completions3(this); + this.messages = new Messages4(this); + this.models = new Models3(this); + this.files = new Files6(this); + this.skills = new Skills3(this); + this.beta = new Beta2(this); + } + } + Anthropic2.Completions = Completions3; + Anthropic2.Messages = Messages4; + Anthropic2.Models = Models3; + Anthropic2.Files = Files6; + Anthropic2.Skills = Skills3; + Anthropic2.Beta = Beta2; + return Anthropic2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/index.mjs +var init_sdk = __esm({ + "node_modules/@anthropic-ai/sdk/index.mjs"() { + init_client2(); + } +}); + +// node_modules/@earendil-works/pi-ai/dist/env-api-keys.js +var __rewriteRelativeImportExtension2, _existsSync, _homedir, _join, dynamicImport, NODE_FS_SPECIFIER, NODE_OS_SPECIFIER, NODE_PATH_SPECIFIER, ANTHROPIC_FEDERATION_RULE_ID_ENV, ANTHROPIC_ORGANIZATION_ID_ENV, ANTHROPIC_SERVICE_ACCOUNT_ID_ENV, ANTHROPIC_IDENTITY_TOKEN_FILE_ENV, ANTHROPIC_WORKSPACE_ID_ENV; +var init_env_api_keys = __esm({ + "node_modules/@earendil-works/pi-ai/dist/env-api-keys.js"() { + __rewriteRelativeImportExtension2 = function(path5, preserveJsx) { + if (typeof path5 === "string" && /^\.\.?\//.test(path5)) { + return path5.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function(m, tsx, d, ext, cm) { + return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : d + ext + "." + cm.toLowerCase() + "js"; + }); + } + return path5; + }; + _existsSync = null; + _homedir = null; + _join = null; + dynamicImport = (specifier) => import(__rewriteRelativeImportExtension2(specifier)); + NODE_FS_SPECIFIER = "node:fs"; + NODE_OS_SPECIFIER = "node:os"; + NODE_PATH_SPECIFIER = "node:path"; + if (typeof process !== "undefined" && (process.versions?.node || process.versions?.bun)) { + dynamicImport(NODE_FS_SPECIFIER).then((m) => { + _existsSync = m.existsSync; + }); + dynamicImport(NODE_OS_SPECIFIER).then((m) => { + _homedir = m.homedir; + }); + dynamicImport(NODE_PATH_SPECIFIER).then((m) => { + _join = m.join; + }); + } + ANTHROPIC_FEDERATION_RULE_ID_ENV = "ANTHROPIC_FEDERATION_RULE_ID"; + ANTHROPIC_ORGANIZATION_ID_ENV = "ANTHROPIC_ORGANIZATION_ID"; + ANTHROPIC_SERVICE_ACCOUNT_ID_ENV = "ANTHROPIC_SERVICE_ACCOUNT_ID"; + ANTHROPIC_IDENTITY_TOKEN_FILE_ENV = "ANTHROPIC_IDENTITY_TOKEN_FILE"; + ANTHROPIC_WORKSPACE_ID_ENV = "ANTHROPIC_WORKSPACE_ID"; + } +}); + +// node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +var anthropic_messages_exports = {}; +__export(anthropic_messages_exports, { + stream: () => stream3, + streamSimple: () => streamSimple2 +}); +function resolveCacheRetention2(cacheRetention, env) { + if (cacheRetention) { + return cacheRetention; + } + if (getProviderEnvValue("PI_CACHE_RETENTION", env) === "long") { + return "long"; + } + return "short"; +} +function getCacheControl(model2, cacheRetention, env) { + const retention = resolveCacheRetention2(cacheRetention, env); + if (retention === "none") { + return { retention }; + } + const ttl = retention === "long" && getAnthropicCompat(model2).supportsLongCacheRetention ? "1h" : void 0; + return { + retention, + cacheControl: { type: "ephemeral", ...ttl && { ttl } } + }; +} +function convertImageBlock(image) { + return { + type: "image", + source: { + type: "base64", + media_type: image.mimeType, + data: image.data + } + }; +} +function convertContentBlocks(content) { + const hasImages = content.some((c) => c.type === "image"); + if (!hasImages) { + return sanitizeSurrogates(content.map((c) => c.text).join("\n")); + } + const blocks = content.map((block) => { + if (block.type === "text") { + return { + type: "text", + text: sanitizeSurrogates(block.text) + }; + } + return convertImageBlock(block); + }); + const hasText = blocks.some((b) => b.type === "text"); + if (!hasText) { + blocks.unshift({ + type: "text", + text: "(see attached image)" + }); + } + return blocks; +} +function shouldUseServerSideFallbackBeta(model2) { + return (model2.compat?.allowedFallbackModels?.length ?? 0) > 0; +} +function getAnthropicCompat(model2) { + const isOpenRouter2 = model2.provider === "openrouter" || model2.baseUrl.includes("openrouter.ai"); + return { + supportsEagerToolInputStreaming: model2.compat?.supportsEagerToolInputStreaming ?? true, + supportsLongCacheRetention: model2.compat?.supportsLongCacheRetention ?? true, + sendSessionAffinityHeaders: model2.compat?.sendSessionAffinityHeaders ?? isOpenRouter2, + sessionAffinityFormat: model2.compat?.sessionAffinityFormat ?? (isOpenRouter2 ? "openrouter" : void 0), + supportsCacheControlOnTools: model2.compat?.supportsCacheControlOnTools ?? true, + supportsTemperature: model2.compat?.supportsTemperature ?? true, + allowEmptySignature: model2.compat?.allowEmptySignature ?? false, + supportsStrictTools: model2.compat?.supportsStrictTools ?? false, + supportsMidConvoSystemMessages: model2.compat?.supportsMidConvoSystemMessages ?? false, + supportsMidConvoToolChanges: model2.compat?.supportsMidConvoToolChanges ?? false + }; +} +function mergeHeaders2(...headerSources) { + const merged = {}; + for (const headers of headerSources) { + if (headers) { + Object.assign(merged, headers); + } + } + return merged; +} +function hasHeader2(headers, name) { + if (!headers) + return false; + const expected = name.toLowerCase(); + for (const [key, value2] of Object.entries(headers)) { + if (key.toLowerCase() === expected && value2 !== null && value2.trim().length > 0) + return true; + } + return false; +} +function hasRequestAuth(apiKey, headers) { + return !!apiKey || hasHeader2(headers, "authorization") || hasHeader2(headers, "x-api-key") || hasHeader2(headers, "cf-aig-authorization"); +} +function assertRequestAuth(provider2, apiKey, headers) { + if (!hasRequestAuth(apiKey, headers)) + throw new Error(`No API key for provider: ${provider2}`); +} +function getAnthropicFederation(model2, apiKey, headers, env) { + if (model2.provider !== "anthropic" || hasRequestAuth(apiKey, headers)) + return void 0; + const federationRuleId = getProviderEnvValue(ANTHROPIC_FEDERATION_RULE_ID_ENV, env); + const organizationId = getProviderEnvValue(ANTHROPIC_ORGANIZATION_ID_ENV, env); + const identityTokenFile = getProviderEnvValue(ANTHROPIC_IDENTITY_TOKEN_FILE_ENV, env); + if (!federationRuleId || !organizationId || !identityTokenFile) + return void 0; + return { + organization_id: organizationId, + workspace_id: getProviderEnvValue(ANTHROPIC_WORKSPACE_ID_ENV, env), + authentication: { + type: "oidc_federation", + federation_rule_id: federationRuleId, + service_account_id: getProviderEnvValue(ANTHROPIC_SERVICE_ACCOUNT_ID_ENV, env), + identity_token: { source: "file", path: identityTokenFile } + } + }; +} +function flushSseEvent(state2) { + if (!state2.event && state2.data.length === 0) { + return null; + } + const event = { + event: state2.event, + data: state2.data.join("\n"), + raw: [...state2.raw] + }; + state2.event = null; + state2.data = []; + state2.raw = []; + return event; +} +function decodeSseLine(line, state2) { + if (line === "") { + return flushSseEvent(state2); + } + state2.raw.push(line); + if (line.startsWith(":")) { + return null; + } + const delimiterIndex = line.indexOf(":"); + const fieldName = delimiterIndex === -1 ? line : line.slice(0, delimiterIndex); + let value2 = delimiterIndex === -1 ? "" : line.slice(delimiterIndex + 1); + if (value2.startsWith(" ")) { + value2 = value2.slice(1); + } + if (fieldName === "event") { + state2.event = value2; + } else if (fieldName === "data") { + state2.data.push(value2); + } + return null; +} +function nextLineBreakIndex(text2) { + const carriageReturnIndex = text2.indexOf("\r"); + const newlineIndex = text2.indexOf("\n"); + if (carriageReturnIndex === -1) { + return newlineIndex; + } + if (newlineIndex === -1) { + return carriageReturnIndex; + } + return Math.min(carriageReturnIndex, newlineIndex); +} +function consumeLine(text2) { + const lineBreakIndex = nextLineBreakIndex(text2); + if (lineBreakIndex === -1) { + return null; + } + let nextIndex = lineBreakIndex + 1; + if (text2[lineBreakIndex] === "\r" && text2[nextIndex] === "\n") { + nextIndex += 1; + } + return { + line: text2.slice(0, lineBreakIndex), + rest: text2.slice(nextIndex) + }; +} +async function* iterateSseMessages(body, signal) { + const reader = body.getReader(); + const decoder5 = new TextDecoder(); + const state2 = { event: null, data: [], raw: [] }; + let buffer = ""; + try { + while (true) { + if (signal?.aborted) { + throw new Error("Request was aborted"); + } + const { value: value2, done } = await reader.read(); + if (done) { + break; + } + buffer += decoder5.decode(value2, { stream: true }); + let consumed2 = consumeLine(buffer); + while (consumed2) { + buffer = consumed2.rest; + const event = decodeSseLine(consumed2.line, state2); + if (event) { + yield event; + } + consumed2 = consumeLine(buffer); + } + } + buffer += decoder5.decode(); + let consumed = consumeLine(buffer); + while (consumed) { + buffer = consumed.rest; + const event = decodeSseLine(consumed.line, state2); + if (event) { + yield event; + } + consumed = consumeLine(buffer); + } + if (buffer.length > 0) { + const event = decodeSseLine(buffer, state2); + if (event) { + yield event; + } + } + const trailingEvent = flushSseEvent(state2); + if (trailingEvent) { + yield trailingEvent; + } + } finally { + reader.releaseLock(); + } +} +async function* iterateAnthropicEvents(response, signal) { + if (!response.body) { + throw new Error("Attempted to iterate over an Anthropic response with no body"); + } + let sawMessageStart = false; + let sawMessageEnd = false; + for await (const sse of iterateSseMessages(response.body, signal)) { + if (sse.event === "error") { + throw new Error(sse.data); + } + if (!ANTHROPIC_MESSAGE_EVENTS.has(sse.event ?? "")) { + continue; + } + try { + const event = parseJsonWithRepair(sse.data); + if (event.type === "message_start") { + sawMessageStart = true; + } else if (event.type === "message_stop") { + sawMessageEnd = true; + } + yield event; + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + throw new Error(`Could not parse Anthropic SSE event ${sse.event}: ${message}; data=${sse.data}; raw=${sse.raw.join("\\n")}`); + } + } + if (sawMessageStart && !sawMessageEnd) { + throw new Error("Anthropic stream ended before message_stop"); + } +} +function mapThinkingLevelToEffort(model2, level) { + const mapped = level ? model2.thinkingLevelMap?.[level] : void 0; + if (typeof mapped === "string") + return mapped; + switch (level) { + case "minimal": + case "low": + return "low"; + case "medium": + return "medium"; + case "high": + return "high"; + default: + return "high"; + } +} +function isOAuthToken(apiKey) { + return apiKey.includes("sk-ant-oat"); +} +function createClient2(model2, apiKey, optionsHeaders, fetch2, dynamicHeaders, sessionId, federation, identity) { + if (model2.provider === "github-copilot") { + const client2 = new PiAnthropic({ + apiKey: null, + authToken: apiKey ?? null, + baseURL: model2.baseUrl, + dangerouslyAllowBrowser: true, + fetch: fetch2, + defaultHeaders: mergeHeaders2(getIdentityHeaders(model2, identity), { + accept: "application/json", + "anthropic-dangerous-direct-browser-access": "true" + }, model2.headers, dynamicHeaders, optionsHeaders) + }); + return { client: client2, isOAuthToken: false }; + } + if (apiKey && isOAuthToken(apiKey)) { + const client2 = new PiAnthropic({ + apiKey: null, + authToken: apiKey, + baseURL: model2.baseUrl, + dangerouslyAllowBrowser: true, + fetch: fetch2, + defaultHeaders: mergeHeaders2({ + accept: "application/json", + "anthropic-dangerous-direct-browser-access": "true", + "user-agent": `claude-cli/${claudeCodeVersion}`, + "x-app": "cli" + }, model2.headers, optionsHeaders) + }); + return { client: client2, isOAuthToken: true }; + } + const compat = getAnthropicCompat(model2); + const sessionAffinityHeaders = {}; + if (sessionId && compat.sendSessionAffinityHeaders) { + const header = compat.sessionAffinityFormat === "openrouter" ? "x-session-id" : "x-session-affinity"; + sessionAffinityHeaders[header] = sessionId; + } + const defaultHeaders = mergeHeaders2(getIdentityHeaders(model2, identity), { + accept: "application/json", + "anthropic-dangerous-direct-browser-access": "true" + }, sessionAffinityHeaders, model2.headers, optionsHeaders); + if (federation) { + const key = JSON.stringify([model2.baseUrl, federation]); + if (federationClient?.key !== key || federationClient.fetch !== fetch2) { + const client2 = new PiAnthropic({ + apiKey: null, + authToken: null, + config: federation, + baseURL: model2.baseUrl, + dangerouslyAllowBrowser: true, + fetch: fetch2 + }); + federationClient = { key, fetch: fetch2, client: client2 }; + } + return { client: federationClient.client.withOptions({ defaultHeaders }), isOAuthToken: false }; + } + const client = new PiAnthropic({ + apiKey: apiKey ?? null, + authToken: null, + baseURL: model2.baseUrl, + dangerouslyAllowBrowser: true, + fetch: fetch2, + defaultHeaders + }); + return { client, isOAuthToken: false }; +} +function getBetaFeatures(model2, context, isOAuthToken2, nativeToolChanges, options) { + let configuredFeatures; + for (const headers of [model2.headers, options?.headers]) { + for (const [name, value2] of Object.entries(headers ?? {})) { + if (name.toLowerCase() === "anthropic-beta") + configuredFeatures = value2; + } + } + if (configuredFeatures === null) + return []; + if (configuredFeatures !== void 0) { + return [ + ...new Set(configuredFeatures.split(",").map((feature) => feature.trim()).filter((feature) => feature.length > 0)) + ]; + } + const features = []; + if (isOAuthToken2) + features.push("claude-code-20250219", "oauth-2025-04-20"); + if (shouldUseFineGrainedToolStreamingBeta(model2, context)) + features.push(FINE_GRAINED_TOOL_STREAMING_BETA); + if (model2.reasoning && options?.thinkingEnabled === true && (options.interleavedThinking ?? true) && model2.compat?.forceAdaptiveThinking !== true) { + features.push(INTERLEAVED_THINKING_BETA); + } + if (shouldUseServerSideFallbackBeta(model2)) + features.push(SERVER_SIDE_FALLBACK_BETA); + if (model2.compat?.supportsMidConvoEffort === true) { + features.push(MID_CONVERSATION_OUTPUT_CONFIG_BETA, THINKING_BINDING_CONTROLS_BETA); + } + if (nativeToolChanges) + features.push(INLINE_TOOLS_BETA); + return [...new Set(features)]; +} +function buildParams2(model2, context, isOAuthToken2, options, disablePreferredStrictTools = false) { + const { cacheControl } = getCacheControl(model2, options?.cacheRetention, options?.env); + const compat = getAnthropicCompat(model2); + const initialSystemMessage = getInitialSystemMessage(context.messages); + const initialSystemText = initialSystemMessage ? getSystemMessageText(initialSystemMessage) : ""; + const transformedMessages = transformMessages(context.messages, model2, normalizeToolCallId); + const conversationMessages = initialSystemMessage ? transformedMessages.slice(1) : transformedMessages; + let hasPreferredStrictTools = false; + const convertToolDefinitions = (tools, toolCacheControl2) => { + const definitions = convertTools2(tools, isOAuthToken2, compat.supportsEagerToolInputStreaming, compat.supportsStrictTools, toolCacheControl2, disablePreferredStrictTools); + if (definitions.some((definition, index) => definition.strict === true && prefersJsonSchemaStrictSampling(tools[index]))) { + hasPreferredStrictTools = true; + } + return definitions; + }; + const initialTools = initialSystemMessage?.toolsAdded ?? []; + const nativeToolChanges = compat.supportsMidConvoSystemMessages && compat.supportsMidConvoToolChanges && initialTools.length > 0; + const thinkingDisabled = model2.reasoning && options?.thinkingEnabled === false && model2.thinkingLevelMap?.off !== null; + const effortMessages = model2.compat?.supportsMidConvoEffort === true && !thinkingDisabled; + const converted = convertMessages2(conversationMessages, isOAuthToken2, cacheControl, compat.allowEmptySignature, effortMessages ? model2.provider : void 0, nativeToolChanges ? convertToolDefinitions : void 0); + const activeEffort = options?.effort ?? "high"; + const betaFeatures = getBetaFeatures(model2, context, isOAuthToken2, nativeToolChanges, options); + const params = { + model: model2.id, + messages: effortMessages ? insertThinkingLevelMessages(converted, activeEffort) : converted.messages, + max_tokens: options?.maxTokens ?? model2.maxTokens, + stream: true, + ...betaFeatures.length > 0 ? { betas: betaFeatures } : {} + }; + if (isOAuthToken2) { + params.system = [ + { + type: "text", + text: "You are Claude Code, Anthropic's official CLI for Claude.", + ...cacheControl ? { cache_control: cacheControl } : {} + } + ]; + if (initialSystemText) { + params.system.push({ + type: "text", + text: sanitizeSurrogates(initialSystemText), + ...cacheControl ? { cache_control: cacheControl } : {} + }); + } + } else if (initialSystemText) { + params.system = [ + { + type: "text", + text: sanitizeSurrogates(initialSystemText), + ...cacheControl ? { cache_control: cacheControl } : {} + } + ]; + } + if (options?.temperature !== void 0 && !options?.thinkingEnabled && model2.compat?.supportsMidConvoEffort !== true && compat.supportsTemperature) { + params.temperature = options.temperature; + } + const toolCacheControl = compat.supportsCacheControlOnTools ? cacheControl : void 0; + if (nativeToolChanges) { + params.tools = [...convertToolDefinitions(initialTools, toolCacheControl), DEFERRED_TOOL_PLACEHOLDER]; + } else { + const tools = getCurrentTools(context.messages); + if (tools.length > 0) { + params.tools = convertToolDefinitions(tools, toolCacheControl); + } + } + if (thinkingDisabled) { + params.thinking = { type: "disabled" }; + } else if (effortMessages) { + params.thinking = { + type: "adaptive", + display: options?.thinkingDisplay ?? "summarized", + block_binding: { prefix_mismatch_behavior: "drop_block" } + }; + params.output_config = { effort: "low" }; + } else if (model2.reasoning && options?.thinkingEnabled) { + const display = options.thinkingDisplay ?? "summarized"; + if (model2.compat?.forceAdaptiveThinking === true) { + params.thinking = { type: "adaptive", display }; + if (options.effort) { + params.output_config = { effort: options.effort }; + } + } else { + params.thinking = { + type: "enabled", + budget_tokens: options.thinkingBudgetTokens || 1024, + display + }; + } + } + if (options?.metadata) { + const userId = options.metadata.user_id; + if (typeof userId === "string") { + params.metadata = { user_id: userId }; + } + } + if (options?.toolChoice) { + if (typeof options.toolChoice === "string") { + params.tool_choice = { type: options.toolChoice }; + } else { + params.tool_choice = options.toolChoice; + } + } + const allowedFallbackModels = model2.compat?.allowedFallbackModels; + if (allowedFallbackModels && allowedFallbackModels.length > 0) { + params.fallbacks = allowedFallbackModels.map((fallback) => ({ model: fallback.model })); + } + return { params, hasPreferredStrictTools, providerThinkingLevel: effortMessages ? activeEffort : void 0 }; +} +function normalizeToolCallId(id) { + return id.replace(/[^a-zA-Z0-9_-]/g, "_").slice(0, 64); +} +function convertToolResult(msg, content = msg.content) { + return { + type: "tool_result", + tool_use_id: msg.toolCallId, + content: convertContentBlocks(content), + is_error: msg.isError + }; +} +function convertMessages2(transformedMessages, isOAuthToken2, cacheControl, allowEmptySignature = false, managedProvider, convertToolDefinitions) { + const params = []; + const assistantLevels = /* @__PURE__ */ new Map(); + const pendingSystemMessages = []; + const flushPendingSystemMessages = () => { + params.push(...pendingSystemMessages); + pendingSystemMessages.length = 0; + }; + for (let i = 0; i < transformedMessages.length; i++) { + const msg = transformedMessages[i]; + if (msg.role === "system") { + const text2 = renderSystemMessageUpdate(msg); + const blocks = []; + if (text2.length > 0) + blocks.push({ type: "text", text: sanitizeSurrogates(text2) }); + if (convertToolDefinitions) { + const added = msg.toolsAdded ?? []; + const redefined = new Set(added.map((tool) => tool.name)); + for (const tool of msg.toolsRemoved ?? []) { + if (redefined.has(tool.name)) + continue; + blocks.push({ + type: "tool_removal", + tool: { type: "tool_reference", name: isOAuthToken2 ? toClaudeCodeName(tool.name) : tool.name } + }); + } + for (const definition of convertToolDefinitions(added)) { + blocks.push({ type: "tool_addition", tool: { type: "tool_definition", definition } }); + } + } + if (blocks.length > 0) + pendingSystemMessages.push({ role: "system", content: blocks }); + } else if (msg.role === "user") { + if (typeof msg.content === "string") { + if (msg.content.trim().length > 0) { + params.push({ + role: "user", + content: sanitizeSurrogates(msg.content) + }); + } + } else { + const blocks = msg.content.map((item) => { + if (item.type === "text") { + return { + type: "text", + text: sanitizeSurrogates(item.text) + }; + } else { + return convertImageBlock(item); + } + }); + const filteredBlocks = blocks.filter((b) => { + if (b.type === "text") { + return b.text.trim().length > 0; + } + return true; + }); + if (filteredBlocks.length === 0) + continue; + params.push({ + role: "user", + content: filteredBlocks + }); + } + } else if (msg.role === "assistant") { + const blocks = []; + for (const block of msg.content) { + if (block.type === "text") { + if (block.text.trim().length === 0) + continue; + blocks.push({ + type: "text", + text: sanitizeSurrogates(block.text) + }); + } else if (block.type === "thinking") { + if (block.redacted) { + blocks.push({ + type: "redacted_thinking", + data: block.thinkingSignature + }); + continue; + } + const thinkingSignature = block.thinkingSignature; + const hasThinkingSignature = !!thinkingSignature && thinkingSignature.trim().length > 0; + if (block.thinking.trim().length === 0 && !hasThinkingSignature) + continue; + if (!hasThinkingSignature) { + blocks.push(allowEmptySignature ? { + type: "thinking", + thinking: sanitizeSurrogates(block.thinking), + signature: "" + } : { + type: "text", + text: sanitizeSurrogates(block.thinking) + }); + } else { + blocks.push({ + type: "thinking", + thinking: sanitizeSurrogates(block.thinking), + signature: thinkingSignature + }); + } + } else if (block.type === "toolCall") { + blocks.push({ + type: "tool_use", + id: block.id, + name: isOAuthToken2 ? toClaudeCodeName(block.name) : block.name, + input: block.arguments ?? {} + }); + } + } + if (blocks.length === 0) + continue; + flushPendingSystemMessages(); + const messageIndex = params.length; + params.push({ + role: "assistant", + content: blocks + }); + if (managedProvider !== void 0 && msg.api === "anthropic-messages" && msg.provider === managedProvider && isAnthropicEffort(msg.providerThinkingLevel)) { + assistantLevels.set(messageIndex, msg.providerThinkingLevel); + } + } else if (msg.role === "toolResult") { + const toolResults = []; + const errorImages = []; + let j = i; + while (j < transformedMessages.length && transformedMessages[j].role === "toolResult") { + const toolMsg = transformedMessages[j]; + const split = splitErrorToolResultImages(toolMsg); + toolResults.push(convertToolResult(toolMsg, split?.content)); + if (split) { + errorImages.push({ type: "text", text: split.caption }, ...split.images.map(convertImageBlock)); + } + j++; + } + i = j - 1; + params.push({ + role: "user", + content: [...toolResults, ...errorImages] + }); + } + } + flushPendingSystemMessages(); + if (cacheControl && params.length > 0) { + const lastMessage = params[params.length - 1]; + if (lastMessage.role === "user" || lastMessage.role === "system") { + if (Array.isArray(lastMessage.content)) { + const lastBlock = lastMessage.content[lastMessage.content.length - 1]; + if (lastBlock && (lastBlock.type === "text" || lastBlock.type === "image" || lastBlock.type === "tool_result" || lastBlock.type === "tool_addition" || lastBlock.type === "tool_removal")) { + lastBlock.cache_control = cacheControl; + } + } else if (typeof lastMessage.content === "string") { + lastMessage.content = [ + { + type: "text", + text: lastMessage.content, + cache_control: cacheControl + } + ]; + } + } + } + return { messages: params, assistantLevels }; +} +function isAnthropicEffort(value2) { + return value2 === "low" || value2 === "medium" || value2 === "high" || value2 === "xhigh" || value2 === "max"; +} +function insertThinkingLevelMessages(converted, activeEffort) { + const messages = []; + for (let index = 0; index < converted.messages.length; index++) { + const historicalEffort = converted.assistantLevels.get(index); + if (historicalEffort !== void 0) { + messages.push({ role: "system", content: [], output_config: { effort: historicalEffort } }); + } + messages.push(converted.messages[index]); + } + messages.push({ role: "system", content: [], output_config: { effort: activeEffort } }); + return messages; +} +function shouldUseFineGrainedToolStreamingBeta(model2, context) { + return getCurrentTools(context.messages).length > 0 && !getAnthropicCompat(model2).supportsEagerToolInputStreaming; +} +function convertTools2(tools, isOAuthToken2, supportsEagerToolInputStreaming, supportsStrictTools, cacheControl, disablePreferredStrictTools = false) { + if (!tools) + return []; + return tools.map((tool, index) => { + const strict = disablePreferredStrictTools && prefersJsonSchemaStrictSampling(tool) ? void 0 : resolveJsonSchemaStrictSampling(tool, supportsStrictTools, isAnthropicStrictUnsupportedKeyword); + const parameters = getJsonSchemaToolParameters(tool, strict); + const schema4 = parameters; + const legacyInputSchema = { + type: "object", + properties: schema4.properties ?? {}, + required: schema4.required ?? [] + }; + const inputSchema = strict === true ? { + ...parameters, + ...legacyInputSchema + } : legacyInputSchema; + return { + name: isOAuthToken2 ? toClaudeCodeName(tool.name) : tool.name, + description: tool.description, + ...supportsEagerToolInputStreaming ? { eager_input_streaming: true } : {}, + ...strict === true ? { strict: true } : {}, + input_schema: inputSchema, + ...cacheControl && index === tools.length - 1 ? { cache_control: cacheControl } : {} + }; + }); +} +function mapStopReason2(reason, stopDetails) { + switch (reason) { + case "end_turn": + return { stopReason: "stop" }; + case "max_tokens": + return { stopReason: "length" }; + case "tool_use": + return { stopReason: "toolUse" }; + case "refusal": + return { + stopReason: "error", + errorMessage: stopDetails?.explanation || `The model refused to complete the request` + }; + case "pause_turn": + return { stopReason: "stop" }; + case "stop_sequence": + return { stopReason: "stop" }; + // We don't supply stop sequences, so this should never happen + case "sensitive": + return { stopReason: "error", errorMessage: "Provider stopped with: sensitive" }; + default: + throw new Error(`Unhandled stop reason: ${reason}`); + } +} +var claudeCodeVersion, claudeCodeTools, ccToolLookup, toClaudeCodeName, fromClaudeCodeName, FINE_GRAINED_TOOL_STREAMING_BETA, INTERLEAVED_THINKING_BETA, SERVER_SIDE_FALLBACK_BETA, MID_CONVERSATION_OUTPUT_CONFIG_BETA, THINKING_BINDING_CONTROLS_BETA, INLINE_TOOLS_BETA, DEFERRED_TOOL_PLACEHOLDER, PiAnthropic, federationClient, ANTHROPIC_MESSAGE_EVENTS, stream3, streamSimple2, ANTHROPIC_STRICT_UNSUPPORTED_KEYWORDS, ANTHROPIC_STRICT_STRING_FORMATS, isAnthropicStrictUnsupportedKeyword; +var init_anthropic_messages = __esm({ + "node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js"() { + init_sdk(); + init_env_api_keys(); + init_models(); + init_diagnostics(); + init_event_stream(); + init_headers2(); + init_identity(); + init_json_parse(); + init_openrouter_cost(); + init_provider_env(); + init_provider_retry(); + init_sanitize_unicode(); + init_streaming_json(); + init_text(); + init_transcript(); + init_constrained_sampling(); + init_github_copilot_headers(); + init_simple_options(); + init_transform_messages(); + claudeCodeVersion = "2.1.280"; + claudeCodeTools = [ + "Read", + "Write", + "Edit", + "Bash", + "Grep", + "Glob", + "AskUserQuestion", + "EnterPlanMode", + "ExitPlanMode", + "KillShell", + "NotebookEdit", + "Skill", + "Task", + "TaskOutput", + "TodoWrite", + "WebFetch", + "WebSearch" + ]; + ccToolLookup = new Map(claudeCodeTools.map((t) => [t.toLowerCase(), t])); + toClaudeCodeName = (name) => ccToolLookup.get(name.toLowerCase()) ?? name; + fromClaudeCodeName = (name, tools) => { + if (tools && tools.length > 0) { + const lowerName = name.toLowerCase(); + const matchedTool = tools.find((tool) => tool.name.toLowerCase() === lowerName); + if (matchedTool) + return matchedTool.name; + } + return name; + }; + FINE_GRAINED_TOOL_STREAMING_BETA = "fine-grained-tool-streaming-2025-05-14"; + INTERLEAVED_THINKING_BETA = "interleaved-thinking-2025-05-14"; + SERVER_SIDE_FALLBACK_BETA = "server-side-fallback-2026-07-01"; + MID_CONVERSATION_OUTPUT_CONFIG_BETA = "mid-conversation-output-config-2026-07-01"; + THINKING_BINDING_CONTROLS_BETA = "thinking-binding-controls-2026-08-01"; + INLINE_TOOLS_BETA = "inline-tools-2026-09-15"; + DEFERRED_TOOL_PLACEHOLDER = { + name: "__pi_deferred_placeholder__", + description: "Reserved placeholder. Never available. Never call this.", + input_schema: { type: "object", properties: {}, required: [] }, + defer_loading: true + }; + PiAnthropic = class extends Anthropic { + _shouldResolveDefaultCredentials() { + return false; + } + }; + ANTHROPIC_MESSAGE_EVENTS = /* @__PURE__ */ new Set([ + "message_start", + "message_delta", + "message_stop", + "content_block_start", + "content_block_delta", + "content_block_stop" + ]); + stream3 = (model2, context, options) => { + const stream5 = new AssistantMessageEventStream(); + const normalizedContext = resolveTranscript(context, getAnthropicCompat(model2).supportsMidConvoSystemMessages); + const currentTools = getCurrentTools(normalizedContext.messages); + (async () => { + const output = { + role: "assistant", + content: [], + api: model2.api, + provider: model2.provider, + model: model2.id, + usage: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + totalTokens: 0, + cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 } + }, + stopReason: "pending", + timestamp: Date.now() + }; + try { + let client; + let isOAuth; + let usageModel = model2; + let inputTransformations; + if (options?.client) { + client = options.client; + isOAuth = false; + } else { + const apiKey = options?.apiKey; + const federation = getAnthropicFederation(model2, apiKey, options?.headers, options?.env); + if (!federation) + assertRequestAuth(model2.provider, apiKey, options?.headers); + let copilotDynamicHeaders; + if (model2.provider === "github-copilot") { + const hasImages = hasCopilotVisionInput(normalizedContext.messages); + copilotDynamicHeaders = buildCopilotDynamicHeaders({ + messages: normalizedContext.messages, + hasImages + }); + } + const cacheRetention = resolveCacheRetention2(options?.cacheRetention, options?.env); + const cacheSessionId = cacheRetention === "none" ? void 0 : options?.sessionId; + const created = createClient2(model2, apiKey, options?.headers, options?.fetch, copilotDynamicHeaders, cacheSessionId, federation, options?.identity); + client = created.client; + isOAuth = created.isOAuthToken; + } + const requestOptions = { + ...options?.signal ? { signal: options.signal } : {}, + ...options?.timeoutMs !== void 0 ? { timeout: options.timeoutMs } : {}, + maxRetries: 0 + }; + let disablePreferredStrictTools = false; + let response; + for (; ; ) { + options?.signal?.throwIfAborted(); + const built = buildParams2(model2, normalizedContext, isOAuth, options, disablePreferredStrictTools); + if (built.providerThinkingLevel) + output.providerThinkingLevel = built.providerThinkingLevel; + let params = built.params; + const nextParams = await options?.onPayload?.(params, model2); + if (nextParams !== void 0) { + params = { ...nextParams, stream: true }; + } + try { + response = await retryProviderRequest(() => client.beta.messages.create(params, requestOptions).asResponse(), { + maxRetries: options?.maxRetries, + maxRetryDelayMs: options?.maxRetryDelayMs, + signal: options?.signal + }); + break; + } catch (error) { + if (options?.signal?.aborted || disablePreferredStrictTools || !built.hasPreferredStrictTools || !(error instanceof Anthropic.APIError) || error.status !== 400 || error.type !== "invalid_request_error" || !isStrictToolLimitErrorMessage(error.message)) { + throw error; + } + disablePreferredStrictTools = true; + appendAssistantMessageDiagnostic(output, { + type: "anthropic_strict_tools_fallback", + timestamp: Date.now(), + error: { message: error.message }, + details: { reason: "strict_tool_limits_exceeded" } + }); + } + } + await options?.onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model2); + stream5.push({ type: "start", partial: output }); + const openBlocks = /* @__PURE__ */ new Map(); + const openBlock = (anthropicIndex) => { + const open = openBlocks.get(anthropicIndex); + return open === void 0 ? void 0 : { ...open, block: output.content[open.contentIndex] }; + }; + for await (const event of iterateAnthropicEvents(response, options?.signal)) { + await options?.onProviderStreamEvent?.(event, model2); + if (event.type === "message_start") { + output.responseId = event.message.id; + const transformations = event.message.input_transformations; + if (Array.isArray(transformations)) + inputTransformations = transformations; + const responseModel = event.message.model; + if (responseModel !== model2.id) + output.responseModel = responseModel; + const fallbackCost = responseModel === model2.id ? void 0 : model2.compat?.allowedFallbackModels?.find((fallback) => fallback.provider === model2.provider && fallback.model === responseModel)?.cost; + usageModel = fallbackCost ? { ...model2, id: responseModel, cost: fallbackCost } : model2; + output.usage.input = event.message.usage.input_tokens || 0; + output.usage.output = event.message.usage.output_tokens || 0; + output.usage.cacheRead = event.message.usage.cache_read_input_tokens || 0; + output.usage.cacheWrite = event.message.usage.cache_creation_input_tokens || 0; + output.usage.cacheWrite1h = event.message.usage.cache_creation?.ephemeral_1h_input_tokens || 0; + output.usage.totalTokens = output.usage.input + output.usage.output + output.usage.cacheRead + output.usage.cacheWrite; + calculateCost(usageModel, output.usage); + } else if (event.type === "content_block_start") { + if (event.content_block.type === "fallback") { + if (output.content.length > 0) { + throw new Error("Anthropic performed an unsupported mid-output model fallback"); + } + continue; + } + if (event.content_block.type === "text") { + output.content.push({ type: "text", text: event.content_block.text ?? "" }); + openBlocks.set(event.index, { contentIndex: output.content.length - 1 }); + stream5.push({ type: "text_start", contentIndex: output.content.length - 1, partial: output }); + } else if (event.content_block.type === "thinking") { + output.content.push({ + type: "thinking", + thinking: event.content_block.thinking ?? "", + thinkingSignature: event.content_block.signature ?? "" + }); + openBlocks.set(event.index, { contentIndex: output.content.length - 1 }); + stream5.push({ type: "thinking_start", contentIndex: output.content.length - 1, partial: output }); + } else if (event.content_block.type === "redacted_thinking") { + output.content.push({ + type: "thinking", + thinking: "[Reasoning redacted]", + thinkingSignature: event.content_block.data, + redacted: true + }); + openBlocks.set(event.index, { contentIndex: output.content.length - 1 }); + stream5.push({ type: "thinking_start", contentIndex: output.content.length - 1, partial: output }); + } else if (event.content_block.type === "tool_use") { + output.content.push({ + type: "toolCall", + id: event.content_block.id, + name: isOAuth ? fromClaudeCodeName(event.content_block.name, currentTools) : event.content_block.name, + arguments: event.content_block.input ?? {} + }); + openBlocks.set(event.index, { + contentIndex: output.content.length - 1, + arguments: new ToolCallArgumentsStream() + }); + stream5.push({ type: "toolcall_start", contentIndex: output.content.length - 1, partial: output }); + } + } else if (event.type === "content_block_delta") { + const open = openBlock(event.index); + if (event.delta.type === "text_delta") { + if (open?.block.type === "text") { + open.block.text += event.delta.text; + stream5.push({ + type: "text_delta", + contentIndex: open.contentIndex, + delta: event.delta.text, + partial: output + }); + } + } else if (event.delta.type === "thinking_delta") { + if (open?.block.type === "thinking") { + open.block.thinking += event.delta.thinking; + stream5.push({ + type: "thinking_delta", + contentIndex: open.contentIndex, + delta: event.delta.thinking, + partial: output + }); + } + } else if (event.delta.type === "input_json_delta") { + if (open?.block.type === "toolCall" && open.arguments !== void 0) { + open.block.arguments = open.arguments.append(event.delta.partial_json); + stream5.push({ + type: "toolcall_delta", + contentIndex: open.contentIndex, + delta: event.delta.partial_json, + partial: output + }); + } + } else if (event.delta.type === "signature_delta") { + if (open?.block.type === "thinking") { + open.block.thinkingSignature = open.block.thinkingSignature || ""; + open.block.thinkingSignature += event.delta.signature; + } + } + } else if (event.type === "content_block_stop") { + const open = openBlock(event.index); + openBlocks.delete(event.index); + if (open) { + const { block, contentIndex: index } = open; + if (block.type === "text") { + stream5.push({ + type: "text_end", + contentIndex: index, + content: block.text, + partial: output + }); + } else if (block.type === "thinking") { + stream5.push({ + type: "thinking_end", + contentIndex: index, + content: block.thinking, + partial: output + }); + } else if (block.type === "toolCall" && open.arguments !== void 0) { + Object.assign(block, open.arguments.finish()); + stream5.push({ + type: "toolcall_end", + contentIndex: index, + toolCall: block, + partial: output + }); + } + } + } else if (event.type === "message_delta") { + const transformations = event.input_transformations; + if (Array.isArray(transformations)) + inputTransformations = transformations; + if (event.delta.stop_reason) { + output.rawStopReason = event.delta.stop_reason; + const stopReasonResult = mapStopReason2(event.delta.stop_reason, event.delta.stop_details); + output.stopReason = stopReasonResult.stopReason; + if (stopReasonResult.errorMessage) { + output.errorMessage = stopReasonResult.errorMessage; + } + } + if (event.usage) { + if (event.usage.input_tokens != null) { + output.usage.input = event.usage.input_tokens; + } + if (event.usage.output_tokens != null) { + output.usage.output = event.usage.output_tokens; + } + if (event.usage.cache_read_input_tokens != null) { + output.usage.cacheRead = event.usage.cache_read_input_tokens; + } + if (event.usage.cache_creation_input_tokens != null) { + output.usage.cacheWrite = event.usage.cache_creation_input_tokens; + } + const cacheCreation = event.usage.cache_creation; + if (cacheCreation?.ephemeral_1h_input_tokens != null) { + output.usage.cacheWrite1h = cacheCreation.ephemeral_1h_input_tokens; + } + const thinkingTokens = event.usage.output_tokens_details?.thinking_tokens; + if (thinkingTokens != null) { + output.usage.reasoning = thinkingTokens; + } + } + output.usage.totalTokens = output.usage.input + output.usage.output + output.usage.cacheRead + output.usage.cacheWrite; + calculateCost(usageModel, output.usage); + if (isOpenRouterModel(model2) && event.usage) { + applyOpenRouterReportedCost(output.usage, event.usage); + } + } + } + if (options?.signal?.aborted) { + throw new Error("Request was aborted"); + } + if (output.stopReason === "pending") { + throw new Error("Anthropic stream ended without a stop reason"); + } + if (output.stopReason === "aborted" || output.stopReason === "error") { + throw new Error(output.errorMessage || "An unknown error occurred"); + } + if (inputTransformations && inputTransformations.length > 0) { + appendAssistantMessageDiagnostic(output, { + type: "anthropic_input_transformations", + timestamp: Date.now(), + details: { + transformations: inputTransformations.map((transformation) => ({ + type: transformation.type ?? void 0, + path: transformation.path ?? void 0, + reason: transformation.reason ?? void 0 + })) + } + }); + } + stream5.push({ type: "done", reason: output.stopReason, message: output }); + stream5.end(); + } catch (error) { + output.stopReason = options?.signal?.aborted ? "aborted" : "error"; + output.errorMessage = error instanceof Error ? error.message : JSON.stringify(error); + stream5.push({ type: "error", reason: output.stopReason, error: output }); + stream5.end(); + } + })(); + return stream5; + }; + streamSimple2 = (model2, context, options) => { + if (!getAnthropicFederation(model2, options?.apiKey, options?.headers, options?.env)) { + assertRequestAuth(model2.provider, options?.apiKey, options?.headers); + } + const base = { + ...buildBaseOptions(model2, context, options, options?.apiKey), + toolChoice: options?.toolChoice + }; + if (!options?.reasoning) { + return stream3(model2, context, { + ...base, + thinkingEnabled: false + }); + } + if (model2.compat?.forceAdaptiveThinking === true) { + const effort = mapThinkingLevelToEffort(model2, options.reasoning); + return stream3(model2, context, { + ...base, + thinkingEnabled: true, + effort + }); + } + const adjusted = adjustMaxTokensForThinking(base.maxTokens, model2.maxTokens, options.reasoning, options.thinkingBudgets); + const maxTokens = clampMaxTokensToContext(model2, context, adjusted.maxTokens); + return stream3(model2, context, { + ...base, + maxTokens, + thinkingEnabled: true, + thinkingBudgetTokens: Math.min(adjusted.thinkingBudget, Math.max(0, maxTokens - 1024)) + }); + }; + ANTHROPIC_STRICT_UNSUPPORTED_KEYWORDS = /* @__PURE__ */ new Set([ + "minimum", + "maximum", + "exclusiveMinimum", + "exclusiveMaximum", + "multipleOf", + "maxItems", + "uniqueItems", + "minContains", + "maxContains", + "minProperties", + "maxProperties" + ]); + ANTHROPIC_STRICT_STRING_FORMATS = /* @__PURE__ */ new Set([ + "date-time", + "time", + "date", + "duration", + "email", + "hostname", + "uri", + "ipv4", + "ipv6", + "uuid" + ]); + isAnthropicStrictUnsupportedKeyword = (key, value2) => { + if (ANTHROPIC_STRICT_UNSUPPORTED_KEYWORDS.has(key)) + return true; + if (key === "minItems") + return value2 !== 0 && value2 !== 1; + if (key === "format") + return typeof value2 !== "string" || !ANTHROPIC_STRICT_STRING_FORMATS.has(value2); + return false; + }; } }); @@ -40445,7 +41593,7 @@ async function processResponsesStream(openaiStream, output, stream5, model2, opt const incompleteDetails = response?.incomplete_details; const incompleteReason = typeof incompleteDetails?.reason === "string" ? incompleteDetails.reason : void 0; output.rawStopReason = incompleteReason ? `${status}.${incompleteReason}` : status; - const mappedStop = mapStopReason2(status, incompleteReason); + const mappedStop = mapStopReason3(status, incompleteReason); output.stopReason = mappedStop.stopReason; if (mappedStop.errorMessage === void 0) delete output.errorMessage; @@ -40639,7 +41787,7 @@ function sendCustomInput(block, input, jsonDelta) { input.unsent = ""; return sent; } -function mapStopReason2(status, incompleteReason) { +function mapStopReason3(status, incompleteReason) { if (!status) return { stopReason: "stop" }; switch (status) { @@ -40682,13 +41830,13 @@ var init_openai_responses_shared = __esm({ // node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js var openai_responses_exports = {}; __export(openai_responses_exports, { - stream: () => stream3, - streamSimple: () => streamSimple2 + stream: () => stream4, + streamSimple: () => streamSimple3 }); function isChatGPTSignIn(model2, apiKey) { return model2.provider === "openai" && model2.baseUrl === "https://api.openai.com/v1" && apiKey !== void 0 && !apiKey.startsWith("sk-"); } -function hasHeader2(headers, name) { +function hasHeader3(headers, name) { if (!headers) return false; const expected = name.toLowerCase(); @@ -40698,17 +41846,17 @@ function hasHeader2(headers, name) { } return false; } -function getClientApiKey(provider2, apiKey, headers) { +function getClientApiKey2(provider2, apiKey, headers) { if (apiKey) return apiKey; - if (hasHeader2(headers, "authorization") || hasHeader2(headers, "cf-aig-authorization")) + if (hasHeader3(headers, "authorization") || hasHeader3(headers, "cf-aig-authorization")) return "unused"; throw new Error(`No API key for provider: ${provider2}`); } function detectSessionAffinityFormat(model2) { return model2.provider === "openrouter" || model2.baseUrl.includes("openrouter.ai") ? "openrouter" : "openai"; } -function resolveCacheRetention2(cacheRetention, env) { +function resolveCacheRetention3(cacheRetention, env) { if (cacheRetention) { return cacheRetention; } @@ -40717,7 +41865,7 @@ function resolveCacheRetention2(cacheRetention, env) { } return "short"; } -function getCompat(model2) { +function getCompat2(model2) { return { supportsDeveloperRole: model2.compat?.supportsDeveloperRole ?? true, supportsMidConvoSystemMessages: model2.compat?.supportsMidConvoSystemMessages ?? false, @@ -40751,8 +41899,8 @@ function getPromptCacheOptions(compat, cacheRetention) { return { ttl: "30m" }; return void 0; } -function createClient2(model2, context, apiKey, optionsHeaders, identity, fetch2, sessionId) { - const compat = getCompat(model2); +function createClient3(model2, context, apiKey, optionsHeaders, identity, fetch2, sessionId) { + const compat = getCompat2(model2); const headers = { ...getIdentityHeaders(model2, identity), ...model2.headers }; if (model2.provider === "github-copilot") { const hasImages = hasCopilotVisionInput(context.messages); @@ -40783,7 +41931,7 @@ function createClient2(model2, context, apiKey, optionsHeaders, identity, fetch2 defaultHeaders: headers }); } -function buildParams2(model2, context, options, compat, grammarToolInputProperties, configurationUpdateEffort) { +function buildParams3(model2, context, options, compat, grammarToolInputProperties, configurationUpdateEffort) { const transcriptTools = resolveTranscriptTools(context.messages, getResponsesToolSupport(compat)); const messages = convertResponsesMessages(model2, context, OPENAI_TOOL_CALL_PROVIDERS, { grammarToolInputProperties, @@ -40796,7 +41944,7 @@ function buildParams2(model2, context, options, compat, grammarToolInputProperti }, configurationUpdateEffort }); - const cacheRetention = resolveCacheRetention2(options?.cacheRetention, options?.env); + const cacheRetention = resolveCacheRetention3(options?.cacheRetention, options?.env); const omitUnsupportedFields = isChatGPTSignIn(model2, options?.apiKey); const params = { model: model2.id, @@ -40870,7 +42018,7 @@ function applyServiceTierPricing(usage, serviceTier, model2) { usage.cost.cacheWrite *= multiplier; usage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead + usage.cost.cacheWrite; } -var OPENAI_TOOL_CALL_PROVIDERS, OPENAI_RESPONSES_MIN_OUTPUT_TOKENS, CHATGPT_USAGE_URL, CHATGPT_WORKSPACE_LIMIT_HINT, CONFIGURATION_UPDATE_REQUEST_EFFORT, stream3, streamSimple2; +var OPENAI_TOOL_CALL_PROVIDERS, OPENAI_RESPONSES_MIN_OUTPUT_TOKENS, CHATGPT_USAGE_URL, CHATGPT_WORKSPACE_LIMIT_HINT, CONFIGURATION_UPDATE_REQUEST_EFFORT, stream4, streamSimple3; var init_openai_responses = __esm({ "node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js"() { init_openai(); @@ -40892,11 +42040,11 @@ var init_openai_responses = __esm({ CHATGPT_USAGE_URL = "https://chatgpt.com/settings/usage"; CHATGPT_WORKSPACE_LIMIT_HINT = "You've reached your ChatGPT workspace's usage limit. Ask your workspace admin to increase it at admin.openai.com \u2192 Workspace \u2192 Usage limits."; CONFIGURATION_UPDATE_REQUEST_EFFORT = "medium"; - stream3 = (model2, context, options) => { + stream4 = (model2, context, options) => { const stream5 = new AssistantMessageEventStream(); - const normalizedContext = resolveTranscript(context, getCompat(model2).supportsMidConvoSystemMessages); + const normalizedContext = resolveTranscript(context, getCompat2(model2).supportsMidConvoSystemMessages); (async () => { - const compat = getCompat(model2); + const compat = getCompat2(model2); const configurationUpdateEffort = getConfigurationUpdateEffort(model2, options, compat); const output = { role: "assistant", @@ -40917,12 +42065,12 @@ var init_openai_responses = __esm({ timestamp: Date.now() }; try { - const apiKey = getClientApiKey(model2.provider, options?.apiKey, options?.headers); - const cacheRetention = resolveCacheRetention2(options?.cacheRetention, options?.env); + const apiKey = getClientApiKey2(model2.provider, options?.apiKey, options?.headers); + const cacheRetention = resolveCacheRetention3(options?.cacheRetention, options?.env); const cacheSessionId = cacheRetention === "none" ? void 0 : options?.sessionId; const grammarToolInputProperties = createGrammarToolInputProperties(getDeclaredTools(normalizedContext.messages), compat.supportsOpenAIGrammarTools); - const client = createClient2(model2, normalizedContext, apiKey, options?.headers, options?.identity, options?.fetch, cacheSessionId); - let params = buildParams2(model2, normalizedContext, options, compat, grammarToolInputProperties, configurationUpdateEffort); + const client = createClient3(model2, normalizedContext, apiKey, options?.headers, options?.identity, options?.fetch, cacheSessionId); + let params = buildParams3(model2, normalizedContext, options, compat, grammarToolInputProperties, configurationUpdateEffort); const nextParams = await options?.onPayload?.(params, model2); if (nextParams !== void 0) { params = nextParams; @@ -40974,1153 +42122,6 @@ ${CHATGPT_WORKSPACE_LIMIT_HINT}`; })(); return stream5; }; - streamSimple2 = (model2, context, options) => { - getClientApiKey(model2.provider, options?.apiKey, options?.headers); - const base = { - ...buildBaseOptions(model2, context, options, options?.apiKey), - toolChoice: options?.toolChoice - }; - const clampedReasoning = options?.reasoning ? clampThinkingLevel(model2, options.reasoning) : void 0; - const reasoningEffort = clampedReasoning === "off" ? void 0 : clampedReasoning; - return stream3(model2, context, { - ...base, - reasoningEffort - }); - }; - } -}); - -// node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js -var openai_completions_exports = {}; -__export(openai_completions_exports, { - convertMessages: () => convertMessages2, - stream: () => stream4, - streamSimple: () => streamSimple3 -}); -function hasHeader3(headers, name) { - if (!headers) - return false; - const expected = name.toLowerCase(); - for (const [key, value2] of Object.entries(headers)) { - if (key.toLowerCase() === expected && value2 !== null && value2.trim().length > 0) - return true; - } - return false; -} -function getClientApiKey2(provider2, apiKey, headers) { - if (apiKey) - return apiKey; - if (hasHeader3(headers, "authorization") || hasHeader3(headers, "cf-aig-authorization")) - return "unused"; - throw new Error(`No API key for provider: ${provider2}`); -} -function hasToolHistory(messages) { - for (const msg of messages) { - if (msg.role === "toolResult") { - return true; - } - if (msg.role === "assistant") { - if (msg.content.some((block) => block.type === "toolCall")) { - return true; - } - } - } - return false; -} -function isTextContentBlock(block) { - return block.type === "text"; -} -function isThinkingContentBlock(block) { - return block.type === "thinking"; -} -function isToolCallBlock(block) { - return block.type === "toolCall"; -} -function isImageContentBlock(block) { - return block.type === "image"; -} -function isReasoningDetailObject(detail) { - return typeof detail === "object" && detail !== null && !Array.isArray(detail); -} -function hasValidCommonReasoningDetailFields(candidate) { - return (candidate.id === void 0 || candidate.id === null || typeof candidate.id === "string") && (candidate.format === void 0 || typeof candidate.format === "string") && (candidate.index === void 0 || typeof candidate.index === "number"); -} -function isOpenAIReasoningDetail(detail) { - if (!isReasoningDetailObject(detail) || !hasValidCommonReasoningDetailFields(detail)) { - return false; - } - switch (detail.type) { - case "reasoning.summary": - return typeof detail.summary === "string"; - case "reasoning.encrypted": - return typeof detail.data === "string"; - case "reasoning.text": - return typeof detail.text === "string" && (detail.signature === void 0 || detail.signature === null || typeof detail.signature === "string"); - default: - return false; - } -} -function parseOpenAIReasoningDetails(signature) { - if (!signature) - return void 0; - try { - const parsed = JSON.parse(signature); - return Array.isArray(parsed) && parsed.length > 0 && parsed.every(isOpenAIReasoningDetail) ? parsed : void 0; - } catch { - return void 0; - } -} -function parseLegacyEncryptedReasoningDetail(signature) { - if (!signature) - return void 0; - try { - const parsed = JSON.parse(signature); - return isOpenAIReasoningDetail(parsed) && parsed.type === "reasoning.encrypted" && typeof parsed.id === "string" && parsed.id.length > 0 && parsed.data.length > 0 ? parsed : void 0; - } catch { - return void 0; - } -} -function fillMissingCommonReasoningDetailFields(target, source) { - target.id ??= source.id; - target.format ||= source.format; - target.index ??= source.index; -} -function appendOpenAIReasoningDetail(details, detail) { - const lastDetail = details[details.length - 1]; - if (detail.type === "reasoning.text" && lastDetail?.type === "reasoning.text") { - lastDetail.text += detail.text; - lastDetail.signature ||= detail.signature; - fillMissingCommonReasoningDetailFields(lastDetail, detail); - return; - } - if (detail.type === "reasoning.summary" && lastDetail?.type === "reasoning.summary") { - lastDetail.summary += detail.summary; - fillMissingCommonReasoningDetailFields(lastDetail, detail); - return; - } - details.push({ ...detail }); -} -function isOpenAICompletionsReasoningField(field) { - return OPENAI_COMPLETIONS_REASONING_FIELDS.includes(field); -} -function resolveCacheRetention3(cacheRetention, env) { - if (cacheRetention) { - return cacheRetention; - } - if (getProviderEnvValue("PI_CACHE_RETENTION", env) === "long") { - return "long"; - } - return "short"; -} -function createClient3(model2, context, apiKey, optionsHeaders, identity, fetch2, sessionId, compat = getCompat2(model2)) { - const headers = { ...getIdentityHeaders(model2, identity), ...model2.headers }; - if (model2.provider === "github-copilot") { - const hasImages = hasCopilotVisionInput(context.messages); - const copilotHeaders = buildCopilotDynamicHeaders({ - messages: context.messages, - hasImages - }); - Object.assign(headers, copilotHeaders); - } - if (sessionId && compat.sendSessionAffinityHeaders) { - if (compat.sessionAffinityFormat === "openrouter") { - headers["x-session-id"] = sessionId; - } else { - if (compat.sessionAffinityFormat === "openai") { - headers.session_id = sessionId; - } - headers["x-client-request-id"] = sessionId; - headers["x-session-affinity"] = sessionId; - } - } - if (optionsHeaders) { - Object.assign(headers, optionsHeaders); - } - return new OpenAI({ - apiKey, - baseURL: model2.baseUrl, - dangerouslyAllowBrowser: true, - fetch: fetch2, - defaultHeaders: headers - }); -} -function buildParams3(model2, context, options, compat = getCompat2(model2), cacheRetention = resolveCacheRetention3(options?.cacheRetention, options?.env), grammarToolInputProperties = createGrammarToolInputProperties(getDeclaredTools(context.messages), compat.supportsOpenAIGrammarTools)) { - const transcriptTools = resolveTranscriptTools(context.messages, compat.supportsMidConvoSystemMessages === true && compat.supportsMidConvoToolAdditions === true ? "additions" : "none"); - const messages = convertMessages2(model2, context, compat, { - grammarToolInputProperties - }); - const cacheControl = getCompatCacheControl(compat, cacheRetention); - const params = { - model: model2.id, - messages, - stream: true, - prompt_cache_key: model2.baseUrl.includes("api.openai.com") && cacheRetention !== "none" || cacheRetention === "long" && compat.supportsLongCacheRetention ? clampOpenAIPromptCacheKey(options?.sessionId) : void 0, - prompt_cache_retention: cacheRetention === "long" && compat.supportsLongCacheRetention ? "24h" : void 0 - }; - if (compat.supportsUsageInStreaming !== false) { - params.stream_options = { include_usage: true }; - } - if (compat.supportsStore) { - params.store = false; - } - if (options?.maxTokens) { - if (compat.maxTokensField === "max_tokens") { - params.max_tokens = options.maxTokens; - } else { - params.max_completion_tokens = options.maxTokens; - } - } - if (options?.temperature !== void 0) { - params.temperature = options.temperature; - } - if (transcriptTools.requestTools.length > 0) { - params.tools = convertTools2(transcriptTools.requestTools, compat); - if (compat.zaiToolStream) { - params.tool_stream = true; - } - } else if (hasToolHistory(context.messages)) { - params.tools = []; - } - if (cacheControl) { - applyAnthropicCacheControl(messages, params.tools, cacheControl); - } - if (options?.toolChoice) { - params.tool_choice = options.toolChoice; - } - if (compat.vllmPriority !== void 0) { - params.priority = compat.vllmPriority; - } - const thinkingTokenBudgetField = resolveThinkingTokenBudgetField(compat); - const thinkingBudget = resolveClampedThinkingBudget(model2, options, params); - if (compat.thinkingFormat === "zai" && model2.reasoning) { - const zaiParams = params; - zaiParams.thinking = options?.reasoningEffort ? { type: "enabled", clear_thinking: false } : { type: "disabled" }; - if (options?.reasoningEffort && compat.supportsReasoningEffort) { - const mappedEffort = model2.thinkingLevelMap?.[options.reasoningEffort]; - const effort = mappedEffort === void 0 ? options.reasoningEffort : mappedEffort; - if (typeof effort === "string") { - zaiParams.reasoning_effort = effort; - } - } - } else if (compat.thinkingFormat === "qwen" && model2.reasoning) { - params.enable_thinking = !!options?.reasoningEffort; - if (options?.reasoningEffort && compat.supportsReasoningEffort) { - const effort = model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort; - if (typeof effort === "string") { - params.reasoning_effort = effort; - } - } - } else if (compat.thinkingFormat === "qwen-chat-template" && model2.reasoning) { - params.chat_template_kwargs = { - enable_thinking: !!options?.reasoningEffort, - preserve_thinking: true - }; - } else if (compat.thinkingFormat === "chat-template" && model2.reasoning) { - const chatTemplateKwargs = buildChatTemplateValues(model2, options, compat.chatTemplateKwargs, thinkingBudget); - if (chatTemplateKwargs) { - params.chat_template_kwargs = chatTemplateKwargs; - } - } else if (compat.thinkingFormat === "baseten" && model2.reasoning) { - const basetenParams = params; - const chatTemplateArgs = buildChatTemplateValues(model2, options, compat.chatTemplateArgs, thinkingBudget); - if (chatTemplateArgs) { - basetenParams.chat_template_args = chatTemplateArgs; - } - if (compat.supportsReasoningEffort) { - const requestedEffort = options?.reasoningEffort; - const mappedEffort = requestedEffort ? model2.thinkingLevelMap?.[requestedEffort] : model2.thinkingLevelMap?.off; - const effort = mappedEffort === void 0 ? requestedEffort : mappedEffort; - if (typeof effort === "string") { - basetenParams.reasoning_effort = effort; - } - } - } else if (compat.thinkingFormat === "deepseek" && model2.reasoning) { - if (options?.reasoningEffort) { - params.thinking = { type: "enabled" }; - } else if (model2.thinkingLevelMap?.off !== null) { - params.thinking = { type: "disabled" }; - } - if (options?.reasoningEffort && compat.supportsReasoningEffort) { - params.reasoning_effort = model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort; - } - } else if (compat.thinkingFormat === "openrouter" && model2.reasoning) { - const openRouterParams = params; - if (options?.reasoningEffort) { - openRouterParams.reasoning = { - effort: model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort - }; - } else if (model2.thinkingLevelMap?.off !== null) { - openRouterParams.reasoning = { effort: model2.thinkingLevelMap?.off ?? "none" }; - } - } else if (compat.thinkingFormat === "ant-ling" && model2.reasoning && options?.reasoningEffort) { - const effort = model2.thinkingLevelMap?.[options.reasoningEffort]; - if (typeof effort === "string") { - params.reasoning = { effort }; - } - } else if (compat.thinkingFormat === "together" && model2.reasoning) { - const togetherParams = params; - togetherParams.reasoning = { enabled: !!options?.reasoningEffort }; - if (options?.reasoningEffort && compat.supportsReasoningEffort) { - togetherParams.reasoning_effort = model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort; - } - } else if (compat.thinkingFormat === "string-thinking" && model2.reasoning) { - const stringThinkingParams = params; - if (options?.reasoningEffort) { - stringThinkingParams.thinking = model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort; - } else if (model2.thinkingLevelMap?.off !== null) { - stringThinkingParams.thinking = model2.thinkingLevelMap?.off ?? "none"; - } - } else if (options?.reasoningEffort && model2.reasoning && compat.supportsReasoningEffort) { - params.reasoning_effort = model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort; - } else if (!options?.reasoningEffort && model2.reasoning && compat.supportsReasoningEffort) { - const offValue = model2.thinkingLevelMap?.off; - if (typeof offValue === "string") { - params.reasoning_effort = offValue; - } - } - if (thinkingTokenBudgetField && thinkingBudget !== void 0) { - Object.assign(params, { [thinkingTokenBudgetField]: thinkingBudget }); - } - if (model2.compat?.openRouterRouting) { - params.provider = model2.compat.openRouterRouting; - } - if (model2.compat?.vercelGatewayRouting) { - const routing = model2.compat.vercelGatewayRouting; - if (routing.only || routing.order) { - const gatewayOptions = {}; - if (routing.only) - gatewayOptions.only = routing.only; - if (routing.order) - gatewayOptions.order = routing.order; - params.providerOptions = { gateway: gatewayOptions }; - } - } - const samplingParams = resolveSamplingParams(model2, options?.reasoningEffort ?? "off", options?.samplingParams); - if (samplingParams) { - Object.assign(params, samplingParams); - } - return params; -} -function resolveThinkingTokenBudgetField(compat) { - if (compat.thinkingTokenBudgetField) - return compat.thinkingTokenBudgetField; - if (compat.supportsThinkingTokenBudget) - return "thinking_token_budget"; - return void 0; -} -function resolveClampedThinkingBudget(model2, options, params) { - if (!options?.reasoningEffort || !model2.reasoning) - return void 0; - const ceiling = params.max_tokens ?? params.max_completion_tokens ?? model2.maxTokens; - const budget = clampThinkingBudgetToAnswerRoom(thinkingBudgetForLevel(options.reasoningEffort, options.thinkingBudgets), ceiling); - return budget > 0 ? budget : void 0; -} -function buildChatTemplateValues(model2, options, values, thinkingBudget) { - const resolvedValues = {}; - for (const [key, value2] of Object.entries(values)) { - const resolved = resolveChatTemplateKwargValue(model2, options, value2, thinkingBudget); - if (resolved !== void 0) { - resolvedValues[key] = resolved; - } - } - return Object.keys(resolvedValues).length > 0 ? resolvedValues : void 0; -} -function resolveChatTemplateKwargValue(model2, options, value2, thinkingBudget) { - if (typeof value2 !== "object" || value2 === null) { - return value2; - } - const reasoningEffort = options?.reasoningEffort; - if (!reasoningEffort && value2.omitWhenOff) { - return void 0; - } - if (value2.$var === "thinking.enabled") { - return !!reasoningEffort; - } - if (value2.$var === "thinking.budget") { - return thinkingBudget; - } - const mappedValue = reasoningEffort ? model2.thinkingLevelMap?.[reasoningEffort] : model2.thinkingLevelMap?.off; - return mappedValue === void 0 ? reasoningEffort : typeof mappedValue === "string" ? mappedValue : void 0; -} -function getCompatCacheControl(compat, cacheRetention) { - if (compat.cacheControlFormat !== "anthropic" || cacheRetention === "none") { - return void 0; - } - const ttl = cacheRetention === "long" && compat.supportsLongCacheRetention ? "1h" : void 0; - return { type: "ephemeral", ...ttl ? { ttl } : {} }; -} -function applyAnthropicCacheControl(messages, tools, cacheControl) { - addCacheControlToSystemPrompt(messages, cacheControl); - addCacheControlToLastTool(tools, cacheControl); - addCacheControlToLastConversationMessage(messages, cacheControl); -} -function addCacheControlToSystemPrompt(messages, cacheControl) { - for (const message of messages) { - if (message.role === "system" || message.role === "developer") { - addCacheControlToInstructionMessage(message, cacheControl); - return; - } - } -} -function addCacheControlToLastConversationMessage(messages, cacheControl) { - for (let i = messages.length - 1; i >= 0; i--) { - const message = messages[i]; - if (message.role === "user" || message.role === "assistant" || message.role === "tool") { - if (addCacheControlToMessage(message, cacheControl)) { - return; - } - } - } -} -function addCacheControlToLastTool(tools, cacheControl) { - if (!tools || tools.length === 0) { - return; - } - const lastTool = tools[tools.length - 1]; - lastTool.cache_control = cacheControl; -} -function addCacheControlToInstructionMessage(message, cacheControl) { - return addCacheControlToTextContent(message, cacheControl); -} -function addCacheControlToMessage(message, cacheControl) { - if (message.role === "user" || message.role === "assistant" || message.role === "tool") { - return addCacheControlToTextContent(message, cacheControl); - } - return false; -} -function addCacheControlToTextContent(message, cacheControl) { - const content = message.content; - if (typeof content === "string") { - if (content.length === 0) { - return false; - } - message.content = [ - { - type: "text", - text: content, - cache_control: cacheControl - } - ]; - return true; - } - if (!Array.isArray(content)) { - return false; - } - for (let i = content.length - 1; i >= 0; i--) { - const part = content[i]; - if (part?.type === "text") { - const textPart = part; - textPart.cache_control = cacheControl; - return true; - } - } - return false; -} -function convertMessages2(model2, context, compat, options) { - const normalizedContext = resolveTranscript(context, compat.supportsMidConvoSystemMessages); - const params = []; - const normalizeToolCallId2 = (id) => { - if (id.includes("|")) { - const separatorIndex = id.indexOf("|"); - const callId = id.slice(0, separatorIndex).replace(/[^a-zA-Z0-9_-]/g, "_"); - const itemId = id.slice(separatorIndex + 1).replace(/[^a-zA-Z0-9_-]/g, "_"); - const combinedId = itemId.length > 0 ? `${callId}_${itemId}` : callId; - if (combinedId.length <= 40) { - return combinedId; - } - const hash = shortHash(id).slice(0, 8); - const prefix = callId.slice(0, Math.max(1, 40 - hash.length - 1)); - return `${prefix}_${hash}`; - } - if (model2.provider === "openai") - return id.length > 40 ? id.slice(0, 40) : id; - return id; - }; - const transformedMessages = transformMessages(normalizedContext.messages, model2, (id) => normalizeToolCallId2(id)); - const transcriptTools = resolveTranscriptTools(normalizedContext.messages, compat.supportsMidConvoSystemMessages === true && compat.supportsMidConvoToolAdditions === true ? "additions" : "none"); - const instructionRole = model2.reasoning && compat.supportsDeveloperRole ? "developer" : "system"; - let lastRole = null; - let systemIndex = 0; - for (let i = 0; i < transformedMessages.length; i++) { - const msg = transformedMessages[i]; - if (compat.requiresAssistantAfterToolResult && lastRole === "toolResult" && msg.role === "user") { - params.push({ - role: "assistant", - content: "I have processed the tool results." - }); - } - if (msg.role === "system") { - const addedTools = systemIndex++ >= transcriptTools.foldedSystemMessages ? msg.toolsAdded ?? [] : []; - if (addedTools.length > 0) { - const kimiToolMessage = { - role: "system", - tools: convertTools2(addedTools, compat) - }; - params.push(kimiToolMessage); - } - const text2 = i === 0 ? getSystemMessageText(msg) : renderSystemMessageUpdate(msg); - if (text2.length > 0) { - params.push({ role: instructionRole, content: sanitizeSurrogates(text2) }); - } - } else if (msg.role === "user") { - if (typeof msg.content === "string") { - params.push({ - role: "user", - content: sanitizeSurrogates(msg.content) - }); - } else { - const content = msg.content.filter((item) => item.type !== "text" || item.text.length > 0).map((item) => { - if (item.type === "text") { - return { - type: "text", - text: sanitizeSurrogates(item.text) - }; - } else { - return { - type: "image_url", - image_url: { - url: `data:${item.mimeType};base64,${item.data}` - } - }; - } - }); - if (content.length === 0) - continue; - params.push({ - role: "user", - content - }); - } - } else if (msg.role === "assistant") { - const assistantMsg = { - role: "assistant", - content: compat.requiresAssistantAfterToolResult ? "" : null - }; - const assistantTextParts = msg.content.filter(isTextContentBlock).filter((block) => block.text.trim().length > 0).map((block) => ({ - type: "text", - text: sanitizeSurrogates(block.text) - })); - const assistantText = assistantTextParts.map((part) => part.text).join(""); - const thinkingBlocks = msg.content.filter(isThinkingContentBlock); - const toolCalls = msg.content.filter(isToolCallBlock); - const signedReasoningDetails = thinkingBlocks.map((block) => parseOpenAIReasoningDetails(block.thinkingSignature)).find((details) => details !== void 0); - const legacyReasoningDetails = toolCalls.map((toolCall) => parseLegacyEncryptedReasoningDetail(toolCall.thoughtSignature)).filter((detail) => detail !== void 0); - const preservedReasoningDetails = signedReasoningDetails ?? (legacyReasoningDetails.length > 0 ? legacyReasoningDetails : void 0); - const nonEmptyThinkingBlocks = thinkingBlocks.filter((block) => block.thinking.trim().length > 0); - if (nonEmptyThinkingBlocks.length > 0) { - if (compat.requiresThinkingAsText) { - const thinkingText = nonEmptyThinkingBlocks.map((block) => sanitizeSurrogates(block.thinking)).join("\n\n"); - assistantMsg.content = [{ type: "text", text: thinkingText }, ...assistantTextParts]; - } else { - if (assistantText.length > 0) { - assistantMsg.content = assistantText; - } - if (!preservedReasoningDetails) { - let signature = nonEmptyThinkingBlocks[0].thinkingSignature; - if (model2.provider === "opencode-go" && signature === "reasoning") { - signature = "reasoning_content"; - } - if (signature && isOpenAICompletionsReasoningField(signature)) { - assistantMsg[signature] = nonEmptyThinkingBlocks.map((block) => block.thinking).join("\n"); - } - } - } - } else if (assistantText.length > 0) { - assistantMsg.content = assistantText; - } - if (toolCalls.length > 0) { - assistantMsg.tool_calls = toolCalls.map((tc) => { - const customInputProperty = options?.grammarToolInputProperties?.get(tc.name); - if (customInputProperty !== void 0) { - return { - id: tc.id, - type: "custom", - custom: { - name: tc.name, - input: sanitizeSurrogates(getGrammarToolInput(tc.name, tc.arguments, customInputProperty)) - } - }; - } - return { - id: tc.id, - type: "function", - function: { - name: tc.name, - arguments: JSON.stringify(tc.arguments) - } - }; - }); - } - if (preservedReasoningDetails) { - assistantMsg.reasoning_details = preservedReasoningDetails; - } - if (compat.requiresReasoningContentOnAssistantMessages && model2.reasoning && assistantMsg.reasoning_content === void 0) { - assistantMsg.reasoning_content = ""; - } - const content = assistantMsg.content; - const hasContent = content !== null && content !== void 0 && (typeof content === "string" ? content.length > 0 : content.length > 0); - if (!hasContent && !assistantMsg.tool_calls) { - continue; - } - params.push(assistantMsg); - } else if (msg.role === "toolResult") { - const imageBlocks = []; - let j = i; - for (; j < transformedMessages.length && transformedMessages[j].role === "toolResult"; j++) { - const toolMsg = transformedMessages[j]; - const textResult = toolMsg.content.filter(isTextContentBlock).map((block) => block.text).join("\n"); - const hasImages = toolMsg.content.some((c) => c.type === "image"); - const hasText = textResult.trim().length > 0; - const toolResultText = hasText ? textResult : hasImages ? "(see attached image)" : "(no tool output)"; - const toolResultMsg = { - role: "tool", - content: sanitizeSurrogates(toolResultText), - tool_call_id: toolMsg.toolCallId - }; - if (compat.requiresToolResultName && toolMsg.toolName) { - toolResultMsg.name = toolMsg.toolName; - } - params.push(toolResultMsg); - if (hasImages && model2.input.includes("image")) { - for (const block of toolMsg.content) { - if (isImageContentBlock(block)) { - imageBlocks.push({ - type: "image_url", - image_url: { - url: `data:${block.mimeType};base64,${block.data}` - } - }); - } - } - } - } - i = j - 1; - if (imageBlocks.length > 0) { - if (compat.requiresAssistantAfterToolResult) { - params.push({ - role: "assistant", - content: "I have processed the tool results." - }); - } - params.push({ - role: "user", - content: [ - { - type: "text", - text: "Attached image(s) from tool result:" - }, - ...imageBlocks - ] - }); - lastRole = "user"; - } else { - lastRole = "toolResult"; - } - continue; - } - lastRole = msg.role; - } - return params; -} -function convertTools2(tools, compat) { - return tools.map((tool) => { - const grammar = resolveGrammarConstrainedSampling(tool, compat.supportsOpenAIGrammarTools); - if (grammar) { - return { - type: "custom", - custom: { - name: tool.name, - description: tool.description, - format: { - type: "grammar", - grammar: { - syntax: grammar.format, - definition: grammar.definition - } - } - } - }; - } - const strict = resolveJsonSchemaStrictSampling(tool, compat.supportsStrictMode !== false); - return { - type: "function", - function: { - name: tool.name, - description: tool.description, - parameters: getJsonSchemaToolParameters(tool, strict), - // Only include strict if provider supports it. Some reject unknown fields. - ...compat.supportsStrictMode !== false && { strict: strict ?? false } - } - }; - }); -} -function parseChunkUsage(rawUsage, model2) { - const promptTokens = rawUsage.prompt_tokens || 0; - const cacheReadTokens = rawUsage.prompt_tokens_details?.cached_tokens ?? rawUsage.prompt_cache_hit_tokens ?? rawUsage.cached_tokens ?? 0; - const cacheWriteTokens = rawUsage.prompt_tokens_details?.cache_write_tokens || 0; - const input = Math.max(0, promptTokens - cacheReadTokens - cacheWriteTokens); - const outputTokens = rawUsage.completion_tokens || 0; - const usage = { - input, - output: outputTokens, - cacheRead: cacheReadTokens, - cacheWrite: cacheWriteTokens, - reasoning: rawUsage.completion_tokens_details?.reasoning_tokens || 0, - totalTokens: input + outputTokens + cacheReadTokens + cacheWriteTokens, - cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 } - }; - calculateCost(model2, usage); - if (isOpenRouterModel(model2)) { - applyOpenRouterReportedCost(usage, rawUsage); - } - return usage; -} -function mapStopReason3(reason) { - if (reason === null) - return { stopReason: "stop" }; - switch (reason) { - case "stop": - case "end": - return { stopReason: "stop" }; - case "length": - return { stopReason: "length" }; - case "function_call": - case "tool_calls": - return { stopReason: "toolUse" }; - case "content_filter": - return { stopReason: "error", errorMessage: "Provider finish_reason: content_filter" }; - case "network_error": - return { stopReason: "error", errorMessage: "Provider finish_reason: network_error" }; - default: - return { - stopReason: "error", - errorMessage: `Provider finish_reason: ${reason}` - }; - } -} -function detectCompat(model2) { - const provider2 = model2.provider; - const baseUrl = model2.baseUrl; - const isZai = provider2 === "zai" || provider2 === "zai-coding-cn" || baseUrl.includes("api.z.ai") || baseUrl.includes("open.bigmodel.cn"); - const isTogether = provider2 === "together" || baseUrl.includes("api.together.ai") || baseUrl.includes("api.together.xyz"); - const isMoonshot = provider2 === "moonshotai" || provider2 === "moonshotai-cn" || baseUrl.includes("api.moonshot."); - const isOpenRouter2 = provider2 === "openrouter" || baseUrl.includes("openrouter.ai"); - const isCloudflareWorkersAI = provider2 === "cloudflare-workers-ai" || baseUrl.includes("api.cloudflare.com"); - const isCloudflareAiGateway = provider2 === "cloudflare-ai-gateway" || baseUrl.includes("gateway.ai.cloudflare.com"); - const isNvidia = provider2 === "nvidia" || baseUrl.includes("integrate.api.nvidia.com"); - const isAntLing = provider2 === "ant-ling" || baseUrl.includes("api.ant-ling.com"); - const isCerebras = provider2 === "cerebras" || baseUrl.includes("cerebras.ai"); - const isDeepSeek = provider2 === "deepseek" || baseUrl.toLowerCase().includes("deepseek.com"); - const isNonStandard = isNvidia || isCerebras || provider2 === "xai" || baseUrl.includes("api.x.ai") || isTogether || baseUrl.includes("chutes.ai") || isDeepSeek || isZai || isMoonshot || provider2 === "opencode" || baseUrl.includes("opencode.ai") || isCloudflareWorkersAI || isCloudflareAiGateway || isAntLing; - const useMaxTokens = baseUrl.includes("chutes.ai") || isDeepSeek || isMoonshot || isCloudflareAiGateway || isTogether || isNvidia || isAntLing || isZai; - const isGrok = provider2 === "xai" || baseUrl.includes("api.x.ai"); - const isOpenRouterDeveloperRoleModel = isOpenRouter2 && (model2.id.startsWith("anthropic/") || model2.id.startsWith("openai/")); - const cacheControlFormat = provider2 === "openrouter" && model2.id.startsWith("anthropic/") ? "anthropic" : void 0; - return { - supportsStore: !isNonStandard, - supportsDeveloperRole: isOpenRouterDeveloperRoleModel || !isNonStandard && !isOpenRouter2, - supportsReasoningEffort: !isGrok && !isZai && !isMoonshot && !isTogether && !isCloudflareAiGateway && !isNvidia && !isAntLing, - supportsUsageInStreaming: true, - supportsFinishReason: true, - maxTokensField: useMaxTokens ? "max_tokens" : "max_completion_tokens", - requiresToolResultName: false, - requiresAssistantAfterToolResult: false, - requiresThinkingAsText: false, - requiresReasoningContentOnAssistantMessages: isDeepSeek, - thinkingFormat: isDeepSeek ? "deepseek" : isZai ? "zai" : isTogether ? "together" : isAntLing ? "ant-ling" : isOpenRouter2 ? "openrouter" : "openai", - openRouterRouting: {}, - vercelGatewayRouting: {}, - chatTemplateKwargs: {}, - chatTemplateArgs: {}, - zaiToolStream: false, - supportsThinkingTokenBudget: false, - thinkingTokenBudgetField: void 0, - // OpenAI compatibility alone does not imply strict JSON-schema tool support. - supportsStrictMode: false, - supportsOpenAIGrammarTools: false, - supportsMidConvoSystemMessages: false, - supportsMidConvoToolAdditions: false, - cacheControlFormat, - sendSessionAffinityHeaders: isOpenRouter2, - sessionAffinityFormat: isOpenRouter2 ? "openrouter" : "openai", - supportsLongCacheRetention: !(isTogether || isCloudflareWorkersAI || isCloudflareAiGateway || isNvidia || isAntLing) - }; -} -function getCompat2(model2) { - const detected = detectCompat(model2); - if (!model2.compat) - return detected; - return { - supportsStore: model2.compat.supportsStore ?? detected.supportsStore, - supportsDeveloperRole: model2.compat.supportsDeveloperRole ?? detected.supportsDeveloperRole, - supportsReasoningEffort: model2.compat.supportsReasoningEffort ?? detected.supportsReasoningEffort, - supportsUsageInStreaming: model2.compat.supportsUsageInStreaming ?? detected.supportsUsageInStreaming, - supportsFinishReason: model2.compat.supportsFinishReason ?? detected.supportsFinishReason, - maxTokensField: model2.compat.maxTokensField ?? detected.maxTokensField, - requiresToolResultName: model2.compat.requiresToolResultName ?? detected.requiresToolResultName, - requiresAssistantAfterToolResult: model2.compat.requiresAssistantAfterToolResult ?? detected.requiresAssistantAfterToolResult, - requiresThinkingAsText: model2.compat.requiresThinkingAsText ?? detected.requiresThinkingAsText, - requiresReasoningContentOnAssistantMessages: model2.compat.requiresReasoningContentOnAssistantMessages ?? detected.requiresReasoningContentOnAssistantMessages, - thinkingFormat: model2.compat.thinkingFormat ?? detected.thinkingFormat, - openRouterRouting: model2.compat.openRouterRouting ?? {}, - vercelGatewayRouting: model2.compat.vercelGatewayRouting ?? detected.vercelGatewayRouting, - chatTemplateKwargs: model2.compat.chatTemplateKwargs ?? detected.chatTemplateKwargs, - chatTemplateArgs: model2.compat.chatTemplateArgs ?? detected.chatTemplateArgs, - zaiToolStream: model2.compat.zaiToolStream ?? detected.zaiToolStream, - supportsThinkingTokenBudget: model2.compat.supportsThinkingTokenBudget ?? detected.supportsThinkingTokenBudget, - thinkingTokenBudgetField: model2.compat.thinkingTokenBudgetField ?? detected.thinkingTokenBudgetField, - supportsStrictMode: model2.compat.supportsStrictMode ?? detected.supportsStrictMode, - supportsOpenAIGrammarTools: model2.compat.supportsOpenAIGrammarTools ?? detected.supportsOpenAIGrammarTools, - supportsMidConvoSystemMessages: model2.compat.supportsMidConvoSystemMessages ?? detected.supportsMidConvoSystemMessages, - supportsMidConvoToolAdditions: model2.compat.supportsMidConvoToolAdditions ?? detected.supportsMidConvoToolAdditions, - cacheControlFormat: model2.compat.cacheControlFormat ?? detected.cacheControlFormat, - sendSessionAffinityHeaders: model2.compat.sendSessionAffinityHeaders ?? detected.sendSessionAffinityHeaders, - sessionAffinityFormat: model2.compat.sessionAffinityFormat ?? detected.sessionAffinityFormat, - supportsLongCacheRetention: model2.compat.supportsLongCacheRetention ?? detected.supportsLongCacheRetention, - vllmPriority: model2.compat.vllmPriority - }; -} -var OPENAI_COMPLETIONS_REASONING_FIELDS, stream4, streamSimple3; -var init_openai_completions = __esm({ - "node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js"() { - init_openai(); - init_models(); - init_error_body(); - init_event_stream(); - init_hash(); - init_headers2(); - init_identity(); - init_openrouter_cost(); - init_provider_env(); - init_provider_retry(); - init_sanitize_unicode(); - init_streaming_json(); - init_text(); - init_transcript(); - init_constrained_sampling(); - init_github_copilot_headers(); - init_openai_prompt_cache(); - init_simple_options(); - init_transform_messages(); - OPENAI_COMPLETIONS_REASONING_FIELDS = ["reasoning", "reasoning_content", "reasoning_text"]; - stream4 = (model2, context, options) => { - const stream5 = new AssistantMessageEventStream(); - const normalizedContext = resolveTranscript(context, getCompat2(model2).supportsMidConvoSystemMessages); - (async () => { - const output = { - role: "assistant", - content: [], - api: model2.api, - provider: model2.provider, - model: model2.id, - usage: { - input: 0, - output: 0, - cacheRead: 0, - cacheWrite: 0, - totalTokens: 0, - cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 } - }, - stopReason: "pending", - timestamp: Date.now() - }; - let streamedReasoningDetails; - const applyStreamedReasoningDetails = (block) => { - if (streamedReasoningDetails !== void 0) { - block.thinkingSignature = JSON.stringify(streamedReasoningDetails); - } - }; - try { - const apiKey = getClientApiKey2(model2.provider, options?.apiKey, options?.headers); - const compat = getCompat2(model2); - const grammarToolInputProperties = createGrammarToolInputProperties(getDeclaredTools(normalizedContext.messages), compat.supportsOpenAIGrammarTools); - const cacheRetention = resolveCacheRetention3(options?.cacheRetention, options?.env); - const cacheSessionId = cacheRetention === "none" ? void 0 : options?.sessionId; - const client = createClient3(model2, normalizedContext, apiKey, options?.headers, options?.identity, options?.fetch, cacheSessionId, compat); - let params = buildParams3(model2, normalizedContext, options, compat, cacheRetention, grammarToolInputProperties); - const nextParams = await options?.onPayload?.(params, model2); - if (nextParams !== void 0) { - params = nextParams; - } - const requestOptions = { - ...options?.signal ? { signal: options.signal } : {}, - ...options?.timeoutMs !== void 0 ? { timeout: options.timeoutMs } : {}, - maxRetries: 0 - }; - const { data: openaiStream, response } = await retryProviderRequest(() => client.chat.completions.create(params, requestOptions).withResponse(), { - maxRetries: options?.maxRetries, - maxRetryDelayMs: options?.maxRetryDelayMs, - signal: options?.signal - }); - await options?.onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model2); - stream5.push({ type: "start", partial: output }); - let textBlock = null; - let thinkingBlock = null; - let hasFinishReason = false; - const toolCallBlocksByIndex = /* @__PURE__ */ new Map(); - const toolCallBlocksById = /* @__PURE__ */ new Map(); - const toolCallStates = /* @__PURE__ */ new Map(); - const blocks = output.content; - const getContentIndex = (block) => blocks.indexOf(block); - const customInput2 = (property) => ({ - kind: "custom", - property, - buffer: { input: "", started: false, closed: false } - }); - const finishBlock = (block) => { - const contentIndex = getContentIndex(block); - if (contentIndex === -1) { - return; - } - if (block.type === "text") { - stream5.push({ - type: "text_end", - contentIndex, - content: block.text, - partial: output - }); - } else if (block.type === "thinking") { - applyStreamedReasoningDetails(block); - stream5.push({ - type: "thinking_end", - contentIndex, - content: block.thinking, - partial: output - }); - } else if (block.type === "toolCall") { - const input = toolCallStates.get(block).input; - toolCallStates.delete(block); - if (input.kind === "custom") { - const delta = closeGrammarToolInputJson(input.buffer, input.property, void 0); - if (delta !== void 0) { - stream5.push({ - type: "toolcall_delta", - contentIndex, - delta, - partial: output - }); - } - } else { - Object.assign(block, input.arguments.finish()); - } - stream5.push({ - type: "toolcall_end", - contentIndex, - toolCall: block, - partial: output - }); - } - }; - const ensureTextBlock = () => { - if (!textBlock) { - textBlock = { type: "text", text: "" }; - blocks.push(textBlock); - stream5.push({ type: "text_start", contentIndex: getContentIndex(textBlock), partial: output }); - } - return textBlock; - }; - const ensureThinkingBlock = (thinkingSignature) => { - if (!thinkingBlock) { - thinkingBlock = { - type: "thinking", - thinking: "", - thinkingSignature - }; - blocks.push(thinkingBlock); - stream5.push({ type: "thinking_start", contentIndex: getContentIndex(thinkingBlock), partial: output }); - } - return thinkingBlock; - }; - const ensureToolCallBlock = (toolCall) => { - const streamIndex = typeof toolCall.index === "number" ? toolCall.index : void 0; - const name = toolCall.function?.name ?? toolCall.custom?.name ?? ""; - let block = streamIndex !== void 0 ? toolCallBlocksByIndex.get(streamIndex) : void 0; - if (!block && toolCall.id) { - block = toolCallBlocksById.get(toolCall.id); - } - if (!block) { - const customInputProperty = toolCall.custom && !toolCall.function ? grammarToolInputProperties.get(name) ?? "input" : void 0; - block = { - type: "toolCall", - id: toolCall.id || "", - name, - arguments: customInputProperty !== void 0 ? { [customInputProperty]: "" } : {} - }; - toolCallStates.set(block, { - streamIndex, - input: customInputProperty !== void 0 ? customInput2(customInputProperty) : { kind: "json", arguments: new ToolCallArgumentsStream() } - }); - if (streamIndex !== void 0) { - toolCallBlocksByIndex.set(streamIndex, block); - } - if (toolCall.id) { - toolCallBlocksById.set(toolCall.id, block); - } - blocks.push(block); - stream5.push({ - type: "toolcall_start", - contentIndex: getContentIndex(block), - partial: output - }); - } - const state2 = toolCallStates.get(block); - if (streamIndex !== void 0 && state2.streamIndex === void 0) { - state2.streamIndex = streamIndex; - toolCallBlocksByIndex.set(streamIndex, block); - } - if (toolCall.id) { - toolCallBlocksById.set(toolCall.id, block); - } - if (!block.name && name) { - block.name = name; - } - if (toolCall.custom && !toolCall.function && state2.input.kind !== "custom") { - const customInputProperty = grammarToolInputProperties.get(block.name) ?? "input"; - block.arguments = { [customInputProperty]: "" }; - state2.input = customInput2(customInputProperty); - } - return { block, state: state2 }; - }; - for await (const chunk of openaiStream) { - await options?.onProviderStreamEvent?.(chunk, model2); - if (!chunk || typeof chunk !== "object") - continue; - output.responseId ||= chunk.id; - if (typeof chunk.model === "string" && chunk.model.length > 0 && chunk.model !== model2.id) { - output.responseModel ||= chunk.model; - } - if (chunk.usage) { - output.usage = parseChunkUsage(chunk.usage, model2); - } - const choice = Array.isArray(chunk.choices) ? chunk.choices[0] : void 0; - if (!choice) - continue; - if (!chunk.usage && choice.usage) { - output.usage = parseChunkUsage(choice.usage, model2); - } - if (choice.finish_reason) { - output.rawStopReason = choice.finish_reason; - const finishReasonResult = mapStopReason3(choice.finish_reason); - output.stopReason = finishReasonResult.stopReason; - if (finishReasonResult.errorMessage) { - output.errorMessage = finishReasonResult.errorMessage; - } - hasFinishReason = true; - } - if (choice.delta) { - const reasoningFields = ["reasoning_content", "reasoning", "reasoning_text"]; - const deltaFields = choice.delta; - let foundReasoningField = null; - for (const field of reasoningFields) { - const value2 = deltaFields[field]; - if (typeof value2 === "string" && value2.length > 0) { - foundReasoningField = field; - break; - } - } - if (foundReasoningField) { - const delta = deltaFields[foundReasoningField]; - if (typeof delta === "string" && delta.length > 0) { - const thinkingSignature = model2.provider === "opencode-go" && foundReasoningField === "reasoning" ? "reasoning_content" : foundReasoningField; - const block = ensureThinkingBlock(thinkingSignature); - block.thinking += delta; - stream5.push({ - type: "thinking_delta", - contentIndex: getContentIndex(block), - delta, - partial: output - }); - } - } - const reasoningDetails = choice.delta.reasoning_details; - if (Array.isArray(reasoningDetails)) { - for (const detail of reasoningDetails) { - if (!isOpenAIReasoningDetail(detail)) - continue; - ensureThinkingBlock(""); - streamedReasoningDetails ??= []; - appendOpenAIReasoningDetail(streamedReasoningDetails, detail); - } - } - if (choice.delta.content !== null && choice.delta.content !== void 0 && choice.delta.content.length > 0) { - const block = ensureTextBlock(); - block.text += choice.delta.content; - stream5.push({ - type: "text_delta", - contentIndex: getContentIndex(block), - delta: choice.delta.content, - partial: output - }); - } - if (choice?.delta?.tool_calls) { - for (const toolCall of choice.delta.tool_calls) { - const { block, state: state2 } = ensureToolCallBlock(toolCall); - if (!block.id && toolCall.id) { - block.id = toolCall.id; - toolCallBlocksById.set(toolCall.id, block); - } - const name = toolCall.function?.name ?? toolCall.custom?.name; - if (!block.name && name) { - block.name = name; - } - let delta = ""; - const input = state2.input; - if (toolCall.function?.arguments && input.kind === "json") { - delta = toolCall.function.arguments; - block.arguments = input.arguments.append(delta); - } else if (toolCall.custom?.input && input.kind === "custom") { - delta = appendGrammarToolInputJsonDelta(input.buffer, input.property, toolCall.custom.input) ?? ""; - block.arguments = { [input.property]: input.buffer.input }; - } - stream5.push({ - type: "toolcall_delta", - contentIndex: getContentIndex(block), - delta, - partial: output - }); - } - } - } - } - for (const block of blocks) { - finishBlock(block); - } - if (options?.signal?.aborted) { - throw new Error("Request was aborted"); - } - if (output.stopReason === "aborted") { - throw new Error("Request was aborted"); - } - if (!hasFinishReason && !compat.supportsFinishReason) { - output.stopReason = output.content.some((block) => block.type === "toolCall") ? "toolUse" : "stop"; - } - if (output.stopReason === "error") { - throw new Error(output.errorMessage || "Provider returned an error stop reason"); - } - if (compat.supportsFinishReason && !hasFinishReason || output.stopReason === "pending") { - throw new Error("Stream ended without finish_reason"); - } - stream5.push({ type: "done", reason: output.stopReason, message: output }); - stream5.end(); - } catch (error) { - for (const block of output.content) { - if (block.type === "thinking") { - applyStreamedReasoningDetails(block); - } - } - output.stopReason = options?.signal?.aborted ? "aborted" : "error"; - output.errorMessage = formatProviderError(normalizeProviderError(error)); - const rawMetadata = error?.error?.metadata?.raw; - if (rawMetadata && !output.errorMessage.includes(String(rawMetadata))) { - output.errorMessage += ` -${rawMetadata}`; - } - stream5.push({ type: "error", reason: output.stopReason, error: output }); - stream5.end(); - } - })(); - return stream5; - }; streamSimple3 = (model2, context, options) => { getClientApiKey2(model2.provider, options?.apiKey, options?.headers); const base = { @@ -42131,13 +42132,79 @@ ${rawMetadata}`; const reasoningEffort = clampedReasoning === "off" ? void 0 : clampedReasoning; return stream4(model2, context, { ...base, - reasoningEffort, - thinkingBudgets: options?.thinkingBudgets + reasoningEffort }); }; } }); +// node_modules/@earendil-works/pi-ai/dist/utils/uuid.js +function uuidv7(timestampMs) { + const requestedTimestamp = timestampMs ?? Date.now(); + if (!Number.isInteger(requestedTimestamp) || requestedTimestamp < 0 || requestedTimestamp > MAX_UUID_V7_TIMESTAMP) { + throw new RangeError(`UUIDv7 timestamp must be an integer between 0 and ${MAX_UUID_V7_TIMESTAMP}`); + } + const effectiveTimestamp = timestampMs === void 0 ? Math.max(requestedTimestamp, lastOrdinaryTimestamp) : timestampMs; + if (timestampMs === void 0) + lastOrdinaryTimestamp = effectiveTimestamp; + const bytes2 = new Uint8Array(16); + globalThis.crypto.getRandomValues(bytes2); + if (sequence2 === void 0) { + sequence2 = BigInt(bytes2[1]) << 32n | BigInt(bytes2[2]) << 24n | BigInt(bytes2[3]) << 16n | BigInt(bytes2[4]) << 8n | BigInt(bytes2[5]); + } else { + if (sequence2 === MAX_SEQUENCE) + throw new RangeError("UUIDv7 generator sequence exhausted"); + sequence2++; + } + const timestamp2 = BigInt(effectiveTimestamp); + for (let index = 5; index >= 0; index--) { + bytes2[index] = Number(timestamp2 >> BigInt((5 - index) * 8)) & 255; + } + bytes2[6] = 112 | Number(sequence2 >> 37n & 0x0fn); + bytes2[7] = Number(sequence2 >> 29n & 0xffn); + bytes2[8] = 128 | Number(sequence2 >> 23n & 0x3fn); + bytes2[9] = Number(sequence2 >> 15n & 0xffn); + bytes2[10] = Number(sequence2 >> 7n & 0xffn); + bytes2[11] = Number((sequence2 & 0x7fn) << 1n) | bytes2[11] & 1; + const hex = Array.from(bytes2, (byte) => byte.toString(16).padStart(2, "0")); + return `${hex.slice(0, 4).join("")}-${hex.slice(4, 6).join("")}-${hex.slice(6, 8).join("")}-${hex.slice(8, 10).join("")}-${hex.slice(10).join("")}`; +} +var MAX_UUID_V7_TIMESTAMP, MAX_SEQUENCE, lastOrdinaryTimestamp, sequence2; +var init_uuid3 = __esm({ + "node_modules/@earendil-works/pi-ai/dist/utils/uuid.js"() { + MAX_UUID_V7_TIMESTAMP = 281474976710655; + MAX_SEQUENCE = (1n << 41n) - 1n; + lastOrdinaryTimestamp = -1; + } +}); + +// node_modules/@earendil-works/pi-ai/dist/session-resources.js +function registerSessionResourceCleanup(cleanup) { + sessionResourceCleanups.add(cleanup); + return () => { + sessionResourceCleanups.delete(cleanup); + }; +} +function cleanupSessionResources(sessionId) { + const errors = []; + for (const cleanup of sessionResourceCleanups) { + try { + cleanup(sessionId); + } catch (error) { + errors.push(error); + } + } + if (errors.length > 0) { + throw new AggregateError(errors, "Failed to cleanup session resources"); + } +} +var sessionResourceCleanups; +var init_session_resources = __esm({ + "node_modules/@earendil-works/pi-ai/dist/session-resources.js"() { + sessionResourceCleanups = /* @__PURE__ */ new Set(); + } +}); + // node_modules/@earendil-works/chord/dist/context/index.js var context_exports = {}; __export(context_exports, { @@ -42254,6 +42321,447 @@ function abortError(signal) { // models.ts init_models(); +// node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +var amazon_bedrock_default = { "bedrock-converse-stream": { "chat:amazon.nova-2-lite-v1:0": { id: "amazon.nova-2-lite-v1:0", name: "Nova 2 Lite", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.33, output: 2.75, cacheRead: 0.0825, cacheWrite: 0.33 }, contextWindow: 1e6, maxTokens: 65535, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:amazon.nova-lite-v1:0": { id: "amazon.nova-lite-v1:0", name: "Nova Lite", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.06, output: 0.24, cacheRead: 0.015, cacheWrite: 0.06 }, contextWindow: 3e5, maxTokens: 1e4, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:amazon.nova-micro-v1:0": { id: "amazon.nova-micro-v1:0", name: "Nova Micro", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.035, output: 0.14, cacheRead: 875e-5, cacheWrite: 0.035 }, contextWindow: 128e3, maxTokens: 1e4, type: "chat" }, "chat:amazon.nova-pro-v1:0": { id: "amazon.nova-pro-v1:0", name: "Nova Pro", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.8, output: 3.2, cacheRead: 0.2, cacheWrite: 0.8 }, contextWindow: 3e5, maxTokens: 1e4, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-fable-5": { id: "anthropic.claude-fable-5", name: "Claude Fable 5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-fable-5-1": { id: "anthropic.claude-fable-5-1", name: "Claude Fable 5.1", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-haiku-4-5-20251001-v1:0": { id: "anthropic.claude-haiku-4-5-20251001-v1:0", name: "Claude Haiku 4.5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-haiku-5-5": { id: "anthropic.claude-haiku-5-5", name: "Claude Haiku 5.5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 1e5, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-opus-4-1-20250805-v1:0": { id: "anthropic.claude-opus-4-1-20250805-v1:0", name: "Claude Opus 4.1", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 15, output: 75, cacheRead: 1.5, cacheWrite: 18.75 }, contextWindow: 2e5, maxTokens: 32e3, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-opus-4-5-20251101-v1:0": { id: "anthropic.claude-opus-4-5-20251101-v1:0", name: "Claude Opus 4.5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-opus-4-6-v1": { id: "anthropic.claude-opus-4-6-v1", name: "Claude Opus 4.6", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-opus-4-7": { id: "anthropic.claude-opus-4-7", name: "Claude Opus 4.7", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-opus-4-8": { id: "anthropic.claude-opus-4-8", name: "Claude Opus 4.8", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-opus-5-5": { id: "anthropic.claude-opus-5-5", name: "Claude Opus 5.5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-sonnet-4-5-20250929-v1:0": { id: "anthropic.claude-sonnet-4-5-20250929-v1:0", name: "Claude Sonnet 4.5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-sonnet-4-6": { id: "anthropic.claude-sonnet-4-6", name: "Claude Sonnet 4.6", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3.3, output: 16.5, cacheRead: 0.33, cacheWrite: 4.125 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-sonnet-5": { id: "anthropic.claude-sonnet-5", name: "Claude Sonnet 5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-sonnet-5-5": { id: "anthropic.claude-sonnet-5-5", name: "Claude Sonnet 5.5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:apac.amazon.nova-lite-v1:0": { id: "apac.amazon.nova-lite-v1:0", name: "Nova Lite (APAC)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.063, output: 0.252, cacheRead: 0.01575, cacheWrite: 0.063 }, contextWindow: 3e5, maxTokens: 1e4, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:apac.amazon.nova-micro-v1:0": { id: "apac.amazon.nova-micro-v1:0", name: "Nova Micro (APAC)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.037, output: 0.148, cacheRead: 925e-5, cacheWrite: 0.037 }, contextWindow: 128e3, maxTokens: 1e4, type: "chat" }, "chat:apac.amazon.nova-pro-v1:0": { id: "apac.amazon.nova-pro-v1:0", name: "Nova Pro (APAC)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.84, output: 3.36, cacheRead: 0.21, cacheWrite: 0.84 }, contextWindow: 3e5, maxTokens: 1e4, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:apac.anthropic.claude-sonnet-4-20250514-v1:0": { id: "apac.anthropic.claude-sonnet-4-20250514-v1:0", name: "Claude Sonnet 4 (APAC)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:au.anthropic.claude-haiku-4-5-20251001-v1:0": { id: "au.anthropic.claude-haiku-4-5-20251001-v1:0", name: "Claude Haiku 4.5 (AU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 1.1, output: 5.5, cacheRead: 0.11, cacheWrite: 1.375 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:au.anthropic.claude-haiku-5-5": { id: "au.anthropic.claude-haiku-5-5", name: "Claude Haiku 5.5 (AU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.11, output: 0.55, cacheRead: 0.011, cacheWrite: 0.1375, tiers: [{ inputTokensAbove: 1e5, input: 0.55, output: 2.75, cacheRead: 0.055, cacheWrite: 0.6875 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:au.anthropic.claude-opus-4-6-v1": { id: "au.anthropic.claude-opus-4-6-v1", name: "AU Anthropic Claude Opus 4.6", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:au.anthropic.claude-opus-4-7": { id: "au.anthropic.claude-opus-4-7", name: "Claude Opus 4.7 (AU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:au.anthropic.claude-opus-4-8": { id: "au.anthropic.claude-opus-4-8", name: "Claude Opus 4.8 (AU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:au.anthropic.claude-opus-5": { id: "au.anthropic.claude-opus-5", name: "Claude Opus 5 (AU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:au.anthropic.claude-opus-5-5": { id: "au.anthropic.claude-opus-5-5", name: "Claude Opus 5.5 (AU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 4.4, output: 22, cacheRead: 0.22, cacheWrite: 5.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:au.anthropic.claude-sonnet-4-5-20250929-v1:0": { id: "au.anthropic.claude-sonnet-4-5-20250929-v1:0", name: "Claude Sonnet 4.5 (AU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3.3, output: 16.5, cacheRead: 0.33, cacheWrite: 4.125 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:au.anthropic.claude-sonnet-4-6": { id: "au.anthropic.claude-sonnet-4-6", name: "AU Anthropic Claude Sonnet 4.6", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3.3, output: 16.5, cacheRead: 0.33, cacheWrite: 4.125 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:au.anthropic.claude-sonnet-5": { id: "au.anthropic.claude-sonnet-5", name: "Claude Sonnet 5 (AU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.22, cacheWrite: 2.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:au.anthropic.claude-sonnet-5-5": { id: "au.anthropic.claude-sonnet-5-5", name: "Claude Sonnet 5.5 (AU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.11, cacheWrite: 2.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:ca.amazon.nova-lite-v1:0": { id: "ca.amazon.nova-lite-v1:0", name: "Nova Lite (CA)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.064, output: 0.256, cacheRead: 0.016, cacheWrite: 0.064 }, contextWindow: 3e5, maxTokens: 1e4, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek.v3-v1:0": { id: "deepseek.v3-v1:0", name: "DeepSeek-V3.1", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.58, output: 1.68, cacheRead: 0, cacheWrite: 0 }, contextWindow: 163840, maxTokens: 81920, compat: { supportsStrictMode: true }, type: "chat" }, "chat:deepseek.v3.2": { id: "deepseek.v3.2", name: "DeepSeek V3.2", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.62, output: 1.85, cacheRead: 0, cacheWrite: 0 }, contextWindow: 163840, maxTokens: 81920, compat: { supportsStrictMode: true }, type: "chat" }, "chat:eu.amazon.nova-2-lite-v1:0": { id: "eu.amazon.nova-2-lite-v1:0", name: "Nova 2 Lite (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.374, output: 3.157, cacheRead: 0.0935, cacheWrite: 0.374 }, contextWindow: 1e6, maxTokens: 65535, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.amazon.nova-lite-v1:0": { id: "eu.amazon.nova-lite-v1:0", name: "Nova Lite (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.069, output: 0.276, cacheRead: 0.01725, cacheWrite: 0.069 }, contextWindow: 3e5, maxTokens: 1e4, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.amazon.nova-micro-v1:0": { id: "eu.amazon.nova-micro-v1:0", name: "Nova Micro (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.04, output: 0.16, cacheRead: 0.01, cacheWrite: 0.04 }, contextWindow: 128e3, maxTokens: 1e4, type: "chat" }, "chat:eu.amazon.nova-pro-v1:0": { id: "eu.amazon.nova-pro-v1:0", name: "Nova Pro (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.92, output: 3.68, cacheRead: 0.23, cacheWrite: 0.92 }, contextWindow: 3e5, maxTokens: 1e4, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-fable-5": { id: "eu.anthropic.claude-fable-5", name: "Claude Fable 5 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 11, output: 55, cacheRead: 1.1, cacheWrite: 13.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-haiku-4-5-20251001-v1:0": { id: "eu.anthropic.claude-haiku-4-5-20251001-v1:0", name: "Claude Haiku 4.5 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 1.1, output: 5.5, cacheRead: 0.11, cacheWrite: 1.375 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-haiku-5-5": { id: "eu.anthropic.claude-haiku-5-5", name: "Claude Haiku 5.5 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.11, output: 0.55, cacheRead: 0.011, cacheWrite: 0.1375, tiers: [{ inputTokensAbove: 1e5, input: 0.55, output: 2.75, cacheRead: 0.055, cacheWrite: 0.6875 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-opus-4-5-20251101-v1:0": { id: "eu.anthropic.claude-opus-4-5-20251101-v1:0", name: "Claude Opus 4.5 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-opus-4-6-v1": { id: "eu.anthropic.claude-opus-4-6-v1", name: "Claude Opus 4.6 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-opus-4-7": { id: "eu.anthropic.claude-opus-4-7", name: "Claude Opus 4.7 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-opus-4-8": { id: "eu.anthropic.claude-opus-4-8", name: "Claude Opus 4.8 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-opus-5": { id: "eu.anthropic.claude-opus-5", name: "Claude Opus 5 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-opus-5-5": { id: "eu.anthropic.claude-opus-5-5", name: "Claude Opus 5.5 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 4.4, output: 22, cacheRead: 0.22, cacheWrite: 5.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-sonnet-4-20250514-v1:0": { id: "eu.anthropic.claude-sonnet-4-20250514-v1:0", name: "Claude Sonnet 4 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-sonnet-4-5-20250929-v1:0": { id: "eu.anthropic.claude-sonnet-4-5-20250929-v1:0", name: "Claude Sonnet 4.5 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3.3, output: 16.5, cacheRead: 0.33, cacheWrite: 4.125 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-sonnet-4-6": { id: "eu.anthropic.claude-sonnet-4-6", name: "Claude Sonnet 4.6 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3.3, output: 16.5, cacheRead: 0.33, cacheWrite: 4.125 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-sonnet-5": { id: "eu.anthropic.claude-sonnet-5", name: "Claude Sonnet 5 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.22, cacheWrite: 2.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-sonnet-5-5": { id: "eu.anthropic.claude-sonnet-5-5", name: "Claude Sonnet 5.5 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.11, cacheWrite: 2.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.mistral.pixtral-large-2502-v1:0": { id: "eu.mistral.pixtral-large-2502-v1:0", name: "Pixtral Large (25.02) (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.amazon.nova-2-lite-v1:0": { id: "global.amazon.nova-2-lite-v1:0", name: "Nova 2 Lite (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 2.5, cacheRead: 0.075, cacheWrite: 0.3 }, contextWindow: 1e6, maxTokens: 65535, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-fable-5": { id: "global.anthropic.claude-fable-5", name: "Claude Fable 5 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-fable-5-1": { id: "global.anthropic.claude-fable-5-1", name: "Claude Fable 5.1 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-haiku-4-5-20251001-v1:0": { id: "global.anthropic.claude-haiku-4-5-20251001-v1:0", name: "Claude Haiku 4.5 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-haiku-5-5": { id: "global.anthropic.claude-haiku-5-5", name: "Claude Haiku 5.5 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 1e5, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-opus-4-5-20251101-v1:0": { id: "global.anthropic.claude-opus-4-5-20251101-v1:0", name: "Claude Opus 4.5 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-opus-4-6-v1": { id: "global.anthropic.claude-opus-4-6-v1", name: "Claude Opus 4.6 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-opus-4-7": { id: "global.anthropic.claude-opus-4-7", name: "Claude Opus 4.7 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-opus-4-8": { id: "global.anthropic.claude-opus-4-8", name: "Claude Opus 4.8 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-opus-5": { id: "global.anthropic.claude-opus-5", name: "Claude Opus 5 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-opus-5-5": { id: "global.anthropic.claude-opus-5-5", name: "Claude Opus 5.5 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-sonnet-4-20250514-v1:0": { id: "global.anthropic.claude-sonnet-4-20250514-v1:0", name: "Claude Sonnet 4 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-sonnet-4-5-20250929-v1:0": { id: "global.anthropic.claude-sonnet-4-5-20250929-v1:0", name: "Claude Sonnet 4.5 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-sonnet-4-6": { id: "global.anthropic.claude-sonnet-4-6", name: "Claude Sonnet 4.6 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-sonnet-5": { id: "global.anthropic.claude-sonnet-5", name: "Claude Sonnet 5 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-sonnet-5-5": { id: "global.anthropic.claude-sonnet-5-5", name: "Claude Sonnet 5.5 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.moonshotai.kimi-k3": { id: "global.moonshotai.kimi-k3", name: "Kimi K3 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 1048576, maxTokens: 128e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.openai.gpt-5.6-luna": { id: "global.openai.gpt-5.6-luna", name: "GPT-5.6 Luna (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 272e3, input: 0.4, output: 1.8, cacheRead: 0.04, cacheWrite: 0.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.openai.gpt-5.6-sol": { id: "global.openai.gpt-5.6-sol", name: "GPT-5.6 Sol (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.openai.gpt-5.6-terra": { id: "global.openai.gpt-5.6-terra", name: "GPT-5.6 Terra (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.openai.gpt-6-astra": { id: "global.openai.gpt-6-astra", name: "GPT-6 Astra (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5, tiers: [{ inputTokensAbove: 272e3, input: 20, output: 75, cacheRead: 2, cacheWrite: 25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.openai.gpt-6-luna": { id: "global.openai.gpt-6-luna", name: "GPT-6 Luna (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.openai.gpt-6-sol": { id: "global.openai.gpt-6-sol", name: "GPT-6 Sol (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.openai.gpt-6.1-sol": { id: "global.openai.gpt-6.1-sol", name: "GPT-6.1 Sol (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.openai.gpt-6.1-terra": { id: "global.openai.gpt-6.1-terra", name: "GPT-6.1 Terra (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.xai.grok-4.6": { id: "global.xai.grok-4.6", name: "Grok 4.6 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 5e5, maxTokens: 5e5, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.xai.grok-4.7": { id: "global.xai.grok-4.7", name: "Grok 4.7 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 5e5, maxTokens: 5e5, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.zai.glm-5.3": { id: "global.zai.glm-5.3", name: "GLM-5.3 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 1.68, output: 5.28, cacheRead: 0.312, cacheWrite: 2.1 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, type: "chat" }, "chat:google.gemma-4-26b-a4b": { id: "google.gemma-4-26b-a4b", name: "Gemma 4 26B A4B IT", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.13, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google.gemma-4-31b": { id: "google.gemma-4-31b", name: "Gemma 4 31B IT", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.14, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google.gemma-4-e2b": { id: "google.gemma-4-e2b", name: "Gemma 4 E2B IT", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.04, output: 0.08, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 8192, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:in.anthropic.claude-haiku-4-5-20251001-v1:0": { id: "in.anthropic.claude-haiku-4-5-20251001-v1:0", name: "Claude Haiku 4.5 (India)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 1.1, output: 5.5, cacheRead: 0.11, cacheWrite: 1.375 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:in.anthropic.claude-opus-5": { id: "in.anthropic.claude-opus-5", name: "Claude Opus 5 (India)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:in.anthropic.claude-sonnet-5": { id: "in.anthropic.claude-sonnet-5", name: "Claude Sonnet 5 (India)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.22, cacheWrite: 2.75 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:in.openai.gpt-5.6-luna": { id: "in.openai.gpt-5.6-luna", name: "GPT-5.6 Luna (India)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.22, output: 1.32, cacheRead: 0.022, cacheWrite: 0.275, tiers: [{ inputTokensAbove: 272e3, input: 0.44, output: 1.98, cacheRead: 0.044, cacheWrite: 0.55 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:in.openai.gpt-5.6-terra": { id: "in.openai.gpt-5.6-terra", name: "GPT-5.6 Terra (India)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 13.2, cacheRead: 0.22, cacheWrite: 2.75, tiers: [{ inputTokensAbove: 272e3, input: 4.4, output: 19.8, cacheRead: 0.44, cacheWrite: 5.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:jp.amazon.nova-2-lite-v1:0": { id: "jp.amazon.nova-2-lite-v1:0", name: "Nova 2 Lite (JP)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.396, output: 3.311, cacheRead: 0.099, cacheWrite: 0.396 }, contextWindow: 1e6, maxTokens: 65535, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:jp.anthropic.claude-haiku-4-5-20251001-v1:0": { id: "jp.anthropic.claude-haiku-4-5-20251001-v1:0", name: "Claude Haiku 4.5 (JP)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 1.1, output: 5.5, cacheRead: 0.11, cacheWrite: 1.375 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:jp.anthropic.claude-haiku-5-5": { id: "jp.anthropic.claude-haiku-5-5", name: "Claude Haiku 5.5 (JP)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.11, output: 0.55, cacheRead: 0.011, cacheWrite: 0.1375, tiers: [{ inputTokensAbove: 1e5, input: 0.55, output: 2.75, cacheRead: 0.055, cacheWrite: 0.6875 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:jp.anthropic.claude-opus-4-7": { id: "jp.anthropic.claude-opus-4-7", name: "Claude Opus 4.7 (JP)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:jp.anthropic.claude-opus-4-8": { id: "jp.anthropic.claude-opus-4-8", name: "Claude Opus 4.8 (JP)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:jp.anthropic.claude-opus-5": { id: "jp.anthropic.claude-opus-5", name: "Claude Opus 5 (JP)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:jp.anthropic.claude-opus-5-5": { id: "jp.anthropic.claude-opus-5-5", name: "Claude Opus 5.5 (JP)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 4.4, output: 22, cacheRead: 0.22, cacheWrite: 5.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:jp.anthropic.claude-sonnet-4-5-20250929-v1:0": { id: "jp.anthropic.claude-sonnet-4-5-20250929-v1:0", name: "Claude Sonnet 4.5 (JP)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3.3, output: 16.5, cacheRead: 0.33, cacheWrite: 4.125 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:jp.anthropic.claude-sonnet-4-6": { id: "jp.anthropic.claude-sonnet-4-6", name: "Claude Sonnet 4.6 (JP)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3.3, output: 16.5, cacheRead: 0.33, cacheWrite: 4.125 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:jp.anthropic.claude-sonnet-5": { id: "jp.anthropic.claude-sonnet-5", name: "Claude Sonnet 5 (JP)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.22, cacheWrite: 2.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta.llama3-1-70b-instruct-v1:0": { id: "meta.llama3-1-70b-instruct-v1:0", name: "Llama 3.1 70B Instruct", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.72, output: 0.72, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, type: "chat" }, "chat:meta.llama3-1-8b-instruct-v1:0": { id: "meta.llama3-1-8b-instruct-v1:0", name: "Llama 3.1 8B Instruct", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.22, output: 0.22, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, type: "chat" }, "chat:meta.llama3-3-70b-instruct-v1:0": { id: "meta.llama3-3-70b-instruct-v1:0", name: "Llama 3.3 70B Instruct", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.72, output: 0.72, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, type: "chat" }, "chat:meta.llama4-maverick-17b-instruct-v1:0": { id: "meta.llama4-maverick-17b-instruct-v1:0", name: "Llama 4 Maverick 17B Instruct", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.24, output: 0.97, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 8192, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta.llama4-scout-17b-instruct-v1:0": { id: "meta.llama4-scout-17b-instruct-v1:0", name: "Llama 4 Scout 17B Instruct", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.17, output: 0.66, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e7, maxTokens: 8192, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:minimax.minimax-m2": { id: "minimax.minimax-m2", name: "MiniMax-M2", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 204608, maxTokens: 128e3, compat: { supportsStrictMode: true }, type: "chat" }, "chat:minimax.minimax-m2.1": { id: "minimax.minimax-m2.1", name: "MiniMax-M2.1", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 196608, maxTokens: 131072, compat: { supportsStrictMode: true }, type: "chat" }, "chat:minimax.minimax-m2.5": { id: "minimax.minimax-m2.5", name: "MiniMax-M2.5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 196608, maxTokens: 98304, compat: { supportsStrictMode: true }, type: "chat" }, "chat:mistral.devstral-2-123b": { id: "mistral.devstral-2-123b", name: "Devstral 2 123B", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.4, output: 2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 8192, compat: { supportsStrictMode: true }, type: "chat" }, "chat:mistral.magistral-small-2509": { id: "mistral.magistral-small-2509", name: "Magistral Small 1.2", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.5, output: 1.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4e4, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral.ministral-3-14b-instruct": { id: "mistral.ministral-3-14b-instruct", name: "Ministral 14B 3.0", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.2, output: 0.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral.ministral-3-3b-instruct": { id: "mistral.ministral-3-3b-instruct", name: "Ministral 3 3B", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.1, output: 0.1, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 8192, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral.ministral-3-8b-instruct": { id: "mistral.ministral-3-8b-instruct", name: "Ministral 3 8B", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.15, output: 0.15, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral.mistral-large-3-675b-instruct": { id: "mistral.mistral-large-3-675b-instruct", name: "Mistral Large 3", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.5, output: 1.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 8192, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral.pixtral-large-2502-v1:0": { id: "mistral.pixtral-large-2502-v1:0", name: "Pixtral Large (25.02)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral.voxtral-mini-3b-2507": { id: "mistral.voxtral-mini-3b-2507", name: "Voxtral Mini 3B 2507", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.04, output: 0.04, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32768, maxTokens: 4096, compat: { supportsStrictMode: true }, type: "chat" }, "chat:mistral.voxtral-small-24b-2507": { id: "mistral.voxtral-small-24b-2507", name: "Voxtral Small 24B 2507", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.1, output: 0.3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32768, maxTokens: 8192, compat: { supportsStrictMode: true }, type: "chat" }, "chat:moonshot.kimi-k2-thinking": { id: "moonshot.kimi-k2-thinking", name: "Kimi K2 Thinking", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.6, output: 2.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 16e3, compat: { supportsStrictMode: true }, type: "chat" }, "chat:moonshotai.kimi-k2.5": { id: "moonshotai.kimi-k2.5", name: "Kimi K2.5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.6, output: 3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 16384, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:nvidia.nemotron-nano-12b-v2": { id: "nvidia.nemotron-nano-12b-v2", name: "NVIDIA Nemotron Nano 12B v2 VL BF16", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.2, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 8192, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:nvidia.nemotron-nano-3-30b": { id: "nvidia.nemotron-nano-3-30b", name: "NVIDIA Nemotron Nano 3 30B", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.06, output: 0.24, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 8192, compat: { supportsStrictMode: true }, type: "chat" }, "chat:nvidia.nemotron-nano-9b-v2": { id: "nvidia.nemotron-nano-9b-v2", name: "NVIDIA Nemotron Nano 9B v2", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.06, output: 0.23, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 8192, compat: { supportsStrictMode: true }, type: "chat" }, "chat:nvidia.nemotron-super-3-120b": { id: "nvidia.nemotron-super-3-120b", name: "NVIDIA Nemotron 3 Super 120B A12B", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.15, output: 0.65, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { supportsStrictMode: true }, type: "chat" }, "chat:openai.gpt-5.4": { id: "openai.gpt-5.4", name: "GPT-5.4", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.75, output: 16.5, cacheRead: 0.275, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai.gpt-5.5": { id: "openai.gpt-5.5", name: "GPT-5.5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 33, cacheRead: 0.55, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai.gpt-5.6-luna": { id: "openai.gpt-5.6-luna", name: "GPT-5.6 Luna", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.22, output: 1.32, cacheRead: 0.022, cacheWrite: 0.275, tiers: [{ inputTokensAbove: 272e3, input: 0.44, output: 1.98, cacheRead: 0.044, cacheWrite: 0.55 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai.gpt-5.6-sol": { id: "openai.gpt-5.6-sol", name: "GPT-5.6 Sol", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 4.4, output: 22, cacheRead: 0.44, cacheWrite: 5.5, tiers: [{ inputTokensAbove: 272e3, input: 8.8, output: 33, cacheRead: 0.88, cacheWrite: 11 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai.gpt-5.6-terra": { id: "openai.gpt-5.6-terra", name: "GPT-5.6 Terra", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 13.2, cacheRead: 0.22, cacheWrite: 2.75, tiers: [{ inputTokensAbove: 272e3, input: 4.4, output: 19.8, cacheRead: 0.44, cacheWrite: 5.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai.gpt-6-astra": { id: "openai.gpt-6-astra", name: "GPT-6 Astra", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 11, output: 55, cacheRead: 1.1, cacheWrite: 13.75, tiers: [{ inputTokensAbove: 272e3, input: 22, output: 82.5, cacheRead: 2.2, cacheWrite: 27.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai.gpt-6-luna": { id: "openai.gpt-6-luna", name: "GPT-6 Luna", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.11, output: 0.55, cacheRead: 0.011, cacheWrite: 0.1375, tiers: [{ inputTokensAbove: 272e3, input: 0.22, output: 0.825, cacheRead: 0.022, cacheWrite: 0.275 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai.gpt-6-sol": { id: "openai.gpt-6-sol", name: "GPT-6 Sol", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.22, cacheWrite: 2.75, tiers: [{ inputTokensAbove: 272e3, input: 4.4, output: 16.5, cacheRead: 0.44, cacheWrite: 5.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai.gpt-6.1-sol": { id: "openai.gpt-6.1-sol", name: "GPT-6.1 Sol", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.11, cacheWrite: 2.75, tiers: [{ inputTokensAbove: 272e3, input: 4.4, output: 16.5, cacheRead: 0.22, cacheWrite: 5.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai.gpt-6.1-terra": { id: "openai.gpt-6.1-terra", name: "GPT-6.1 Terra", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 1.1, output: 5.5, cacheRead: 0.055, cacheWrite: 1.375, tiers: [{ inputTokensAbove: 272e3, input: 2.2, output: 8.25, cacheRead: 0.11, cacheWrite: 2.75 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai.gpt-oss-120b": { id: "openai.gpt-oss-120b", name: "gpt-oss-120b", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, compat: { supportsStrictMode: true }, type: "chat" }, "chat:openai.gpt-oss-120b-1:0": { id: "openai.gpt-oss-120b-1:0", name: "gpt-oss-120b", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 128e3, compat: { supportsStrictMode: true }, type: "chat" }, "chat:openai.gpt-oss-20b": { id: "openai.gpt-oss-20b", name: "gpt-oss-20b", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.07, output: 0.3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, compat: { supportsStrictMode: true }, type: "chat" }, "chat:openai.gpt-oss-20b-1:0": { id: "openai.gpt-oss-20b-1:0", name: "gpt-oss-20b", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.07, output: 0.3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 128e3, compat: { supportsStrictMode: true }, type: "chat" }, "chat:openai.gpt-oss-safeguard-120b": { id: "openai.gpt-oss-safeguard-120b", name: "GPT OSS Safeguard 120B", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStrictMode: true }, type: "chat" }, "chat:openai.gpt-oss-safeguard-20b": { id: "openai.gpt-oss-safeguard-20b", name: "GPT OSS Safeguard 20B", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.07, output: 0.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStrictMode: true }, type: "chat" }, "chat:qwen.qwen3-235b-a22b-2507-v1:0": { id: "qwen.qwen3-235b-a22b-2507-v1:0", name: "Qwen3 235B-A22B Instruct 2507", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.22, output: 0.88, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { supportsStrictMode: true }, type: "chat" }, "chat:qwen.qwen3-32b-v1:0": { id: "qwen.qwen3-32b-v1:0", name: "Qwen3 32B", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32768, maxTokens: 16384, compat: { supportsStrictMode: true }, type: "chat" }, "chat:qwen.qwen3-coder-30b-a3b-v1:0": { id: "qwen.qwen3-coder-30b-a3b-v1:0", name: "Qwen3-Coder 30B-A3B Instruct", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { supportsStrictMode: true }, type: "chat" }, "chat:qwen.qwen3-coder-480b-a35b-v1:0": { id: "qwen.qwen3-coder-480b-a35b-v1:0", name: "Qwen3-Coder 480B-A35B Instruct", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.45, output: 1.8, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 65536, compat: { supportsStrictMode: true }, type: "chat" }, "chat:qwen.qwen3-coder-next": { id: "qwen.qwen3-coder-next", name: "Qwen3 Coder Next", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.5, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStrictMode: true }, type: "chat" }, "chat:qwen.qwen3-next-80b-a3b": { id: "qwen.qwen3-next-80b-a3b", name: "Qwen3-Next 80B-A3B Instruct", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.15, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262e3, compat: { supportsStrictMode: true }, type: "chat" }, "chat:qwen.qwen3-vl-235b-a22b": { id: "qwen.qwen3-vl-235b-a22b", name: "Qwen3 VL 235B A22B Instruct", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.53, output: 2.66, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us-gov.openai.gpt-oss-120b-1:0": { id: "us-gov.openai.gpt-oss-120b-1:0", name: "gpt-oss-120b (GovCloud)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.18, output: 0.72, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStrictMode: true }, type: "chat" }, "chat:us-gov.openai.gpt-oss-20b-1:0": { id: "us-gov.openai.gpt-oss-20b-1:0", name: "gpt-oss-20b (GovCloud)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.084, output: 0.36, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStrictMode: true }, type: "chat" }, "chat:us.amazon.nova-2-lite-v1:0": { id: "us.amazon.nova-2-lite-v1:0", name: "Nova 2 Lite (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.33, output: 2.75, cacheRead: 0.0825, cacheWrite: 0.33 }, contextWindow: 1e6, maxTokens: 65535, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.amazon.nova-lite-v1:0": { id: "us.amazon.nova-lite-v1:0", name: "Nova Lite (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.06, output: 0.24, cacheRead: 0.015, cacheWrite: 0.06 }, contextWindow: 3e5, maxTokens: 1e4, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.amazon.nova-micro-v1:0": { id: "us.amazon.nova-micro-v1:0", name: "Nova Micro (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.035, output: 0.14, cacheRead: 875e-5, cacheWrite: 0.035 }, contextWindow: 128e3, maxTokens: 1e4, type: "chat" }, "chat:us.amazon.nova-premier-v1:0": { id: "us.amazon.nova-premier-v1:0", name: "Nova Premier (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 12.5, cacheRead: 0.625, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 1e4, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.amazon.nova-pro-v1:0": { id: "us.amazon.nova-pro-v1:0", name: "Nova Pro (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.8, output: 3.2, cacheRead: 0.2, cacheWrite: 0.8 }, contextWindow: 3e5, maxTokens: 1e4, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-fable-5": { id: "us.anthropic.claude-fable-5", name: "Claude Fable 5 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 11, output: 55, cacheRead: 1.1, cacheWrite: 13.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-fable-5-1": { id: "us.anthropic.claude-fable-5-1", name: "Claude Fable 5.1 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 11, output: 55, cacheRead: 0.275, cacheWrite: 13.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-haiku-4-5-20251001-v1:0": { id: "us.anthropic.claude-haiku-4-5-20251001-v1:0", name: "Claude Haiku 4.5 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 1.1, output: 5.5, cacheRead: 0.11, cacheWrite: 1.375 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-haiku-5-5": { id: "us.anthropic.claude-haiku-5-5", name: "Claude Haiku 5.5 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.11, output: 0.55, cacheRead: 0.011, cacheWrite: 0.1375, tiers: [{ inputTokensAbove: 1e5, input: 0.55, output: 2.75, cacheRead: 0.055, cacheWrite: 0.6875 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-opus-4-1-20250805-v1:0": { id: "us.anthropic.claude-opus-4-1-20250805-v1:0", name: "Claude Opus 4.1 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 15, output: 75, cacheRead: 1.5, cacheWrite: 18.75 }, contextWindow: 2e5, maxTokens: 32e3, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-opus-4-5-20251101-v1:0": { id: "us.anthropic.claude-opus-4-5-20251101-v1:0", name: "Claude Opus 4.5 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-opus-4-6-v1": { id: "us.anthropic.claude-opus-4-6-v1", name: "Claude Opus 4.6 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-opus-4-7": { id: "us.anthropic.claude-opus-4-7", name: "Claude Opus 4.7 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-opus-4-8": { id: "us.anthropic.claude-opus-4-8", name: "Claude Opus 4.8 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-opus-5": { id: "us.anthropic.claude-opus-5", name: "Claude Opus 5 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-opus-5-5": { id: "us.anthropic.claude-opus-5-5", name: "Claude Opus 5.5 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 4.4, output: 22, cacheRead: 0.22, cacheWrite: 5.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-sonnet-4-20250514-v1:0": { id: "us.anthropic.claude-sonnet-4-20250514-v1:0", name: "Claude Sonnet 4 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-sonnet-4-5-20250929-v1:0": { id: "us.anthropic.claude-sonnet-4-5-20250929-v1:0", name: "Claude Sonnet 4.5 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3.3, output: 16.5, cacheRead: 0.33, cacheWrite: 4.125 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-sonnet-4-6": { id: "us.anthropic.claude-sonnet-4-6", name: "Claude Sonnet 4.6 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3.3, output: 16.5, cacheRead: 0.33, cacheWrite: 4.125 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-sonnet-5": { id: "us.anthropic.claude-sonnet-5", name: "Claude Sonnet 5 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.22, cacheWrite: 2.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-sonnet-5-5": { id: "us.anthropic.claude-sonnet-5-5", name: "Claude Sonnet 5.5 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.11, cacheWrite: 2.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.meta.llama3-1-70b-instruct-v1:0": { id: "us.meta.llama3-1-70b-instruct-v1:0", name: "Llama 3.1 70B Instruct (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.72, output: 0.72, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, type: "chat" }, "chat:us.meta.llama3-1-8b-instruct-v1:0": { id: "us.meta.llama3-1-8b-instruct-v1:0", name: "Llama 3.1 8B Instruct (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.22, output: 0.22, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, type: "chat" }, "chat:us.meta.llama3-3-70b-instruct-v1:0": { id: "us.meta.llama3-3-70b-instruct-v1:0", name: "Llama 3.3 70B Instruct (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.72, output: 0.72, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, type: "chat" }, "chat:us.meta.llama4-maverick-17b-instruct-v1:0": { id: "us.meta.llama4-maverick-17b-instruct-v1:0", name: "Llama 4 Maverick 17B Instruct (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.24, output: 0.97, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 8192, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.meta.llama4-scout-17b-instruct-v1:0": { id: "us.meta.llama4-scout-17b-instruct-v1:0", name: "Llama 4 Scout 17B Instruct (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.17, output: 0.66, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e7, maxTokens: 8192, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.mistral.pixtral-large-2502-v1:0": { id: "us.mistral.pixtral-large-2502-v1:0", name: "Pixtral Large (25.02) (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.moonshotai.kimi-k3": { id: "us.moonshotai.kimi-k3", name: "Kimi K3 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3.3, output: 16.5, cacheRead: 0.33, cacheWrite: 4.125 }, contextWindow: 1048576, maxTokens: 128e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.openai.gpt-5.6-luna": { id: "us.openai.gpt-5.6-luna", name: "GPT-5.6 Luna (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.22, output: 1.32, cacheRead: 0.022, cacheWrite: 0.275, tiers: [{ inputTokensAbove: 272e3, input: 0.44, output: 1.98, cacheRead: 0.044, cacheWrite: 0.55 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.openai.gpt-5.6-sol": { id: "us.openai.gpt-5.6-sol", name: "GPT-5.6 Sol (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 4.4, output: 22, cacheRead: 0.44, cacheWrite: 5.5, tiers: [{ inputTokensAbove: 272e3, input: 8.8, output: 33, cacheRead: 0.88, cacheWrite: 11 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.openai.gpt-5.6-terra": { id: "us.openai.gpt-5.6-terra", name: "GPT-5.6 Terra (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 13.2, cacheRead: 0.22, cacheWrite: 2.75, tiers: [{ inputTokensAbove: 272e3, input: 4.4, output: 19.8, cacheRead: 0.44, cacheWrite: 5.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.openai.gpt-6-astra": { id: "us.openai.gpt-6-astra", name: "GPT-6 Astra (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 11, output: 55, cacheRead: 1.1, cacheWrite: 13.75, tiers: [{ inputTokensAbove: 272e3, input: 22, output: 82.5, cacheRead: 2.2, cacheWrite: 27.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.openai.gpt-6-luna": { id: "us.openai.gpt-6-luna", name: "GPT-6 Luna (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.11, output: 0.55, cacheRead: 0.011, cacheWrite: 0.1375, tiers: [{ inputTokensAbove: 272e3, input: 0.22, output: 0.825, cacheRead: 0.022, cacheWrite: 0.275 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.openai.gpt-6-sol": { id: "us.openai.gpt-6-sol", name: "GPT-6 Sol (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.22, cacheWrite: 2.75, tiers: [{ inputTokensAbove: 272e3, input: 4.4, output: 16.5, cacheRead: 0.44, cacheWrite: 5.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.openai.gpt-6.1-sol": { id: "us.openai.gpt-6.1-sol", name: "GPT-6.1 Sol (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.11, cacheWrite: 2.75, tiers: [{ inputTokensAbove: 272e3, input: 4.4, output: 16.5, cacheRead: 0.22, cacheWrite: 5.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.openai.gpt-6.1-terra": { id: "us.openai.gpt-6.1-terra", name: "GPT-6.1 Terra (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 1.1, output: 5.5, cacheRead: 0.055, cacheWrite: 1.375, tiers: [{ inputTokensAbove: 272e3, input: 2.2, output: 8.25, cacheRead: 0.11, cacheWrite: 2.75 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.writer.palmyra-x4-v1:0": { id: "us.writer.palmyra-x4-v1:0", name: "Palmyra X4 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 2.5, output: 10, cacheRead: 0, cacheWrite: 0 }, contextWindow: 122880, maxTokens: 8192, type: "chat" }, "chat:us.writer.palmyra-x5-v1:0": { id: "us.writer.palmyra-x5-v1:0", name: "Palmyra X5 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.6, output: 6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 104e4, maxTokens: 8192, type: "chat" }, "chat:us.xai.grok-4.6": { id: "us.xai.grok-4.6", name: "Grok 4.6 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 6.6, cacheRead: 0.55, cacheWrite: 0 }, contextWindow: 5e5, maxTokens: 5e5, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.xai.grok-4.7": { id: "us.xai.grok-4.7", name: "Grok 4.7 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 6.6, cacheRead: 0.55, cacheWrite: 0 }, contextWindow: 5e5, maxTokens: 5e5, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.zai.glm-5.3": { id: "us.zai.glm-5.3", name: "GLM-5.3 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 1.848, output: 5.808, cacheRead: 0.3432, cacheWrite: 2.31 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, type: "chat" }, "chat:writer.palmyra-x4-v1:0": { id: "writer.palmyra-x4-v1:0", name: "Palmyra X4", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 2.5, output: 10, cacheRead: 0, cacheWrite: 0 }, contextWindow: 122880, maxTokens: 8192, type: "chat" }, "chat:writer.palmyra-x5-v1:0": { id: "writer.palmyra-x5-v1:0", name: "Palmyra X5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.6, output: 6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 104e4, maxTokens: 8192, type: "chat" }, "chat:xai.grok-4.3": { id: "xai.grok-4.3", name: "Grok 4.3", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:xai.grok-4.6": { id: "xai.grok-4.6", name: "Grok 4.6", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 6.6, cacheRead: 0.55, cacheWrite: 0 }, contextWindow: 5e5, maxTokens: 5e5, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:zai.glm-4.7": { id: "zai.glm-4.7", name: "GLM-4.7", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.6, output: 2.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 131072, compat: { supportsStrictMode: true }, type: "chat" }, "chat:zai.glm-4.7-flash": { id: "zai.glm-4.7-flash", name: "GLM-4.7-Flash", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.07, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 131072, compat: { supportsStrictMode: true }, type: "chat" }, "chat:zai.glm-5": { id: "zai.glm-5", name: "GLM-5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 1, output: 3.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 131072, compat: { supportsStrictMode: true }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/model-catalog.js +function flattenModelCatalog(groups, type) { + return Object.fromEntries(Object.values(groups).flatMap((models2) => Object.values(models2)).filter((model2) => model2.type === type).map((model2) => [model2.id, model2])); +} +function flattenChatModelCatalog(_provider, groups) { + return flattenModelCatalog(groups, "chat"); +} +function flattenImageModelCatalog(_provider, groups) { + return flattenModelCatalog(groups, "image"); +} +function flattenClassifierModelCatalog(_provider, groups) { + return flattenModelCatalog(groups, "classifier"); +} + +// node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.js +var AMAZON_BEDROCK_MODELS = flattenChatModelCatalog("amazon-bedrock", amazon_bedrock_default); +var AMAZON_BEDROCK_IMAGE_MODELS = flattenImageModelCatalog("amazon-bedrock", amazon_bedrock_default); +var AMAZON_BEDROCK_CLASSIFIER_MODELS = flattenClassifierModelCatalog("amazon-bedrock", amazon_bedrock_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/ant-ling.json +var ant_ling_default = { "openai-completions": { "chat:Ling-2.6-1T": { id: "Ling-2.6-1T", name: "Ling 2.6 1T", api: "openai-completions", baseUrl: "https://api.ant-ling.com/v1", provider: "ant-ling", reasoning: false, input: ["text"], cost: { input: 0.06, output: 0.25, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "ant-ling", supportsStrictMode: true, supportsLongCacheRetention: false }, type: "chat" }, "chat:Ling-2.6-flash": { id: "Ling-2.6-flash", name: "Ling 2.6 Flash", api: "openai-completions", baseUrl: "https://api.ant-ling.com/v1", provider: "ant-ling", reasoning: false, input: ["text"], cost: { input: 0.01, output: 0.02, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "ant-ling", supportsStrictMode: true, supportsLongCacheRetention: false }, type: "chat" }, "chat:Ring-2.6-1T": { id: "Ring-2.6-1T", name: "Ring 2.6 1T", api: "openai-completions", baseUrl: "https://api.ant-ling.com/v1", provider: "ant-ling", reasoning: true, input: ["text"], cost: { input: 0.06, output: 0.25, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "ant-ling", supportsStrictMode: true, supportsLongCacheRetention: false }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: "xhigh" }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/ant-ling.models.js +var ANT_LING_MODELS = flattenChatModelCatalog("ant-ling", ant_ling_default); +var ANT_LING_IMAGE_MODELS = flattenImageModelCatalog("ant-ling", ant_ling_default); +var ANT_LING_CLASSIFIER_MODELS = flattenClassifierModelCatalog("ant-ling", ant_ling_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/anthropic.json +var anthropic_default = { "anthropic-messages": { "chat:claude-fable-5": { id: "claude-fable-5", name: "Claude Fable 5", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolChanges: true, supportsStrictTools: true, allowedFallbackModels: [{ provider: "anthropic", model: "claude-opus-4-8", cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 } }, { provider: "anthropic", model: "claude-opus-5", cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 } }] }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-fable-5-1": { id: "claude-fable-5-1", name: "Claude Fable 5.1", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsMidConvoEffort: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolChanges: true, supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-haiku-4-5": { id: "claude-haiku-4-5", name: "Claude Haiku 4.5 (latest)", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 100, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-haiku-4-5-20251001": { id: "claude-haiku-4-5-20251001", name: "Claude Haiku 4.5", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 100, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-haiku-5-5": { id: "claude-haiku-5-5", name: "Claude Haiku 5.5", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 1e5, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoEffort: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolChanges: true, supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-5": { id: "claude-opus-4-5", name: "Claude Opus 4.5 (latest)", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 100, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-5-20251101": { id: "claude-opus-4-5-20251101", name: "Claude Opus 4.5", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 100, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-6": { id: "claude-opus-4-6", name: "Claude Opus 4.6", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { max: "max" }, compat: { forceAdaptiveThinking: true, supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-7": { id: "claude-opus-4-7", name: "Claude Opus 4.7", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-8": { id: "claude-opus-4-8", name: "Claude Opus 4.8", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoSystemMessages: true, supportsMidConvoToolChanges: true, supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-5": { id: "claude-opus-5", name: "Claude Opus 5", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoEffort: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolChanges: true, supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-5-5": { id: "claude-opus-5-5", name: "Claude Opus 5.5", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoEffort: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolChanges: true, supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-4-5": { id: "claude-sonnet-4-5", name: "Claude Sonnet 4.5 (latest)", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 100, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-4-5-20250929": { id: "claude-sonnet-4-5-20250929", name: "Claude Sonnet 4.5", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 100, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-4-6": { id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { max: "max" }, compat: { forceAdaptiveThinking: true, supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-5": { id: "claude-sonnet-5", name: "Claude Sonnet 5", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-5-5": { id: "claude-sonnet-5-5", name: "Claude Sonnet 5.5", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoEffort: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolChanges: true, supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.js +var ANTHROPIC_MODELS = flattenChatModelCatalog("anthropic", anthropic_default); +var ANTHROPIC_IMAGE_MODELS = flattenImageModelCatalog("anthropic", anthropic_default); +var ANTHROPIC_CLASSIFIER_MODELS = flattenClassifierModelCatalog("anthropic", anthropic_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/azure.json +var azure_default = { "azure-openai-responses": { "chat:chat-latest": { id: "chat-latest", name: "Chat Latest", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4": { id: "gpt-4", name: "GPT-4", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: false, input: ["text"], cost: { input: 30, output: 60, cacheRead: 0, cacheWrite: 0 }, contextWindow: 8192, maxTokens: 8192, type: "chat" }, "chat:gpt-4-turbo": { id: "gpt-4-turbo", name: "GPT-4 Turbo", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: false, input: ["text", "image"], cost: { input: 10, output: 30, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4.1": { id: "gpt-4.1", name: "GPT-4.1", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: false, input: ["text", "image"], cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4.1-mini": { id: "gpt-4.1-mini", name: "GPT-4.1 mini", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: false, input: ["text", "image"], cost: { input: 0.4, output: 1.6, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4.1-nano": { id: "gpt-4.1-nano", name: "GPT-4.1 nano", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: false, input: ["text", "image"], cost: { input: 0.1, output: 0.4, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o": { id: "gpt-4o", name: "GPT-4o", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o-2024-05-13": { id: "gpt-4o-2024-05-13", name: "GPT-4o (2024-05-13)", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: false, input: ["text", "image"], cost: { input: 5, output: 15, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o-2024-08-06": { id: "gpt-4o-2024-08-06", name: "GPT-4o (2024-08-06)", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o-2024-11-20": { id: "gpt-4o-2024-11-20", name: "GPT-4o (2024-11-20)", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o-mini": { id: "gpt-4o-mini", name: "GPT-4o mini", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: false, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5": { id: "gpt-5", name: "GPT-5", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-chat-latest": { id: "gpt-5-chat-latest", name: "GPT-5 Chat Latest", api: "azure-openai-responses", baseUrl: "", provider: "azure", reasoning: false, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, thinkingLevelMap: { off: null }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-mini": { id: "gpt-5-mini", name: "GPT-5 Mini", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 0.25, output: 2, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-nano": { id: "gpt-5-nano", name: "GPT-5 Nano", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 0.05, output: 0.4, cacheRead: 5e-3, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-pro": { id: "gpt-5-pro", name: "GPT-5 Pro", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 15, output: 120, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.1": { id: "gpt-5.1", name: "GPT-5.1", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.2": { id: "gpt-5.2", name: "GPT-5.2", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.2-pro": { id: "gpt-5.2-pro", name: "GPT-5.2 Pro", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 21, output: 168, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.3-codex": { id: "gpt-5.3-codex", name: "GPT-5.3 Codex", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.3-codex-spark": { id: "gpt-5.3-codex-spark", name: "GPT-5.3 Codex Spark", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 32e3, thinkingLevelMap: { off: null, xhigh: "xhigh" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4": { id: "gpt-5.4", name: "GPT-5.4", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-mini": { id: "gpt-5.4-mini", name: "GPT-5.4 mini", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-nano": { id: "gpt-5.4-nano", name: "GPT-5.4 nano", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.25, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-pro": { id: "gpt-5.4-pro", name: "GPT-5.4 Pro", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 30, output: 180, cacheRead: 0, cacheWrite: 0 }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.5": { id: "gpt-5.5", name: "GPT-5.5", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.5-pro": { id: "gpt-5.5-pro", name: "GPT-5.5 Pro", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 30, output: 180, cacheRead: 0, cacheWrite: 0 }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", minimal: null, low: null }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-cyber": { id: "gpt-5.6-cyber", name: "GPT-5.6 Cyber", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 12.5, output: 75, cacheRead: 1.25, cacheWrite: 15.625 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-luna": { id: "gpt-5.6-luna", name: "GPT-5.6 Luna", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25 }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-sol": { id: "gpt-5.6-sol", name: "GPT-5.6 Sol", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5 }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-terra": { id: "gpt-5.6-terra", name: "GPT-5.6 Terra", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5 }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-astra": { id: "gpt-6-astra", name: "GPT-6 Astra", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-luna": { id: "gpt-6-luna", name: "GPT-6 Luna", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125 }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-sol": { id: "gpt-6-sol", name: "GPT-6 Sol", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-sol": { id: "gpt-6.1-sol", name: "GPT-6.1 Sol", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5 }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-terra": { id: "gpt-6.1-terra", name: "GPT-6.1 Terra", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25 }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-daybreak-blue-latest": { id: "gpt-daybreak-blue-latest", name: "Daybreak Blue", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5 }, contextWindow: 105e4, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-daybreak-red-latest": { id: "gpt-daybreak-red-latest", name: "Daybreak Red", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 12.5, output: 75, cacheRead: 1.25, cacheWrite: 15.625 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o1": { id: "o1", name: "o1", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 15, output: 60, cacheRead: 7.5, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o1-pro": { id: "o1-pro", name: "o1-pro", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 150, output: 600, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o3": { id: "o3", name: "o3", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o3-mini": { id: "o3-mini", name: "o3-mini", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text"], cost: { input: 1.1, output: 4.4, cacheRead: 0.55, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, type: "chat" }, "chat:o3-pro": { id: "o3-pro", name: "o3-pro", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 20, output: 80, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o4-mini": { id: "o4-mini", name: "o4-mini", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 1.1, output: 4.4, cacheRead: 0.275, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "openai-completions": { "chat:deepseek-v4-pro": { id: "deepseek-v4-pro", name: "DeepSeek V4 Pro", api: "openai-completions", baseUrl: "", provider: "azure", reasoning: true, input: ["text"], cost: { input: 1.925, output: 3.828, cacheRead: 0.165, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "openai", supportsDeveloperRole: false, supportsMidConvoSystemMessages: true, supportsLongCacheRetention: false }, thinkingLevelMap: { minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/azure.models.js +var AZURE_MODELS = flattenChatModelCatalog("azure", azure_default); +var AZURE_IMAGE_MODELS = flattenImageModelCatalog("azure", azure_default); +var AZURE_CLASSIFIER_MODELS = flattenClassifierModelCatalog("azure", azure_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/baseten.json +var baseten_default = { "openai-completions": { "chat:deepseek-ai/DeepSeek-V4-Flash-0731": { id: "deepseek-ai/DeepSeek-V4-Flash-0731", name: "DeepSeek V4 Flash 0731", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text"], cost: { input: 0.13, output: 0.26, cacheRead: 0.028, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 384e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4-Pro-0813": { id: "deepseek-ai/DeepSeek-V4-Pro-0813", name: "DeepSeek V4 Pro 0813", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text"], cost: { input: 1.32, output: 3.96, cacheRead: 0.132, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4.1-Flash": { id: "deepseek-ai/DeepSeek-V4.1-Flash", name: "DeepSeek V4.1 Flash", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 7e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 32768, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4.1-Flash-1017": { id: "deepseek-ai/DeepSeek-V4.1-Flash-1017", name: "DeepSeek V4.1 Flash 1017", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 7e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4.1-Flash-1017-Fast": { id: "deepseek-ai/DeepSeek-V4.1-Flash-1017-Fast", name: "DeepSeek V4.1 Flash 1017 Fast", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.6, output: 2.4, cacheRead: 0.014, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4.1-Flash-Fast": { id: "deepseek-ai/DeepSeek-V4.1-Flash-Fast", name: "DeepSeek V4.1 Flash Fast", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.6, output: 2.4, cacheRead: 0.014, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 32768, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/Kimi-K3": { id: "moonshotai/Kimi-K3", name: "Kimi K3", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B": { id: "nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B", name: "Nemotron Ultra", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text"], cost: { input: 0.6, output: 2.4, cacheRead: 0.12, cacheWrite: 0 }, contextWindow: 202800, maxTokens: 202800, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, type: "chat" }, "chat:openai/gpt-oss-120b": { id: "openai/gpt-oss-120b", name: "OpenAI GPT 120B", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text"], cost: { input: 0.1, output: 0.5, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 128072, maxTokens: 128072, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, type: "chat" }, "chat:zai-org/GLM-5.2": { id: "zai-org/GLM-5.2", name: "GLM 5.2", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.14, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "baseten", chatTemplateArgs: { enable_thinking: { $var: "thinking.enabled" } } }, type: "chat" }, "chat:zai-org/GLM-5.2-Fast": { id: "zai-org/GLM-5.2-Fast", name: "GLM 5.2 Fast", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text"], cost: { input: 2.1, output: 6.6, cacheRead: 0.21, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "baseten", chatTemplateArgs: { enable_thinking: { $var: "thinking.enabled" } } }, type: "chat" }, "chat:zai-org/GLM-5.3": { id: "zai-org/GLM-5.3", name: "GLM 5.3", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.4, output: 4.4, cacheRead: 0.14, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:zai-org/GLM-5.3-Fast": { id: "zai-org/GLM-5.3-Fast", name: "GLM 5.3 Fast", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 2.1, output: 6.6, cacheRead: 0.21, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:zai-org/GLM-5.3-Flash": { id: "zai-org/GLM-5.3-Flash", name: "GLM 5.3 Flash", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/baseten.models.js +var BASETEN_MODELS = flattenChatModelCatalog("baseten", baseten_default); +var BASETEN_IMAGE_MODELS = flattenImageModelCatalog("baseten", baseten_default); +var BASETEN_CLASSIFIER_MODELS = flattenClassifierModelCatalog("baseten", baseten_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/cerebras.json +var cerebras_default = { "openai-completions": { "chat:gpt-oss-120b": { id: "gpt-oss-120b", name: "GPT OSS 120B", api: "openai-completions", provider: "cerebras", baseUrl: "https://api.cerebras.ai/v1", reasoning: true, input: ["text"], cost: { input: 0.35, output: 0.75, cacheRead: 0.35, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 40960, compat: { supportsStore: false, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:qwen-3.8-27b": { id: "qwen-3.8-27b", name: "Qwen3.8 27B", api: "openai-completions", provider: "cerebras", baseUrl: "https://api.cerebras.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.99, output: 1.49, cacheRead: 0.99, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 40960, compat: { supportsStore: false, supportsDeveloperRole: false }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/cerebras.models.js +var CEREBRAS_MODELS = flattenChatModelCatalog("cerebras", cerebras_default); +var CEREBRAS_IMAGE_MODELS = flattenImageModelCatalog("cerebras", cerebras_default); +var CEREBRAS_CLASSIFIER_MODELS = flattenClassifierModelCatalog("cerebras", cerebras_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +var cloudflare_ai_gateway_default = { "anthropic-messages": { "chat:claude-fable-5": { id: "claude-fable-5", name: "Claude Fable 5", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { sendSessionAffinityHeaders: true, forceAdaptiveThinking: true }, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-fable-5-1": { id: "claude-fable-5-1", name: "Claude Fable 5.1", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { sendSessionAffinityHeaders: true, forceAdaptiveThinking: true }, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-haiku-4-5": { id: "claude-haiku-4-5", name: "Claude Haiku 4.5 (latest)", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, contextWindow: 2e5, maxTokens: 64e3, compat: { sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-haiku-5-5": { id: "claude-haiku-5-5", name: "Claude Haiku 5.5", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 1e5, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { sendSessionAffinityHeaders: true, forceAdaptiveThinking: true, supportsTemperature: false }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-5": { id: "claude-opus-4-5", name: "Claude Opus 4.5 (latest)", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 2e5, maxTokens: 64e3, compat: { sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-6": { id: "claude-opus-4-6", name: "Claude Opus 4.6", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { sendSessionAffinityHeaders: true, forceAdaptiveThinking: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-7": { id: "claude-opus-4-7", name: "Claude Opus 4.7", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { sendSessionAffinityHeaders: true, forceAdaptiveThinking: true, supportsTemperature: false }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-8": { id: "claude-opus-4-8", name: "Claude Opus 4.8", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { sendSessionAffinityHeaders: true, forceAdaptiveThinking: true, supportsTemperature: false }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-5": { id: "claude-opus-5", name: "Claude Opus 5", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { sendSessionAffinityHeaders: true, forceAdaptiveThinking: true, supportsTemperature: false }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-5-5": { id: "claude-opus-5-5", name: "Claude Opus 5.5", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { sendSessionAffinityHeaders: true, forceAdaptiveThinking: true, supportsTemperature: false }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-4-5": { id: "claude-sonnet-4-5", name: "Claude Sonnet 4.5 (latest)", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 2e5, maxTokens: 64e3, compat: { sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-4-6": { id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { sendSessionAffinityHeaders: true, forceAdaptiveThinking: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-5": { id: "claude-sonnet-5", name: "Claude Sonnet 5", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { sendSessionAffinityHeaders: true, forceAdaptiveThinking: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-5-5": { id: "claude-sonnet-5-5", name: "Claude Sonnet 5.5", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { sendSessionAffinityHeaders: true, forceAdaptiveThinking: true, supportsTemperature: false }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "openai-completions": { "chat:workers-ai/@cf/deepseek-ai/deepseek-v4-flash-0731": { id: "workers-ai/@cf/deepseek-ai/deepseek-v4-flash-0731", name: "DeepSeek V4 Flash 0731", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text"], cost: { input: 0.44, output: 1.32, cacheRead: 0.014, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", max: "max" }, type: "chat" }, "chat:workers-ai/@cf/deepseek-ai/deepseek-v4-pro-0813": { id: "workers-ai/@cf/deepseek-ai/deepseek-v4-pro-0813", name: "DeepSeek V4 Pro 0813", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text"], cost: { input: 1.32, output: 3.96, cacheRead: 0.044, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", max: "max" }, type: "chat" }, "chat:workers-ai/@cf/deepseek-ai/deepseek-v4.1-flash-1017": { id: "workers-ai/@cf/deepseek-ai/deepseek-v4.1-flash-1017", name: "DeepSeek V4.1 Flash 1017", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:workers-ai/@cf/google/gemma-4-26b-a4b-it": { id: "workers-ai/@cf/google/gemma-4-26b-a4b-it", name: "Gemma 4 26B A4B IT", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.3, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 16384, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:workers-ai/@cf/ibm-granite/granite-4.0-h-micro": { id: "workers-ai/@cf/ibm-granite/granite-4.0-h-micro", name: "Granite 4.0 H Micro", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: false, input: ["text"], cost: { input: 0.017, output: 0.112, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131e3, maxTokens: 131e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:workers-ai/@cf/meta/llama-3.3-70b-instruct-fp8-fast": { id: "workers-ai/@cf/meta/llama-3.3-70b-instruct-fp8-fast", name: "Llama 3.3 70B Instruct fp8 Fast", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: false, input: ["text"], cost: { input: 0.293, output: 2.253, cacheRead: 0, cacheWrite: 0 }, contextWindow: 24e3, maxTokens: 24e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:workers-ai/@cf/meta/llama-4-scout-17b-16e-instruct": { id: "workers-ai/@cf/meta/llama-4-scout-17b-16e-instruct", name: "Llama 4 Scout 17B 16E Instruct", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: false, input: ["text", "image"], cost: { input: 0.27, output: 0.85, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131e3, maxTokens: 16384, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:workers-ai/@cf/mistralai/mistral-small-3.1-24b-instruct": { id: "workers-ai/@cf/mistralai/mistral-small-3.1-24b-instruct", name: "Mistral Small 3.1 24B Instruct", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: false, input: ["text", "image"], cost: { input: 0.351, output: 0.555, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 128e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:workers-ai/@cf/moonshotai/kimi-k2.6": { id: "workers-ai/@cf/moonshotai/kimi-k2.6", name: "Kimi K2.6", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.16, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:workers-ai/@cf/moonshotai/kimi-k2.7-code": { id: "workers-ai/@cf/moonshotai/kimi-k2.7-code", name: "Kimi K2.7 Code", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.19, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:workers-ai/@cf/nvidia/nemotron-3-120b-a12b": { id: "workers-ai/@cf/nvidia/nemotron-3-120b-a12b", name: "Nemotron 3 Super 120B", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text"], cost: { input: 0.5, output: 1.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 256e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:workers-ai/@cf/openai/gpt-oss-120b": { id: "workers-ai/@cf/openai/gpt-oss-120b", name: "GPT OSS 120B", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text"], cost: { input: 0.35, output: 0.75, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:workers-ai/@cf/openai/gpt-oss-20b": { id: "workers-ai/@cf/openai/gpt-oss-20b", name: "GPT OSS 20B", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text"], cost: { input: 0.2, output: 0.3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:workers-ai/@cf/qwen/qwen3-30b-a3b-fp8": { id: "workers-ai/@cf/qwen/qwen3-30b-a3b-fp8", name: "Qwen3 30B A3b fp8", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text"], cost: { input: 0.0509, output: 0.335, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32768, maxTokens: 32768, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:workers-ai/@cf/qwen/qwen3.8-27b": { id: "workers-ai/@cf/qwen/qwen3.8-27b", name: "Qwen3.8 27B", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text", "image"], cost: { input: 0.45, output: 3.2, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:workers-ai/@cf/zai-org/glm-4.7-flash": { id: "workers-ai/@cf/zai-org/glm-4.7-flash", name: "GLM-4.7-Flash", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text"], cost: { input: 0.0605, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:workers-ai/@cf/zai-org/glm-5.2": { id: "workers-ai/@cf/zai-org/glm-5.2", name: "Glm 5.2", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:workers-ai/@cf/zai-org/glm-5.3": { id: "workers-ai/@cf/zai-org/glm-5.3", name: "Glm 5.3", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:workers-ai/@cf/zai-org/glm-5.3-flash": { id: "workers-ai/@cf/zai-org/glm-5.3-flash", name: "Glm 5.3 Flash", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "openai-responses": { "chat:gpt-4.1": { id: "gpt-4.1", name: "GPT-4.1", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: false, input: ["text", "image"], cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, compat: { supportsStrictMode: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4.1-mini": { id: "gpt-4.1-mini", name: "GPT-4.1 mini", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: false, input: ["text", "image"], cost: { input: 0.4, output: 1.6, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, compat: { supportsStrictMode: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4.1-nano": { id: "gpt-4.1-nano", name: "GPT-4.1 nano", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: false, input: ["text", "image"], cost: { input: 0.1, output: 0.4, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 32768, compat: { supportsStrictMode: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o": { id: "gpt-4o", name: "GPT-4o", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: false, input: ["text", "image"], cost: { input: 1.25, output: 5, cacheRead: 0.625, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStrictMode: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o-mini": { id: "gpt-4o-mini", name: "GPT-4o mini", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: false, input: ["text", "image"], cost: { input: 0.075, output: 0.3, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStrictMode: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5": { id: "gpt-5", name: "GPT-5", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-mini": { id: "gpt-5-mini", name: "GPT-5 Mini", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 0.25, output: 2, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-nano": { id: "gpt-5-nano", name: "GPT-5 Nano", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 0.05, output: 0.4, cacheRead: 5e-3, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.1": { id: "gpt-5.1", name: "GPT-5.1", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4": { id: "gpt-5.4", name: "GPT-5.4", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-mini": { id: "gpt-5.4-mini", name: "GPT-5.4 mini", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-nano": { id: "gpt-5.4-nano", name: "GPT-5.4 nano", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.25, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-pro": { id: "gpt-5.4-pro", name: "GPT-5.4 Pro", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 30, output: 180, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.5": { id: "gpt-5.5", name: "GPT-5.5", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 30, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.5-pro": { id: "gpt-5.5-pro", name: "GPT-5.5 Pro", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 30, output: 180, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-luna": { id: "gpt-5.6-luna", name: "GPT-5.6 Luna", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 272e3, input: 0.4, output: 1.8, cacheRead: 0.04, cacheWrite: 0.5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-sol": { id: "gpt-5.6-sol", name: "GPT-5.6 Sol", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-terra": { id: "gpt-5.6-terra", name: "GPT-5.6 Terra", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-astra": { id: "gpt-6-astra", name: "GPT-6 Astra", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5, tiers: [{ inputTokensAbove: 272e3, input: 20, output: 75, cacheRead: 2, cacheWrite: 25 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-luna": { id: "gpt-6-luna", name: "GPT-6 Luna", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-sol": { id: "gpt-6-sol", name: "GPT-6 Sol", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-sol": { id: "gpt-6.1-sol", name: "GPT-6.1 Sol", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-terra": { id: "gpt-6.1-terra", name: "GPT-6.1 Terra", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o3": { id: "o3", name: "o3", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o3-mini": { id: "o3-mini", name: "o3-mini", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text"], cost: { input: 1.1, output: 4.4, cacheRead: 0.55, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true }, type: "chat" }, "chat:o4-mini": { id: "o4-mini", name: "o4-mini", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 1.1, output: 4.4, cacheRead: 0.275, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.js +var CLOUDFLARE_AI_GATEWAY_MODELS = flattenChatModelCatalog("cloudflare-ai-gateway", cloudflare_ai_gateway_default); +var CLOUDFLARE_AI_GATEWAY_IMAGE_MODELS = flattenImageModelCatalog("cloudflare-ai-gateway", cloudflare_ai_gateway_default); +var CLOUDFLARE_AI_GATEWAY_CLASSIFIER_MODELS = flattenClassifierModelCatalog("cloudflare-ai-gateway", cloudflare_ai_gateway_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.json +var cloudflare_workers_ai_default = { "cloudflare-workers-ai-system-one": { "classifier:@cf/cloudflare/clef": { type: "classifier", id: "@cf/cloudflare/clef", name: "Clef", api: "cloudflare-workers-ai-system-one", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai", input: ["text", "image"], cost: { input: 0.24, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 65536, compat: { imageInput: "images" } }, "classifier:@cf/cloudflare/clef-flash": { type: "classifier", id: "@cf/cloudflare/clef-flash", name: "Clef Flash", api: "cloudflare-workers-ai-system-one", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai", input: ["text", "image"], cost: { input: 0.038, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 24576, compat: { imageInput: "images" } }, "classifier:@cf/cloudflare/clef-omni": { type: "classifier", id: "@cf/cloudflare/clef-omni", name: "Clef Omni", api: "cloudflare-workers-ai-system-one", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai", input: ["text", "image"], cost: { input: 0.15, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 64e3, compat: { imageInput: "images" } }, "classifier:typesafe/jev": { type: "classifier", id: "typesafe/jev", name: "Jev", api: "cloudflare-workers-ai-system-one", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai", input: ["text", "image"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32e3, compat: { imageInput: "assets" } }, "classifier:typesafe/jev-1.14.0": { type: "classifier", id: "typesafe/jev-1.14.0", name: "Jev 1.14", api: "cloudflare-workers-ai-system-one", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai", input: ["text", "image"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32e3, compat: { imageInput: "assets" } } }, "openai-completions": { "chat:@cf/deepseek-ai/deepseek-v4-flash-0731": { id: "@cf/deepseek-ai/deepseek-v4-flash-0731", name: "DeepSeek V4 Flash 0731", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text"], cost: { input: 0.44, output: 1.32, cacheRead: 0.014, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", max: "max" }, type: "chat" }, "chat:@cf/deepseek-ai/deepseek-v4-pro-0813": { id: "@cf/deepseek-ai/deepseek-v4-pro-0813", name: "DeepSeek V4 Pro 0813", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text"], cost: { input: 1.32, output: 3.96, cacheRead: 0.044, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", max: "max" }, type: "chat" }, "chat:@cf/deepseek-ai/deepseek-v4.1-flash-1017": { id: "@cf/deepseek-ai/deepseek-v4.1-flash-1017", name: "DeepSeek V4.1 Flash 1017", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:@cf/google/gemma-4-26b-a4b-it": { id: "@cf/google/gemma-4-26b-a4b-it", name: "Gemma 4 26B A4B IT", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.3, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 16384, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:@cf/ibm-granite/granite-4.0-h-micro": { id: "@cf/ibm-granite/granite-4.0-h-micro", name: "Granite 4.0 H Micro", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: false, input: ["text"], cost: { input: 0.017, output: 0.112, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131e3, maxTokens: 131e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:@cf/meta/llama-3.3-70b-instruct-fp8-fast": { id: "@cf/meta/llama-3.3-70b-instruct-fp8-fast", name: "Llama 3.3 70B Instruct fp8 Fast", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: false, input: ["text"], cost: { input: 0.293, output: 2.253, cacheRead: 0, cacheWrite: 0 }, contextWindow: 24e3, maxTokens: 24e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:@cf/meta/llama-4-scout-17b-16e-instruct": { id: "@cf/meta/llama-4-scout-17b-16e-instruct", name: "Llama 4 Scout 17B 16E Instruct", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: false, input: ["text", "image"], cost: { input: 0.27, output: 0.85, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131e3, maxTokens: 16384, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:@cf/mistralai/mistral-small-3.1-24b-instruct": { id: "@cf/mistralai/mistral-small-3.1-24b-instruct", name: "Mistral Small 3.1 24B Instruct", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: false, input: ["text", "image"], cost: { input: 0.351, output: 0.555, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 128e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:@cf/moonshotai/kimi-k2.6": { id: "@cf/moonshotai/kimi-k2.6", name: "Kimi K2.6", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.16, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:@cf/moonshotai/kimi-k2.7-code": { id: "@cf/moonshotai/kimi-k2.7-code", name: "Kimi K2.7 Code", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.19, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:@cf/nvidia/nemotron-3-120b-a12b": { id: "@cf/nvidia/nemotron-3-120b-a12b", name: "Nemotron 3 Super 120B", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text"], cost: { input: 0.5, output: 1.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 256e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: null }, type: "chat" }, "chat:@cf/openai/gpt-oss-120b": { id: "@cf/openai/gpt-oss-120b", name: "GPT OSS 120B", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text"], cost: { input: 0.35, output: 0.75, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:@cf/openai/gpt-oss-20b": { id: "@cf/openai/gpt-oss-20b", name: "GPT OSS 20B", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text"], cost: { input: 0.2, output: 0.3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:@cf/qwen/qwen3-30b-a3b-fp8": { id: "@cf/qwen/qwen3-30b-a3b-fp8", name: "Qwen3 30B A3b fp8", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text"], cost: { input: 0.0509, output: 0.335, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32768, maxTokens: 32768, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:@cf/qwen/qwen3.8-27b": { id: "@cf/qwen/qwen3.8-27b", name: "Qwen3.8 27B", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.45, output: 3.2, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:@cf/zai-org/glm-4.7-flash": { id: "@cf/zai-org/glm-4.7-flash", name: "GLM-4.7-Flash", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text"], cost: { input: 0.0605, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:@cf/zai-org/glm-5.2": { id: "@cf/zai-org/glm-5.2", name: "Glm 5.2", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:@cf/zai-org/glm-5.3": { id: "@cf/zai-org/glm-5.3", name: "Glm 5.3", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:@cf/zai-org/glm-5.3-flash": { id: "@cf/zai-org/glm-5.3-flash", name: "Glm 5.3 Flash", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-workers-ai.models.js +var CLOUDFLARE_WORKERS_AI_MODELS = flattenChatModelCatalog("cloudflare-workers-ai", cloudflare_workers_ai_default); +var CLOUDFLARE_WORKERS_AI_IMAGE_MODELS = flattenImageModelCatalog("cloudflare-workers-ai", cloudflare_workers_ai_default); +var CLOUDFLARE_WORKERS_AI_CLASSIFIER_MODELS = flattenClassifierModelCatalog("cloudflare-workers-ai", cloudflare_workers_ai_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/deepseek.json +var deepseek_default = { "openai-completions": { "chat:deepseek-flash": { id: "deepseek-flash", name: "DeepSeek V4.1 Flash", api: "openai-completions", baseUrl: "https://api.deepseek.com", provider: "deepseek", reasoning: true, thinkingLevelMap: { minimal: null, low: "low", medium: null, high: "high", max: "max" }, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStore: false, supportsDeveloperRole: false, maxTokensField: "max_tokens", requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek", supportsStrictMode: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek-v4-pro": { id: "deepseek-v4-pro", name: "DeepSeek V4 Pro", api: "openai-completions", baseUrl: "https://api.deepseek.com", provider: "deepseek", reasoning: true, input: ["text"], cost: { input: 1.32, output: 3.96, cacheRead: 0.044, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStore: false, supportsDeveloperRole: false, maxTokensField: "max_tokens", requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek", supportsStrictMode: true, supportsMidConvoSystemMessages: true }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", max: "max" }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.js +var DEEPSEEK_MODELS = flattenChatModelCatalog("deepseek", deepseek_default); +var DEEPSEEK_IMAGE_MODELS = flattenImageModelCatalog("deepseek", deepseek_default); +var DEEPSEEK_CLASSIFIER_MODELS = flattenClassifierModelCatalog("deepseek", deepseek_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +var fireworks_default = { "anthropic-messages": { "chat:accounts/fireworks/models/deepseek-v4p1-flash": { id: "accounts/fireworks/models/deepseek-v4p1-flash", name: "DeepSeek V4.1 Flash", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/models/deepseek-v4p1-flash-1017": { id: "accounts/fireworks/models/deepseek-v4p1-flash-1017", name: "DeepSeek V4.1 Flash 1017", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/models/ember-1": { id: "accounts/fireworks/models/ember-1", name: "Ember-1", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/models/gpt-oss-120b": { id: "accounts/fireworks/models/gpt-oss-120b", name: "GPT OSS 120B", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text"], cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:accounts/fireworks/models/inkling": { id: "accounts/fireworks/models/inkling", name: "Inkling", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 4.05, cacheRead: 0.17, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/models/minimax-m3": { id: "accounts/fireworks/models/minimax-m3", name: "MiniMax-M3", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 512e3, maxTokens: 512e3, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:accounts/fireworks/models/minimax-m3p1-flash": { id: "accounts/fireworks/models/minimax-m3p1-flash", name: "MiniMax-M3.1-Flash", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 512e3, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/models/muse-spark-open": { id: "accounts/fireworks/models/muse-spark-open", name: "Muse Spark Open", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/models/nemotron-3-ultra-nvfp4": { id: "accounts/fireworks/models/nemotron-3-ultra-nvfp4", name: "Nemotron 3 Ultra 550B A55B", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text"], cost: { input: 0.6, output: 2.4, cacheRead: 0.12, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 128e3, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false }, type: "chat" }, "chat:accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b": { id: "accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b", name: "Nemotron 3.5 Lightning 30B A3B", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text"], cost: { input: 0.05, output: 0.2, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false }, type: "chat" }, "chat:accounts/fireworks/models/qwen3p8-2p4t-a95b": { id: "accounts/fireworks/models/qwen3p8-2p4t-a95b", name: "Qwen3.8 2.4T A95B", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text"], cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, type: "chat" }, "chat:accounts/fireworks/models/qwen3p8-max": { id: "accounts/fireworks/models/qwen3p8-max", name: "Qwen3.8 Max", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/routers/deepseek-flash-latest": { id: "accounts/fireworks/routers/deepseek-flash-latest", name: "DeepSeek Flash Latest", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/routers/deepseek-v4p1-flash-1017-spot": { id: "accounts/fireworks/routers/deepseek-v4p1-flash-1017-spot", name: "DeepSeek V4.1 Flash 1017 Spot", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 0.21, output: 0.84, cacheRead: 42e-4, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/routers/deepseek-v4p1-flash-spot": { id: "accounts/fireworks/routers/deepseek-v4p1-flash-spot", name: "DeepSeek V4.1 Flash Spot", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 0.21, output: 0.84, cacheRead: 42e-4, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/routers/kimi-fast-latest": { id: "accounts/fireworks/routers/kimi-fast-latest", name: "Kimi Fast Latest", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 4.5, output: 22.5, cacheRead: 0.45, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/routers/kimi-latest": { id: "accounts/fireworks/routers/kimi-latest", name: "Kimi Latest", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/routers/minimax-latest": { id: "accounts/fireworks/routers/minimax-latest", name: "MiniMax Latest", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 512e3, maxTokens: 512e3, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:accounts/fireworks/routers/qwen-max-latest": { id: "accounts/fireworks/routers/qwen-max-latest", name: "Qwen Max Latest (Qwen3.8 Max)", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "openai-completions": { "chat:accounts/fireworks/models/glm-5p3": { id: "accounts/fireworks/models/glm-5p3", name: "GLM 5.3", api: "openai-completions", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1048573, maxTokens: 262144, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, sendSessionAffinityHeaders: true, supportsLongCacheRetention: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:accounts/fireworks/models/glm-5p3-flash": { id: "accounts/fireworks/models/glm-5p3-flash", name: "GLM 5.3 Flash", api: "openai-completions", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048573, maxTokens: 131072, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, sendSessionAffinityHeaders: true, supportsLongCacheRetention: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/models/kimi-k3": { id: "accounts/fireworks/models/kimi-k3", name: "Kimi K3", api: "openai-completions", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference/v1", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "openai", supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/routers/glm-5p3-fast": { id: "accounts/fireworks/routers/glm-5p3-fast", name: "GLM 5.3 Fast", api: "openai-completions", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference/v1", reasoning: true, input: ["text"], cost: { input: 2.1, output: 6.6, cacheRead: 0.39, cacheWrite: 0 }, contextWindow: 1048572, maxTokens: 262144, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, sendSessionAffinityHeaders: true, supportsLongCacheRetention: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:accounts/fireworks/routers/glm-5p3-spot": { id: "accounts/fireworks/routers/glm-5p3-spot", name: "GLM 5.3 Spot", api: "openai-completions", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference/v1", reasoning: true, input: ["text"], cost: { input: 0.98, output: 3.08, cacheRead: 0.182, cacheWrite: 0 }, contextWindow: 1048573, maxTokens: 262144, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, sendSessionAffinityHeaders: true, supportsLongCacheRetention: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:accounts/fireworks/routers/glm-fast-latest": { id: "accounts/fireworks/routers/glm-fast-latest", name: "GLM 5.3 Fast (Latest)", api: "openai-completions", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference/v1", reasoning: true, input: ["text"], cost: { input: 2.1, output: 6.6, cacheRead: 0.39, cacheWrite: 0 }, contextWindow: 1048572, maxTokens: 262144, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, sendSessionAffinityHeaders: true, supportsLongCacheRetention: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:accounts/fireworks/routers/glm-flash-latest": { id: "accounts/fireworks/routers/glm-flash-latest", name: "GLM Flash Latest (GLM 5.3 Flash)", api: "openai-completions", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048573, maxTokens: 131072, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, sendSessionAffinityHeaders: true, supportsLongCacheRetention: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/routers/glm-latest": { id: "accounts/fireworks/routers/glm-latest", name: "GLM Latest", api: "openai-completions", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1048573, maxTokens: 262144, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, sendSessionAffinityHeaders: true, supportsLongCacheRetention: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:accounts/fireworks/routers/kimi-k3-fast": { id: "accounts/fireworks/routers/kimi-k3-fast", name: "Kimi K3 Fast", api: "openai-completions", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference/v1", reasoning: true, input: ["text", "image"], cost: { input: 4.5, output: 22.5, cacheRead: 0.45, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "openai", supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/routers/kimi-k3-spot": { id: "accounts/fireworks/routers/kimi-k3-spot", name: "Kimi K3 Spot", api: "openai-completions", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference/v1", reasoning: true, input: ["text", "image"], cost: { input: 2.1, output: 10.5, cacheRead: 0.21, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "openai", supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.js +var FIREWORKS_MODELS = flattenChatModelCatalog("fireworks", fireworks_default); +var FIREWORKS_IMAGE_MODELS = flattenImageModelCatalog("fireworks", fireworks_default); +var FIREWORKS_CLASSIFIER_MODELS = flattenClassifierModelCatalog("fireworks", fireworks_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/github-copilot.json +var github_copilot_default = { "anthropic-messages": { "chat:claude-fable-5": { id: "claude-fable-5", name: "Claude Fable 5", api: "anthropic-messages", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-fable-5.1": { id: "claude-fable-5.1", name: "Claude Fable 5.1", api: "anthropic-messages", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-haiku-4.5": { id: "claude-haiku-4.5", name: "Claude Haiku 4.5 (latest)", api: "anthropic-messages", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, contextWindow: 2e5, maxTokens: 64e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, compat: { supportsEagerToolInputStreaming: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-haiku-5.5": { id: "claude-haiku-5.5", name: "Claude Haiku 5.5", api: "anthropic-messages", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 1e5, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] }, contextWindow: 1e6, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4.8": { id: "claude-opus-4.8", name: "Claude Opus 4.8", api: "anthropic-messages", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 64e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { xhigh: "xhigh", max: "max", minimal: "low" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-5": { id: "claude-opus-5", name: "Claude Opus 5", api: "anthropic-messages", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 64e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { xhigh: "xhigh", max: "max", minimal: "low" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-5.5": { id: "claude-opus-5.5", name: "Claude Opus 5.5", api: "anthropic-messages", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5 }, contextWindow: 1e6, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-4.6": { id: "claude-sonnet-4.6", name: "Claude Sonnet 4.6", api: "anthropic-messages", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 1e6, maxTokens: 32e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { max: "max", minimal: "low" }, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-5": { id: "claude-sonnet-5", name: "Claude Sonnet 5", api: "anthropic-messages", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-5.5": { id: "claude-sonnet-5.5", name: "Claude Sonnet 5.5", api: "anthropic-messages", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "openai-completions": { "chat:gemini-3.8-flash": { id: "gemini-3.8-flash", name: "Gemini 3.8 Flash", api: "openai-completions", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 64e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-4-argon": { id: "gemini-4-argon", name: "Gemini 4 Argon", api: "openai-completions", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k3": { id: "kimi-k3", name: "Kimi K3", api: "openai-completions", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "openai-responses": { "chat:gpt-5.3-codex": { id: "gpt-5.3-codex", name: "GPT-5.3 Codex", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-nano": { id: "gpt-5.4-nano", name: "GPT-5.4 nano", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.25, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-luna": { id: "gpt-5.6-luna", name: "GPT-5.6 Luna", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 2e5, input: 0.4, output: 1.8, cacheRead: 0.04, cacheWrite: 0.5 }] }, contextWindow: 105e4, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-sol": { id: "gpt-5.6-sol", name: "GPT-5.6 Sol", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 105e4, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-terra": { id: "gpt-5.6-terra", name: "GPT-5.6 Terra", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-astra": { id: "gpt-6-astra", name: "GPT-6 Astra", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5, tiers: [{ inputTokensAbove: 272e3, input: 20, output: 75, cacheRead: 2, cacheWrite: 25 }] }, contextWindow: 1e6, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-luna": { id: "gpt-6-luna", name: "GPT-6 Luna", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 1e6, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-sol": { id: "gpt-6-sol", name: "GPT-6 Sol", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 1e6, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-sol": { id: "gpt-6.1-sol", name: "GPT-6.1 Sol", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-terra": { id: "gpt-6.1-terra", name: "GPT-6.1 Terra", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-4.5": { id: "grok-4.5", name: "Grok 4.5", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-4.6": { id: "grok-4.6", name: "Grok 4.6", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-4.7": { id: "grok-4.7", name: "Grok 4.7", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mai-code-1.1-flash": { id: "mai-code-1.1-flash", name: "MAI-Code-1.1-Flash", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.js +var GITHUB_COPILOT_MODELS = flattenChatModelCatalog("github-copilot", github_copilot_default); +var GITHUB_COPILOT_IMAGE_MODELS = flattenImageModelCatalog("github-copilot", github_copilot_default); +var GITHUB_COPILOT_CLASSIFIER_MODELS = flattenClassifierModelCatalog("github-copilot", github_copilot_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/google.json +var google_default = { "google-generative-ai": { "chat:deep-research-max-preview-04-2026": { id: "deep-research-max-preview-04-2026", name: "Deep Research Max Preview (Apr-21-2026)", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 131072, maxTokens: 65536, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deep-research-preview-04-2026": { id: "deep-research-preview-04-2026", name: "Deep Research Preview (Apr-21-2026)", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 131072, maxTokens: 65536, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-2.5-computer-use-preview-10-2025": { id: "gemini-2.5-computer-use-preview-10-2025", name: "Gemini 2.5 Computer Use Preview 10-2025", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 15, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 128e3, maxTokens: 64e3, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-2.5-flash": { id: "gemini-2.5-flash", name: "Gemini 2.5 Flash", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-2.5-flash-lite": { id: "gemini-2.5-flash-lite", name: "Gemini 2.5 Flash-Lite", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.4, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-2.5-pro": { id: "gemini-2.5-pro", name: "Gemini 2.5 Pro", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0 }] }, contextWindow: 1048576, maxTokens: 65536, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3-flash-preview": { id: "gemini-3-flash-preview", name: "Gemini 3 Flash Preview", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.5, output: 3, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.1-flash-lite": { id: "gemini-3.1-flash-lite", name: "Gemini 3.1 Flash Lite", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.25, output: 1.5, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.1-flash-lite-preview": { id: "gemini-3.1-flash-lite-preview", name: "Gemini 3.1 Flash Lite Preview", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.25, output: 1.5, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.1-pro-preview": { id: "gemini-3.1-pro-preview", name: "Gemini 3.1 Pro Preview", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.1-pro-preview-customtools": { id: "gemini-3.1-pro-preview-customtools", name: "Gemini 3.1 Pro Preview Custom Tools", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.5-flash": { id: "gemini-3.5-flash", name: "Gemini 3.5 Flash", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 1.5, output: 9, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.5-flash-lite": { id: "gemini-3.5-flash-lite", name: "Gemini 3.5 Flash Lite", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.6-flash": { id: "gemini-3.6-flash", name: "Gemini 3.6 Flash", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.7-flash": { id: "gemini-3.7-flash", name: "Gemini 3.7 Flash", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.8-flash": { id: "gemini-3.8-flash", name: "Gemini 3.8 Flash", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-4-argon": { id: "gemini-4-argon", name: "Gemini 4 Argon", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 32768, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-flash-latest": { id: "gemini-flash-latest", name: "Gemini Flash Latest", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 1.5, output: 9, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-flash-lite-latest": { id: "gemini-flash-lite-latest", name: "Gemini Flash-Lite Latest", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.25, output: 1.5, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-pro-latest": { id: "gemini-pro-latest", name: "Gemini Pro Latest", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-robotics-er-2-preview": { id: "gemini-robotics-er-2-preview", name: "Gemini Robotics-ER 2 Preview", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemma-4-26b-a4b-it": { id: "gemma-4-26b-a4b-it", name: "Gemma 4 26B A4B IT", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, thinkingLevelMap: { off: null, minimal: "MINIMAL", low: null, medium: null, high: "HIGH" }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemma-4-31b-it": { id: "gemma-4-31b-it", name: "Gemma 4 31B IT", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, thinkingLevelMap: { off: null, minimal: "MINIMAL", low: null, medium: null, high: "HIGH" }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/google.models.js +var GOOGLE_MODELS = flattenChatModelCatalog("google", google_default); +var GOOGLE_IMAGE_MODELS = flattenImageModelCatalog("google", google_default); +var GOOGLE_CLASSIFIER_MODELS = flattenClassifierModelCatalog("google", google_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/google-vertex.json +var google_vertex_default = { "google-vertex": { "chat:gemini-2.5-flash": { id: "gemini-2.5-flash", name: "Gemini 2.5 Flash", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-2.5-flash-lite": { id: "gemini-2.5-flash-lite", name: "Gemini 2.5 Flash-Lite", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.4, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-2.5-pro": { id: "gemini-2.5-pro", name: "Gemini 2.5 Pro", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3-flash-preview": { id: "gemini-3-flash-preview", name: "Gemini 3 Flash Preview", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 0.5, output: 3, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.1-flash-lite": { id: "gemini-3.1-flash-lite", name: "Gemini 3.1 Flash Lite", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 0.25, output: 1.5, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.1-pro-preview": { id: "gemini-3.1-pro-preview", name: "Gemini 3.1 Pro Preview", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.1-pro-preview-customtools": { id: "gemini-3.1-pro-preview-customtools", name: "Gemini 3.1 Pro Preview Custom Tools", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.5-flash": { id: "gemini-3.5-flash", name: "Gemini 3.5 Flash", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 1.5, output: 9, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.5-flash-lite": { id: "gemini-3.5-flash-lite", name: "Gemini 3.5 Flash Lite", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.6-flash": { id: "gemini-3.6-flash", name: "Gemini 3.6 Flash", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.7-flash": { id: "gemini-3.7-flash", name: "Gemini 3.7 Flash", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.8-flash": { id: "gemini-3.8-flash", name: "Gemini 3.8 Flash", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-4-argon": { id: "gemini-4-argon", name: "Gemini 4 Argon", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.models.js +var GOOGLE_VERTEX_MODELS = flattenChatModelCatalog("google-vertex", google_vertex_default); +var GOOGLE_VERTEX_IMAGE_MODELS = flattenImageModelCatalog("google-vertex", google_vertex_default); +var GOOGLE_VERTEX_CLASSIFIER_MODELS = flattenClassifierModelCatalog("google-vertex", google_vertex_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/groq.json +var groq_default = { "openai-completions": { "chat:llama-3.1-8b-instant": { id: "llama-3.1-8b-instant", name: "Llama 3.1 8B", api: "openai-completions", provider: "groq", baseUrl: "https://api.groq.com/openai/v1", reasoning: false, input: ["text"], cost: { input: 0.05, output: 0.08, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, compat: { supportsStrictMode: true }, type: "chat" }, "chat:llama-3.3-70b-versatile": { id: "llama-3.3-70b-versatile", name: "Llama 3.3 70B", api: "openai-completions", provider: "groq", baseUrl: "https://api.groq.com/openai/v1", reasoning: false, input: ["text"], cost: { input: 0.59, output: 0.79, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsStrictMode: true }, type: "chat" }, "chat:openai/gpt-oss-120b": { id: "openai/gpt-oss-120b", name: "GPT OSS 120B", api: "openai-completions", provider: "groq", baseUrl: "https://api.groq.com/openai/v1", reasoning: true, input: ["text"], cost: { input: 0.15, output: 0.6, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 65536, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:openai/gpt-oss-20b": { id: "openai/gpt-oss-20b", name: "GPT OSS 20B", api: "openai-completions", provider: "groq", baseUrl: "https://api.groq.com/openai/v1", reasoning: true, input: ["text"], cost: { input: 0.075, output: 0.3, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 65536, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:openai/gpt-oss-safeguard-20b": { id: "openai/gpt-oss-safeguard-20b", name: "Safety GPT OSS 20B", api: "openai-completions", provider: "groq", baseUrl: "https://api.groq.com/openai/v1", reasoning: true, input: ["text"], cost: { input: 0.075, output: 0.3, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 65536, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:qwen/qwen3.6-27b": { id: "qwen/qwen3.6-27b", name: "Qwen3.6 27B", api: "openai-completions", provider: "groq", baseUrl: "https://api.groq.com/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.6, output: 3, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "default", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen/qwen3.8-27b": { id: "qwen/qwen3.8-27b", name: "Qwen3.8 27B", api: "openai-completions", provider: "groq", baseUrl: "https://api.groq.com/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.8, output: 4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/groq.models.js +var GROQ_MODELS = flattenChatModelCatalog("groq", groq_default); +var GROQ_IMAGE_MODELS = flattenImageModelCatalog("groq", groq_default); +var GROQ_CLASSIFIER_MODELS = flattenClassifierModelCatalog("groq", groq_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +var huggingface_default = { "openai-completions": { "chat:deepseek-ai/DeepSeek-R1": { id: "deepseek-ai/DeepSeek-R1", name: "DeepSeek-R1", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.7, output: 2.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 64e3, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:deepseek-ai/DeepSeek-R1-0528": { id: "deepseek-ai/DeepSeek-R1-0528", name: "DeepSeek-R1-0528", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 3, output: 5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 163840, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V3": { id: "deepseek-ai/DeepSeek-V3", name: "DeepSeek-V3", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 0.4, output: 1.3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 64e3, maxTokens: 8192, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V3-0324": { id: "deepseek-ai/DeepSeek-V3-0324", name: "DeepSeek V3 0324", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 0.27, output: 1.12, cacheRead: 0, cacheWrite: 0 }, contextWindow: 163840, maxTokens: 163840, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V3.1": { id: "deepseek-ai/DeepSeek-V3.1", name: "DeepSeek-V3.1", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.27, output: 1, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 8192, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V3.2": { id: "deepseek-ai/DeepSeek-V3.2", name: "DeepSeek-V3.2", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.28, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 163840, maxTokens: 65536, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4-Flash": { id: "deepseek-ai/DeepSeek-V4-Flash", name: "DeepSeek V4 Flash", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.14, output: 0.28, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 384e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4-Flash-0731": { id: "deepseek-ai/DeepSeek-V4-Flash-0731", name: "DeepSeek V4 Flash 0731", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.14, output: 0.28, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 384e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4-Flash-Vision-Exp": { id: "deepseek-ai/DeepSeek-V4-Flash-Vision-Exp", name: "DeepSeek V4 Flash Vision Exp", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.44, output: 1.32, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 384e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4-Pro": { id: "deepseek-ai/DeepSeek-V4-Pro", name: "DeepSeek V4 Pro", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.435, output: 0.87, cacheRead: 3625e-6, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 393216, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4-Pro-0813": { id: "deepseek-ai/DeepSeek-V4-Pro-0813", name: "DeepSeek V4 Pro 0813", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 1.32, output: 3.96, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4.1-Flash": { id: "deepseek-ai/DeepSeek-V4.1-Flash", name: "DeepSeek V4.1 Flash", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 384e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4.1-Flash-1017": { id: "deepseek-ai/DeepSeek-V4.1-Flash-1017", name: "DeepSeek V4.1 Flash 1017", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 384e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemma-3-12b-it": { id: "google/gemma-3-12b-it", name: "Gemma 3 12B IT", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text", "image"], cost: { input: 0.05, output: 0.15, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemma-3-27b-it": { id: "google/gemma-3-27b-it", name: "Gemma 3 27B IT", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text", "image"], cost: { input: 0.08, output: 0.16, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemma-3-4b-it": { id: "google/gemma-3-4b-it", name: "Gemma 3 4B IT", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text", "image"], cost: { input: 0.05, output: 0.1, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemma-4-26B-A4B-it": { id: "google/gemma-4-26B-A4B-it", name: "Gemma 4 26B A4B IT", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.13, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemma-4-31B-it": { id: "google/gemma-4-31B-it", name: "Gemma 4 31B IT", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.14, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta-llama/Llama-3.1-8B-Instruct": { id: "meta-llama/Llama-3.1-8B-Instruct", name: "Llama-3.1-8B-Instruct", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 0.06, output: 0.06, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 4096, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:meta-llama/Llama-3.3-70B-Instruct": { id: "meta-llama/Llama-3.3-70B-Instruct", name: "Llama-3.3-70B-Instruct", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 0.59, output: 0.79, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 4096, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:MiniMaxAI/MiniMax-M1-80k": { id: "MiniMaxAI/MiniMax-M1-80k", name: "MiniMax M1 80K", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.55, output: 2.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 8e4, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:MiniMaxAI/MiniMax-M2": { id: "MiniMaxAI/MiniMax-M2", name: "MiniMax-M2", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:MiniMaxAI/MiniMax-M2.1": { id: "MiniMaxAI/MiniMax-M2.1", name: "MiniMax-M2.1", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:MiniMaxAI/MiniMax-M2.5": { id: "MiniMaxAI/MiniMax-M2.5", name: "MiniMax-M2.5", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:MiniMaxAI/MiniMax-M2.7": { id: "MiniMaxAI/MiniMax-M2.7", name: "MiniMax-M2.7", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:MiniMaxAI/MiniMax-M3": { id: "MiniMaxAI/MiniMax-M3", name: "MiniMax-M3", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 524288, maxTokens: 512e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:MiniMaxAI/MiniMax-M3.1-Flash": { id: "MiniMaxAI/MiniMax-M3.1-Flash", name: "MiniMax-M3.1-Flash", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 512e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/Kimi-K2-Instruct": { id: "moonshotai/Kimi-K2-Instruct", name: "Kimi-K2-Instruct", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 1, output: 3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:moonshotai/Kimi-K2-Instruct-0905": { id: "moonshotai/Kimi-K2-Instruct-0905", name: "Kimi-K2-Instruct-0905", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 1, output: 3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 16384, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:moonshotai/Kimi-K2-Thinking": { id: "moonshotai/Kimi-K2-Thinking", name: "Kimi-K2-Thinking", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.6, output: 2.5, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:moonshotai/Kimi-K2.5": { id: "moonshotai/Kimi-K2.5", name: "Kimi-K2.5", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.6, output: 3, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/Kimi-K2.6": { id: "moonshotai/Kimi-K2.6", name: "Kimi-K2.6", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.16, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/Kimi-K2.7-Code": { id: "moonshotai/Kimi-K2.7-Code", name: "Kimi K2.7 Code", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/Kimi-K3": { id: "moonshotai/Kimi-K3", name: "Kimi K3", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-oss-120b": { id: "openai/gpt-oss-120b", name: "GPT OSS 120B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.25, output: 0.69, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:openai/gpt-oss-20b": { id: "openai/gpt-oss-20b", name: "GPT OSS 20B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.1, output: 0.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:Qwen/Qwen2.5-Coder-32B-Instruct": { id: "Qwen/Qwen2.5-Coder-32B-Instruct", name: "Qwen2.5-Coder-32B-Instruct", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 0.06, output: 0.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 8192, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:Qwen/Qwen3-235B-A22B": { id: "Qwen/Qwen3-235B-A22B", name: "Qwen3 235B-A22B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.2, output: 0.8, cacheRead: 0, cacheWrite: 0 }, contextWindow: 40960, maxTokens: 16384, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:Qwen/Qwen3-235B-A22B-Instruct-2507": { id: "Qwen/Qwen3-235B-A22B-Instruct-2507", name: "Qwen3 235B-A22B Instruct 2507", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 0.855, output: 2.565, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 16384, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:Qwen/Qwen3-235B-A22B-Thinking-2507": { id: "Qwen/Qwen3-235B-A22B-Thinking-2507", name: "Qwen3-235B-A22B-Thinking-2507", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.3, output: 3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 81920, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:Qwen/Qwen3-30B-A3B": { id: "Qwen/Qwen3-30B-A3B", name: "Qwen3 30B A3B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.12, output: 0.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 40960, maxTokens: 16384, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:Qwen/Qwen3-32B": { id: "Qwen/Qwen3-32B", name: "Qwen3 32B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.29, output: 0.59, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:Qwen/Qwen3-8B": { id: "Qwen/Qwen3-8B", name: "Qwen3 8B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.07, output: 0.18, cacheRead: 0, cacheWrite: 0 }, contextWindow: 40960, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:Qwen/Qwen3-Coder-30B-A3B-Instruct": { id: "Qwen/Qwen3-Coder-30B-A3B-Instruct", name: "Qwen3-Coder 30B-A3B Instruct", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 0.07, output: 0.26, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:Qwen/Qwen3-Coder-480B-A35B-Instruct": { id: "Qwen/Qwen3-Coder-480B-A35B-Instruct", name: "Qwen3-Coder-480B-A35B-Instruct", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 2, output: 2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:Qwen/Qwen3-Coder-Next": { id: "Qwen/Qwen3-Coder-Next", name: "Qwen3-Coder-Next", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 0.2, output: 1.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:Qwen/Qwen3-Next-80B-A3B-Instruct": { id: "Qwen/Qwen3-Next-80B-A3B-Instruct", name: "Qwen3-Next-80B-A3B-Instruct", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 0.25, output: 1, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:Qwen/Qwen3-VL-235B-A22B-Instruct": { id: "Qwen/Qwen3-VL-235B-A22B-Instruct", name: "Qwen3 VL 235B A22B Instruct", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text", "image"], cost: { input: 0.3, output: 1.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:Qwen/Qwen3-VL-235B-A22B-Thinking": { id: "Qwen/Qwen3-VL-235B-A22B-Thinking", name: "Qwen3 VL 235B A22B Thinking", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.98, output: 3.95, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:Qwen/Qwen3-VL-30B-A3B-Instruct": { id: "Qwen/Qwen3-VL-30B-A3B-Instruct", name: "Qwen3 VL 30B A3B Instruct", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text", "image"], cost: { input: 0.2, output: 0.7, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:Qwen/Qwen3.5-122B-A10B": { id: "Qwen/Qwen3.5-122B-A10B", name: "Qwen3.5 122B-A10B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.4, output: 3.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:Qwen/Qwen3.5-27B": { id: "Qwen/Qwen3.5-27B", name: "Qwen3.5 27B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 2.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:Qwen/Qwen3.5-35B-A3B": { id: "Qwen/Qwen3.5-35B-A3B", name: "Qwen3.5 35B-A3B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.25, output: 2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:Qwen/Qwen3.5-397B-A17B": { id: "Qwen/Qwen3.5-397B-A17B", name: "Qwen3.5-397B-A17B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.6, output: 3.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:Qwen/Qwen3.5-9B": { id: "Qwen/Qwen3.5-9B", name: "Qwen3.5 9B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.17, output: 0.25, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:Qwen/Qwen3.6-27B": { id: "Qwen/Qwen3.6-27B", name: "Qwen3.6 27B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.47, output: 3.19, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:Qwen/Qwen3.6-35B-A3B": { id: "Qwen/Qwen3.6-35B-A3B", name: "Qwen3.6 35B-A3B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.95, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:Qwen/Qwen3.8-2.4T-A95B": { id: "Qwen/Qwen3.8-2.4T-A95B", name: "Qwen3.8 2.4T A95B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 2.5, output: 6.25, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, type: "chat" }, "chat:Qwen/Qwen3.8-27B": { id: "Qwen/Qwen3.8-27B", name: "Qwen3.8 27B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.4, output: 3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:stepfun-ai/Step-3.5-Flash": { id: "stepfun-ai/Step-3.5-Flash", name: "Step 3.5 Flash", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.1, output: 0.3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:stepfun-ai/Step-3.7-Flash": { id: "stepfun-ai/Step-3.7-Flash", name: "Step 3.7 Flash", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.15, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:tencent/Hy3": { id: "tencent/Hy3", name: "Hy3", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.14, output: 0.58, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 128e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: null }, type: "chat" }, "chat:tencent/Hy4-preview": { id: "tencent/Hy4-preview", name: "Hy4 preview", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.834, output: 2.501, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 64e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, type: "chat" }, "chat:thinkingmachines/Inkling": { id: "thinkingmachines/Inkling", name: "Inkling", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 4.05, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:thinkingmachines/Inkling-Small": { id: "thinkingmachines/Inkling-Small", name: "Inkling Small", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.5, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 524288, maxTokens: 1048576, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:XiaomiMiMo/MiMo-V2.5": { id: "XiaomiMiMo/MiMo-V2.5", name: "MiMo-V2.5", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.4, output: 2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, type: "chat" }, "chat:XiaomiMiMo/MiMo-V2.5-Pro": { id: "XiaomiMiMo/MiMo-V2.5-Pro", name: "MiMo-V2.5-Pro", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 1, output: 3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, type: "chat" }, "chat:zai-org/GLM-4.5-Air": { id: "zai-org/GLM-4.5-Air", name: "GLM-4.5-Air", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.13, output: 0.85, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 98304, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:zai-org/GLM-4.5V": { id: "zai-org/GLM-4.5V", name: "GLM-4.5V", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.6, output: 1.8, cacheRead: 0, cacheWrite: 0 }, contextWindow: 65536, maxTokens: 16384, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:zai-org/GLM-4.6": { id: "zai-org/GLM-4.6", name: "GLM-4.6", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.55, output: 2.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:zai-org/GLM-4.6V-Flash": { id: "zai-org/GLM-4.6V-Flash", name: "GLM-4.6V-Flash", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 0.9, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:zai-org/GLM-4.7": { id: "zai-org/GLM-4.7", name: "GLM-4.7", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.6, output: 2.2, cacheRead: 0.11, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:zai-org/GLM-4.7-Flash": { id: "zai-org/GLM-4.7-Flash", name: "GLM-4.7-Flash", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 128e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:zai-org/GLM-5": { id: "zai-org/GLM-5", name: "GLM-5", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 1, output: 3.2, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:zai-org/GLM-5.1": { id: "zai-org/GLM-5.1", name: "GLM-5.1", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 1, output: 3.2, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:zai-org/GLM-5.2": { id: "zai-org/GLM-5.2", name: "GLM-5.2", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:zai-org/GLM-5.3": { id: "zai-org/GLM-5.3", name: "GLM-5.3", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:zai-org/GLM-5.3-Flash": { id: "zai-org/GLM-5.3-Flash", name: "GLM-5.3-Flash", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/huggingface.models.js +var HUGGINGFACE_MODELS = flattenChatModelCatalog("huggingface", huggingface_default); +var HUGGINGFACE_IMAGE_MODELS = flattenImageModelCatalog("huggingface", huggingface_default); +var HUGGINGFACE_CLASSIFIER_MODELS = flattenClassifierModelCatalog("huggingface", huggingface_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/kimi-coding.json +var kimi_coding_default = { "openai-completions": { "chat:k3": { id: "k3", name: "Kimi K3", api: "openai-completions", provider: "kimi-coding", baseUrl: "https://api.kimi.com/coding/v1", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: false, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "openai", requiresReasoningContentOnAssistantMessages: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:k3-256k": { id: "k3-256k", name: "Kimi K3-256K", api: "openai-completions", provider: "kimi-coding", baseUrl: "https://api.kimi.com/coding/v1", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { supportsStrictMode: false, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "openai", requiresReasoningContentOnAssistantMessages: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:k3.1-pro": { id: "k3.1-pro", name: "Kimi K3.1 Pro", api: "openai-completions", provider: "kimi-coding", baseUrl: "https://api.kimi.com/coding/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: false, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "openai", requiresReasoningContentOnAssistantMessages: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:k3.1-pro-highspeed": { id: "k3.1-pro-highspeed", name: "Kimi K3.1 Pro Highspeed", api: "openai-completions", provider: "kimi-coding", baseUrl: "https://api.kimi.com/coding/v1", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: false, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "openai", requiresReasoningContentOnAssistantMessages: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-for-coding": { id: "kimi-for-coding", name: "kimi-for-coding", api: "openai-completions", provider: "kimi-coding", baseUrl: "https://api.kimi.com/coding/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.19, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 32768, compat: { supportsStrictMode: false, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "openai", requiresReasoningContentOnAssistantMessages: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-for-coding-highspeed": { id: "kimi-for-coding-highspeed", name: "Kimi For Coding HighSpeed", api: "openai-completions", provider: "kimi-coding", baseUrl: "https://api.kimi.com/coding/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.9, output: 8, cacheRead: 0.38, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsStrictMode: false, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "deepseek", supportsMidConvoSystemMessages: true }, thinkingLevelMap: { off: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.js +var KIMI_CODING_MODELS = flattenChatModelCatalog("kimi-coding", kimi_coding_default); +var KIMI_CODING_IMAGE_MODELS = flattenImageModelCatalog("kimi-coding", kimi_coding_default); +var KIMI_CODING_CLASSIFIER_MODELS = flattenClassifierModelCatalog("kimi-coding", kimi_coding_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/meta.json +var meta_default = { "openai-responses": { "chat:muse-spark-1.1": { id: "muse-spark-1.1", name: "Muse Spark 1.1", api: "openai-responses", provider: "meta", baseUrl: "https://api.meta.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:muse-spark-1.2": { id: "muse-spark-1.2", name: "Muse Spark 1.2", api: "openai-responses", provider: "meta", baseUrl: "https://api.meta.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:muse-spark-1.2-contributor": { id: "muse-spark-1.2-contributor", name: "Muse Spark 1.2 Contributor", api: "openai-responses", provider: "meta", baseUrl: "https://api.meta.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.2, cacheRead: 2e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:muse-spark-1.3": { id: "muse-spark-1.3", name: "Muse Spark 1.3", api: "openai-responses", provider: "meta", baseUrl: "https://api.meta.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:muse-spark-1.3-contributor": { id: "muse-spark-1.3-contributor", name: "Muse Spark 1.3 Contributor", api: "openai-responses", provider: "meta", baseUrl: "https://api.meta.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.2, cacheRead: 2e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:muse-wonder-1.0": { id: "muse-wonder-1.0", name: "Muse Wonder", api: "openai-responses", provider: "meta", baseUrl: "https://api.meta.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/meta.models.js +var META_MODELS = flattenChatModelCatalog("meta", meta_default); +var META_IMAGE_MODELS = flattenImageModelCatalog("meta", meta_default); +var META_CLASSIFIER_MODELS = flattenClassifierModelCatalog("meta", meta_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/minimax.json +var minimax_default = { "anthropic-messages": { "chat:MiniMax-M2.7": { id: "MiniMax-M2.7", name: "MiniMax-M2.7", api: "anthropic-messages", provider: "minimax", baseUrl: "https://api.minimax.io/anthropic", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0.375 }, contextWindow: 204800, maxTokens: 131072, type: "chat" }, "chat:MiniMax-M2.7-highspeed": { id: "MiniMax-M2.7-highspeed", name: "MiniMax-M2.7-highspeed", api: "anthropic-messages", provider: "minimax", baseUrl: "https://api.minimax.io/anthropic", reasoning: true, input: ["text"], cost: { input: 0.6, output: 2.4, cacheRead: 0.06, cacheWrite: 0.375 }, contextWindow: 204800, maxTokens: 131072, type: "chat" }, "chat:MiniMax-M3": { id: "MiniMax-M3", name: "MiniMax-M3", api: "anthropic-messages", provider: "minimax", baseUrl: "https://api.minimax.io/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0, tiers: [{ inputTokensAbove: 512e3, input: 0.6, output: 2.4, cacheRead: 0.12, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 524288, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:MiniMax-M3.1-Flash": { id: "MiniMax-M3.1-Flash", name: "MiniMax-M3.1-Flash", api: "anthropic-messages", provider: "minimax", baseUrl: "https://api.minimax.io/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 524288, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/minimax.models.js +var MINIMAX_MODELS = flattenChatModelCatalog("minimax", minimax_default); +var MINIMAX_IMAGE_MODELS = flattenImageModelCatalog("minimax", minimax_default); +var MINIMAX_CLASSIFIER_MODELS = flattenClassifierModelCatalog("minimax", minimax_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/minimax-cn.json +var minimax_cn_default = { "anthropic-messages": { "chat:MiniMax-M2.7": { id: "MiniMax-M2.7", name: "MiniMax-M2.7", api: "anthropic-messages", provider: "minimax-cn", baseUrl: "https://api.minimaxi.com/anthropic", reasoning: true, input: ["text"], cost: { input: 0.3137, output: 1.2549, cacheRead: 0.0627, cacheWrite: 0.3922 }, contextWindow: 204800, maxTokens: 131072, type: "chat" }, "chat:MiniMax-M2.7-highspeed": { id: "MiniMax-M2.7-highspeed", name: "MiniMax-M2.7-highspeed", api: "anthropic-messages", provider: "minimax-cn", baseUrl: "https://api.minimaxi.com/anthropic", reasoning: true, input: ["text"], cost: { input: 0.6275, output: 2.5098, cacheRead: 0.0627, cacheWrite: 0.3922 }, contextWindow: 204800, maxTokens: 131072, type: "chat" }, "chat:MiniMax-M3": { id: "MiniMax-M3", name: "MiniMax-M3", api: "anthropic-messages", provider: "minimax-cn", baseUrl: "https://api.minimaxi.com/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.3137, output: 1.2549, cacheRead: 0.0627, cacheWrite: 0, tiers: [{ inputTokensAbove: 512e3, input: 0.6275, output: 2.5098, cacheRead: 0.1255, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 524288, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:MiniMax-M3.1-Flash": { id: "MiniMax-M3.1-Flash", name: "MiniMax-M3.1-Flash", api: "anthropic-messages", provider: "minimax-cn", baseUrl: "https://api.minimaxi.com/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.1494, output: 0.5976, cacheRead: 0.0149, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 524288, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/minimax-cn.models.js +var MINIMAX_CN_MODELS = flattenChatModelCatalog("minimax-cn", minimax_cn_default); +var MINIMAX_CN_IMAGE_MODELS = flattenImageModelCatalog("minimax-cn", minimax_cn_default); +var MINIMAX_CN_CLASSIFIER_MODELS = flattenClassifierModelCatalog("minimax-cn", minimax_cn_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/mistral.json +var mistral_default = { "mistral-conversations": { "chat:codestral-2508": { id: "codestral-2508", name: "Codestral 25.08", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text"], cost: { input: 0.3, output: 0.9, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 8192, type: "chat" }, "chat:codestral-latest": { id: "codestral-latest", name: "Codestral (latest)", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text"], cost: { input: 0.3, output: 0.9, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 4096, type: "chat" }, "chat:deepseek-v4-1-flash-1017": { id: "deepseek-v4-1-flash-1017", name: "DeepSeek V4.1 Flash 1017", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 7e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:devstral-2512": { id: "devstral-2512", name: "Devstral 2", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text"], cost: { input: 0.4, output: 2, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, type: "chat" }, "chat:devstral-latest": { id: "devstral-latest", name: "Devstral 2", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text"], cost: { input: 0.4, output: 2, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, type: "chat" }, "chat:devstral-medium-latest": { id: "devstral-medium-latest", name: "Devstral 2 (latest)", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text"], cost: { input: 0.4, output: 2, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, type: "chat" }, "chat:glm-5-2": { id: "glm-5-2", name: "GLM-5.2", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.14, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:labs-devstral-small-2512": { id: "labs-devstral-small-2512", name: "Devstral Small 2", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 256e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:labs-leanstral-1-5-1": { id: "labs-leanstral-1-5-1", name: "Leanstral 1.5", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:magistral-medium-latest": { id: "magistral-medium-latest", name: "Magistral Medium (latest)", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 5, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 16384, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:ministral-14b-2512": { id: "ministral-14b-2512", name: "Ministral 3 14B", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0.2, output: 0.2, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:ministral-3b-2512": { id: "ministral-3b-2512", name: "Ministral 3 3B", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0.1, output: 0.1, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:ministral-3b-latest": { id: "ministral-3b-latest", name: "Ministral 3B (latest)", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0.1, output: 0.1, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:ministral-8b-2512": { id: "ministral-8b-2512", name: "Ministral 3 8B", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0.15, output: 0.15, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:ministral-8b-latest": { id: "ministral-8b-latest", name: "Ministral 8B (latest)", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0.15, output: 0.15, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-large-2512": { id: "mistral-large-2512", name: "Mistral Large 3", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0.5, output: 1.5, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-large-4": { id: "mistral-large-4", name: "Mistral Large 4", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text", "image"], cost: { input: 0.7, output: 2.1, cacheRead: 0.07, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-large-4-0-8": { id: "mistral-large-4-0-8", name: "Mistral Large 4.0.8", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text", "image"], cost: { input: 0.7, output: 2.1, cacheRead: 0.07, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-large-latest": { id: "mistral-large-latest", name: "Mistral Large (latest)", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0.5, output: 1.5, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-medium-2505": { id: "mistral-medium-2505", name: "Mistral Medium 3", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0.4, output: 2, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-medium-2508": { id: "mistral-medium-2508", name: "Mistral Medium 3.1", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0.4, output: 2, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-medium-2604": { id: "mistral-medium-2604", name: "Mistral Medium 3.5", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text", "image"], cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-medium-3.5": { id: "mistral-medium-3.5", name: "Mistral Medium 3.5", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1.5, output: 7.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-medium-latest": { id: "mistral-medium-latest", name: "Mistral Medium (latest)", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text", "image"], cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-small-2506": { id: "mistral-small-2506", name: "Mistral Small 3.2", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0.1, output: 0.3, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-small-2603": { id: "mistral-small-2603", name: "Mistral Small 4", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-small-latest": { id: "mistral-small-latest", name: "Mistral Small (latest)", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:open-mistral-nemo": { id: "open-mistral-nemo", name: "Open Mistral Nemo", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text"], cost: { input: 0.15, output: 0.15, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 128e3, type: "chat" }, "chat:pixtral-12b": { id: "pixtral-12b", name: "Pixtral 12B", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0.15, output: 0.15, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:voxtral-small-2507": { id: "voxtral-small-2507", name: "Voxtral Small", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text"], cost: { input: 0.1, output: 0.4, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 32768, maxTokens: 32e3, type: "chat" }, "chat:voxtral-small-latest": { id: "voxtral-small-latest", name: "Voxtral Small (latest)", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text"], cost: { input: 0.1, output: 0.4, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 32768, maxTokens: 32e3, type: "chat" }, "chat:zai-glm-5-2": { id: "zai-glm-5-2", name: "GLM-5.2", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.14, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:zai-glm-5-3": { id: "zai-glm-5-3", name: "GLM-5.3", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.14, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:zai-glm-5-3-flash": { id: "zai-glm-5-3-flash", name: "GLM-5.3-Flash", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.js +var MISTRAL_MODELS = flattenChatModelCatalog("mistral", mistral_default); +var MISTRAL_IMAGE_MODELS = flattenImageModelCatalog("mistral", mistral_default); +var MISTRAL_CLASSIFIER_MODELS = flattenClassifierModelCatalog("mistral", mistral_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai.json +var moonshotai_default = { "openai-completions": { "chat:kimi-k2.6": { id: "kimi-k2.6", name: "Kimi K2.6", api: "openai-completions", provider: "moonshotai", baseUrl: "https://api.moonshot.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.16, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "deepseek", supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k2.7-code": { id: "kimi-k2.7-code", name: "Kimi K2.7 Code", api: "openai-completions", provider: "moonshotai", baseUrl: "https://api.moonshot.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.19, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "deepseek", supportsMidConvoSystemMessages: true }, thinkingLevelMap: { off: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k2.7-code-highspeed": { id: "kimi-k2.7-code-highspeed", name: "Kimi K2.7 Code HighSpeed", api: "openai-completions", provider: "moonshotai", baseUrl: "https://api.moonshot.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.9, output: 8, cacheRead: 0.38, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "deepseek", supportsMidConvoSystemMessages: true }, thinkingLevelMap: { off: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k3": { id: "kimi-k3", name: "Kimi K3", api: "openai-completions", provider: "moonshotai", baseUrl: "https://api.moonshot.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "openai", requiresReasoningContentOnAssistantMessages: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k3.1-pro": { id: "kimi-k3.1-pro", name: "Kimi K3.1 Pro", api: "openai-completions", provider: "moonshotai", baseUrl: "https://api.moonshot.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "openai", requiresReasoningContentOnAssistantMessages: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k3.1-pro-highspeed": { id: "kimi-k3.1-pro-highspeed", name: "Kimi K3.1 Pro Highspeed", api: "openai-completions", provider: "moonshotai", baseUrl: "https://api.moonshot.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "openai", requiresReasoningContentOnAssistantMessages: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/moonshotai.models.js +var MOONSHOTAI_MODELS = flattenChatModelCatalog("moonshotai", moonshotai_default); +var MOONSHOTAI_IMAGE_MODELS = flattenImageModelCatalog("moonshotai", moonshotai_default); +var MOONSHOTAI_CLASSIFIER_MODELS = flattenClassifierModelCatalog("moonshotai", moonshotai_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai-cn.json +var moonshotai_cn_default = { "openai-completions": { "chat:kimi-k2.6": { id: "kimi-k2.6", name: "Kimi K2.6", api: "openai-completions", provider: "moonshotai-cn", baseUrl: "https://api.moonshot.cn/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.9711, output: 4.0337, cacheRead: 0.1643, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "deepseek", supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k2.7-code": { id: "kimi-k2.7-code", name: "Kimi K2.7 Code", api: "openai-completions", provider: "moonshotai-cn", baseUrl: "https://api.moonshot.cn/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.9711, output: 4.0337, cacheRead: 0.1942, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "deepseek", supportsMidConvoSystemMessages: true }, thinkingLevelMap: { off: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k2.7-code-highspeed": { id: "kimi-k2.7-code-highspeed", name: "Kimi K2.7 Code HighSpeed", api: "openai-completions", provider: "moonshotai-cn", baseUrl: "https://api.moonshot.cn/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.9421, output: 8.0673, cacheRead: 0.3884, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "deepseek", supportsMidConvoSystemMessages: true }, thinkingLevelMap: { off: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k3": { id: "kimi-k3", name: "Kimi K3", api: "openai-completions", provider: "moonshotai-cn", baseUrl: "https://api.moonshot.cn/v1", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "openai", requiresReasoningContentOnAssistantMessages: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k3.1-pro": { id: "kimi-k3.1-pro", name: "Kimi K3.1 Pro", api: "openai-completions", provider: "moonshotai-cn", baseUrl: "https://api.moonshot.cn/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.9437, output: 10.1671, cacheRead: 0.1944, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "openai", requiresReasoningContentOnAssistantMessages: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k3.1-pro-highspeed": { id: "kimi-k3.1-pro-highspeed", name: "Kimi K3.1 Pro Highspeed", api: "openai-completions", provider: "moonshotai-cn", baseUrl: "https://api.moonshot.cn/v1", reasoning: true, input: ["text", "image"], cost: { input: 3.8874, output: 20.3342, cacheRead: 0.1944, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "openai", requiresReasoningContentOnAssistantMessages: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/moonshotai-cn.models.js +var MOONSHOTAI_CN_MODELS = flattenChatModelCatalog("moonshotai-cn", moonshotai_cn_default); +var MOONSHOTAI_CN_IMAGE_MODELS = flattenImageModelCatalog("moonshotai-cn", moonshotai_cn_default); +var MOONSHOTAI_CN_CLASSIFIER_MODELS = flattenClassifierModelCatalog("moonshotai-cn", moonshotai_cn_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +var nvidia_default = { "openai-completions": { "chat:deepseek-ai/deepseek-v4.1-flash": { id: "deepseek-ai/deepseek-v4.1-flash", name: "DeepSeek V4.1 Flash", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/diffusiongemma-26b-a4b-it": { id: "google/diffusiongemma-26b-a4b-it", name: "DiffusionGemma 26B A4B IT", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 25e4, maxTokens: 32768, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemma-3-12b-it": { id: "google/gemma-3-12b-it", name: "Gemma 3 12B IT", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemma-3-4b-it": { id: "google/gemma-3-4b-it", name: "Gemma 3 4B IT", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/llama-3.2-11b-vision-instruct": { id: "meta/llama-3.2-11b-vision-instruct", name: "Llama 3.2 11b Vision Instruct", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/llama-3.2-90b-vision-instruct": { id: "meta/llama-3.2-90b-vision-instruct", name: "Llama-3.2-90B-Vision-Instruct", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/muse-glimmer-30b": { id: "meta/muse-glimmer-30b", name: "Muse Glimmer 30B", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:minimaxai/minimax-m3.1-flash": { id: "minimaxai/minimax-m3.1-flash", name: "MiniMax-M3.1-Flash", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistralai/mistral-7b-instruct-v0.3": { id: "mistralai/mistral-7b-instruct-v0.3", name: "Mistral-7B-Instruct-v0.3", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 65536, maxTokens: 65536, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, type: "chat" }, "chat:moonshotai/kimi-k2.6": { id: "moonshotai/kimi-k2.6", name: "Kimi K2.6", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:nvidia/cosmos-reason2-8b": { id: "nvidia/cosmos-reason2-8b", name: "Cosmos Reason2 8B", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:nvidia/llama-3.1-nemotron-70b-instruct": { id: "nvidia/llama-3.1-nemotron-70b-instruct", name: "Llama 3.1 Nemotron 70B Instruct", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, type: "chat" }, "chat:nvidia/llama-3.1-nemotron-ultra-253b-v1": { id: "nvidia/llama-3.1-nemotron-ultra-253b-v1", name: "Llama 3.1 Nemotron Ultra 253B", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, type: "chat" }, "chat:nvidia/nemotron-3-nano-omni-30b-a3b-reasoning": { id: "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning", name: "Nemotron 3 Nano Omni", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 65536, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:nvidia/nemotron-3-ultra-550b-a55b": { id: "nvidia/nemotron-3-ultra-550b-a55b", name: "Nemotron 3 Ultra 550B A55B", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, type: "chat" }, "chat:nvidia/nemotron-3.5-lightning-30b-a3b": { id: "nvidia/nemotron-3.5-lightning-30b-a3b", name: "Nemotron 3.5 Lightning 30B A3B", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, type: "chat" }, "chat:nvidia/nemotron-3.5-super-vl-120b-a12b": { id: "nvidia/nemotron-3.5-super-vl-120b-a12b", name: "Nemotron 3.5 Super VL 120B A12B", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 8192, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-oss-20b": { id: "openai/gpt-oss-20b", name: "GPT OSS 20B", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, type: "chat" }, "chat:poolside/laguna-xs-2.1": { id: "poolside/laguna-xs-2.1", name: "Laguna XS 2.1", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 16384, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, type: "chat" }, "chat:stepfun-ai/step-5-preview": { id: "stepfun-ai/step-5-preview", name: "Step 5 Preview", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:z-ai/glm-5.3-flash": { id: "z-ai/glm-5.3-flash", name: "GLM-5.3-Flash", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.js +var NVIDIA_MODELS = flattenChatModelCatalog("nvidia", nvidia_default); +var NVIDIA_IMAGE_MODELS = flattenImageModelCatalog("nvidia", nvidia_default); +var NVIDIA_CLASSIFIER_MODELS = flattenClassifierModelCatalog("nvidia", nvidia_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +var openai_default = { "openai-decisions": { "classifier:gpt-6-luna": { type: "classifier", id: "gpt-6-luna", name: "GPT-6 Luna", api: "openai-decisions", provider: "openai", baseUrl: "https://api.openai.com/v1", input: ["text", "image"], cost: { input: 0.1, output: 0, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 922e3 } }, "openai-responses": { "chat:chat-latest": { id: "chat-latest", name: "Chat Latest", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4": { id: "gpt-4", name: "GPT-4", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: false, input: ["text"], cost: { input: 30, output: 60, cacheRead: 0, cacheWrite: 0 }, contextWindow: 8192, maxTokens: 8192, compat: { supportsStrictMode: true }, type: "chat" }, "chat:gpt-4-turbo": { id: "gpt-4-turbo", name: "GPT-4 Turbo", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 10, output: 30, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4.1": { id: "gpt-4.1", name: "GPT-4.1", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4.1-mini": { id: "gpt-4.1-mini", name: "GPT-4.1 mini", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 0.4, output: 1.6, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4.1-nano": { id: "gpt-4.1-nano", name: "GPT-4.1 nano", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 0.1, output: 0.4, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o": { id: "gpt-4o", name: "GPT-4o", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o-2024-05-13": { id: "gpt-4o-2024-05-13", name: "GPT-4o (2024-05-13)", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 5, output: 15, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o-2024-08-06": { id: "gpt-4o-2024-08-06", name: "GPT-4o (2024-08-06)", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o-2024-11-20": { id: "gpt-4o-2024-11-20", name: "GPT-4o (2024-11-20)", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o-mini": { id: "gpt-4o-mini", name: "GPT-4o mini", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5": { id: "gpt-5", name: "GPT-5", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-chat-latest": { id: "gpt-5-chat-latest", name: "GPT-5 Chat Latest", api: "openai-responses", baseUrl: "https://api.openai.com/v1", provider: "openai", reasoning: false, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, thinkingLevelMap: { off: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-mini": { id: "gpt-5-mini", name: "GPT-5 Mini", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.25, output: 2, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-nano": { id: "gpt-5-nano", name: "GPT-5 Nano", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.05, output: 0.4, cacheRead: 5e-3, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-pro": { id: "gpt-5-pro", name: "GPT-5 Pro", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 15, output: 120, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.1": { id: "gpt-5.1", name: "GPT-5.1", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.2": { id: "gpt-5.2", name: "GPT-5.2", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.2-pro": { id: "gpt-5.2-pro", name: "GPT-5.2 Pro", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 21, output: 168, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.3-codex": { id: "gpt-5.3-codex", name: "GPT-5.3 Codex", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.3-codex-spark": { id: "gpt-5.3-codex-spark", name: "GPT-5.3 Codex Spark", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 32e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4": { id: "gpt-5.4", name: "GPT-5.4", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 5, output: 22.5, cacheRead: 0.5, cacheWrite: 0 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsMidConvoSystemMessages: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-mini": { id: "gpt-5.4-mini", name: "GPT-5.4 mini", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsMidConvoSystemMessages: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-nano": { id: "gpt-5.4-nano", name: "GPT-5.4 nano", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.25, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-pro": { id: "gpt-5.4-pro", name: "GPT-5.4 Pro", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 30, output: 180, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 60, output: 270, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsMidConvoSystemMessages: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.5": { id: "gpt-5.5", name: "GPT-5.5", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 10, output: 45, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsMidConvoSystemMessages: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.5-pro": { id: "gpt-5.5-pro", name: "GPT-5.5 Pro", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 30, output: 180, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 60, output: 270, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-cyber": { id: "gpt-5.6-cyber", name: "GPT-5.6 Cyber", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 12.5, output: 75, cacheRead: 1.25, cacheWrite: 15.625 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsExplicitPromptCacheMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-luna": { id: "gpt-5.6-luna", name: "GPT-5.6 Luna", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 272e3, input: 0.4, output: 1.8, cacheRead: 0.04, cacheWrite: 0.5 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true, supportsExplicitPromptCacheMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-sol": { id: "gpt-5.6-sol", name: "GPT-5.6 Sol", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true, supportsExplicitPromptCacheMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-terra": { id: "gpt-5.6-terra", name: "GPT-5.6 Terra", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true, supportsExplicitPromptCacheMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-astra": { id: "gpt-6-astra", name: "GPT-6 Astra", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5, tiers: [{ inputTokensAbove: 272e3, input: 20, output: 75, cacheRead: 2, cacheWrite: 25 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true, supportsExplicitPromptCacheMode: true, supportsMidConvoEffort: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-luna": { id: "gpt-6-luna", name: "GPT-6 Luna", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true, supportsExplicitPromptCacheMode: true, supportsMidConvoEffort: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-sol": { id: "gpt-6-sol", name: "GPT-6 Sol", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true, supportsExplicitPromptCacheMode: true, supportsMidConvoEffort: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-sol": { id: "gpt-6.1-sol", name: "GPT-6.1 Sol", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true, supportsExplicitPromptCacheMode: true, supportsMidConvoEffort: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-terra": { id: "gpt-6.1-terra", name: "GPT-6.1 Terra", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true, supportsExplicitPromptCacheMode: true, supportsMidConvoEffort: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-daybreak-blue-latest": { id: "gpt-daybreak-blue-latest", name: "Daybreak Blue", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsExplicitPromptCacheMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-daybreak-red-latest": { id: "gpt-daybreak-red-latest", name: "Daybreak Red", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 12.5, output: 75, cacheRead: 1.25, cacheWrite: 15.625 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsExplicitPromptCacheMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o1": { id: "o1", name: "o1", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 15, output: 60, cacheRead: 7.5, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o1-pro": { id: "o1-pro", name: "o1-pro", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 150, output: 600, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o3": { id: "o3", name: "o3", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o3-mini": { id: "o3-mini", name: "o3-mini", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text"], cost: { input: 1.1, output: 4.4, cacheRead: 0.55, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true }, type: "chat" }, "chat:o3-pro": { id: "o3-pro", name: "o3-pro", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 20, output: 80, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o4-mini": { id: "o4-mini", name: "o4-mini", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.1, output: 4.4, cacheRead: 0.275, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/openai.models.js +var OPENAI_MODELS = flattenChatModelCatalog("openai", openai_default); +var OPENAI_IMAGE_MODELS = flattenImageModelCatalog("openai", openai_default); +var OPENAI_CLASSIFIER_MODELS = flattenClassifierModelCatalog("openai", openai_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +var openai_codex_default = { "openai-codex-responses": { "chat:gpt-5.6-luna": { id: "gpt-5.6-luna", name: "GPT-5.6 Luna", api: "openai-codex-responses", provider: "openai-codex", baseUrl: "https://chatgpt.com/backend-api", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 272e3, input: 0.4, output: 1.8, cacheRead: 0.04, cacheWrite: 0.5 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max", minimal: "low" }, compat: { supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-sol": { id: "gpt-5.6-sol", name: "GPT-5.6 Sol", api: "openai-codex-responses", provider: "openai-codex", baseUrl: "https://chatgpt.com/backend-api", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max", minimal: "low" }, compat: { supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-terra": { id: "gpt-5.6-terra", name: "GPT-5.6 Terra", api: "openai-codex-responses", provider: "openai-codex", baseUrl: "https://chatgpt.com/backend-api", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max", minimal: "low" }, compat: { supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-astra": { id: "gpt-6-astra", name: "GPT-6 Astra", api: "openai-codex-responses", provider: "openai-codex", baseUrl: "https://chatgpt.com/backend-api", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5, tiers: [{ inputTokensAbove: 272e3, input: 20, output: 75, cacheRead: 2, cacheWrite: 25 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-luna": { id: "gpt-6-luna", name: "GPT-6 Luna", api: "openai-codex-responses", provider: "openai-codex", baseUrl: "https://chatgpt.com/backend-api", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-sol": { id: "gpt-6-sol", name: "GPT-6 Sol", api: "openai-codex-responses", provider: "openai-codex", baseUrl: "https://chatgpt.com/backend-api", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-sol": { id: "gpt-6.1-sol", name: "GPT-6.1 Sol", api: "openai-codex-responses", provider: "openai-codex", baseUrl: "https://chatgpt.com/backend-api", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, contextWindow: 5e5, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-terra": { id: "gpt-6.1-terra", name: "GPT-6.1 Terra", api: "openai-codex-responses", provider: "openai-codex", baseUrl: "https://chatgpt.com/backend-api", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 5e5, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js +var OPENAI_CODEX_MODELS = flattenChatModelCatalog("openai-codex", openai_codex_default); +var OPENAI_CODEX_IMAGE_MODELS = flattenImageModelCatalog("openai-codex", openai_codex_default); +var OPENAI_CODEX_CLASSIFIER_MODELS = flattenClassifierModelCatalog("openai-codex", openai_codex_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +var opencode_default = { "anthropic-messages": { "chat:claude-fable-5": { id: "claude-fable-5", name: "Claude Fable 5", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-fable-5-1": { id: "claude-fable-5-1", name: "Claude Fable 5.1", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-haiku-4-5": { id: "claude-haiku-4-5", name: "Claude Haiku 4.5", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-haiku-5-5": { id: "claude-haiku-5-5", name: "Claude Haiku 5.5", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 1e5, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-5": { id: "claude-opus-4-5", name: "Claude Opus 4.5", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-6": { id: "claude-opus-4-6", name: "Claude Opus 4.6", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { max: "max" }, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-7": { id: "claude-opus-4-7", name: "Claude Opus 4.7", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-8": { id: "claude-opus-4-8", name: "Claude Opus 4.8", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-5": { id: "claude-opus-5", name: "Claude Opus 5", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-5-5": { id: "claude-opus-5-5", name: "Claude Opus 5.5", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-4-5": { id: "claude-sonnet-4-5", name: "Claude Sonnet 4.5", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75, tiers: [{ inputTokensAbove: 2e5, input: 6, output: 22.5, cacheRead: 0.6, cacheWrite: 7.5 }] }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-4-6": { id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 1e6, maxTokens: 64e3, thinkingLevelMap: { max: "max" }, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-5": { id: "claude-sonnet-5", name: "Claude Sonnet 5", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-5-5": { id: "claude-sonnet-5-5", name: "Claude Sonnet 5.5", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.5-plus": { id: "qwen3.5-plus", name: "Qwen3.5 Plus", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25 }, contextWindow: 262144, maxTokens: 65536, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.6-plus": { id: "qwen3.6-plus", name: "Qwen3.6 Plus", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.5, output: 3, cacheRead: 0.05, cacheWrite: 0.625 }, contextWindow: 262144, maxTokens: 65536, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.8-flash": { id: "qwen3.8-flash", name: "Qwen3.8 Flash", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.47, cacheRead: 0.016, cacheWrite: 0.2 }, contextWindow: 1e6, maxTokens: 131072, compat: { allowEmptySignature: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "google-generative-ai": { "chat:gemini-3-flash": { id: "gemini-3-flash", name: "Gemini 3 Flash", api: "google-generative-ai", provider: "opencode", baseUrl: "https://opencode.ai/inference/google/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.5, output: 3, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.1-pro": { id: "gemini-3.1-pro", name: "Gemini 3.1 Pro Preview", api: "google-generative-ai", provider: "opencode", baseUrl: "https://opencode.ai/inference/google/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.5-flash": { id: "gemini-3.5-flash", name: "Gemini 3.5 Flash", api: "google-generative-ai", provider: "opencode", baseUrl: "https://opencode.ai/inference/google/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 1.5, output: 9, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.5-flash-lite": { id: "gemini-3.5-flash-lite", name: "Gemini 3.5 Flash Lite", api: "google-generative-ai", provider: "opencode", baseUrl: "https://opencode.ai/inference/google/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.6-flash": { id: "gemini-3.6-flash", name: "Gemini 3.6 Flash", api: "google-generative-ai", provider: "opencode", baseUrl: "https://opencode.ai/inference/google/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.7-flash": { id: "gemini-3.7-flash", name: "Gemini 3.7 Flash", api: "google-generative-ai", provider: "opencode", baseUrl: "https://opencode.ai/inference/google/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.8-flash": { id: "gemini-3.8-flash", name: "Gemini 3.8 Flash", api: "google-generative-ai", provider: "opencode", baseUrl: "https://opencode.ai/inference/google/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-4-argon": { id: "gemini-4-argon", name: "Gemini 4 Argon", api: "google-generative-ai", provider: "opencode", baseUrl: "https://opencode.ai/inference/google/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "openai-completions": { "chat:beam-free": { id: "beam-free", name: "Beam Free", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, type: "chat" }, "chat:big-pickle": { id: "big-pickle", name: "Big Pickle", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 32e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, type: "chat" }, "chat:deepseek-v4-pro": { id: "deepseek-v4-pro", name: "DeepSeek V4 Pro", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text"], cost: { input: 1.74, output: 3.48, cacheRead: 0.145, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens", supportsLongCacheRetention: false, requiresReasoningContentOnAssistantMessages: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-v4.1-flash": { id: "deepseek-v4.1-flash", name: "DeepSeek V4.1 Flash", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens", supportsLongCacheRetention: false, requiresReasoningContentOnAssistantMessages: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek-v4.1-flash-free": { id: "deepseek-v4.1-flash-free", name: "DeepSeek V4.1 Flash Free", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 32e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens", requiresReasoningContentOnAssistantMessages: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:flint-40b-free": { id: "flint-40b-free", name: "Flint 40B Free", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, type: "chat" }, "chat:glm-5": { id: "glm-5", name: "GLM-5", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text"], cost: { input: 1, output: 3.2, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, type: "chat" }, "chat:glm-5.1": { id: "glm-5.1", name: "GLM-5.1", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, type: "chat" }, "chat:glm-5.2": { id: "glm-5.2", name: "GLM-5.2", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:glm-5.3": { id: "glm-5.3", name: "GLM-5.3", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:glm-5.3-flash": { id: "glm-5.3-flash", name: "GLM-5.3-Flash", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:glm-5.3-flash-free": { id: "glm-5.3-flash-free", name: "GLM-5.3-Flash Free", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 32e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k2.5": { id: "kimi-k2.5", name: "Kimi K2.5", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.6, output: 3, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens", supportsLongCacheRetention: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k2.6": { id: "kimi-k2.6", name: "Kimi K2.6", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.16, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, thinkingFormat: "deepseek", supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k2.7-code": { id: "kimi-k2.7-code", name: "Kimi K2.7 Code", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.19, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k3": { id: "kimi-k3", name: "Kimi K3", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens", supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mimo-v2.6-flash-free": { id: "mimo-v2.6-flash-free", name: "MiMo-V2.6-Flash Free", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 32e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:minimax-m2.5": { id: "minimax-m2.5", name: "MiniMax-M2.5", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, type: "chat" }, "chat:minimax-m2.7": { id: "minimax-m2.7", name: "MiniMax-M2.7", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens", supportsLongCacheRetention: false }, type: "chat" }, "chat:minimax-m3": { id: "minimax-m3", name: "MiniMax-M3", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 512e3, maxTokens: 128e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-large-4": { id: "mistral-large-4", name: "Mistral Large 4", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.68, output: 2.09, cacheRead: 0.07, cacheWrite: 0 }, contextWindow: 524288, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:nemotron-3.5-lightning-free": { id: "nemotron-3.5-lightning-free", name: "Nemotron 3.5 Lightning Free", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, type: "chat" }, "chat:nemotron-3.5-super-vl-free": { id: "nemotron-3.5-super-vl-free", name: "Nemotron 3.5 Super VL Free", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.8-max": { id: "qwen3.8-max", name: "Qwen3.8 Max", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 2.5 }, contextWindow: 262144, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "openai-responses": { "chat:gpt-5": { id: "gpt-5", name: "GPT-5", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.07, output: 8.5, cacheRead: 0.107, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-codex": { id: "gpt-5-codex", name: "GPT-5 Codex", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.07, output: 8.5, cacheRead: 0.107, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-nano": { id: "gpt-5-nano", name: "GPT-5 Nano", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.05, output: 0.4, cacheRead: 5e-3, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.1": { id: "gpt-5.1", name: "GPT-5.1", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.07, output: 8.5, cacheRead: 0.107, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.1-codex": { id: "gpt-5.1-codex", name: "GPT-5.1 Codex", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.07, output: 8.5, cacheRead: 0.107, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.1-codex-max": { id: "gpt-5.1-codex-max", name: "GPT-5.1 Codex Max", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.1-codex-mini": { id: "gpt-5.1-codex-mini", name: "GPT-5.1 Codex Mini", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.25, output: 2, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.2": { id: "gpt-5.2", name: "GPT-5.2", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.2-codex": { id: "gpt-5.2-codex", name: "GPT-5.2 Codex", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.3-codex": { id: "gpt-5.3-codex", name: "GPT-5.3 Codex", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4": { id: "gpt-5.4", name: "GPT-5.4", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 5, output: 22.5, cacheRead: 0.5, cacheWrite: 0 }] }, contextWindow: 272e3, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-mini": { id: "gpt-5.4-mini", name: "GPT-5.4 Mini", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-nano": { id: "gpt-5.4-nano", name: "GPT-5.4 Nano", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.25, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-pro": { id: "gpt-5.4-pro", name: "GPT-5.4 Pro", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 30, output: 180, cacheRead: 30, cacheWrite: 0 }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.5": { id: "gpt-5.5", name: "GPT-5.5", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 10, output: 45, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.5-pro": { id: "gpt-5.5-pro", name: "GPT-5.5 Pro", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 30, output: 180, cacheRead: 30, cacheWrite: 0 }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-luna": { id: "gpt-5.6-luna", name: "GPT-5.6 Luna", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 272e3, input: 0.4, output: 1.8, cacheRead: 0.04, cacheWrite: 0.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-sol": { id: "gpt-5.6-sol", name: "GPT-5.6 Sol", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-terra": { id: "gpt-5.6-terra", name: "GPT-5.6 Terra", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-astra": { id: "gpt-6-astra", name: "GPT-6 Astra", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5, tiers: [{ inputTokensAbove: 272e3, input: 20, output: 75, cacheRead: 2, cacheWrite: 25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-luna": { id: "gpt-6-luna", name: "GPT-6 Luna", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-sol": { id: "gpt-6-sol", name: "GPT-6 Sol", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-sol": { id: "gpt-6.1-sol", name: "GPT-6.1 Sol", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-4.5": { id: "grok-4.5", name: "Grok 4.5", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.3, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 0.6, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 5e5, compat: { sessionAffinityFormat: "openai-nosession" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-4.6": { id: "grok-4.6", name: "Grok 4.6", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 5e5, compat: { sessionAffinityFormat: "openai-nosession" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-4.7": { id: "grok-4.7", name: "Grok 4.7", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 5e5, compat: { sessionAffinityFormat: "openai-nosession" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-build-0.1": { id: "grok-build-0.1", name: "Grok Build 0.1", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 2, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 256e3, compat: { sessionAffinityFormat: "openai-nosession", supportsReasoningEffort: false }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:muse-spark-1.2": { id: "muse-spark-1.2", name: "Muse Spark 1.2", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { sessionAffinityFormat: "openai-nosession" }, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:muse-spark-1.3": { id: "muse-spark-1.3", name: "Muse Spark 1.3", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { sessionAffinityFormat: "openai-nosession" }, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:muse-wonder-1.0": { id: "muse-wonder-1.0", name: "Muse Wonder", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { sessionAffinityFormat: "openai-nosession" }, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "typesafe-system-one": { "classifier:jev-1.13": { type: "classifier", id: "jev-1.13", name: "Jev 1.13", api: "typesafe-system-one", provider: "opencode", baseUrl: "https://opencode.ai/inference/systemone/v1", input: ["text"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32e3 }, "classifier:jev-1.13-free": { type: "classifier", id: "jev-1.13-free", name: "Jev 1.13 Free", api: "typesafe-system-one", provider: "opencode", baseUrl: "https://opencode.ai/inference/systemone/v1", input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32e3 } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.js +var OPENCODE_MODELS = flattenChatModelCatalog("opencode", opencode_default); +var OPENCODE_IMAGE_MODELS = flattenImageModelCatalog("opencode", opencode_default); +var OPENCODE_CLASSIFIER_MODELS = flattenClassifierModelCatalog("opencode", opencode_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +var opencode_go_default = { "anthropic-messages": { "chat:claude-haiku-5-5": { id: "claude-haiku-5-5", name: "Claude Haiku 5.5", api: "anthropic-messages", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 1e5, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:minimax-m3": { id: "minimax-m3", name: "MiniMax-M3", api: "anthropic-messages", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0, tiers: [{ inputTokensAbove: 512e3, input: 0.6, output: 2.4, cacheRead: 0.12, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.7-plus": { id: "qwen3.7-plus", name: "Qwen3.7 Plus", api: "anthropic-messages", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.4, output: 1.6, cacheRead: 0.04, cacheWrite: 0.5, tiers: [{ inputTokensAbove: 256e3, input: 1.2, output: 4.8, cacheRead: 0.12, cacheWrite: 1.5 }] }, contextWindow: 1e6, maxTokens: 65536, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.8-flash": { id: "qwen3.8-flash", name: "Qwen3.8 Flash", api: "anthropic-messages", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.47, cacheRead: 0.016, cacheWrite: 0.2 }, contextWindow: 1e6, maxTokens: 131072, compat: { allowEmptySignature: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.8-max": { id: "qwen3.8-max", name: "Qwen3.8 Max", api: "anthropic-messages", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "google-generative-ai": { "chat:gemini-4-argon": { id: "gemini-4-argon", name: "Gemini 4 Argon", api: "google-generative-ai", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/google/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "openai-completions": { "chat:beam-free": { id: "beam-free", name: "Beam Free", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, type: "chat" }, "chat:deepseek-v4-pro": { id: "deepseek-v4-pro", name: "DeepSeek V4 Pro (New)", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text"], cost: { input: 0.66, output: 1.98, cacheRead: 0.022, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens", requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", max: "max" }, type: "chat" }, "chat:deepseek-v4.1-flash": { id: "deepseek-v4.1-flash", name: "DeepSeek V4.1 Flash", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 3e-3, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens", requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:glm-5.2": { id: "glm-5.2", name: "GLM-5.2", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:glm-5.3": { id: "glm-5.3", name: "GLM-5.3", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:glm-5.3-flash": { id: "glm-5.3-flash", name: "GLM-5.3-Flash", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:hy3": { id: "hy3", name: "Hy3", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text"], cost: { input: 0.14, output: 0.58, cacheRead: 0.035, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 128e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: null }, type: "chat" }, "chat:hy4-preview": { id: "hy4-preview", name: "Hy4 preview", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text"], cost: { input: 0.834, output: 2.501, cacheRead: 0.042, cacheWrite: 0 }, contextWindow: 1024e3, maxTokens: 64e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, type: "chat" }, "chat:iceman-contributor-free": { id: "iceman-contributor-free", name: "Iceman Contributor Free", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, type: "chat" }, "chat:kimi-k2.7-code": { id: "kimi-k2.7-code", name: "Kimi K2.7 Code", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.19, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k3": { id: "kimi-k3", name: "Kimi K3", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens", supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: null, xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k3.1-pro": { id: "kimi-k3.1-pro", name: "Kimi K3.1 Pro", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens", supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:longcat-2.0": { id: "longcat-2.0", name: "LongCat-2.0", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, type: "chat" }, "chat:mimo-v2.5": { id: "mimo-v2.5", name: "MiMo V2.5", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.14, output: 0.28, cacheRead: 28e-4, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mimo-v2.5-pro": { id: "mimo-v2.5-pro", name: "MiMo V2.5 Pro", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text"], cost: { input: 0.435, output: 0.87, cacheRead: 3625e-6, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 128e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, type: "chat" }, "chat:mimo-v2.6-flash": { id: "mimo-v2.6-flash", name: "MiMo-V2.6-Flash", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.14, output: 0.28, cacheRead: 28e-4, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mimo-v2.6-pro": { id: "mimo-v2.6-pro", name: "MiMo-V2.6-Pro", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.435, output: 0.87, cacheRead: 3625e-6, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:minimax-m3.1-flash": { id: "minimax-m3.1-flash", name: "MiniMax M3.1 Flash", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 512e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:step-5-preview": { id: "step-5-preview", name: "Step 5 Preview", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 2.7, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "openai-responses": { "chat:gpt-5.6-luna": { id: "gpt-5.6-luna", name: "GPT-5.6 Luna", api: "openai-responses", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 272e3, input: 0.4, output: 1.8, cacheRead: 0.04, cacheWrite: 0.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsAdditionalTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-luna": { id: "gpt-6-luna", name: "GPT-6 Luna", api: "openai-responses", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsAdditionalTools: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-4.7": { id: "grok-4.7", name: "Grok 4.7", api: "openai-responses", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 5e5, compat: { sessionAffinityFormat: "openai-nosession" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:muse-spark-1.2-contributor": { id: "muse-spark-1.2-contributor", name: "Muse Spark 1.2 Contributor", api: "openai-responses", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.2, cacheRead: 2e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { sessionAffinityFormat: "openai-nosession" }, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:muse-spark-1.3-contributor": { id: "muse-spark-1.3-contributor", name: "Muse Spark 1.3 Contributor", api: "openai-responses", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.2, cacheRead: 2e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { sessionAffinityFormat: "openai-nosession" }, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.js +var OPENCODE_GO_MODELS = flattenChatModelCatalog("opencode-go", opencode_go_default); +var OPENCODE_GO_IMAGE_MODELS = flattenImageModelCatalog("opencode-go", opencode_go_default); +var OPENCODE_GO_CLASSIFIER_MODELS = flattenClassifierModelCatalog("opencode-go", opencode_go_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +var openrouter_default = { "anthropic-messages": { "chat:~anthropic/claude-fable-latest": { type: "chat", id: "~anthropic/claude-fable-latest", name: "Anthropic: Claude Fable Latest", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~anthropic/claude-haiku-latest": { type: "chat", id: "~anthropic/claude-haiku-latest", name: "Anthropic: Claude Haiku Latest", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 1e5, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~anthropic/claude-opus-latest": { type: "chat", id: "~anthropic/claude-opus-latest", name: "Anthropic: Claude Opus Latest", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~anthropic/claude-sonnet-latest": { type: "chat", id: "~anthropic/claude-sonnet-latest", name: "Anthropic: Claude Sonnet Latest", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-fable-5": { type: "chat", id: "anthropic/claude-fable-5", name: "Anthropic: Claude Fable 5", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-fable-5.1": { type: "chat", id: "anthropic/claude-fable-5.1", name: "Anthropic: Claude Fable 5.1", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true, supportsMidConvoEffort: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-haiku-4.5": { type: "chat", id: "anthropic/claude-haiku-4.5", name: "Anthropic: Claude Haiku 4.5", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-haiku-5.5": { type: "chat", id: "anthropic/claude-haiku-5.5", name: "Anthropic: Claude Haiku 5.5", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 1e5, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoEffort: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-4.1": { type: "chat", id: "anthropic/claude-opus-4.1", name: "Anthropic: Claude Opus 4.1", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 15, output: 75, cacheRead: 1.5, cacheWrite: 18.75 }, contextWindow: 2e5, maxTokens: 32e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-4.5": { type: "chat", id: "anthropic/claude-opus-4.5", name: "Anthropic: Claude Opus 4.5", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-4.6": { type: "chat", id: "anthropic/claude-opus-4.6", name: "Anthropic: Claude Opus 4.6", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-4.7": { type: "chat", id: "anthropic/claude-opus-4.7", name: "Anthropic: Claude Opus 4.7", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true, supportsTemperature: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-4.8": { type: "chat", id: "anthropic/claude-opus-4.8", name: "Anthropic: Claude Opus 4.8", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true, supportsTemperature: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-5": { type: "chat", id: "anthropic/claude-opus-5", name: "Anthropic: Claude Opus 5", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true, supportsTemperature: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-5.5": { type: "chat", id: "anthropic/claude-opus-5.5", name: "Anthropic: Claude Opus 5.5", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoEffort: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-sonnet-4.5": { type: "chat", id: "anthropic/claude-sonnet-4.5", name: "Anthropic: Claude Sonnet 4.5", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75, tiers: [{ inputTokensAbove: 2e5, input: 6, output: 22.5, cacheRead: 0.6, cacheWrite: 7.5 }] }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-sonnet-4.6": { type: "chat", id: "anthropic/claude-sonnet-4.6", name: "Anthropic: Claude Sonnet 4.6", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-sonnet-5": { type: "chat", id: "anthropic/claude-sonnet-5", name: "Anthropic: Claude Sonnet 5", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-sonnet-5.5": { type: "chat", id: "anthropic/claude-sonnet-5.5", name: "Anthropic: Claude Sonnet 5.5", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoEffort: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } } }, "openai-completions": { "chat:~deepseek/deepseek-flash-latest": { type: "chat", id: "~deepseek/deepseek-flash-latest", name: "DeepSeek: DeepSeek Flash Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.035, output: 0.5, cacheRead: 5e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~deepseek/deepseek-pro-latest": { type: "chat", id: "~deepseek/deepseek-pro-latest", name: "DeepSeek: DeepSeek Pro Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], cost: { input: 0.1035, output: 8, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 393216, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:~deepseek/deepseek-v4-flash-latest": { type: "chat", id: "~deepseek/deepseek-v4-flash-latest", name: "DeepSeek: DeepSeek V4 Flash Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], cost: { input: 0.059, output: 0.3, cacheRead: 0.035, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true } }, "chat:~google/gemini-flash-latest": { type: "chat", id: "~google/gemini-flash-latest", name: "Google: Gemini Flash Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0.041667 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~google/gemini-pro-latest": { type: "chat", id: "~google/gemini-pro-latest", name: "Google: Gemini Pro Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 0.1875 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~moonshotai/kimi-latest": { type: "chat", id: "~moonshotai/kimi-latest", name: "MoonshotAI: Kimi Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.1495, output: 7.15, cacheRead: 0.07475, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~openai/gpt-astra-latest": { type: "chat", id: "~openai/gpt-astra-latest", name: "OpenAI: GPT Astra Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5, tiers: [{ inputTokensAbove: 272e3, input: 20, output: 75, cacheRead: 2, cacheWrite: 25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~openai/gpt-luna-latest": { type: "chat", id: "~openai/gpt-luna-latest", name: "OpenAI: GPT Luna Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~openai/gpt-mini-latest": { type: "chat", id: "~openai/gpt-mini-latest", name: "OpenAI: GPT Mini Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~openai/gpt-sol-latest": { type: "chat", id: "~openai/gpt-sol-latest", name: "OpenAI: GPT Sol Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~openai/gpt-terra-latest": { type: "chat", id: "~openai/gpt-terra-latest", name: "OpenAI: GPT Terra Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~unbiased/pareto-latest": { type: "chat", id: "~unbiased/pareto-latest", name: "Pareto Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.8, output: 3.2, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~x-ai/grok-latest": { type: "chat", id: "~x-ai/grok-latest", name: "xAI: Grok Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 45e4, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~z-ai/glm-flash-latest": { type: "chat", id: "~z-ai/glm-flash-latest", name: "Z.ai: GLM Flash Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.0285, output: 0.0923, cacheRead: 0.0285, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~z-ai/glm-latest": { type: "chat", id: "~z-ai/glm-latest", name: "Z.ai: GLM Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], cost: { input: 0.0699, output: 1.4, cacheRead: 0.0689, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:aion-labs/aion-2.0": { type: "chat", id: "aion-labs/aion-2.0", name: "AionLabs: Aion-2.0", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.8, output: 1.6, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:aion-labs/aion-3.0": { type: "chat", id: "aion-labs/aion-3.0", name: "AionLabs: Aion-3.0", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 3, output: 6, cacheRead: 0.75, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:aion-labs/aion-3.0-mini": { type: "chat", id: "aion-labs/aion-3.0-mini", name: "AionLabs: Aion-3.0-Mini", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.7, output: 1.4, cacheRead: 0.18, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:aion-labs/aion-3.5": { type: "chat", id: "aion-labs/aion-3.5", name: "AionLabs: Aion 3.5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], cost: { input: 3, output: 6, cacheRead: 0.75, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:aion-labs/aion-3.5-mini": { type: "chat", id: "aion-labs/aion-3.5-mini", name: "AionLabs: Aion 3.5 Mini", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], cost: { input: 0.7, output: 1.4, cacheRead: 0.18, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:amazon/nova-2-lite-v1": { type: "chat", id: "amazon/nova-2-lite-v1", name: "Amazon: Nova 2 Lite", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 2.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65535, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:amazon/nova-lite-v1": { type: "chat", id: "amazon/nova-lite-v1", name: "Amazon: Nova Lite 1.0", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.06, output: 0.24, cacheRead: 0, cacheWrite: 0 }, contextWindow: 3e5, maxTokens: 5120, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:amazon/nova-micro-v1": { type: "chat", id: "amazon/nova-micro-v1", name: "Amazon: Nova Micro 1.0", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.035, output: 0.14, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 5120, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:amazon/nova-premier-v1": { type: "chat", id: "amazon/nova-premier-v1", name: "Amazon: Nova Premier 1.0", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 12.5, cacheRead: 0.625, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 32e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:amazon/nova-pro-v1": { type: "chat", id: "amazon/nova-pro-v1", name: "Amazon: Nova Pro 1.0", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.8, output: 3.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 3e5, maxTokens: 5120, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-fable-5:batch": { type: "chat", id: "anthropic/claude-fable-5:batch", name: "Anthropic: Claude Fable 5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-fable-5.1:batch": { type: "chat", id: "anthropic/claude-fable-5.1:batch", name: "Anthropic: Claude Fable 5.1 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.125, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-haiku-4.5:batch": { type: "chat", id: "anthropic/claude-haiku-4.5:batch", name: "Anthropic: Claude Haiku 4.5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }, contextWindow: 2e5, maxTokens: 64e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-haiku-5.5:batch": { type: "chat", id: "anthropic/claude-haiku-5.5:batch", name: "Anthropic: Claude Haiku 5.5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.05, output: 0.25, cacheRead: 5e-3, cacheWrite: 0.0625, tiers: [{ inputTokensAbove: 1e5, input: 0.25, output: 1.25, cacheRead: 0.025, cacheWrite: 0.3125 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-4.1:batch": { type: "chat", id: "anthropic/claude-opus-4.1:batch", name: "Anthropic: Claude Opus 4.1 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 7.5, output: 37.5, cacheRead: 0.75, cacheWrite: 9.375 }, contextWindow: 2e5, maxTokens: 32e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-4.5:batch": { type: "chat", id: "anthropic/claude-opus-4.5:batch", name: "Anthropic: Claude Opus 4.5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 2.5, output: 12.5, cacheRead: 0.25, cacheWrite: 3.125 }, contextWindow: 2e5, maxTokens: 64e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-4.6:batch": { type: "chat", id: "anthropic/claude-opus-4.6:batch", name: "Anthropic: Claude Opus 4.6 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 2.5, output: 12.5, cacheRead: 0.25, cacheWrite: 3.125 }, contextWindow: 1e6, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-4.7:batch": { type: "chat", id: "anthropic/claude-opus-4.7:batch", name: "Anthropic: Claude Opus 4.7 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2.5, output: 12.5, cacheRead: 0.25, cacheWrite: 3.125 }, contextWindow: 1e6, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-4.8:batch": { type: "chat", id: "anthropic/claude-opus-4.8:batch", name: "Anthropic: Claude Opus 4.8 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2.5, output: 12.5, cacheRead: 0.25, cacheWrite: 3.125 }, contextWindow: 1e6, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-5:batch": { type: "chat", id: "anthropic/claude-opus-5:batch", name: "Anthropic: Claude Opus 5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2.5, output: 12.5, cacheRead: 0.25, cacheWrite: 3.125 }, contextWindow: 1e6, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-5.5:batch": { type: "chat", id: "anthropic/claude-opus-5.5:batch", name: "Anthropic: Claude Opus 5.5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-sonnet-4.5:batch": { type: "chat", id: "anthropic/claude-sonnet-4.5:batch", name: "Anthropic: Claude Sonnet 4.5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 1.875, tiers: [{ inputTokensAbove: 2e5, input: 3, output: 11.25, cacheRead: 0.3, cacheWrite: 3.75 }] }, contextWindow: 1e6, maxTokens: 64e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-sonnet-4.6:batch": { type: "chat", id: "anthropic/claude-sonnet-4.6:batch", name: "Anthropic: Claude Sonnet 4.6 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 1.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-sonnet-5:batch": { type: "chat", id: "anthropic/claude-sonnet-5:batch", name: "Anthropic: Claude Sonnet 5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-sonnet-5.5:batch": { type: "chat", id: "anthropic/claude-sonnet-5.5:batch", name: "Anthropic: Claude Sonnet 5.5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:auto": { id: "auto", name: "Auto", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e6, maxTokens: 3e4, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:bytedance-seed/seed-1.6": { type: "chat", id: "bytedance-seed/seed-1.6", name: "ByteDance Seed: Seed 1.6", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.25, output: 2, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 128e3, input: 0.5, output: 4, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 262144, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:bytedance-seed/seed-1.6-flash": { type: "chat", id: "bytedance-seed/seed-1.6-flash", name: "ByteDance Seed: Seed 1.6 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.075, output: 0.3, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 128e3, input: 0.1, output: 0.8, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 262144, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:bytedance-seed/seed-2-1-turbo": { type: "chat", id: "bytedance-seed/seed-2-1-turbo", name: "ByteDance Seed: Seed 2.1 Turbo", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.5, output: 2.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:bytedance-seed/seed-2.0-code": { type: "chat", id: "bytedance-seed/seed-2.0-code", name: "ByteDance Seed: Seed-2.0-Code", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.5, output: 3, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 128e3, input: 1, output: 6, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 262144, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:bytedance-seed/seed-2.0-lite": { type: "chat", id: "bytedance-seed/seed-2.0-lite", name: "ByteDance Seed: Seed-2.0-Lite", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.25, output: 2, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 128e3, input: 0.5, output: 4, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 262144, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:bytedance-seed/seed-2.0-mini": { type: "chat", id: "bytedance-seed/seed-2.0-mini", name: "ByteDance Seed: Seed-2.0-Mini", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.1, output: 0.4, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 128e3, input: 0.2, output: 0.8, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 262144, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:cohere/command-a-plus": { type: "chat", id: "cohere/command-a-plus", name: "Cohere: Command A+", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.5, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 192e3, maxTokens: 64e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:cohere/command-r-08-2024": { type: "chat", id: "cohere/command-r-08-2024", name: "Cohere: Command R (08-2024)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:cohere/command-r-plus-08-2024": { type: "chat", id: "cohere/command-r-plus-08-2024", name: "Cohere: Command R+ (08-2024)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 2.5, output: 10, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:cohere/north-mini-code:free": { type: "chat", id: "cohere/north-mini-code:free", name: "Cohere: North Mini Code (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 64e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:deepseek/deepseek-chat": { type: "chat", id: "deepseek/deepseek-chat", name: "DeepSeek: DeepSeek V3", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.2574, output: 1.0287, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:deepseek/deepseek-chat-v3-0324": { type: "chat", id: "deepseek/deepseek-chat-v3-0324", name: "DeepSeek: DeepSeek V3 0324", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.29, output: 1.14, cacheRead: 0.11, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 115200, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:deepseek/deepseek-chat-v3.1": { type: "chat", id: "deepseek/deepseek-chat-v3.1", name: "DeepSeek: DeepSeek V3.1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.25, output: 0.95, cacheRead: 0.13, cacheWrite: 0 }, contextWindow: 163840, maxTokens: 147456, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:deepseek/deepseek-r1-0528": { type: "chat", id: "deepseek/deepseek-r1-0528", name: "DeepSeek: R1 0528", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.5, output: 2.15, cacheRead: 0.35, cacheWrite: 0 }, contextWindow: 163840, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:deepseek/deepseek-v3.1-terminus": { type: "chat", id: "deepseek/deepseek-v3.1-terminus", name: "DeepSeek: DeepSeek V3.1 Terminus", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.27, output: 1, cacheRead: 0, cacheWrite: 0 }, contextWindow: 163840, maxTokens: 147456, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:deepseek/deepseek-v3.2": { type: "chat", id: "deepseek/deepseek-v3.2", name: "DeepSeek: DeepSeek V3.2", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.26, output: 0.38, cacheRead: 0.13, cacheWrite: 0 }, contextWindow: 163840, maxTokens: 147456, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:deepseek/deepseek-v3.2-exp": { type: "chat", id: "deepseek/deepseek-v3.2-exp", name: "DeepSeek: DeepSeek V3.2 Exp", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.27, output: 0.41, cacheRead: 0, cacheWrite: 0 }, contextWindow: 163840, maxTokens: 147456, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:deepseek/deepseek-v4-flash": { type: "chat", id: "deepseek/deepseek-v4-flash", name: "DeepSeek: DeepSeek V4 Flash 0423", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: "xhigh", max: null }, input: ["text"], cost: { input: 0.091, output: 0.182, cacheRead: 0.0182, cacheWrite: 0 }, contextWindow: 1048575, maxTokens: 943717, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true } }, "chat:deepseek/deepseek-v4-flash-0731": { type: "chat", id: "deepseek/deepseek-v4-flash-0731", name: "DeepSeek: DeepSeek V4 Flash 0731", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], cost: { input: 0.119, output: 0.238, cacheRead: 0.0238, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true } }, "chat:deepseek/deepseek-v4-flash-vision-exp": { type: "chat", id: "deepseek/deepseek-v4-flash-vision-exp", name: "DeepSeek: DeepSeek V4 Flash Vision Exp", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.2156, output: 0.6468, cacheRead: 686e-5, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:deepseek/deepseek-v4-pro": { type: "chat", id: "deepseek/deepseek-v4-pro", name: "DeepSeek: DeepSeek V4 Pro 0423", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: "xhigh", max: null }, input: ["text"], cost: { input: 1.6, output: 3.2, cacheRead: 0.135, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 393216, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true } }, "chat:deepseek/deepseek-v4-pro-0813": { type: "chat", id: "deepseek/deepseek-v4-pro-0813", name: "DeepSeek: DeepSeek V4 Pro 0813", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], cost: { input: 0.115, output: 4, cacheRead: 0.11, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true } }, "chat:deepseek/deepseek-v4.1-flash": { type: "chat", id: "deepseek/deepseek-v4.1-flash", name: "DeepSeek: DeepSeek V4.1 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.045, output: 0.5, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:deepseek/deepseek-v4.1-flash-1017": { type: "chat", id: "deepseek/deepseek-v4.1-flash-1017", name: "DeepSeek: DeepSeek V4.1 Flash 1017", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 3e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 393216, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:deepseek/deepseek-v4.1-flash:batch": { type: "chat", id: "deepseek/deepseek-v4.1-flash:batch", name: "DeepSeek: DeepSeek V4.1 Flash (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.05, output: 0.15, cacheRead: 4e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 384e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:dots-studio/dots-3-note-preview:free": { type: "chat", id: "dots-studio/dots-3-note-preview:free", name: "Dots Studio: Dots3-Note Preview (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 512e3, maxTokens: 460800, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:elorian/glimpse": { type: "chat", id: "elorian/glimpse", name: "Elorian: Glimpse", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.6, output: 3, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:fireworks/ember-1": { type: "chat", id: "fireworks/ember-1", name: "Fireworks: Ember-1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-2.5-flash": { type: "chat", id: "google/gemini-2.5-flash", name: "Google: Gemini 2.5 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0.083333 }, contextWindow: 1048576, maxTokens: 65535, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-2.5-flash-lite": { type: "chat", id: "google/gemini-2.5-flash-lite", name: "Google: Gemini 2.5 Flash Lite", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.4, cacheRead: 0.01, cacheWrite: 0.083333 }, contextWindow: 1048576, maxTokens: 65535, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-2.5-pro": { type: "chat", id: "google/gemini-2.5-pro", name: "Google: Gemini 2.5 Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0.375, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0.375 }] }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-2.5-pro-preview": { type: "chat", id: "google/gemini-2.5-pro-preview", name: "Google: Gemini 2.5 Pro Preview 06-05", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0.375, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0.375 }] }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3-flash-preview": { type: "chat", id: "google/gemini-3-flash-preview", name: "Google: Gemini 3 Flash Preview", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.5, output: 3, cacheRead: 0.05, cacheWrite: 0.083333 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3-flash-preview:batch": { type: "chat", id: "google/gemini-3-flash-preview:batch", name: "Google: Gemini 3 Flash Preview (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.25, output: 1.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3-pro-image": { type: "chat", id: "google/gemini-3-pro-image", name: "Google: Nano Banana Pro (Gemini 3 Pro Image)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0.375 }, contextWindow: 65536, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.1-flash-lite": { type: "chat", id: "google/gemini-3.1-flash-lite", name: "Google: Gemini 3.1 Flash Lite", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.25, output: 1.5, cacheRead: 0.025, cacheWrite: 0.083333 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.1-flash-lite-preview": { type: "chat", id: "google/gemini-3.1-flash-lite-preview", name: "Google: Gemini 3.1 Flash Lite Preview", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.25, output: 1.5, cacheRead: 0.025, cacheWrite: 0.083333 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.1-flash-lite:batch": { type: "chat", id: "google/gemini-3.1-flash-lite:batch", name: "Google: Gemini 3.1 Flash Lite (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.125, output: 0.75, cacheRead: 0.0125, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.1-pro-preview": { type: "chat", id: "google/gemini-3.1-pro-preview", name: "Google: Gemini 3.1 Pro Preview", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0.375, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 0.375 }] }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.1-pro-preview-customtools": { type: "chat", id: "google/gemini-3.1-pro-preview-customtools", name: "Google: Gemini 3.1 Pro Preview Custom Tools", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0.375, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 0.375 }] }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.1-pro-preview:batch": { type: "chat", id: "google/gemini-3.1-pro-preview:batch", name: "Google: Gemini 3.1 Pro Preview (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1, output: 6, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2, output: 9, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.5-flash": { type: "chat", id: "google/gemini-3.5-flash", name: "Google: Gemini 3.5 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1.5, output: 9, cacheRead: 0.15, cacheWrite: 0.083333 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.5-flash-lite": { type: "chat", id: "google/gemini-3.5-flash-lite", name: "Google: Gemini 3.5 Flash Lite", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0.083333 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.5-flash-lite:batch": { type: "chat", id: "google/gemini-3.5-flash-lite:batch", name: "Google: Gemini 3.5 Flash Lite (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.15, output: 1.25, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.5-flash:batch": { type: "chat", id: "google/gemini-3.5-flash:batch", name: "Google: Gemini 3.5 Flash (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.6-flash": { type: "chat", id: "google/gemini-3.6-flash", name: "Google: Gemini 3.6 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0.041667 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.6-flash:batch": { type: "chat", id: "google/gemini-3.6-flash:batch", name: "Google: Gemini 3.6 Flash (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.375, output: 1.875, cacheRead: 0.0375, cacheWrite: 0.041667 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.7-flash": { type: "chat", id: "google/gemini-3.7-flash", name: "Google: Gemini 3.7 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0.041667 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.7-flash:batch": { type: "chat", id: "google/gemini-3.7-flash:batch", name: "Google: Gemini 3.7 Flash (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.375, output: 1.875, cacheRead: 0.0375, cacheWrite: 0.041667 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.8-flash": { type: "chat", id: "google/gemini-3.8-flash", name: "Google: Gemini 3.8 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.825, output: 4.125, cacheRead: 0.0825, cacheWrite: 0.041667 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.8-flash:batch": { type: "chat", id: "google/gemini-3.8-flash:batch", name: "Google: Gemini 3.8 Flash (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.375, output: 1.875, cacheRead: 0.0375, cacheWrite: 0.041667 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-4-argon": { type: "chat", id: "google/gemini-4-argon", name: "Google: Gemini 4 Argon", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 0.1875 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-4-argon:batch": { type: "chat", id: "google/gemini-4-argon:batch", name: "Google: Gemini 4 Argon (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 0.1875 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-nano-banana-2.1": { type: "chat", id: "google/gemini-nano-banana-2.1", name: "Google: Nano Banana 2.1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: null, medium: null, high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1.5, output: 7.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 65536, maxTokens: 58982, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemma-3-12b-it": { type: "chat", id: "google/gemma-3-12b-it", name: "Google: Gemma 3 12B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.05, output: 0.15, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemma-3-27b-it": { type: "chat", id: "google/gemma-3-27b-it", name: "Google: Gemma 3 27B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.08, output: 0.35, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 117964, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemma-4-26b-a4b-it": { type: "chat", id: "google/gemma-4-26b-a4b-it", name: "Google: Gemma 4 26B A4B ", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.074, output: 0.223, cacheRead: 0.037, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemma-4-26b-a4b-it:free": { type: "chat", id: "google/gemma-4-26b-a4b-it:free", name: "Google: Gemma 4 26B A4B (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemma-4-31b-it": { type: "chat", id: "google/gemma-4-31b-it", name: "Google: Gemma 4 31B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemma-4-31b-it:free": { type: "chat", id: "google/gemma-4-31b-it:free", name: "Google: Gemma 4 31B (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:ibm-granite/granite-4.2-8b": { type: "chat", id: "ibm-granite/granite-4.2-8b", name: "IBM: Granite 4.2 8B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.06, output: 0.15, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 117964, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:inception/mercury-2": { type: "chat", id: "inception/mercury-2", name: "Inception: Mercury 2", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.25, output: 0.75, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 5e4, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:inception/mercury-2.5": { type: "chat", id: "inception/mercury-2.5", name: "Inception: Mercury 2.5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.04, output: 0.15, cacheRead: 4e-3, cacheWrite: 0 }, contextWindow: 26e4, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:inception/mercury-3": { type: "chat", id: "inception/mercury-3", name: "Inception: Mercury 3", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.1, output: 0.35, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:inclusionai/ling-3.0-flash": { type: "chat", id: "inclusionai/ling-3.0-flash", name: "inclusionAI: Ling 3.0 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.021, output: 0.063, cacheRead: 42e-4, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:inclusionai/ling-3.0-flash-vl": { type: "chat", id: "inclusionai/ling-3.0-flash-vl", name: "inclusionAI: Ling 3.0 Flash VL", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.06, output: 0.18, cacheRead: 0.012, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:inclusionai/ling-3.1-flash": { type: "chat", id: "inclusionai/ling-3.1-flash", name: "inclusionAI: Ling 3.1 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.075, output: 0.225, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 262144, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:liquid/lfm-2.5-2.6b": { type: "chat", id: "liquid/lfm-2.5-2.6b", name: "LiquidAI: LFM2.5-2.6B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.35, output: 0.5, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:liquid/lfm-2.5-2.6b:free": { type: "chat", id: "liquid/lfm-2.5-2.6b:free", name: "LiquidAI: LFM2.5-2.6B (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 65536, maxTokens: 8192, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:liquid/lfm-2.5-24b-a2b": { type: "chat", id: "liquid/lfm-2.5-24b-a2b", name: "LiquidAI: LFM2.5-24B-A2B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.05, output: 0.7, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:meituan/longcat-2.0": { type: "chat", id: "meituan/longcat-2.0", name: "Meituan: LongCat 2.0", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1048756, maxTokens: 262144, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:meta-llama/llama-3.1-70b-instruct": { type: "chat", id: "meta-llama/llama-3.1-70b-instruct", name: "Meta: Llama 3.1 70B Instruct", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.4, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:meta-llama/llama-3.1-8b-instruct": { type: "chat", id: "meta-llama/llama-3.1-8b-instruct", name: "Meta: Llama 3.1 8B Instruct", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.05, output: 0.08, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 117964, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:meta-llama/llama-3.3-70b-instruct": { type: "chat", id: "meta-llama/llama-3.3-70b-instruct", name: "Meta: Llama 3.3 70B Instruct", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.1, output: 0.32, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:meta-llama/llama-4-maverick": { type: "chat", id: "meta-llama/llama-4-maverick", name: "Meta: Llama 4 Maverick", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.1875, output: 0.6525, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:meta-llama/llama-4-scout": { type: "chat", id: "meta-llama/llama-4-scout", name: "Meta: Llama 4 Scout", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.1, output: 0.3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 327680, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:meta/muse-glimmer-30b": { type: "chat", id: "meta/muse-glimmer-30b", name: "Meta: Muse Glimmer 30B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:meta/muse-spark-1.1": { type: "chat", id: "meta/muse-spark-1.1", name: "Meta: Muse Spark 1.1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:meta/muse-spark-1.2": { type: "chat", id: "meta/muse-spark-1.2", name: "Meta: Muse Spark 1.2", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:meta/muse-spark-1.2-contributor": { type: "chat", id: "meta/muse-spark-1.2-contributor", name: "Meta: Muse Spark 1.2 Contributor", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 0.1, output: 0.2, cacheRead: 2e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:meta/muse-spark-1.3": { type: "chat", id: "meta/muse-spark-1.3", name: "Meta: Muse Spark 1.3", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:meta/muse-spark-1.3-contributor": { type: "chat", id: "meta/muse-spark-1.3-contributor", name: "Meta: Muse Spark 1.3 Contributor", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.1, output: 0.2, cacheRead: 2e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:meta/muse-spark-open": { type: "chat", id: "meta/muse-spark-open", name: "Meta: Muse Spark Open", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:meta/muse-wonder": { type: "chat", id: "meta/muse-wonder", name: "Meta: Muse Wonder", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:minimax/minimax-m1": { type: "chat", id: "minimax/minimax-m1", name: "MiniMax: MiniMax M1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.55, output: 2.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 4e4, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:minimax/minimax-m2": { type: "chat", id: "minimax/minimax-m2", name: "MiniMax: MiniMax M2", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.255, output: 1.02, cacheRead: 0, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:minimax/minimax-m2.1": { type: "chat", id: "minimax/minimax-m2.1", name: "MiniMax: MiniMax M2.1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:minimax/minimax-m2.5": { type: "chat", id: "minimax/minimax-m2.5", name: "MiniMax: MiniMax M2.5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.27, output: 0.95, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 198e3, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:minimax/minimax-m2.7": { type: "chat", id: "minimax/minimax-m2.7", name: "MiniMax: MiniMax M2.7", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:minimax/minimax-m3": { type: "chat", id: "minimax/minimax-m3", name: "MiniMax: MiniMax M3", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 524288, maxTokens: 512e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:minimax/minimax-m3.1-flash": { type: "chat", id: "minimax/minimax-m3.1-flash", name: "MiniMax: MiniMax M3.1 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 524288, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/codestral-2508": { type: "chat", id: "mistralai/codestral-2508", name: "Mistral: Codestral 2508", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.3, output: 0.9, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 204800, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:mistralai/devstral-2512": { type: "chat", id: "mistralai/devstral-2512", name: "Mistral: Devstral 2 2512", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.4, output: 2, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 209715, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:mistralai/ministral-14b-2512": { type: "chat", id: "mistralai/ministral-14b-2512", name: "Mistral: Ministral 3 14B 2512", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.2, output: 0.2, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 209715, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/ministral-3b-2512": { type: "chat", id: "mistralai/ministral-3b-2512", name: "Mistral: Ministral 3 3B 2512", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.1, output: 0.1, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 104857, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/ministral-8b-2512": { type: "chat", id: "mistralai/ministral-8b-2512", name: "Mistral: Ministral 3 8B 2512", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.15, output: 0.15, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 209715, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/mistral-large": { type: "chat", id: "mistralai/mistral-large", name: "Mistral Large", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 2, output: 6, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 102400, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:mistralai/mistral-large-2407": { type: "chat", id: "mistralai/mistral-large-2407", name: "Mistral Large 2407", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 2, output: 6, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 104857, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:mistralai/mistral-large-2512": { type: "chat", id: "mistralai/mistral-large-2512", name: "Mistral: Mistral Large 3 2512", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.5, output: 1.5, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 209715, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/mistral-large-4-0": { type: "chat", id: "mistralai/mistral-large-4-0", name: "Mistral: Mistral Large 4", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.7, output: 2.1, cacheRead: 0.07, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/mistral-medium-3": { type: "chat", id: "mistralai/mistral-medium-3", name: "Mistral: Mistral Medium 3", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.4, output: 2, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 104857, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/mistral-medium-3-5": { type: "chat", id: "mistralai/mistral-medium-3-5", name: "Mistral: Mistral Medium 3.5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1.5, output: 7.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 209715, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/mistral-medium-3-5:batch": { type: "chat", id: "mistralai/mistral-medium-3-5:batch", name: "Mistral: Mistral Medium 3.5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.75, output: 3.75, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 209715, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/mistral-medium-3.1": { type: "chat", id: "mistralai/mistral-medium-3.1", name: "Mistral: Mistral Medium 3.1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.4, output: 2, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 104857, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/mistral-nemo": { type: "chat", id: "mistralai/mistral-nemo", name: "Mistral: Mistral Nemo", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.029, output: 0.03, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:mistralai/mistral-saba": { type: "chat", id: "mistralai/mistral-saba", name: "Mistral: Saba", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.2, output: 0.6, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 32768, maxTokens: 26214, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:mistralai/mistral-small-2603": { type: "chat", id: "mistralai/mistral-small-2603", name: "Mistral: Mistral Small 4", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 209715, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/mistral-small-3.1-24b-instruct": { type: "chat", id: "mistralai/mistral-small-3.1-24b-instruct", name: "Mistral: Mistral Small 3.1 24B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.351, output: 0.555, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 102400, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/mistral-small-3.2-24b-instruct": { type: "chat", id: "mistralai/mistral-small-3.2-24b-instruct", name: "Mistral: Mistral Small 3.2 24B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.075, output: 0.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/mixtral-8x22b-instruct": { type: "chat", id: "mistralai/mixtral-8x22b-instruct", name: "Mistral: Mixtral 8x22B Instruct", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 2, output: 6, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 65536, maxTokens: 52428, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:mistralai/voxtral-small-24b-2507": { type: "chat", id: "mistralai/voxtral-small-24b-2507", name: "Mistral: Voxtral Small 24B 2507", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.1, output: 0.3, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 32768, maxTokens: 26214, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:moonshotai/kimi-k2": { type: "chat", id: "moonshotai/kimi-k2", name: "MoonshotAI: Kimi K2 0711", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.57, output: 2.3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 98304, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:moonshotai/kimi-k2-0905": { type: "chat", id: "moonshotai/kimi-k2-0905", name: "MoonshotAI: Kimi K2 0905", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.6, output: 2.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 98304, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:moonshotai/kimi-k2-thinking": { type: "chat", id: "moonshotai/kimi-k2-thinking", name: "MoonshotAI: Kimi K2 Thinking", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.6, output: 2.5, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 98304, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:moonshotai/kimi-k2.5": { type: "chat", id: "moonshotai/kimi-k2.5", name: "MoonshotAI: Kimi K2.5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.41, output: 2.06, cacheRead: 0.07, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 4096, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:moonshotai/kimi-k2.6": { type: "chat", id: "moonshotai/kimi-k2.6", name: "MoonshotAI: Kimi K2.6", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.65, output: 3.41, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:moonshotai/kimi-k2.7-code": { type: "chat", id: "moonshotai/kimi-k2.7-code", name: "MoonshotAI: Kimi K2.7 Code", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text", "image"], cost: { input: 0.6, output: 3.5, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:moonshotai/kimi-k3": { type: "chat", id: "moonshotai/kimi-k3", name: "MoonshotAI: Kimi K3", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.192, output: 15, cacheRead: 0.182, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:moonshotai/kimi-k3:batch": { type: "chat", id: "moonshotai/kimi-k3:batch", name: "MoonshotAI: Kimi K3 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 2.28, output: 11.4, cacheRead: 0.228, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:moonshotai/kimi-k3.1-pro": { type: "chat", id: "moonshotai/kimi-k3.1-pro", name: "MoonshotAI: Kimi K3.1 Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:nex-agi/nex-n2.5-pro": { type: "chat", id: "nex-agi/nex-n2.5-pro", name: "Nex AGI: Nex-N2.5-Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.075, output: 0.25, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:nvidia/nemotron-3-nano-30b-a3b": { type: "chat", id: "nvidia/nemotron-3-nano-30b-a3b", name: "NVIDIA: Nemotron 3 Nano 30B A3B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.06, output: 0.24, cacheRead: 0.012, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free": { type: "chat", id: "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free", name: "NVIDIA: Nemotron 3 Nano Omni (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:nvidia/nemotron-3-super-120b-a12b": { type: "chat", id: "nvidia/nemotron-3-super-120b-a12b", name: "NVIDIA: Nemotron 3 Super", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: null, xhigh: null, max: null }, input: ["text"], cost: { input: 0.3, output: 2.4, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:nvidia/nemotron-3-ultra-550b-a55b": { type: "chat", id: "nvidia/nemotron-3-ultra-550b-a55b", name: "NVIDIA: Nemotron 3 Ultra", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: "medium", high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.6, output: 2.4, cacheRead: 0.12, cacheWrite: 0 }, contextWindow: 202800, maxTokens: 182520, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:nvidia/nemotron-3-ultra-550b-a55b:free": { type: "chat", id: "nvidia/nemotron-3-ultra-550b-a55b:free", name: "NVIDIA: Nemotron 3 Ultra (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: "medium", high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:nvidia/nemotron-3.5-lightning": { type: "chat", id: "nvidia/nemotron-3.5-lightning", name: "NVIDIA: Nemotron 3.5 Lightning", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.07, output: 0.2, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:nvidia/nemotron-3.5-lightning:free": { type: "chat", id: "nvidia/nemotron-3.5-lightning:free", name: "NVIDIA: Nemotron 3.5 Lightning (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:nvidia/nemotron-3.5-super-vl": { type: "chat", id: "nvidia/nemotron-3.5-super-vl", name: "NVIDIA: Nemotron 3.5 Super VL", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:nvidia/nemotron-3.5-super-vl:free": { type: "chat", id: "nvidia/nemotron-3.5-super-vl:free", name: "NVIDIA: Nemotron 3.5 Super VL (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-3.5-turbo-0613": { type: "chat", id: "openai/gpt-3.5-turbo-0613", name: "OpenAI: GPT-3.5 Turbo (older v0613)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 1, output: 2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4095, maxTokens: 3685, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:openai/gpt-3.5-turbo-16k": { type: "chat", id: "openai/gpt-3.5-turbo-16k", name: "OpenAI: GPT-3.5 Turbo 16k", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 3, output: 4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 16385, maxTokens: 4096, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:openai/gpt-4": { type: "chat", id: "openai/gpt-4", name: "OpenAI: GPT-4", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 30, output: 60, cacheRead: 0, cacheWrite: 0 }, contextWindow: 8191, maxTokens: 4096, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:openai/gpt-4-turbo:batch": { type: "chat", id: "openai/gpt-4-turbo:batch", name: "OpenAI: GPT-4 Turbo (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 5, output: 15, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4.1": { type: "chat", id: "openai/gpt-4.1", name: "OpenAI: GPT-4.1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4.1-mini": { type: "chat", id: "openai/gpt-4.1-mini", name: "OpenAI: GPT-4.1 Mini", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.4, output: 1.6, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4.1-mini:batch": { type: "chat", id: "openai/gpt-4.1-mini:batch", name: "OpenAI: GPT-4.1 Mini (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.2, output: 0.8, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4.1-nano": { type: "chat", id: "openai/gpt-4.1-nano", name: "OpenAI: GPT-4.1 Nano", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.1, output: 0.4, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 942818, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4.1-nano:batch": { type: "chat", id: "openai/gpt-4.1-nano:batch", name: "OpenAI: GPT-4.1 Nano (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.05, output: 0.2, cacheRead: 0.0125, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4.1:batch": { type: "chat", id: "openai/gpt-4.1:batch", name: "OpenAI: GPT-4.1 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 1, output: 4, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4o": { type: "chat", id: "openai/gpt-4o", name: "OpenAI: GPT-4o", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4o-2024-05-13": { type: "chat", id: "openai/gpt-4o-2024-05-13", name: "OpenAI: GPT-4o (2024-05-13)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 5, output: 15, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4o-2024-08-06": { type: "chat", id: "openai/gpt-4o-2024-08-06", name: "OpenAI: GPT-4o (2024-08-06)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4o-2024-11-20": { type: "chat", id: "openai/gpt-4o-2024-11-20", name: "OpenAI: GPT-4o (2024-11-20)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4o-mini": { type: "chat", id: "openai/gpt-4o-mini", name: "OpenAI: GPT-4o-mini", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4o-mini-2024-07-18": { type: "chat", id: "openai/gpt-4o-mini-2024-07-18", name: "OpenAI: GPT-4o-mini (2024-07-18)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4o-mini:batch": { type: "chat", id: "openai/gpt-4o-mini:batch", name: "OpenAI: GPT-4o-mini (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.075, output: 0.3, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4o:batch": { type: "chat", id: "openai/gpt-4o:batch", name: "OpenAI: GPT-4o (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 1.25, output: 5, cacheRead: 0.625, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5": { type: "chat", id: "openai/gpt-5", name: "OpenAI: GPT-5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5-mini": { type: "chat", id: "openai/gpt-5-mini", name: "OpenAI: GPT-5 Mini", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.25, output: 2, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5-mini:batch": { type: "chat", id: "openai/gpt-5-mini:batch", name: "OpenAI: GPT-5 Mini (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.125, output: 1, cacheRead: 0.0125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5-nano": { type: "chat", id: "openai/gpt-5-nano", name: "OpenAI: GPT-5 Nano", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.05, output: 0.4, cacheRead: 5e-3, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5-nano:batch": { type: "chat", id: "openai/gpt-5-nano:batch", name: "OpenAI: GPT-5 Nano (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.025, output: 0.2, cacheRead: 25e-4, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5-pro": { type: "chat", id: "openai/gpt-5-pro", name: "OpenAI: GPT-5 Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 15, output: 120, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5-pro:batch": { type: "chat", id: "openai/gpt-5-pro:batch", name: "OpenAI: GPT-5 Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 7.5, output: 60, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5:batch": { type: "chat", id: "openai/gpt-5:batch", name: "OpenAI: GPT-5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.625, output: 5, cacheRead: 0.0625, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.1": { type: "chat", id: "openai/gpt-5.1", name: "OpenAI: GPT-5.1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.1-codex": { type: "chat", id: "openai/gpt-5.1-codex", name: "OpenAI: GPT-5.1-Codex", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.13, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.1-codex-max": { type: "chat", id: "openai/gpt-5.1-codex-max", name: "OpenAI: GPT-5.1-Codex-Max", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.1-codex-mini": { type: "chat", id: "openai/gpt-5.1-codex-mini", name: "OpenAI: GPT-5.1-Codex-Mini", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.25, output: 2, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.1:batch": { type: "chat", id: "openai/gpt-5.1:batch", name: "OpenAI: GPT-5.1 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.625, output: 5, cacheRead: 0.0625, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.2": { type: "chat", id: "openai/gpt-5.2", name: "OpenAI: GPT-5.2", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.2-chat": { type: "chat", id: "openai/gpt-5.2-chat", name: "OpenAI: GPT-5.2 Chat", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 32e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.2-codex": { type: "chat", id: "openai/gpt-5.2-codex", name: "OpenAI: GPT-5.2-Codex", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.2-pro": { type: "chat", id: "openai/gpt-5.2-pro", name: "OpenAI: GPT-5.2 Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 21, output: 168, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.2-pro:batch": { type: "chat", id: "openai/gpt-5.2-pro:batch", name: "OpenAI: GPT-5.2 Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 10.5, output: 84, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.2:batch": { type: "chat", id: "openai/gpt-5.2:batch", name: "OpenAI: GPT-5.2 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 0.875, output: 7, cacheRead: 0.0875, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.3-codex": { type: "chat", id: "openai/gpt-5.3-codex", name: "OpenAI: GPT-5.3-Codex", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.4": { type: "chat", id: "openai/gpt-5.4", name: "OpenAI: GPT-5.4", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 5, output: 22.5, cacheRead: 0.5, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.4-mini": { type: "chat", id: "openai/gpt-5.4-mini", name: "OpenAI: GPT-5.4 Mini", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.4-mini:batch": { type: "chat", id: "openai/gpt-5.4-mini:batch", name: "OpenAI: GPT-5.4 Mini (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 0.375, output: 2.25, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.4-nano": { type: "chat", id: "openai/gpt-5.4-nano", name: "OpenAI: GPT-5.4 Nano", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 0.2, output: 1.25, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.4-nano:batch": { type: "chat", id: "openai/gpt-5.4-nano:batch", name: "OpenAI: GPT-5.4 Nano (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 0.1, output: 0.625, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.4-pro": { type: "chat", id: "openai/gpt-5.4-pro", name: "OpenAI: GPT-5.4 Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 30, output: 180, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 60, output: 270, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.4-pro:batch": { type: "chat", id: "openai/gpt-5.4-pro:batch", name: "OpenAI: GPT-5.4 Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 15, output: 90, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 30, output: 135, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.4:batch": { type: "chat", id: "openai/gpt-5.4:batch", name: "OpenAI: GPT-5.4 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 1.25, output: 7.5, cacheRead: 0.125, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 2.5, output: 11.25, cacheRead: 0.25, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.5": { type: "chat", id: "openai/gpt-5.5", name: "OpenAI: GPT-5.5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 10, output: 45, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.5-pro": { type: "chat", id: "openai/gpt-5.5-pro", name: "OpenAI: GPT-5.5 Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 30, output: 180, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 60, output: 270, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.5-pro:batch": { type: "chat", id: "openai/gpt-5.5-pro:batch", name: "OpenAI: GPT-5.5 Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 15, output: 90, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 30, output: 135, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.5:batch": { type: "chat", id: "openai/gpt-5.5:batch", name: "OpenAI: GPT-5.5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 5, output: 22.5, cacheRead: 0.5, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-luna": { type: "chat", id: "openai/gpt-5.6-luna", name: "OpenAI: GPT-5.6 Luna", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 272e3, input: 0.4, output: 1.8, cacheRead: 0.04, cacheWrite: 0.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-luna-pro": { type: "chat", id: "openai/gpt-5.6-luna-pro", name: "OpenAI: GPT-5.6 Luna Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 272e3, input: 0.4, output: 1.8, cacheRead: 0.04, cacheWrite: 0.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-luna-pro:batch": { type: "chat", id: "openai/gpt-5.6-luna-pro:batch", name: "OpenAI: GPT-5.6 Luna Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.1, output: 0.6, cacheRead: 0.01, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.9, cacheRead: 0.02, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-luna:batch": { type: "chat", id: "openai/gpt-5.6-luna:batch", name: "OpenAI: GPT-5.6 Luna (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.1, output: 0.6, cacheRead: 0.01, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.9, cacheRead: 0.02, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-sol": { type: "chat", id: "openai/gpt-5.6-sol", name: "OpenAI: GPT-5.6 Sol", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-sol-pro": { type: "chat", id: "openai/gpt-5.6-sol-pro", name: "OpenAI: GPT-5.6 Sol Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-sol-pro:batch": { type: "chat", id: "openai/gpt-5.6-sol-pro:batch", name: "OpenAI: GPT-5.6 Sol Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-sol:batch": { type: "chat", id: "openai/gpt-5.6-sol:batch", name: "OpenAI: GPT-5.6 Sol (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-terra": { type: "chat", id: "openai/gpt-5.6-terra", name: "OpenAI: GPT-5.6 Terra", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-terra-pro": { type: "chat", id: "openai/gpt-5.6-terra-pro", name: "OpenAI: GPT-5.6 Terra Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-terra-pro:batch": { type: "chat", id: "openai/gpt-5.6-terra-pro:batch", name: "OpenAI: GPT-5.6 Terra Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1, output: 6, cacheRead: 0.1, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 9, cacheRead: 0.2, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-terra:batch": { type: "chat", id: "openai/gpt-5.6-terra:batch", name: "OpenAI: GPT-5.6 Terra (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1, output: 6, cacheRead: 0.1, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 9, cacheRead: 0.2, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-astra": { type: "chat", id: "openai/gpt-6-astra", name: "OpenAI: GPT-6 Astra", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5, tiers: [{ inputTokensAbove: 272e3, input: 20, output: 75, cacheRead: 2, cacheWrite: 25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-astra-pro": { type: "chat", id: "openai/gpt-6-astra-pro", name: "OpenAI: GPT-6 Astra Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5, tiers: [{ inputTokensAbove: 272e3, input: 20, output: 75, cacheRead: 2, cacheWrite: 25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-astra-pro:batch": { type: "chat", id: "openai/gpt-6-astra-pro:batch", name: "OpenAI: GPT-6 Astra Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25, tiers: [{ inputTokensAbove: 272e3, input: 10, output: 37.5, cacheRead: 1, cacheWrite: 12.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-astra:batch": { type: "chat", id: "openai/gpt-6-astra:batch", name: "OpenAI: GPT-6 Astra (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25, tiers: [{ inputTokensAbove: 272e3, input: 10, output: 37.5, cacheRead: 1, cacheWrite: 12.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-luna": { type: "chat", id: "openai/gpt-6-luna", name: "OpenAI: GPT-6 Luna", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-luna-pro": { type: "chat", id: "openai/gpt-6-luna-pro", name: "OpenAI: GPT-6 Luna Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-luna-pro:batch": { type: "chat", id: "openai/gpt-6-luna-pro:batch", name: "OpenAI: GPT-6 Luna Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.05, output: 0.25, cacheRead: 5e-3, cacheWrite: 0.0625, tiers: [{ inputTokensAbove: 272e3, input: 0.1, output: 0.375, cacheRead: 0.01, cacheWrite: 0.125 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-luna:batch": { type: "chat", id: "openai/gpt-6-luna:batch", name: "OpenAI: GPT-6 Luna (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.05, output: 0.25, cacheRead: 5e-3, cacheWrite: 0.0625, tiers: [{ inputTokensAbove: 272e3, input: 0.1, output: 0.375, cacheRead: 0.01, cacheWrite: 0.125 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-sol": { type: "chat", id: "openai/gpt-6-sol", name: "OpenAI: GPT-6 Sol", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-sol-pro": { type: "chat", id: "openai/gpt-6-sol-pro", name: "OpenAI: GPT-6 Sol Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-sol-pro:batch": { type: "chat", id: "openai/gpt-6-sol-pro:batch", name: "OpenAI: GPT-6 Sol Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.2, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-sol:batch": { type: "chat", id: "openai/gpt-6-sol:batch", name: "OpenAI: GPT-6 Sol (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.2, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6.1-sol": { type: "chat", id: "openai/gpt-6.1-sol", name: "OpenAI: GPT-6.1 Sol", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6.1-sol-pro": { type: "chat", id: "openai/gpt-6.1-sol-pro", name: "OpenAI: GPT-6.1 Sol Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6.1-sol-pro:batch": { type: "chat", id: "openai/gpt-6.1-sol-pro:batch", name: "OpenAI: GPT-6.1 Sol Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6.1-sol:batch": { type: "chat", id: "openai/gpt-6.1-sol:batch", name: "OpenAI: GPT-6.1 Sol (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6.1-terra": { type: "chat", id: "openai/gpt-6.1-terra", name: "OpenAI: GPT-6.1 Terra", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6.1-terra-pro": { type: "chat", id: "openai/gpt-6.1-terra-pro", name: "OpenAI: GPT-6.1 Terra Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6.1-terra-pro:batch": { type: "chat", id: "openai/gpt-6.1-terra-pro:batch", name: "OpenAI: GPT-6.1 Terra Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.5, output: 2.5, cacheRead: 0.025, cacheWrite: 0.625, tiers: [{ inputTokensAbove: 272e3, input: 1, output: 3.75, cacheRead: 0.05, cacheWrite: 1.25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6.1-terra:batch": { type: "chat", id: "openai/gpt-6.1-terra:batch", name: "OpenAI: GPT-6.1 Terra (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.5, output: 2.5, cacheRead: 0.025, cacheWrite: 0.625, tiers: [{ inputTokensAbove: 272e3, input: 1, output: 3.75, cacheRead: 0.05, cacheWrite: 1.25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-audio": { type: "chat", id: "openai/gpt-audio", name: "OpenAI: GPT Audio", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 2.5, output: 10, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:openai/gpt-audio-mini": { type: "chat", id: "openai/gpt-audio-mini", name: "OpenAI: GPT Audio Mini", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.6, output: 2.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:openai/gpt-chat-latest": { type: "chat", id: "openai/gpt-chat-latest", name: "OpenAI: GPT Chat Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-oss-120b": { type: "chat", id: "openai/gpt-oss-120b", name: "OpenAI: gpt-oss-120b", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.15, output: 0.6, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 65536, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:openai/gpt-oss-120b:batch": { type: "chat", id: "openai/gpt-oss-120b:batch", name: "OpenAI: gpt-oss-120b (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.0296, output: 0.136, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 117964, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:openai/gpt-oss-20b": { type: "chat", id: "openai/gpt-oss-20b", name: "OpenAI: gpt-oss-20b", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.03, output: 0.13, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 117964, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:openai/gpt-oss-20b:batch": { type: "chat", id: "openai/gpt-oss-20b:batch", name: "OpenAI: gpt-oss-20b (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.024, output: 0.112, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 117964, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:openai/gpt-oss-safeguard-20b": { type: "chat", id: "openai/gpt-oss-safeguard-20b", name: "OpenAI: gpt-oss-safeguard-20b", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.075, output: 0.3, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 65536, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:openai/o3": { type: "chat", id: "openai/o3", name: "OpenAI: o3", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text", "image"], cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/o3-mini:batch": { type: "chat", id: "openai/o3-mini:batch", name: "OpenAI: o3 Mini (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.55, output: 2.2, cacheRead: 0.275, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:openai/o3-pro": { type: "chat", id: "openai/o3-pro", name: "OpenAI: o3 Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text", "image"], cost: { input: 20, output: 80, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/o3:batch": { type: "chat", id: "openai/o3:batch", name: "OpenAI: o3 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text", "image"], cost: { input: 1, output: 4, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/o4-mini:batch": { type: "chat", id: "openai/o4-mini:batch", name: "OpenAI: o4 Mini (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text", "image"], cost: { input: 0.55, output: 2.2, cacheRead: 0.1375, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openrouter/auto": { type: "chat", id: "openrouter/auto", name: "Auto Router", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e6, maxTokens: 4096, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openrouter/auto-beta": { type: "chat", id: "openrouter/auto-beta", name: "Auto Router (Beta)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openrouter/free": { type: "chat", id: "openrouter/free", name: "Free Models Router", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 4096, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openrouter/fusion": { id: "openrouter/fusion", name: "OpenRouter: Fusion", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 3e4, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:openrouter/pareto-code": { type: "chat", id: "openrouter/pareto-code", name: "Pareto Code Router", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e6, maxTokens: 4096, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:particle-ai/particle-1": { type: "chat", id: "particle-ai/particle-1", name: "Particle AI: Particle-1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.05, output: 0.5, cacheRead: 3e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:perceptron/perceptron-mk1.5": { type: "chat", id: "perceptron/perceptron-mk1.5", name: "Perceptron: Perceptron Mk1.5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.15, output: 1.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 36864, maxTokens: 8192, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:prism-ml/ternary-bonsai-2-27b": { type: "chat", id: "prism-ml/ternary-bonsai-2-27b", name: "PrismML: Ternary Bonsai 2 27B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: "medium", high: null, xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 0.075, output: 0.5, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:prism-ml/ternary-bonsai-2-9b": { type: "chat", id: "prism-ml/ternary-bonsai-2-9b", name: "PrismML: Ternary Bonsai 2 9B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.08, output: 0.13, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen-2.5-72b-instruct": { type: "chat", id: "qwen/qwen-2.5-72b-instruct", name: "Qwen2.5 72B Instruct", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.36, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32768, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen-2.5-7b-instruct": { type: "chat", id: "qwen/qwen-2.5-7b-instruct", name: "Qwen: Qwen2.5 7B Instruct", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.1, output: 0.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32768, maxTokens: 29491, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen-plus": { type: "chat", id: "qwen/qwen-plus", name: "Qwen: Qwen-Plus", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.26, output: 0.78, cacheRead: 0.052, cacheWrite: 0.325, tiers: [{ inputTokensAbove: 256e3, input: 0.78, output: 2.34, cacheRead: 0.156, cacheWrite: 0.975 }] }, contextWindow: 1e6, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-14b": { type: "chat", id: "qwen/qwen3-14b", name: "Qwen: Qwen3 14B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.12, output: 0.24, cacheRead: 0, cacheWrite: 0 }, contextWindow: 40960, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-235b-a22b-2507": { type: "chat", id: "qwen/qwen3-235b-a22b-2507", name: "Qwen: Qwen3 235B A22B Instruct 2507", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.09, output: 0.55, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-235b-a22b-thinking-2507": { type: "chat", id: "qwen/qwen3-235b-a22b-thinking-2507", name: "Qwen: Qwen3 235B A22B Thinking 2507", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.45, output: 3.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-30b-a3b": { type: "chat", id: "qwen/qwen3-30b-a3b", name: "Qwen: Qwen3 30B A3B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.12, output: 0.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 40960, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-30b-a3b-instruct-2507": { type: "chat", id: "qwen/qwen3-30b-a3b-instruct-2507", name: "Qwen: Qwen3 30B A3B Instruct 2507", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.1, output: 0.3, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-32b": { type: "chat", id: "qwen/qwen3-32b", name: "Qwen: Qwen3 32B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.08, output: 0.28, cacheRead: 0, cacheWrite: 0 }, contextWindow: 40960, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-coder": { type: "chat", id: "qwen/qwen3-coder", name: "Qwen: Qwen3 Coder 480B A35B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.3, output: 1, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-coder-30b-a3b-instruct": { type: "chat", id: "qwen/qwen3-coder-30b-a3b-instruct", name: "Qwen: Qwen3 Coder 30B A3B Instruct", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.07, output: 0.28, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-coder-flash": { type: "chat", id: "qwen/qwen3-coder-flash", name: "Qwen: Qwen3 Coder Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.195, output: 0.975, cacheRead: 0.039, cacheWrite: 0.24375, tiers: [{ inputTokensAbove: 32e3, input: 0.325, output: 1.625, cacheRead: 0.065, cacheWrite: 0.40625 }, { inputTokensAbove: 128e3, input: 0.52, output: 2.6, cacheRead: 0.104, cacheWrite: 0.65 }] }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-coder-next": { type: "chat", id: "qwen/qwen3-coder-next", name: "Qwen: Qwen3 Coder Next", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.12, output: 0.8, cacheRead: 0.07, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-next-80b-a3b-instruct": { type: "chat", id: "qwen/qwen3-next-80b-a3b-instruct", name: "Qwen: Qwen3 Next 80B A3B Instruct", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.09, output: 1.1, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-vl-235b-a22b-instruct": { type: "chat", id: "qwen/qwen3-vl-235b-a22b-instruct", name: "Qwen: Qwen3 VL 235B A22B Instruct", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.21, output: 1.9, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3-vl-30b-a3b-instruct": { type: "chat", id: "qwen/qwen3-vl-30b-a3b-instruct", name: "Qwen: Qwen3 VL 30B A3B Instruct", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3-vl-30b-a3b-thinking": { type: "chat", id: "qwen/qwen3-vl-30b-a3b-thinking", name: "Qwen: Qwen3 VL 30B A3B Thinking", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text", "image"], cost: { input: 0.29, output: 1, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3-vl-8b-instruct": { type: "chat", id: "qwen/qwen3-vl-8b-instruct", name: "Qwen: Qwen3 VL 8B Instruct", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.25, output: 0.75, cacheRead: 0.12, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.5-122b-a10b": { type: "chat", id: "qwen/qwen3.5-122b-a10b", name: "Qwen: Qwen3.5-122B-A10B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.26, output: 2.08, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.5-27b": { type: "chat", id: "qwen/qwen3.5-27b", name: "Qwen: Qwen3.5-27B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.26, output: 2.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 81920, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.5-35b-a3b": { type: "chat", id: "qwen/qwen3.5-35b-a3b", name: "Qwen: Qwen3.5-35B-A3B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.14, output: 1, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 81920, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.5-397b-a17b": { type: "chat", id: "qwen/qwen3.5-397b-a17b", name: "Qwen: Qwen3.5 397B A17B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.5, output: 3.6, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.5-9b": { type: "chat", id: "qwen/qwen3.5-9b", name: "Qwen: Qwen3.5-9B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.17, output: 0.25, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.5-flash-02-23": { type: "chat", id: "qwen/qwen3.5-flash-02-23", name: "Qwen: Qwen3.5-Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.065, output: 0.26, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.5-plus-02-15": { type: "chat", id: "qwen/qwen3.5-plus-02-15", name: "Qwen: Qwen3.5 Plus 2026-02-15", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.26, output: 1.56, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 256e3, input: 0.325, output: 1.95, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.5-plus-20260420": { type: "chat", id: "qwen/qwen3.5-plus-20260420", name: "Qwen: Qwen3.5 Plus 2026-04-20", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.8, cacheRead: 0, cacheWrite: 0.375, tiers: [{ inputTokensAbove: 256e3, input: 0.375, output: 2.25, cacheRead: 0, cacheWrite: 0.46875 }] }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.6-27b": { type: "chat", id: "qwen/qwen3.6-27b", name: "Qwen: Qwen3.6 27B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.45, output: 2.7, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.6-35b-a3b": { type: "chat", id: "qwen/qwen3.6-35b-a3b", name: "Qwen: Qwen3.6 35B A3B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.9, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.6-flash": { type: "chat", id: "qwen/qwen3.6-flash", name: "Qwen: Qwen3.6 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.1875, output: 1.125, cacheRead: 0, cacheWrite: 0.234375, tiers: [{ inputTokensAbove: 256e3, input: 0.75, output: 3, cacheRead: 0, cacheWrite: 0.9375 }] }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.6-plus": { type: "chat", id: "qwen/qwen3.6-plus", name: "Qwen: Qwen3.6 Plus", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.325, output: 1.95, cacheRead: 0, cacheWrite: 0.40625, tiers: [{ inputTokensAbove: 256e3, input: 1.3, output: 3.9, cacheRead: 0, cacheWrite: 1.625 }] }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.7-flash": { type: "chat", id: "qwen/qwen3.7-flash", name: "Qwen: Qwen3.7 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.03, output: 0.13, cacheRead: 6e-3, cacheWrite: 0.038, tiers: [{ inputTokensAbove: 32e3, input: 0.1, output: 0.4, cacheRead: 0.02, cacheWrite: 0.125 }, { inputTokensAbove: 256e3, input: 0.2, output: 0.8, cacheRead: 0.04, cacheWrite: 0.25 }] }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.7-max": { type: "chat", id: "qwen/qwen3.7-max", name: "Qwen: Qwen3.7 Max", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 1.475, output: 4.425, cacheRead: 0.295, cacheWrite: 1.84375 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3.7-plus": { type: "chat", id: "qwen/qwen3.7-plus", name: "Qwen: Qwen3.7 Plus", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.32, output: 1.28, cacheRead: 0.064, cacheWrite: 0.4, tiers: [{ inputTokensAbove: 256e3, input: 0.96, output: 3.84, cacheRead: 0.192, cacheWrite: 1.2 }] }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.7-plus:batch": { type: "chat", id: "qwen/qwen3.7-plus:batch", name: "Qwen: Qwen3.7 Plus (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.23, output: 0.92, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.8-2.4t-a95b": { type: "chat", id: "qwen/qwen3.8-2.4t-a95b", name: "Qwen: Qwen3.8 2.4T A95B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, input: ["text"], cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3.8-27b": { type: "chat", id: "qwen/qwen3.8-27b", name: "Qwen: Qwen3.8 27B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 0.15, output: 1.875, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.8-flash": { type: "chat", id: "qwen/qwen3.8-flash", name: "Qwen: Qwen3.8 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.47, cacheRead: 0.016, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.8-max-0902": { type: "chat", id: "qwen/qwen3.8-max-0902", name: "Qwen: Qwen3.8 Max (0902)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.8-max-prime": { type: "chat", id: "qwen/qwen3.8-max-prime", name: "Qwen: Qwen3.8 Max Prime", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 4, output: 12, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.8-omni-flash": { type: "chat", id: "qwen/qwen3.8-omni-flash", name: "Qwen: Qwen3.8 Omni Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.47, cacheRead: 0.016, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:recursive/flint-v1.0:free": { type: "chat", id: "recursive/flint-v1.0:free", name: "Recursive: Flint (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:reflection/beam-1.0-501b-a23b": { type: "chat", id: "reflection/beam-1.0-501b-a23b", name: "Reflection: Beam 1.0 501B A23B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text"], cost: { input: 0.25, output: 1, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:rekaai/reka-edge": { type: "chat", id: "rekaai/reka-edge", name: "Reka Edge", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.1, output: 0.1, cacheRead: 0, cacheWrite: 0 }, contextWindow: 16384, maxTokens: 14745, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:relace/relace-search": { type: "chat", id: "relace/relace-search", name: "Relace: Relace Search", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 1, output: 3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 128e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:sakana/fugu-max": { type: "chat", id: "sakana/fugu-max", name: "Sakana: Fugu Max", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:sakana/fugu-ultra": { type: "chat", id: "sakana/fugu-ultra", name: "Sakana: Fugu Ultra", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 10, output: 45, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:sakana/fugu-ultra-v2": { type: "chat", id: "sakana/fugu-ultra-v2", name: "Sakana: Fugu Ultra v2", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 10, output: 45, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:sakana/sakana-namazu": { type: "chat", id: "sakana/sakana-namazu", name: "Sakana: Sakana Namazu", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:stepfun/step-3.5-flash": { type: "chat", id: "stepfun/step-3.5-flash", name: "StepFun: Step 3.5 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.1, output: 0.3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:stepfun/step-3.7-flash": { type: "chat", id: "stepfun/step-3.7-flash", name: "StepFun: Step 3.7 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.2, output: 1.15, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 230400, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:stepfun/step-5-preview": { type: "chat", id: "stepfun/step-5-preview", name: "StepFun: Step 5 Preview", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1, output: 2.7, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 64e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:tencent/hy3": { type: "chat", id: "tencent/hy3", name: "Tencent: Hy3", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.132, output: 0.528, cacheRead: 0.033, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 128e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:tencent/hy3-preview": { type: "chat", id: "tencent/hy3-preview", name: "Tencent: Hy3 preview", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.18, output: 0.6, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:tencent/hy4-preview": { type: "chat", id: "tencent/hy4-preview", name: "Tencent: Hy4 preview", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.834, output: 2.501, cacheRead: 0.042, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 64e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:thinkingmachines/inkling": { type: "chat", id: "thinkingmachines/inkling", name: "Thinking Machines: Inkling", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 1, output: 4.05, cacheRead: 0.17, cacheWrite: 0 }, contextWindow: 524288, maxTokens: 471859, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:thinkingmachines/inkling-small": { type: "chat", id: "thinkingmachines/inkling-small", name: "Thinking Machines: Inkling Small", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.45, output: 1.2, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 524288, maxTokens: 262144, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:thinkingmachines/inkling-small:free": { type: "chat", id: "thinkingmachines/inkling-small:free", name: "Thinking Machines: Inkling Small (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:thinkingmachines/inkling:free": { type: "chat", id: "thinkingmachines/inkling:free", name: "Thinking Machines: Inkling (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:typesafe/jev-router": { type: "chat", id: "typesafe/jev-router", name: "TypeSafe: Jev Router", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:unbiased/pareto-26.10": { type: "chat", id: "unbiased/pareto-26.10", name: "Pareto 26.10", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.8, output: 3.2, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:unbiased/pareto-26.9": { type: "chat", id: "unbiased/pareto-26.9", name: "Pareto 26.9", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 7.5, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:upstage/solar-mini4": { type: "chat", id: "upstage/solar-mini4", name: "Upstage: Solar Mini 4", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text"], cost: { input: 0.05, output: 0.2, cacheRead: 5e-3, cacheWrite: 0 }, contextWindow: 524288, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:upstage/solar-pro4": { type: "chat", id: "upstage/solar-pro4", name: "Upstage: Solar Pro 4", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text"], cost: { input: 0.15, output: 0.6, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 524288, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:x-ai/grok-4.20": { type: "chat", id: "x-ai/grok-4.20", name: "SpaceXAI: Grok 4.20", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 5, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 2e6, maxTokens: 18e5, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:x-ai/grok-4.3": { type: "chat", id: "x-ai/grok-4.3", name: "SpaceXAI: Grok 4.3", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 5, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 9e5, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:x-ai/grok-4.3:batch": { type: "chat", id: "x-ai/grok-4.3:batch", name: "SpaceXAI: Grok 4.3 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1, output: 2, cacheRead: 0.16, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2, output: 4, cacheRead: 0.32, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 9e5, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:x-ai/grok-4.5": { type: "chat", id: "x-ai/grok-4.5", name: "SpaceXAI: Grok 4.5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.3, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 0.6, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 45e4, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:x-ai/grok-4.6": { type: "chat", id: "x-ai/grok-4.6", name: "SpaceXAI: Grok 4.6", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 45e4, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:x-ai/grok-4.7": { type: "chat", id: "x-ai/grok-4.7", name: "SpaceXAI: Grok 4.7", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 45e4, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:x-ai/grok-build-0.1": { type: "chat", id: "x-ai/grok-build-0.1", name: "SpaceXAI: Grok Build 0.1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text", "image"], cost: { input: 1, output: 2, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2, output: 4, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 256e3, maxTokens: 230400, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:xiaomi/mimo-v2.5": { type: "chat", id: "xiaomi/mimo-v2.5", name: "Xiaomi: MiMo-V2.5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.4, output: 2, cacheRead: 0.08, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:xiaomi/mimo-v2.5-pro": { type: "chat", id: "xiaomi/mimo-v2.5-pro", name: "Xiaomi: MiMo-V2.5-Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.48, output: 1.8, cacheRead: 0.096, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:xiaomi/mimo-v2.6-flash": { type: "chat", id: "xiaomi/mimo-v2.6-flash", name: "Xiaomi: MiMo-V2.6-Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.14, output: 0.28, cacheRead: 28e-4, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:xiaomi/mimo-v2.6-pro": { type: "chat", id: "xiaomi/mimo-v2.6-pro", name: "Xiaomi: MiMo-V2.6-Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.435, output: 0.87, cacheRead: 36e-4, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:xiaomi/mimo-v2.6-pro-ultraspeed": { type: "chat", id: "xiaomi/mimo-v2.6-pro-ultraspeed", name: "Xiaomi: MiMo-V2.6-Pro-UltraSpeed", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 4.35, output: 8.7, cacheRead: 0.036, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:xingchen-agi/xing4.0-29b-a4b:free": { type: "chat", id: "xingchen-agi/xing4.0-29b-a4b:free", name: "XingChen: Xing4.0 29B A4B (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-4.5": { type: "chat", id: "z-ai/glm-4.5", name: "Z.ai: GLM 4.5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.6, output: 2.2, cacheRead: 0.11, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 98304, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-4.5-air": { type: "chat", id: "z-ai/glm-4.5-air", name: "Z.ai: GLM 4.5 Air", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.13, output: 0.85, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 98304, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-4.5v": { type: "chat", id: "z-ai/glm-4.5v", name: "Z.ai: GLM 4.5V", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.6, output: 1.8, cacheRead: 0.11, cacheWrite: 0 }, contextWindow: 65536, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:z-ai/glm-4.6": { type: "chat", id: "z-ai/glm-4.6", name: "Z.ai: GLM 4.6", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.5, output: 2, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-4.6v": { type: "chat", id: "z-ai/glm-4.6v", name: "Z.ai: GLM 4.6V", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 0.9, cacheRead: 0.055, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:z-ai/glm-4.7": { type: "chat", id: "z-ai/glm-4.7", name: "Z.ai: GLM 4.7", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.6, output: 2.2, cacheRead: 0.11, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-4.7-flash": { type: "chat", id: "z-ai/glm-4.7-flash", name: "Z.ai: GLM 4.7 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.0605, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 117964, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-5": { type: "chat", id: "z-ai/glm-5", name: "Z.ai: GLM 5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.6, output: 1.9, cacheRead: 0.119, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-5-turbo": { type: "chat", id: "z-ai/glm-5-turbo", name: "Z.ai: GLM 5 Turbo", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 1.2, output: 4, cacheRead: 0.24, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-5.1": { type: "chat", id: "z-ai/glm-5.1", name: "Z.ai: GLM 5.1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-5.2": { type: "chat", id: "z-ai/glm-5.2", name: "Z.ai: GLM 5.2", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: "xhigh", max: null }, input: ["text"], cost: { input: 6e-3, output: 6.8, cacheRead: 5e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-5.3": { type: "chat", id: "z-ai/glm-5.3", name: "Z.ai: GLM 5.3", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], cost: { input: 0.08, output: 3.6, cacheRead: 0.076, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-5.3-flash": { type: "chat", id: "z-ai/glm-5.3-flash", name: "Z.ai: GLM 5.3 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.0285, output: 0.0923, cacheRead: 0.0285, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:z-ai/glm-5.3-flash:batch": { type: "chat", id: "z-ai/glm-5.3-flash:batch", name: "Z.ai: GLM 5.3 Flash (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.05, output: 0.18, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:z-ai/glm-5.3-flashx": { type: "chat", id: "z-ai/glm-5.3-flashx", name: "Z.ai: GLM 5.3 FlashX", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.37, output: 1.25, cacheRead: 0.09, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:z-ai/glm-5.3-prime": { type: "chat", id: "z-ai/glm-5.3-prime", name: "Z.ai: GLM 5.3 Prime", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], cost: { input: 2.8, output: 8.8, cacheRead: 0.56, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-5.3:batch": { type: "chat", id: "z-ai/glm-5.3:batch", name: "Z.ai: GLM 5.3 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], cost: { input: 0.45, output: 2, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-5v-turbo": { type: "chat", id: "z-ai/glm-5v-turbo", name: "Z.ai: GLM 5V Turbo", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 1.2, output: 4, cacheRead: 0.24, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } } }, "openrouter-images": { "image:black-forest-labs/flux-3-image": { type: "image", id: "black-forest-labs/flux-3-image", name: "Black Forest Labs: FLUX 3 Image", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:black-forest-labs/flux-3-image-klein": { type: "image", id: "black-forest-labs/flux-3-image-klein", name: "Black Forest Labs: FLUX 3 Image Klein", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:black-forest-labs/flux.2-flex": { type: "image", id: "black-forest-labs/flux.2-flex", name: "Black Forest Labs: FLUX.2 Flex", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:black-forest-labs/flux.2-klein-4b": { type: "image", id: "black-forest-labs/flux.2-klein-4b", name: "Black Forest Labs: FLUX.2 Klein 4B", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:black-forest-labs/flux.2-max": { type: "image", id: "black-forest-labs/flux.2-max", name: "Black Forest Labs: FLUX.2 Max", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:black-forest-labs/flux.2-pro": { type: "image", id: "black-forest-labs/flux.2-pro", name: "Black Forest Labs: FLUX.2 Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:bytedance-seed/seedream-4.5": { type: "image", id: "bytedance-seed/seedream-4.5", name: "ByteDance Seed: Seedream 4.5", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["image", "text"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:bytedance-seed/seedream-5-0-flash": { type: "image", id: "bytedance-seed/seedream-5-0-flash", name: "ByteDance Seed: Seedream 5.0 Flash", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:bytedance-seed/seedream-5-0-lite": { type: "image", id: "bytedance-seed/seedream-5-0-lite", name: "ByteDance Seed: Seedream 5.0 Lite", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:bytedance-seed/seedream-5-0-pro": { type: "image", id: "bytedance-seed/seedream-5-0-pro", name: "ByteDance Seed: Seedream 5.0 Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:google/gemini-2.5-flash-image": { type: "image", id: "google/gemini-2.5-flash-image", name: "Google: Nano Banana (Gemini 2.5 Flash Image)", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["image", "text"], output: ["image", "text"], cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0.083333 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:google/gemini-3-pro-image": { type: "image", id: "google/gemini-3-pro-image", name: "Google: Nano Banana Pro (Gemini 3 Pro Image)", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["image", "text"], output: ["image", "text"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0.375 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:google/gemini-3-pro-image-preview": { type: "image", id: "google/gemini-3-pro-image-preview", name: "Google: Nano Banana Pro (Gemini 3 Pro Image Preview)", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["image", "text"], output: ["image", "text"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0.375 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:google/gemini-3.1-flash-image": { type: "image", id: "google/gemini-3.1-flash-image", name: "Google: Nano Banana 2 (Gemini 3.1 Flash Image)", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["image", "text"], output: ["image", "text"], cost: { input: 0.5, output: 3, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:google/gemini-3.1-flash-image-preview": { type: "image", id: "google/gemini-3.1-flash-image-preview", name: "Google: Nano Banana 2 (Gemini 3.1 Flash Image Preview)", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["image", "text"], output: ["image", "text"], cost: { input: 0.5, output: 3, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:google/gemini-3.1-flash-lite-image": { type: "image", id: "google/gemini-3.1-flash-lite-image", name: "Google: Nano Banana 2 Lite (Gemini 3.1 Flash Lite Image)", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["image", "text"], output: ["image", "text"], cost: { input: 0.25, output: 1.5, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:google/gemini-nano-banana-2.1": { type: "image", id: "google/gemini-nano-banana-2.1", name: "Google: Nano Banana 2.1", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["image", "text"], output: ["image", "text"], cost: { input: 1.5, output: 7.5, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:krea/k3-edit": { type: "image", id: "krea/k3-edit", name: "Krea: K3 Edit", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:krea/krea-2-large": { type: "image", id: "krea/krea-2-large", name: "Krea: Krea 2 Large", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:krea/krea-2-medium": { type: "image", id: "krea/krea-2-medium", name: "Krea: Krea 2 Medium", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:krea/krea-2-medium-turbo": { type: "image", id: "krea/krea-2-medium-turbo", name: "Krea: Krea 2 Medium Turbo", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:meta/muse-image": { type: "image", id: "meta/muse-image", name: "Meta: Muse Image", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:microsoft/mai-image-2.5": { type: "image", id: "microsoft/mai-image-2.5", name: "Microsoft AI: MAI-Image-2.5", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 5, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:microsoft/mai-image-2.5-pro": { type: "image", id: "microsoft/mai-image-2.5-pro", name: "Microsoft AI: MAI-Image-2.5 Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 5, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:microsoft/mai-image-2.6": { type: "image", id: "microsoft/mai-image-2.6", name: "Microsoft AI: MAI-Image-2.6", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 5, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:microsoft/mai-image-2.6-flash": { type: "image", id: "microsoft/mai-image-2.6-flash", name: "Microsoft AI: MAI-Image-2.6 Flash", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 1.75, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:openai/gpt-5-image": { type: "image", id: "openai/gpt-5-image", name: "OpenAI: GPT-5 Image", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["image", "text"], output: ["image", "text"], cost: { input: 10, output: 10, cacheRead: 1.25, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:openai/gpt-5-image-mini": { type: "image", id: "openai/gpt-5-image-mini", name: "OpenAI: GPT-5 Image Mini", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["image", "text"], output: ["image", "text"], cost: { input: 2.5, output: 2, cacheRead: 0.25, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:openai/gpt-5.4-image-2": { type: "image", id: "openai/gpt-5.4-image-2", name: "OpenAI: GPT-5.4 Image 2", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["image", "text"], output: ["image", "text"], cost: { input: 8, output: 15, cacheRead: 2, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:openai/gpt-image-1": { type: "image", id: "openai/gpt-image-1", name: "OpenAI: GPT Image 1", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 10, output: 10, cacheRead: 1.25, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:openai/gpt-image-1-mini": { type: "image", id: "openai/gpt-image-1-mini", name: "OpenAI: GPT Image 1 Mini", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 2.5, output: 2.5, cacheRead: 0.25, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:openai/gpt-image-2": { type: "image", id: "openai/gpt-image-2", name: "OpenAI: GPT Image 2", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 8, output: 8, cacheRead: 2, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:openai/gpt-image-2.5-flare": { type: "image", id: "openai/gpt-image-2.5-flare", name: "OpenAI: GPT Image 2.5 Flare", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 8, output: 8, cacheRead: 2, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:openai/gpt-image-2.5-sunburst": { type: "image", id: "openai/gpt-image-2.5-sunburst", name: "OpenAI: GPT Image 2.5 Sunburst", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 8, output: 8, cacheRead: 2, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:openrouter/auto": { type: "image", id: "openrouter/auto", name: "Auto Router", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:openrouter/auto-beta": { type: "image", id: "openrouter/auto-beta", name: "Auto Router (Beta)", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:qwen/qwen-image-2.1-pro": { type: "image", id: "qwen/qwen-image-2.1-pro", name: "Qwen: Qwen Image 2.1 Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:qwen/qwen-image-2.1-turbo": { type: "image", id: "qwen/qwen-image-2.1-turbo", name: "Qwen: Qwen Image 2.1 Turbo", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:qwen/qwen-image-3": { type: "image", id: "qwen/qwen-image-3", name: "Qwen: Qwen Image 3", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:qwen/qwen-image-3-pro": { type: "image", id: "qwen/qwen-image-3-pro", name: "Qwen: Qwen Image 3 Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v3": { type: "image", id: "recraft/recraft-v3", name: "Recraft: Recraft V3", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4": { type: "image", id: "recraft/recraft-v4", name: "Recraft: Recraft V4", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4-pro": { type: "image", id: "recraft/recraft-v4-pro", name: "Recraft: Recraft V4 Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4-pro-vector": { type: "image", id: "recraft/recraft-v4-pro-vector", name: "Recraft: Recraft V4 Pro Vector", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4-styles": { type: "image", id: "recraft/recraft-v4-styles", name: "Recraft: Recraft V4 Styles", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4-styles-pro": { type: "image", id: "recraft/recraft-v4-styles-pro", name: "Recraft: Recraft V4 Styles Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4-styles-pro-vector": { type: "image", id: "recraft/recraft-v4-styles-pro-vector", name: "Recraft: Recraft V4 Styles Pro Vector", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4-styles-vector": { type: "image", id: "recraft/recraft-v4-styles-vector", name: "Recraft: Recraft V4 Styles Vector", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4-vector": { type: "image", id: "recraft/recraft-v4-vector", name: "Recraft: Recraft V4 Vector", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4.1": { type: "image", id: "recraft/recraft-v4.1", name: "Recraft: Recraft V4.1", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4.1-flash": { type: "image", id: "recraft/recraft-v4.1-flash", name: "Recraft: Recraft V4.1 Flash", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 } }, "image:recraft/recraft-v4.1-pro": { type: "image", id: "recraft/recraft-v4.1-pro", name: "Recraft: Recraft V4.1 Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4.1-pro-vector": { type: "image", id: "recraft/recraft-v4.1-pro-vector", name: "Recraft: Recraft V4.1 Pro Vector", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4.1-utility": { type: "image", id: "recraft/recraft-v4.1-utility", name: "Recraft: Recraft V4.1 Utility", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4.1-utility-pro": { type: "image", id: "recraft/recraft-v4.1-utility-pro", name: "Recraft: Recraft V4.1 Utility Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4.1-vector": { type: "image", id: "recraft/recraft-v4.1-vector", name: "Recraft: Recraft V4.1 Vector", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:sourceful/riverflow-v2-fast": { type: "image", id: "sourceful/riverflow-v2-fast", name: "Sourceful: Riverflow V2 Fast", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:sourceful/riverflow-v2-pro": { type: "image", id: "sourceful/riverflow-v2-pro", name: "Sourceful: Riverflow V2 Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:sourceful/riverflow-v2.5-fast": { type: "image", id: "sourceful/riverflow-v2.5-fast", name: "Sourceful: Riverflow V2.5 Fast", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:sourceful/riverflow-v2.5-pro": { type: "image", id: "sourceful/riverflow-v2.5-pro", name: "Sourceful: Riverflow V2.5 Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:sourceful/riverflow-v2.6-pro": { type: "image", id: "sourceful/riverflow-v2.6-pro", name: "Sourceful: Riverflow V2.6 Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:tencent/hy-image-v3.5-preview": { type: "image", id: "tencent/hy-image-v3.5-preview", name: "Tencent: Hy Image 3.5 Preview", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:x-ai/grok-imagine-image-2.0": { type: "image", id: "x-ai/grok-imagine-image-2.0", name: "xAI: Grok Imagine Image 2.0", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:x-ai/grok-imagine-image-quality": { type: "image", id: "x-ai/grok-imagine-image-quality", name: "SpaceXAI: Grok Imagine Image Quality", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } } }, "typesafe-system-one": { "classifier:~liquid/d1-latest": { type: "classifier", id: "~liquid/d1-latest", name: "LiquidAI: d1 Latest", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.02, output: 0, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 65536, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:~liquid/d1-ultra-latest": { type: "classifier", id: "~liquid/d1-ultra-latest", name: "LiquidAI: d1-ultra Latest", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.042, output: 0, cacheRead: 0.042, cacheWrite: 0 }, contextWindow: 32768, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:~perplexity/pplx-decider-flash-latest": { type: "classifier", id: "~perplexity/pplx-decider-flash-latest", name: "Perplexity: Decider Flash Latest", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.01, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:~perplexity/pplx-decider-latest": { type: "classifier", id: "~perplexity/pplx-decider-latest", name: "Perplexity: Decider Latest", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.02, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:~typesafe/jev-latest": { type: "classifier", id: "~typesafe/jev-latest", name: "TypeSafe: Jev Latest", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:baseten/elephant-1": { type: "classifier", id: "baseten/elephant-1", name: "Baseten: Elephant 1", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.035, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 16384, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:baseten/joey-1": { type: "classifier", id: "baseten/joey-1", name: "Baseten: Joey 1", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.01, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 16384, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:baseten/mammoth-1": { type: "classifier", id: "baseten/mammoth-1", name: "Baseten: Mammoth 1", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.1, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 16384, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:cloudflare/clef": { type: "classifier", id: "cloudflare/clef", name: "Cloudflare: Clef", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.24, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 65536, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:cloudflare/clef-flash": { type: "classifier", id: "cloudflare/clef-flash", name: "Cloudflare: Clef Flash", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.038, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 24576, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:cloudflare/clef-omni": { type: "classifier", id: "cloudflare/clef-omni", name: "Cloudflare: Clef Omni", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.15, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 65536, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:inception/mercury-decide": { type: "classifier", id: "inception/mercury-decide", name: "Inception: Mercury Decide", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.02, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 65536, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:jaredpalmer/kev-4b": { type: "classifier", id: "jaredpalmer/kev-4b", name: "Jared Palmer: Kev 4B", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 8192, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:liquid/d1": { type: "classifier", id: "liquid/d1", name: "LiquidAI: d1", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.02, output: 0, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 65536, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:liquid/d1-ultra": { type: "classifier", id: "liquid/d1-ultra", name: "LiquidAI: d1-ultra", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.042, output: 0, cacheRead: 0.042, cacheWrite: 0 }, contextWindow: 32768, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:liquid/d1.1": { type: "classifier", id: "liquid/d1.1", name: "LiquidAI: d1.1", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.02, output: 0, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 65536, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:microsoft/microsoft-decision-1": { type: "classifier", id: "microsoft/microsoft-decision-1", name: "Microsoft: Microsoft-Decision-1", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32768, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:nace-ai/drex-max": { type: "classifier", id: "nace-ai/drex-max", name: "Nace.AI: Drex Max", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.06, output: 0, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 262144, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:nace-ai/drex-v1.5": { type: "classifier", id: "nace-ai/drex-v1.5", name: "Nace.AI: Drex v1.5", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text"], cost: { input: 0.04, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:nace-ai/drex-v2.0": { type: "classifier", id: "nace-ai/drex-v2.0", name: "Nace.AI: Drex v2.0", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text"], cost: { input: 0.06, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:openai/gpt-6-luna-decisions": { type: "classifier", id: "openai/gpt-6-luna-decisions", name: "OpenAI: GPT-6 Luna Decisions", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.1, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 105e4, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:perplexity/pplx-decider-flash-v1.2": { type: "classifier", id: "perplexity/pplx-decider-flash-v1.2", name: "Perplexity: Decider Flash V1.2", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.01, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:perplexity/pplx-decider-v1.2": { type: "classifier", id: "perplexity/pplx-decider-v1.2", name: "Perplexity: Decider V1.2", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.02, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:respan/span-01": { type: "classifier", id: "respan/span-01", name: "Respan: Span-01", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text"], cost: { input: 0.02, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4096, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:respan/span-01-lite": { type: "classifier", id: "respan/span-01-lite", name: "Respan: Span-01 Lite", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4096, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:respan/span-01-lite:free": { type: "classifier", id: "respan/span-01-lite:free", name: "Respan: Span-01 Lite (free)", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4096, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:respan/span-02": { type: "classifier", id: "respan/span-02", name: "Respan: Span-02", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.01, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:scaledown/classify-1": { type: "classifier", id: "scaledown/classify-1", name: "ScaleDown: Classify-1", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.04, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:togethercomputer/tev1-4b-experimental": { type: "classifier", id: "togethercomputer/tev1-4b-experimental", name: "Together: Tev1 4B Experimental", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32768, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:typesafe/jev-1.13": { type: "classifier", id: "typesafe/jev-1.13", name: "TypeSafe: Jev 1.13", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:typesafe/jev-1.14": { type: "classifier", id: "typesafe/jev-1.14", name: "TypeSafe: Jev 1.14", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:upstage/solar-decide": { type: "classifier", id: "upstage/solar-decide", name: "Upstage: Solar Decide", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text"], cost: { input: 0.05, output: 0, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 524288, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:upstage/solar-decide-flash": { type: "classifier", id: "upstage/solar-decide-flash", name: "Upstage: Solar Decide Flash", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text"], cost: { input: 0.05, output: 0, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 524288, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js +var OPENROUTER_MODELS = flattenChatModelCatalog("openrouter", openrouter_default); +var OPENROUTER_IMAGE_MODELS = flattenImageModelCatalog("openrouter", openrouter_default); +var OPENROUTER_CLASSIFIER_MODELS = flattenClassifierModelCatalog("openrouter", openrouter_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan.json +var qwen_token_plan_default = { "openai-completions": { "chat:deepseek-v3.2": { id: "deepseek-v3.2", name: "DeepSeek V3.2", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 65536, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, type: "chat" }, "chat:deepseek-v4-flash": { id: "deepseek-v4-flash", name: "DeepSeek V4 Flash", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-v4-flash-0731": { id: "deepseek-v4-flash-0731", name: "DeepSeek V4 Flash 0731", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-v4-pro": { id: "deepseek-v4-pro", name: "DeepSeek V4 Pro", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-v4-pro-0813": { id: "deepseek-v4-pro-0813", name: "DeepSeek V4 Pro 0813", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-v4.1-flash": { id: "deepseek-v4.1-flash", name: "DeepSeek V4.1 Flash", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek-v4.1-flash-1017": { id: "deepseek-v4.1-flash-1017", name: "DeepSeek V4.1 Flash 1017", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:glm-5": { id: "glm-5", name: "GLM-5", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 16384, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:glm-5.1": { id: "glm-5.1", name: "GLM-5.1", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 128e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:glm-5.2": { id: "glm-5.2", name: "GLM-5.2", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:glm-5.3": { id: "glm-5.3", name: "GLM-5.3", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:kimi-k2.5": { id: "kimi-k2.5", name: "Kimi K2.5", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 98304, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k2.6": { id: "kimi-k2.6", name: "Kimi K2.6", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k2.7-code": { id: "kimi-k2.7-code", name: "Kimi K2.7 Code", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:MiniMax-M2.5": { id: "MiniMax-M2.5", name: "MiniMax-M2.5", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 196608, maxTokens: 32768, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, type: "chat" }, "chat:qwen3.6-flash": { id: "qwen3.6-flash", name: "Qwen3.6 Flash", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.6-plus": { id: "qwen3.6-plus", name: "Qwen3.6 Plus", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.7-max": { id: "qwen3.7-max", name: "Qwen3.7 Max", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, type: "chat" }, "chat:qwen3.7-plus": { id: "qwen3.7-plus", name: "Qwen3.7 Plus", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.8-flash": { id: "qwen3.8-flash", name: "Qwen3.8 Flash", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.8-max": { id: "qwen3.8-max", name: "Qwen3.8 Max", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.models.js +var QWEN_TOKEN_PLAN_MODELS = flattenChatModelCatalog("qwen-token-plan", qwen_token_plan_default); +var QWEN_TOKEN_PLAN_IMAGE_MODELS = flattenImageModelCatalog("qwen-token-plan", qwen_token_plan_default); +var QWEN_TOKEN_PLAN_CLASSIFIER_MODELS = flattenClassifierModelCatalog("qwen-token-plan", qwen_token_plan_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan-cn.json +var qwen_token_plan_cn_default = { "openai-completions": { "chat:deepseek-v3.2": { id: "deepseek-v3.2", name: "DeepSeek V3.2", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 65536, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, type: "chat" }, "chat:deepseek-v4-flash": { id: "deepseek-v4-flash", name: "DeepSeek V4 Flash", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-v4-flash-0731": { id: "deepseek-v4-flash-0731", name: "DeepSeek V4 Flash 0731", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-v4-pro": { id: "deepseek-v4-pro", name: "DeepSeek V4 Pro", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-v4-pro-0813": { id: "deepseek-v4-pro-0813", name: "DeepSeek V4 Pro 0813", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-v4.1-flash": { id: "deepseek-v4.1-flash", name: "DeepSeek V4.1 Flash", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek-v4.1-flash-1017": { id: "deepseek-v4.1-flash-1017", name: "DeepSeek V4.1 Flash 1017", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:glm-5": { id: "glm-5", name: "GLM-5", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 16384, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:glm-5.1": { id: "glm-5.1", name: "GLM-5.1", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 128e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:glm-5.2": { id: "glm-5.2", name: "GLM-5.2", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:glm-5.3": { id: "glm-5.3", name: "GLM-5.3", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:kimi-k2.5": { id: "kimi-k2.5", name: "Kimi K2.5", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 98304, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k2.6": { id: "kimi-k2.6", name: "Kimi K2.6", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k2.7-code": { id: "kimi-k2.7-code", name: "Kimi K2.7 Code", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:MiniMax-M2.5": { id: "MiniMax-M2.5", name: "MiniMax-M2.5", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 196608, maxTokens: 32768, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, type: "chat" }, "chat:qwen3.6-flash": { id: "qwen3.6-flash", name: "Qwen3.6 Flash", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.6-plus": { id: "qwen3.6-plus", name: "Qwen3.6 Plus", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.7-max": { id: "qwen3.7-max", name: "Qwen3.7 Max", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, type: "chat" }, "chat:qwen3.7-plus": { id: "qwen3.7-plus", name: "Qwen3.7 Plus", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.8-flash": { id: "qwen3.8-flash", name: "Qwen3.8 Flash", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.8-max": { id: "qwen3.8-max", name: "Qwen3.8 Max", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.models.js +var QWEN_TOKEN_PLAN_CN_MODELS = flattenChatModelCatalog("qwen-token-plan-cn", qwen_token_plan_cn_default); +var QWEN_TOKEN_PLAN_CN_IMAGE_MODELS = flattenImageModelCatalog("qwen-token-plan-cn", qwen_token_plan_cn_default); +var QWEN_TOKEN_PLAN_CN_CLASSIFIER_MODELS = flattenClassifierModelCatalog("qwen-token-plan-cn", qwen_token_plan_cn_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan-individual.json +var qwen_token_plan_individual_default = { "openai-completions": { "chat:deepseek-v4-flash-0731": { id: "deepseek-v4-flash-0731", name: "DeepSeek V4 Flash 0731", api: "openai-completions", provider: "qwen-token-plan-individual", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-v4-pro": { id: "deepseek-v4-pro", name: "DeepSeek V4 Pro", api: "openai-completions", provider: "qwen-token-plan-individual", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-v4-pro-0813": { id: "deepseek-v4-pro-0813", name: "DeepSeek V4 Pro 0813", api: "openai-completions", provider: "qwen-token-plan-individual", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:glm-5.2": { id: "glm-5.2", name: "GLM-5.2", api: "openai-completions", provider: "qwen-token-plan-individual", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:qwen3.6-flash": { id: "qwen3.6-flash", name: "Qwen3.6 Flash", api: "openai-completions", provider: "qwen-token-plan-individual", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.7-max": { id: "qwen3.7-max", name: "Qwen3.7 Max", api: "openai-completions", provider: "qwen-token-plan-individual", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, type: "chat" }, "chat:qwen3.7-plus": { id: "qwen3.7-plus", name: "Qwen3.7 Plus", api: "openai-completions", provider: "qwen-token-plan-individual", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.8-flash": { id: "qwen3.8-flash", name: "Qwen3.8 Flash", api: "openai-completions", provider: "qwen-token-plan-individual", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.8-max": { id: "qwen3.8-max", name: "Qwen3.8 Max", api: "openai-completions", provider: "qwen-token-plan-individual", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-individual.models.js +var QWEN_TOKEN_PLAN_INDIVIDUAL_MODELS = flattenChatModelCatalog("qwen-token-plan-individual", qwen_token_plan_individual_default); +var QWEN_TOKEN_PLAN_INDIVIDUAL_IMAGE_MODELS = flattenImageModelCatalog("qwen-token-plan-individual", qwen_token_plan_individual_default); +var QWEN_TOKEN_PLAN_INDIVIDUAL_CLASSIFIER_MODELS = flattenClassifierModelCatalog("qwen-token-plan-individual", qwen_token_plan_individual_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/radius.json +var radius_default = { "pi-messages": { "chat:balanced": { id: "balanced", name: "Balanced", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], contextWindow: 1048576, maxTokens: 131072, lab: "Moonshot AI", cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, enabled: true, providers: [{ id: "fireworks", name: "Fireworks AI", credential: "radius", source: "radius" }, { id: "relace", name: "Relace", credential: "radius", source: "radius" }, { id: "sference", name: "sference", credential: "radius", source: "radius" }, { id: "baseten", name: "Baseten", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:cheap": { id: "cheap", name: "Cheap", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], contextWindow: 1e6, maxTokens: 32768, lab: "DeepSeek", cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, enabled: true, providers: [{ id: "fireworks", name: "Fireworks AI", credential: "radius", source: "radius" }, { id: "relace", name: "Relace", credential: "radius", source: "radius" }, { id: "baseten", name: "Baseten", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-fable-5": { id: "claude-fable-5", name: "Claude Fable 5", reasoning: true, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 1e6, maxTokens: 128e3, lab: "Anthropic", cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, enabled: true, providers: [{ id: "anthropic", name: "Anthropic", credential: "radius", source: "radius" }], promptCache: { short: 300, long: 3600 }, api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-fable-5-1": { id: "claude-fable-5-1", name: "Claude Fable 5.1", reasoning: true, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 1e6, maxTokens: 128e3, lab: "Anthropic", cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, enabled: true, providers: [{ id: "anthropic", name: "Anthropic", credential: "radius", source: "radius" }], promptCache: { short: 300, long: 3600 }, api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-haiku-4-5": { id: "claude-haiku-4-5", name: "Claude Haiku 4.5", reasoning: true, input: ["text", "image"], contextWindow: 2e5, maxTokens: 64e3, lab: "Anthropic", cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, enabled: true, providers: [{ id: "anthropic", name: "Anthropic", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-haiku-5-5": { id: "claude-haiku-5-5", name: "Claude Haiku 5.5", reasoning: true, thinkingLevelMap: { minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 1e6, maxTokens: 128e3, lab: "Anthropic", cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 1e5, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] }, enabled: true, providers: [{ id: "anthropic", name: "Anthropic", credential: "radius", source: "radius" }], promptCache: { short: 300, long: 3600 }, api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-5": { id: "claude-opus-4-5", name: "Claude Opus 4.5", reasoning: true, input: ["text", "image"], contextWindow: 2e5, maxTokens: 64e3, lab: "Anthropic", cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, enabled: true, providers: [{ id: "anthropic", name: "Anthropic", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-8": { id: "claude-opus-4-8", name: "Claude Opus 4.8", reasoning: true, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 1e6, maxTokens: 128e3, lab: "Anthropic", cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, enabled: true, providers: [{ id: "anthropic", name: "Anthropic", credential: "radius", source: "radius" }], promptCache: { short: 300, long: 3600 }, api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-5": { id: "claude-opus-5", name: "Claude Opus 5", reasoning: true, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 1e6, maxTokens: 128e3, lab: "Anthropic", cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, enabled: true, providers: [{ id: "anthropic", name: "Anthropic", credential: "radius", source: "radius" }], promptCache: { short: 300, long: 3600 }, api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-5-5": { id: "claude-opus-5-5", name: "Claude Opus 5.5", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 1e6, maxTokens: 128e3, lab: "Anthropic", cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5 }, enabled: true, providers: [{ id: "anthropic", name: "Anthropic", credential: "radius", source: "radius" }], promptCache: { short: 300, long: 3600 }, api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-4-5": { id: "claude-sonnet-4-5", name: "Claude Sonnet 4.5", reasoning: true, input: ["text", "image"], contextWindow: 2e5, maxTokens: 64e3, lab: "Anthropic", cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, enabled: true, providers: [{ id: "anthropic", name: "Anthropic", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-5": { id: "claude-sonnet-5", name: "Claude Sonnet 5", reasoning: true, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 1e6, maxTokens: 128e3, lab: "Anthropic", cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, enabled: true, providers: [{ id: "anthropic", name: "Anthropic", credential: "radius", source: "radius" }], promptCache: { short: 300, long: 3600 }, api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-5-5": { id: "claude-sonnet-5-5", name: "Claude Sonnet 5.5", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 1e6, maxTokens: 128e3, lab: "Anthropic", cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, enabled: true, providers: [{ id: "anthropic", name: "Anthropic", credential: "radius", source: "radius" }], promptCache: { short: 300, long: 3600 }, api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek-v4.1-flash": { id: "deepseek-v4.1-flash", name: "DeepSeek V4.1 Flash", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], contextWindow: 1e6, maxTokens: 32768, lab: "DeepSeek", cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, enabled: true, providers: [{ id: "fireworks", name: "Fireworks AI", credential: "radius", source: "radius" }, { id: "relace", name: "Relace", credential: "radius", source: "radius" }, { id: "baseten", name: "Baseten", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:glm-5.3": { id: "glm-5.3", name: "GLM-5.3", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], contextWindow: 1e6, maxTokens: 131072, lab: "Z.ai", cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, enabled: true, providers: [{ id: "fireworks", name: "Fireworks AI", credential: "radius", source: "radius" }, { id: "baseten", name: "Baseten", credential: "radius", source: "radius" }, { id: "vercel-ai-gateway", name: "Vercel AI Gateway", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", type: "chat" }, "chat:glm-5.3-flash": { id: "glm-5.3-flash", name: "GLM-5.3 Flash", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], contextWindow: 1e6, maxTokens: 131072, lab: "Z.ai", cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, enabled: true, providers: [{ id: "fireworks", name: "Fireworks AI", credential: "radius", source: "radius" }, { id: "relace", name: "Relace", credential: "radius", source: "radius" }, { id: "baseten", name: "Baseten", credential: "radius", source: "radius" }, { id: "sference", name: "sference", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", type: "chat" }, "chat:gpt-5.6-luna": { id: "gpt-5.6-luna", name: "GPT 5.6 Luna", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 272e3, maxTokens: 128e3, lab: "OpenAI", cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 272e3, input: 0.4, output: 1.8, cacheRead: 0.04, cacheWrite: 0.5 }] }, enabled: true, providers: [{ id: "openai", name: "OpenAI", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-sol": { id: "gpt-5.6-sol", name: "GPT 5.6 Sol", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 272e3, maxTokens: 128e3, lab: "OpenAI", cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, enabled: true, providers: [{ id: "openai", name: "OpenAI", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-terra": { id: "gpt-5.6-terra", name: "GPT 5.6 Terra", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 272e3, maxTokens: 128e3, lab: "OpenAI", cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 5 }] }, enabled: true, providers: [{ id: "openai", name: "OpenAI", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-astra": { id: "gpt-6-astra", name: "GPT 6 Astra", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 272e3, maxTokens: 128e3, lab: "OpenAI", cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5, tiers: [{ inputTokensAbove: 272e3, input: 20, output: 75, cacheRead: 2, cacheWrite: 25 }] }, enabled: true, providers: [{ id: "openai", name: "OpenAI", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-luna": { id: "gpt-6-luna", name: "GPT 6 Luna", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 105e4, maxTokens: 128e3, lab: "OpenAI", cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, enabled: true, providers: [{ id: "openai", name: "OpenAI", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-sol": { id: "gpt-6-sol", name: "GPT 6 Sol", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 105e4, maxTokens: 128e3, lab: "OpenAI", cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, enabled: true, providers: [{ id: "openai", name: "OpenAI", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-sol": { id: "gpt-6.1-sol", name: "GPT 6.1 Sol", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 272e3, maxTokens: 128e3, lab: "OpenAI", cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, enabled: true, providers: [{ id: "openai", name: "OpenAI", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-4.7": { id: "grok-4.7", name: "Grok 4.7", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], contextWindow: 5e5, maxTokens: 5e5, lab: "xAI", cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, enabled: true, providers: [{ id: "xai", name: "xAI", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k3": { id: "kimi-k3", name: "Kimi K3", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], contextWindow: 1048576, maxTokens: 131072, lab: "Moonshot AI", cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, enabled: true, providers: [{ id: "fireworks", name: "Fireworks AI", credential: "radius", source: "radius" }, { id: "relace", name: "Relace", credential: "radius", source: "radius" }, { id: "sference", name: "sference", credential: "radius", source: "radius" }, { id: "baseten", name: "Baseten", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:minimax-m3.1-flash": { id: "minimax-m3.1-flash", name: "MiniMax M3.1 Flash", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 1e6, maxTokens: 524288, lab: "MiniMax", cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, enabled: true, providers: [{ id: "minimax", name: "MiniMax", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:precise": { id: "precise", name: "Precise", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 272e3, maxTokens: 128e3, lab: "OpenAI", cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, enabled: true, providers: [{ id: "openai", name: "OpenAI", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:recursive/flint": { id: "recursive/flint", name: "Flint (free, trains on data)", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: null, xhigh: null, max: null }, input: ["text"], contextWindow: 262144, maxTokens: 65536, lab: "Recursive", cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, enabled: true, providers: [{ id: "recursive", name: "Recursive", credential: "radius", source: "radius" }], free: true, api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/radius.models.js +var RADIUS_MODELS = flattenChatModelCatalog("radius", radius_default); +var RADIUS_IMAGE_MODELS = flattenImageModelCatalog("radius", radius_default); +var RADIUS_CLASSIFIER_MODELS = flattenClassifierModelCatalog("radius", radius_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +var together_default = { "openai-completions": { "chat:deepseek-ai/DeepSeek-V4-Pro-0813": { id: "deepseek-ai/DeepSeek-V4-Pro-0813", name: "DeepSeek V4 Pro 0813", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text"], cost: { input: 1.32, output: 3.96, cacheRead: 0.13, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 384e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", xhigh: null }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4.1-Flash": { id: "deepseek-ai/DeepSeek-V4.1-Flash", name: "DeepSeek V4.1 Flash", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 384e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta-models/Muse-Spark-Open-816B-A42B": { id: "meta-models/Muse-Spark-Open-816B-A42B", name: "Muse Spark Open", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:MiniMaxAI/MiniMax-M3": { id: "MiniMaxAI/MiniMax-M3", name: "MiniMax-M3", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 524288, maxTokens: 524288, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/Kimi-K3": { id: "moonshotai/Kimi-K3", name: "Kimi K3", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:nvidia/NVIDIA-Nemotron-3.5-Super-VL": { id: "nvidia/NVIDIA-Nemotron-3.5-Super-VL", name: "Nemotron 3.5 Super VL 120B A12B", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-oss-120b": { id: "openai/gpt-oss-120b", name: "GPT OSS 120B", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text"], cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "openai", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:Qwen/Qwen3.5-9B": { id: "Qwen/Qwen3.5-9B", name: "Qwen3.5 9B", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.17, output: 0.25, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:Qwen/Qwen3.6-Plus": { id: "Qwen/Qwen3.6-Plus", name: "Qwen3.6 Plus", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text"], cost: { input: 0.5, output: 3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, type: "chat" }, "chat:Qwen/Qwen3.7-Max": { id: "Qwen/Qwen3.7-Max", name: "Qwen3.7 Max", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text"], cost: { input: 2.5, output: 7.5, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, type: "chat" }, "chat:reflection/Beam-1.0-501B-A23B": { id: "reflection/Beam-1.0-501B-A23B", name: "Beam 1.0 501B A23B", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text"], cost: { input: 0.4, output: 1.2, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, type: "chat" }, "chat:thinkingmachines/Inkling": { id: "thinkingmachines/Inkling", name: "Inkling", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 4.05, cacheRead: 0.17, cacheWrite: 0 }, contextWindow: 524288, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:zai-org/GLM-5.2": { id: "zai-org/GLM-5.2", name: "GLM-5.2", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1048575, maxTokens: 164e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, type: "chat" }, "chat:zai-org/GLM-5.3": { id: "zai-org/GLM-5.3", name: "GLM-5.3", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1048575, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, type: "chat" }, "chat:zai-org/GLM-5.3-Flash": { id: "zai-org/GLM-5.3-Flash", name: "GLM-5.3-Flash", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048575, maxTokens: 4e5, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/together.models.js +var TOGETHER_MODELS = flattenChatModelCatalog("together", together_default); +var TOGETHER_IMAGE_MODELS = flattenImageModelCatalog("together", together_default); +var TOGETHER_CLASSIFIER_MODELS = flattenClassifierModelCatalog("together", together_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/typesafe.json +var typesafe_default = { "typesafe-system-one": { "classifier:jev-latest": { type: "classifier", id: "jev-latest", name: "Jev", api: "typesafe-system-one", provider: "typesafe", baseUrl: "https://api.typesafe.ai/v1/", input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 64e3, compat: { imageInput: "assets", sendImageOptInHeader: true } } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/typesafe.models.js +var TYPESAFE_MODELS = flattenChatModelCatalog("typesafe", typesafe_default); +var TYPESAFE_IMAGE_MODELS = flattenImageModelCatalog("typesafe", typesafe_default); +var TYPESAFE_CLASSIFIER_MODELS = flattenClassifierModelCatalog("typesafe", typesafe_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +var vercel_ai_gateway_default = { "anthropic-messages": { "chat:alibaba/qwen-3-14b": { id: "alibaba/qwen-3-14b", name: "Qwen3-14B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.12, output: 0.24, cacheRead: 0, cacheWrite: 0 }, contextWindow: 40960, maxTokens: 16384, type: "chat" }, "chat:alibaba/qwen-3-235b": { id: "alibaba/qwen-3-235b", name: "Qwen3 235B A22B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.22, output: 0.88, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 16384, type: "chat" }, "chat:alibaba/qwen-3-30b": { id: "alibaba/qwen-3-30b", name: "Qwen3-30B-A3B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.12, output: 0.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 40960, maxTokens: 16384, type: "chat" }, "chat:alibaba/qwen-3-32b": { id: "alibaba/qwen-3-32b", name: "Qwen 3 32B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, type: "chat" }, "chat:alibaba/qwen3-coder": { id: "alibaba/qwen3-coder", name: "Qwen3 Coder 480B A35B Instruct", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.22, output: 1.8, cacheRead: 0.022, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, type: "chat" }, "chat:alibaba/qwen3-coder-30b-a3b": { id: "alibaba/qwen3-coder-30b-a3b", name: "Qwen 3 Coder 30B A3B Instruct", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 8192, type: "chat" }, "chat:alibaba/qwen3-coder-next": { id: "alibaba/qwen3-coder-next", name: "Qwen3 Coder Next", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.5, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 256e3, type: "chat" }, "chat:alibaba/qwen3-max-thinking": { id: "alibaba/qwen3-max-thinking", name: "Qwen 3 Max Thinking", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 1.2, output: 6, cacheRead: 0.24, cacheWrite: 0, tiers: [{ inputTokensAbove: 32e3, input: 2.4, output: 12, cacheRead: 0.48, cacheWrite: 0 }, { inputTokensAbove: 128e3, input: 3, output: 15, cacheRead: 0.6, cacheWrite: 0 }] }, contextWindow: 256e3, maxTokens: 65536, type: "chat" }, "chat:alibaba/qwen3-next-80b-a3b-instruct": { id: "alibaba/qwen3-next-80b-a3b-instruct", name: "Qwen3 Next 80B A3B Instruct", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262114, maxTokens: 262114, type: "chat" }, "chat:alibaba/qwen3-next-80b-a3b-thinking": { id: "alibaba/qwen3-next-80b-a3b-thinking", name: "Qwen3 Next 80B A3B Thinking", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, type: "chat" }, "chat:alibaba/qwen3-vl-instruct": { id: "alibaba/qwen3-vl-instruct", name: "Qwen3 VL 235B A22B Instruct", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.2, output: 0.88, cacheRead: 0.11, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.5-flash": { id: "alibaba/qwen3.5-flash", name: "Qwen 3.5 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.1, output: 0.4, cacheRead: 0.01, cacheWrite: 0.125 }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.5-plus": { id: "alibaba/qwen3.5-plus", name: "Qwen 3.5 Plus", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.4, output: 2.4, cacheRead: 0.04, cacheWrite: 0.5, tiers: [{ inputTokensAbove: 256e3, input: 0.5, output: 3, cacheRead: 0.05, cacheWrite: 0.625 }] }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.6-27b": { id: "alibaba/qwen3.6-27b", name: "Qwen 3.6 27B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.6, output: 3.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 256e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.6-plus": { id: "alibaba/qwen3.6-plus", name: "Qwen 3.6 Plus", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.5, output: 3, cacheRead: 0.05, cacheWrite: 0.625, tiers: [{ inputTokensAbove: 255999, input: 2, output: 6, cacheRead: 0.2, cacheWrite: 2.5 }] }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.7-flash": { id: "alibaba/qwen3.7-flash", name: "Qwen 3.7 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.03, output: 0.13, cacheRead: 6e-3, cacheWrite: 0.038, tiers: [{ inputTokensAbove: 31999, input: 0.1, output: 0.4, cacheRead: 0.02, cacheWrite: 0.125 }, { inputTokensAbove: 255999, input: 0.2, output: 0.8, cacheRead: 0.04, cacheWrite: 0.25 }] }, contextWindow: 991e3, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.7-max": { id: "alibaba/qwen3.7-max", name: "Qwen 3.7 Max", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 2.5, output: 7.5, cacheRead: 0.5, cacheWrite: 3.125 }, contextWindow: 991e3, maxTokens: 64e3, type: "chat" }, "chat:alibaba/qwen3.7-plus": { id: "alibaba/qwen3.7-plus", name: "Qwen 3.7 Plus", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.4, output: 1.6, cacheRead: 0.08, cacheWrite: 0.5, tiers: [{ inputTokensAbove: 255999, input: 1.2, output: 4.8, cacheRead: 0.24, cacheWrite: 1.5 }] }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.8-2.4t-a95b": { id: "alibaba/qwen3.8-2.4t-a95b", name: "Qwen3.8 2.4T A95B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.8-27b": { id: "alibaba/qwen3.8-27b", name: "Qwen3.8 27B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.5, output: 3, cacheRead: 0.1, cacheWrite: 0.625 }, contextWindow: 1e6, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.8-flash": { id: "alibaba/qwen3.8-flash", name: "Qwen 3.8 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.47, cacheRead: 0.016, cacheWrite: 0.2 }, contextWindow: 991e3, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.8-max": { id: "alibaba/qwen3.8-max", name: "Qwen 3.8 Max", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.8-max-0902": { id: "alibaba/qwen3.8-max-0902", name: "Qwen3.8 Max 0902", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 2.5 }, contextWindow: 991e3, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.8-max-prime": { id: "alibaba/qwen3.8-max-prime", name: "Qwen 3.8 Max Prime", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 4, output: 12, cacheRead: 0.5, cacheWrite: 5 }, contextWindow: 1e6, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.8-omni-flash": { id: "alibaba/qwen3.8-omni-flash", name: "Qwen 3.8 Omni Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.47, cacheRead: 0.016, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:amazon/nova-2-lite": { id: "amazon/nova-2-lite", name: "Nova 2 Lite", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.33, output: 2.75, cacheRead: 0.0825, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 1e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:amazon/nova-lite": { id: "amazon/nova-lite", name: "Nova Lite", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.06, output: 0.24, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 3e5, maxTokens: 8192, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:amazon/nova-micro": { id: "amazon/nova-micro", name: "Nova Micro", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.035, output: 0.14, cacheRead: 87e-4, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, type: "chat" }, "chat:amazon/nova-pro": { id: "amazon/nova-pro", name: "Nova Pro", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.8, output: 3.2, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 3e5, maxTokens: 8192, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-fable-5": { id: "anthropic/claude-fable-5", name: "Claude Fable 5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true }, cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-fable-5-batch": { id: "anthropic/claude-fable-5-batch", name: "Claude Fable 5 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true }, cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-fable-5.1": { id: "anthropic/claude-fable-5.1", name: "Claude Fable 5.1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true }, cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-fable-5.1-batch": { id: "anthropic/claude-fable-5.1-batch", name: "Claude Fable 5.1 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true }, cost: { input: 5, output: 25, cacheRead: 0.125, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-haiku-4.5": { id: "anthropic/claude-haiku-4.5", name: "Claude Haiku 4.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-haiku-4.5-batch": { id: "anthropic/claude-haiku-4.5-batch", name: "Claude Haiku 4.5 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-haiku-5.5": { id: "anthropic/claude-haiku-5.5", name: "Claude Haiku 5.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 1e5, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-haiku-5.5-batch": { id: "anthropic/claude-haiku-5.5-batch", name: "Claude Haiku 5.5 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 0.05, output: 0.25, cacheRead: 5e-3, cacheWrite: 0.0625, tiers: [{ inputTokensAbove: 1e5, input: 0.25, output: 1.25, cacheRead: 0.025, cacheWrite: 0.3125 }] }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-4.5": { id: "anthropic/claude-opus-4.5", name: "Claude Opus 4.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-4.5-batch": { id: "anthropic/claude-opus-4.5-batch", name: "Claude Opus 4.5 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2.5, output: 12.5, cacheRead: 0.25, cacheWrite: 3.125 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-4.6": { id: "anthropic/claude-opus-4.6", name: "Claude Opus 4.6", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true }, cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-4.6-batch": { id: "anthropic/claude-opus-4.6-batch", name: "Claude Opus 4.6 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true }, cost: { input: 2.5, output: 12.5, cacheRead: 0.25, cacheWrite: 3.125 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-4.7": { id: "anthropic/claude-opus-4.7", name: "Claude Opus 4.7", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-4.7-batch": { id: "anthropic/claude-opus-4.7-batch", name: "Claude Opus 4.7 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 2.5, output: 12.5, cacheRead: 0.25, cacheWrite: 3.125 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-4.8": { id: "anthropic/claude-opus-4.8", name: "Claude Opus 4.8", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-4.8-batch": { id: "anthropic/claude-opus-4.8-batch", name: "Claude Opus 4.8 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 2.5, output: 12.5, cacheRead: 0.25, cacheWrite: 3.125 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-4.8-fast": { id: "anthropic/claude-opus-4.8-fast", name: "Claude Opus 4.8 (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-5": { id: "anthropic/claude-opus-5", name: "Claude Opus 5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-5-batch": { id: "anthropic/claude-opus-5-batch", name: "Claude Opus 5 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 2.5, output: 12.5, cacheRead: 0.25, cacheWrite: 3.125 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-5-fast": { id: "anthropic/claude-opus-5-fast", name: "Claude Opus 5 (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-5.5": { id: "anthropic/claude-opus-5.5", name: "Claude Opus 5.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-5.5-batch": { id: "anthropic/claude-opus-5.5-batch", name: "Claude Opus 5.5 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-5.5-fast": { id: "anthropic/claude-opus-5.5-fast", name: "Claude Opus 5.5 (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 8, output: 40, cacheRead: 0.4, cacheWrite: 10 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-sonnet-4.5": { id: "anthropic/claude-sonnet-4.5", name: "Claude Sonnet 4.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75, tiers: [{ inputTokensAbove: 2e5, input: 6, output: 22.5, cacheRead: 0.6, cacheWrite: 7.5 }] }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-sonnet-4.5-batch": { id: "anthropic/claude-sonnet-4.5-batch", name: "Claude Sonnet 4.5 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 1.875, tiers: [{ inputTokensAbove: 2e5, input: 3, output: 11.25, cacheRead: 0.3, cacheWrite: 3.75 }] }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-sonnet-4.6": { id: "anthropic/claude-sonnet-4.6", name: "Claude Sonnet 4.6", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true }, cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-sonnet-4.6-batch": { id: "anthropic/claude-sonnet-4.6-batch", name: "Claude Sonnet 4.6 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true }, cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 1.875 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-sonnet-5": { id: "anthropic/claude-sonnet-5", name: "Claude Sonnet 5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true }, cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-sonnet-5-batch": { id: "anthropic/claude-sonnet-5-batch", name: "Claude Sonnet 5 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true }, cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-sonnet-5.5": { id: "anthropic/claude-sonnet-5.5", name: "Claude Sonnet 5.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-sonnet-5.5-batch": { id: "anthropic/claude-sonnet-5.5-batch", name: "Claude Sonnet 5.5 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:bytedance/seed-1.6": { id: "bytedance/seed-1.6", name: "Seed 1.6", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.25, output: 2, cacheRead: 0.05, cacheWrite: 0, tiers: [{ inputTokensAbove: 128e3, input: 0.5, output: 4, cacheRead: 0.05, cacheWrite: 0 }] }, contextWindow: 256e3, maxTokens: 32e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:bytedance/seed-1.8": { id: "bytedance/seed-1.8", name: "Bytedance Seed 1.8", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.25, output: 2, cacheRead: 0.05, cacheWrite: 0, tiers: [{ inputTokensAbove: 128e3, input: 0.5, output: 4, cacheRead: 0.05, cacheWrite: 0 }] }, contextWindow: 256e3, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:bytedance/seed-2.1-turbo": { id: "bytedance/seed-2.1-turbo", name: "Seed 2.1 Turbo", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.5, output: 2.5, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:callstack/apex": { id: "callstack/apex", name: "Apex", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.5, output: 3, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:cohere/command-a": { id: "cohere/command-a", name: "Command A", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 2.5, output: 10, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 8e3, type: "chat" }, "chat:deepseek/deepseek-r1": { id: "deepseek/deepseek-r1", name: "DeepSeek-R1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 1.35, output: 5.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, type: "chat" }, "chat:deepseek/deepseek-v3.1": { id: "deepseek/deepseek-v3.1", name: "DeepSeek V3.1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.25, output: 0.95, cacheRead: 0.13, cacheWrite: 0 }, contextWindow: 163840, maxTokens: 128e3, type: "chat" }, "chat:deepseek/deepseek-v3.2": { id: "deepseek/deepseek-v3.2", name: "DeepSeek V3.2", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.62, output: 1.85, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8e3, type: "chat" }, "chat:deepseek/deepseek-v3.2-thinking": { id: "deepseek/deepseek-v3.2-thinking", name: "DeepSeek V3.2 Thinking", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.62, output: 1.85, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8e3, type: "chat" }, "chat:deepseek/deepseek-v4-flash": { id: "deepseek/deepseek-v4-flash", name: "DeepSeek V4 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.13, output: 0.26, cacheRead: 0.028, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, type: "chat" }, "chat:deepseek/deepseek-v4-flash-0731": { id: "deepseek/deepseek-v4-flash-0731", name: "DeepSeek V4 Flash 0731", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.076, output: 0.153, cacheRead: 0.014, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, type: "chat" }, "chat:deepseek/deepseek-v4-flash-vision-exp": { id: "deepseek/deepseek-v4-flash-vision-exp", name: "DeepSeek V4 Flash Vision Exp", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.2156, output: 0.6468, cacheRead: 68e-4, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek/deepseek-v4-pro": { id: "deepseek/deepseek-v4-pro", name: "DeepSeek V4 Pro", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.66, output: 1.98, cacheRead: 0.022, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, type: "chat" }, "chat:deepseek/deepseek-v4-pro-0813": { id: "deepseek/deepseek-v4-pro-0813", name: "DeepSeek V4 Pro 0813", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.66, output: 1.98, cacheRead: 0.066, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, type: "chat" }, "chat:deepseek/deepseek-v4.1-flash": { id: "deepseek/deepseek-v4.1-flash", name: "DeepSeek V4.1 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 1.2, cacheRead: 7e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek/deepseek-v4.1-flash-1017": { id: "deepseek/deepseek-v4.1-flash-1017", name: "DeepSeek V4.1 Flash 1017", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 1.2, cacheRead: 7e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek/deepseek-v4.1-flash-1017-fast": { id: "deepseek/deepseek-v4.1-flash-1017-fast", name: "DeepSeek V4.1 Flash 1017 Fast", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.6, output: 2.4, cacheRead: 0.014, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek/deepseek-v4.1-flash-fast": { id: "deepseek/deepseek-v4.1-flash-fast", name: "DeepSeek V4.1 Flash Fast", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.6, output: 2.4, cacheRead: 0.014, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:fireworks/ember-1": { id: "fireworks/ember-1", name: "Ember-1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-2.5-flash": { id: "google/gemini-2.5-flash", name: "Gemini 2.5 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65535, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-2.5-flash-batch": { id: "google/gemini-2.5-flash-batch", name: "Gemini 2.5 Flash (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 1.25, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-2.5-flash-lite": { id: "google/gemini-2.5-flash-lite", name: "Gemini 2.5 Flash Lite", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.1, output: 0.4, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65535, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-2.5-flash-lite-batch": { id: "google/gemini-2.5-flash-lite-batch", name: "Gemini 2.5 Flash Lite (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.05, output: 0.2, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65535, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-2.5-pro": { id: "google/gemini-2.5-pro", name: "Gemini 2.5 Pro", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0 }] }, contextWindow: 1048576, maxTokens: 65535, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-2.5-pro-batch": { id: "google/gemini-2.5-pro-batch", name: "Gemini 2.5 Pro (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.625, output: 5, cacheRead: 0.125, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 1.25, output: 7.5, cacheRead: 0.25, cacheWrite: 0 }] }, contextWindow: 1048576, maxTokens: 65535, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3-flash": { id: "google/gemini-3-flash", name: "Gemini 3 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.5, output: 3, cacheRead: 0.05, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 0.5, output: 3, cacheRead: 0.05, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 65e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3-flash-batch": { id: "google/gemini-3-flash-batch", name: "Gemini 3 Flash (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.25, output: 1.5, cacheRead: 0.05, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 0.25, output: 1.5, cacheRead: 0.05, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.1-flash-lite": { id: "google/gemini-3.1-flash-lite", name: "Gemini 3.1 Flash Lite", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.25, output: 1.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.1-flash-lite-batch": { id: "google/gemini-3.1-flash-lite-batch", name: "Gemini 3.1 Flash Lite (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.125, output: 0.75, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.1-pro-preview": { id: "google/gemini-3.1-pro-preview", name: "Gemini 3.1 Pro Preview", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.1-pro-preview-batch": { id: "google/gemini-3.1-pro-preview-batch", name: "Gemini 3.1 Pro Preview (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 6, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2, output: 9, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.5-flash": { id: "google/gemini-3.5-flash", name: "Gemini 3.5 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.5, output: 9, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.5-flash-batch": { id: "google/gemini-3.5-flash-batch", name: "Gemini 3.5 Flash (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.5-flash-lite": { id: "google/gemini-3.5-flash-lite", name: "Gemini 3.5 Flash Lite", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.5-flash-lite-batch": { id: "google/gemini-3.5-flash-lite-batch", name: "Gemini 3.5 Flash Lite (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 1.25, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.6-flash": { id: "google/gemini-3.6-flash", name: "Gemini 3.6 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.6-flash-batch": { id: "google/gemini-3.6-flash-batch", name: "Gemini 3.6 Flash (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.375, output: 1.875, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.7-flash": { id: "google/gemini-3.7-flash", name: "Gemini 3.7 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65535, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.7-flash-batch": { id: "google/gemini-3.7-flash-batch", name: "Gemini 3.7 Flash (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.375, output: 1.875, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65535, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.8-flash": { id: "google/gemini-3.8-flash", name: "Gemini 3.8 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65535, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-4-argon": { id: "google/gemini-4-argon", name: "Gemini 4 Argon", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 1e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemma-4-26b-a4b-it": { id: "google/gemma-4-26b-a4b-it", name: "Google Gemma 4 26B A4B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemma-4-31b-it": { id: "google/gemma-4-31b-it", name: "Gemma 4 31B IT", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.14, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:inception/mercury-2": { id: "inception/mercury-2", name: "Mercury 2", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.25, output: 0.75, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 128e3, type: "chat" }, "chat:inception/mercury-2.5": { id: "inception/mercury-2.5", name: "Mercury 2.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.04, output: 0.15, cacheRead: 4e-3, cacheWrite: 0 }, contextWindow: 26e4, maxTokens: 65536, type: "chat" }, "chat:inception/mercury-3": { id: "inception/mercury-3", name: "Mercury 3", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.1, output: 0.35, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, type: "chat" }, "chat:inception/mercury-coder-small": { id: "inception/mercury-coder-small", name: "Mercury Coder Small Beta", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.25, output: 1, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32e3, maxTokens: 16384, type: "chat" }, "chat:inclusionai/ling-3.0-flash": { id: "inclusionai/ling-3.0-flash", name: "Ling 3.0 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.021, output: 0.063, cacheRead: 42e-4, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 32e3, type: "chat" }, "chat:inclusionai/ling-3.0-flash-fin": { id: "inclusionai/ling-3.0-flash-fin", name: "Ling 3.0 Flash Fin", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.075, output: 0.22, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 32e3, type: "chat" }, "chat:inclusionai/ling-3.0-flash-sante": { id: "inclusionai/ling-3.0-flash-sante", name: "Ling 3.0 Flash Sante", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.075, output: 0.22, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 32e3, type: "chat" }, "chat:inclusionai/ling-3.0-flash-vl": { id: "inclusionai/ling-3.0-flash-vl", name: "Ling 3.0 Flash VL", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.075, output: 0.22, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 32e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:inclusionai/ling-3.1-flash": { id: "inclusionai/ling-3.1-flash", name: "Ling 3.1 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 0.9, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, type: "chat" }, "chat:inclusionai/ling-3.1-flash-1019": { id: "inclusionai/ling-3.1-flash-1019", name: "Ling 3.1 Flash 1019", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 262144, type: "chat" }, "chat:interfaze/interfaze-beta": { id: "interfaze/interfaze-beta", name: "Interfaze Beta", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.5, output: 3.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 32e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:liquid/lfm2.5-24b-a2b": { id: "liquid/lfm2.5-24b-a2b", name: "LFM2.5-24B-A2B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.05, output: 0.7, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8200, type: "chat" }, "chat:meituan/longcat-2.5-preview": { id: "meituan/longcat-2.5-preview", name: "LongCat 2.5 Preview", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/llama-3.1-70b": { id: "meta/llama-3.1-70b", name: "Llama 3.1 70B Instruct", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.72, output: 0.72, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, type: "chat" }, "chat:meta/llama-3.1-8b": { id: "meta/llama-3.1-8b", name: "Llama 3.1 8B Instruct", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.22, output: 0.22, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, type: "chat" }, "chat:meta/llama-3.3-70b": { id: "meta/llama-3.3-70b", name: "Llama 3.3 70B Instruct", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.72, output: 0.72, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, type: "chat" }, "chat:meta/llama-4-maverick": { id: "meta/llama-4-maverick", name: "Llama 4 Maverick 17B Instruct", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.24, output: 0.97, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/llama-4-scout": { id: "meta/llama-4-scout", name: "Llama 4 Scout 17B Instruct", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.17, output: 0.66, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/muse-glimmer-30b": { id: "meta/muse-glimmer-30b", name: "Muse Glimmer 30B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.35, output: 1.5, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/muse-spark-1.1": { id: "meta/muse-spark-1.1", name: "Muse Spark 1.1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/muse-spark-1.2": { id: "meta/muse-spark-1.2", name: "Muse Spark 1.2", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/muse-spark-1.2-contributor": { id: "meta/muse-spark-1.2-contributor", name: "Muse Spark 1.2 Contributor", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.1, output: 0.2, cacheRead: 2e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/muse-spark-1.3": { id: "meta/muse-spark-1.3", name: "Muse Spark 1.3", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/muse-spark-1.3-contributor": { id: "meta/muse-spark-1.3-contributor", name: "Muse Spark 1.3 Contributor", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.1, output: 0.2, cacheRead: 2e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/muse-spark-open": { id: "meta/muse-spark-open", name: "Muse Spark Open", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/muse-wonder-1.0": { id: "meta/muse-wonder-1.0", name: "Muse Wonder", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:minimax/minimax-m2": { id: "minimax/minimax-m2", name: "MiniMax M2", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 1.2, cacheRead: 0.03, cacheWrite: 0.375 }, contextWindow: 205e3, maxTokens: 205e3, type: "chat" }, "chat:minimax/minimax-m2.1": { id: "minimax/minimax-m2.1", name: "MiniMax M2.1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 1.2, cacheRead: 0.03, cacheWrite: 0.375 }, contextWindow: 204800, maxTokens: 131072, type: "chat" }, "chat:minimax/minimax-m2.1-lightning": { id: "minimax/minimax-m2.1-lightning", name: "MiniMax M2.1 Lightning", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 2.4, cacheRead: 0.03, cacheWrite: 0.375 }, contextWindow: 204800, maxTokens: 131072, type: "chat" }, "chat:minimax/minimax-m2.5": { id: "minimax/minimax-m2.5", name: "MiniMax M2.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 1.2, cacheRead: 0.03, cacheWrite: 0.375 }, contextWindow: 204800, maxTokens: 131e3, type: "chat" }, "chat:minimax/minimax-m2.5-highspeed": { id: "minimax/minimax-m2.5-highspeed", name: "MiniMax M2.5 High Speed", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.6, output: 2.4, cacheRead: 0.03, cacheWrite: 0.375 }, contextWindow: 204800, maxTokens: 131e3, type: "chat" }, "chat:minimax/minimax-m2.7": { id: "minimax/minimax-m2.7", name: "MiniMax M2.7", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0.375 }, contextWindow: 204800, maxTokens: 131e3, type: "chat" }, "chat:minimax/minimax-m2.7-highspeed": { id: "minimax/minimax-m2.7-highspeed", name: "MiniMax M2.7 High Speed", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.6, output: 2.4, cacheRead: 0.06, cacheWrite: 0.375 }, contextWindow: 204800, maxTokens: 131100, type: "chat" }, "chat:minimax/minimax-m3": { id: "minimax/minimax-m3", name: "MiniMax M3", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 512e3, maxTokens: 512e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:minimax/minimax-m3.1-flash": { id: "minimax/minimax-m3.1-flash", name: "MiniMax-M3.1-Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral/codestral": { id: "mistral/codestral", name: "Mistral Codestral", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 0.9, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4e3, type: "chat" }, "chat:mistral/ministral-14b": { id: "mistral/ministral-14b", name: "Ministral 14B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.2, output: 0.2, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral/ministral-3b": { id: "mistral/ministral-3b", name: "Ministral 3B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.1, output: 0.1, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 4e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral/ministral-8b": { id: "mistral/ministral-8b", name: "Ministral 8B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.15, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 4e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral/mistral-large-3": { id: "mistral/mistral-large-3", name: "Mistral Large 3", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.5, output: 1.5, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral/mistral-large-4": { id: "mistral/mistral-large-4", name: "Mistral Large 4", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.7, output: 2.1, cacheRead: 0.07, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral/mistral-medium-3.5": { id: "mistral/mistral-medium-3.5", name: "Mistral Medium Latest", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral/mistral-nemo": { id: "mistral/mistral-nemo", name: "Mistral Nemo 12B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.029, output: 0.03, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, type: "chat" }, "chat:mistral/mistral-small": { id: "mistral/mistral-small", name: "Mistral Small", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 4e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mixedbread/toast-1": { id: "mixedbread/toast-1", name: "Toast 1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 0.72, cacheRead: 0.036, cacheWrite: 0 }, contextWindow: 131e3, maxTokens: 4e3, type: "chat" }, "chat:moonshotai/kimi-k2": { id: "moonshotai/kimi-k2", name: "Kimi K2 Instruct", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.57, output: 2.3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, type: "chat" }, "chat:moonshotai/kimi-k2.5": { id: "moonshotai/kimi-k2.5", name: "Kimi K2.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.6, output: 3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 256e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/kimi-k2.6": { id: "moonshotai/kimi-k2.6", name: "Kimi K2.6", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.95, output: 4, cacheRead: 0.16, cacheWrite: 0 }, contextWindow: 262e3, maxTokens: 262e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/kimi-k2.7-code": { id: "moonshotai/kimi-k2.7-code", name: "Kimi K2.7 Code", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.95, output: 4, cacheRead: 0.19, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/kimi-k2.7-code-highspeed": { id: "moonshotai/kimi-k2.7-code-highspeed", name: "Kimi K2.7 Code High Speed", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.9, output: 8, cacheRead: 0.38, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/kimi-k3": { id: "moonshotai/kimi-k3", name: "Kimi K3", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/kimi-k3-fast": { id: "moonshotai/kimi-k3-fast", name: "Kimi K3 Fast", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 4.5, output: 22.5, cacheRead: 0.45, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/kimi-k3.1-pro": { id: "moonshotai/kimi-k3.1-pro", name: "Kimi K3.1 Pro", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2 }, contextWindow: 1048576, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/kimi-k3.1-pro-highspeed": { id: "moonshotai/kimi-k3.1-pro-highspeed", name: "Kimi K3.1 Pro Highspeed", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 4 }, contextWindow: 1048576, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:nvidia/nemotron-3-nano-30b-a3b": { id: "nvidia/nemotron-3-nano-30b-a3b", name: "Nemotron 3 Nano 30B A3B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.05, output: 0.2, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, type: "chat" }, "chat:nvidia/nemotron-3-super-120b-a12b": { id: "nvidia/nemotron-3-super-120b-a12b", name: "NVIDIA Nemotron 3 Super 120B A12B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.65, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 32e3, type: "chat" }, "chat:nvidia/nemotron-3-ultra-550b-a55b": { id: "nvidia/nemotron-3-ultra-550b-a55b", name: "Nemotron 3 Ultra", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.6, output: 2.4, cacheRead: 0.12, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65e3, type: "chat" }, "chat:nvidia/nemotron-3.5-lightning": { id: "nvidia/nemotron-3.5-lightning", name: "Nemotron 3.5 Lightning 30B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.05, output: 0.2, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, type: "chat" }, "chat:nvidia/nemotron-3.5-lightning-free": { id: "nvidia/nemotron-3.5-lightning-free", name: "Nemotron 3.5 Lightning Free", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65e3, type: "chat" }, "chat:nvidia/nemotron-3.5-super-vl": { id: "nvidia/nemotron-3.5-super-vl", name: "NVIDIA Nemotron 3.5 Super VL", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.2, output: 0.5, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:nvidia/nemotron-nano-12b-v2-vl": { id: "nvidia/nemotron-nano-12b-v2-vl", name: "Nvidia Nemotron Nano 12B V2 VL", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.2, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:nvidia/nemotron-nano-9b-v2": { id: "nvidia/nemotron-nano-9b-v2", name: "Nvidia Nemotron Nano 9B V2", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.06, output: 0.23, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, type: "chat" }, "chat:openai/gpt-4.1": { id: "openai/gpt-4.1", name: "GPT-4.1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4.1-batch": { id: "openai/gpt-4.1-batch", name: "GPT-4.1 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 4, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4.1-fast": { id: "openai/gpt-4.1-fast", name: "GPT-4.1 (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 3.5, output: 14, cacheRead: 0.875, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4.1-mini": { id: "openai/gpt-4.1-mini", name: "GPT-4.1 mini", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.4, output: 1.6, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4.1-mini-batch": { id: "openai/gpt-4.1-mini-batch", name: "GPT-4.1 mini (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.2, output: 0.8, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4.1-mini-fast": { id: "openai/gpt-4.1-mini-fast", name: "GPT-4.1 mini (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.7, output: 2.8, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4.1-nano": { id: "openai/gpt-4.1-nano", name: "GPT-4.1 nano", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.1, output: 0.4, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4o": { id: "openai/gpt-4o", name: "GPT-4o", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4o-batch": { id: "openai/gpt-4o-batch", name: "GPT-4o (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 5, cacheRead: 0.625, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4o-fast": { id: "openai/gpt-4o-fast", name: "GPT-4o (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 4.25, output: 17, cacheRead: 2.125, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4o-mini": { id: "openai/gpt-4o-mini", name: "GPT-4o mini", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.6, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4o-mini-batch": { id: "openai/gpt-4o-mini-batch", name: "GPT-4o mini (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.075, output: 0.3, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4o-mini-fast": { id: "openai/gpt-4o-mini-fast", name: "GPT-4o mini (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.25, output: 1, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5": { id: "openai/gpt-5", name: "GPT-5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5-batch": { id: "openai/gpt-5-batch", name: "GPT-5 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.625, output: 5, cacheRead: 0.0625, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5-codex": { id: "openai/gpt-5-codex", name: "GPT-5-Codex", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 10, cacheRead: 0.13, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5-fast": { id: "openai/gpt-5-fast", name: "GPT-5 (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2.5, output: 20, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5-mini": { id: "openai/gpt-5-mini", name: "GPT-5 mini", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.25, output: 2, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5-mini-batch": { id: "openai/gpt-5-mini-batch", name: "GPT-5 mini (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.125, output: 1, cacheRead: 0.0125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5-mini-fast": { id: "openai/gpt-5-mini-fast", name: "GPT-5 mini (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.45, output: 3.6, cacheRead: 0.045, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5-nano": { id: "openai/gpt-5-nano", name: "GPT-5 nano", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.05, output: 0.4, cacheRead: 5e-3, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5-nano-batch": { id: "openai/gpt-5-nano-batch", name: "GPT-5 nano (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.025, output: 0.2, cacheRead: 25e-4, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5-pro": { id: "openai/gpt-5-pro", name: "GPT-5 pro", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 15, output: 120, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 272e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5-pro-batch": { id: "openai/gpt-5-pro-batch", name: "GPT-5 pro (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 7.5, output: 60, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 272e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.1-codex": { id: "openai/gpt-5.1-codex", name: "GPT-5.1-Codex", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 10, cacheRead: 0.13, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.1-codex-max": { id: "openai/gpt-5.1-codex-max", name: "GPT 5.1 Codex Max", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.1-codex-mini": { id: "openai/gpt-5.1-codex-mini", name: "GPT 5.1 Codex Mini", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.25, output: 2, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.1-thinking": { id: "openai/gpt-5.1-thinking", name: "GPT 5.1 Thinking", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.1-thinking-fast": { id: "openai/gpt-5.1-thinking-fast", name: "GPT 5.1 Thinking (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2.5, output: 20, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.2": { id: "openai/gpt-5.2", name: "GPT 5.2", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.2-batch": { id: "openai/gpt-5.2-batch", name: "GPT 5.2 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.875, output: 7, cacheRead: 0.0875, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.2-codex": { id: "openai/gpt-5.2-codex", name: "GPT 5.2 Codex", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.2-fast": { id: "openai/gpt-5.2-fast", name: "GPT 5.2 (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 3.5, output: 28, cacheRead: 0.35, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.2-pro": { id: "openai/gpt-5.2-pro", name: "GPT 5.2 ", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 21, output: 168, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.3-codex": { id: "openai/gpt-5.3-codex", name: "GPT 5.3 Codex", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.3-codex-fast": { id: "openai/gpt-5.3-codex-fast", name: "GPT 5.3 Codex (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 3.5, output: 28, cacheRead: 0.35, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.4": { id: "openai/gpt-5.4", name: "GPT 5.4", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0, tiers: [{ inputTokensAbove: 271999, input: 5, output: 22.5, cacheRead: 0.5, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.4-batch": { id: "openai/gpt-5.4-batch", name: "GPT 5.4 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 7.5, cacheRead: 0.125, cacheWrite: 0, tiers: [{ inputTokensAbove: 271999, input: 2.5, output: 11.25, cacheRead: 0.25, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.4-fast": { id: "openai/gpt-5.4-fast", name: "GPT 5.4 (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.4-mini": { id: "openai/gpt-5.4-mini", name: "GPT 5.4 Mini", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.4-mini-batch": { id: "openai/gpt-5.4-mini-batch", name: "GPT 5.4 Mini (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.375, output: 2.25, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.4-mini-fast": { id: "openai/gpt-5.4-mini-fast", name: "GPT 5.4 Mini (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.5, output: 9, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.4-nano": { id: "openai/gpt-5.4-nano", name: "GPT 5.4 Nano", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.2, output: 1.25, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.4-nano-batch": { id: "openai/gpt-5.4-nano-batch", name: "GPT 5.4 Nano (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.1, output: 0.625, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.4-pro": { id: "openai/gpt-5.4-pro", name: "GPT 5.4 Pro", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 30, output: 180, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 271999, input: 60, output: 270, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.5": { id: "openai/gpt-5.5", name: "GPT 5.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 271999, input: 10, output: 45, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.5-batch": { id: "openai/gpt-5.5-batch", name: "GPT 5.5 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0, tiers: [{ inputTokensAbove: 271999, input: 5, output: 22.5, cacheRead: 0.5, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.5-fast": { id: "openai/gpt-5.5-fast", name: "GPT 5.5 (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 12.5, output: 75, cacheRead: 1.25, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.5-pro": { id: "openai/gpt-5.5-pro", name: "GPT 5.5 Pro", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 30, output: 180, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 271999, input: 60, output: 270, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", off: null, minimal: null, low: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.5-pro-batch": { id: "openai/gpt-5.5-pro-batch", name: "GPT 5.5 Pro (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 15, output: 90, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 271999, input: 30, output: 135, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.6-luna": { id: "openai/gpt-5.6-luna", name: "GPT 5.6 Luna", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 271999, input: 0.4, output: 1.8, cacheRead: 0.04, cacheWrite: 0.5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.6-luna-batch": { id: "openai/gpt-5.6-luna-batch", name: "GPT 5.6 Luna (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.1, output: 0.6, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 271999, input: 0.2, output: 0.9, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.6-luna-fast": { id: "openai/gpt-5.6-luna-fast", name: "GPT 5.6 Luna (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.4, output: 2.4, cacheRead: 0.04, cacheWrite: 0.5, tiers: [{ inputTokensAbove: 271999, input: 0.8, output: 3.6, cacheRead: 0.08, cacheWrite: 1 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.6-sol": { id: "openai/gpt-5.6-sol", name: "GPT 5.6 Sol", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 271999, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.6-sol-batch": { id: "openai/gpt-5.6-sol-batch", name: "GPT 5.6 Sol (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 271999, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.6-sol-fast": { id: "openai/gpt-5.6-sol-fast", name: "GPT 5.6 Sol (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 8, output: 40, cacheRead: 0.8, cacheWrite: 10, tiers: [{ inputTokensAbove: 271999, input: 16, output: 60, cacheRead: 1.6, cacheWrite: 20 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.6-terra": { id: "openai/gpt-5.6-terra", name: "GPT 5.6 Terra", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 271999, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.6-terra-batch": { id: "openai/gpt-5.6-terra-batch", name: "GPT 5.6 Terra (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 6, cacheRead: 0.1, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 271999, input: 2, output: 9, cacheRead: 0.2, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.6-terra-fast": { id: "openai/gpt-5.6-terra-fast", name: "GPT 5.6 Terra (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 4, output: 24, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 271999, input: 8, output: 36, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6-astra": { id: "openai/gpt-6-astra", name: "GPT-6 Astra", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5, tiers: [{ inputTokensAbove: 272e3, input: 20, output: 75, cacheRead: 2, cacheWrite: 25 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6-astra-batch": { id: "openai/gpt-6-astra-batch", name: "GPT-6 Astra (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25, tiers: [{ inputTokensAbove: 272e3, input: 10, output: 37.5, cacheRead: 1, cacheWrite: 12.5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6-astra-fast": { id: "openai/gpt-6-astra-fast", name: "GPT-6 Astra (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 20, output: 100, cacheRead: 2, cacheWrite: 25, tiers: [{ inputTokensAbove: 272e3, input: 40, output: 150, cacheRead: 4, cacheWrite: 50 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6-luna": { id: "openai/gpt-6-luna", name: "GPT-6 Luna", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6-luna-batch": { id: "openai/gpt-6-luna-batch", name: "GPT-6 Luna (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.05, output: 0.25, cacheRead: 5e-3, cacheWrite: 0.0625, tiers: [{ inputTokensAbove: 272e3, input: 0.1, output: 0.375, cacheRead: 0.01, cacheWrite: 0.125 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6-luna-fast": { id: "openai/gpt-6-luna-fast", name: "GPT-6 Luna (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.2, output: 1, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 272e3, input: 0.4, output: 1.5, cacheRead: 0.04, cacheWrite: 0.5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6-sol": { id: "openai/gpt-6-sol", name: "GPT-6 Sol", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6-sol-batch": { id: "openai/gpt-6-sol-batch", name: "GPT-6 Sol (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.2, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6-sol-fast": { id: "openai/gpt-6-sol-fast", name: "GPT-6 Sol (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6.1-sol": { id: "openai/gpt-6.1-sol", name: "GPT-6.1 Sol", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6.1-sol-batch": { id: "openai/gpt-6.1-sol-batch", name: "GPT-6.1 Sol (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6.1-sol-fast": { id: "openai/gpt-6.1-sol-fast", name: "GPT-6.1 Sol (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.4, cacheWrite: 10 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6.1-terra": { id: "openai/gpt-6.1-terra", name: "GPT-6.1 Terra", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6.1-terra-fast": { id: "openai/gpt-6.1-terra-fast", name: "GPT-6.1 Terra (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-oss-120b": { id: "openai/gpt-oss-120b", name: "GPT OSS 120B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.1, output: 0.5, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, type: "chat" }, "chat:openai/gpt-oss-20b": { id: "openai/gpt-oss-20b", name: "GPT OSS 20B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.03, output: 0.14, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 8192, type: "chat" }, "chat:openai/gpt-oss-safeguard-120b": { id: "openai/gpt-oss-safeguard-120b", name: "GPT OSS Safeguard 120B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16e3, type: "chat" }, "chat:openai/gpt-oss-safeguard-20b": { id: "openai/gpt-oss-safeguard-20b", name: "GPT OSS Safeguard 20B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.07, output: 0.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16e3, type: "chat" }, "chat:openai/o1": { id: "openai/o1", name: "o1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 15, output: 60, cacheRead: 7.5, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/o3": { id: "openai/o3", name: "o3", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/o3-fast": { id: "openai/o3-fast", name: "o3 (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 3.5, output: 14, cacheRead: 0.875, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/o3-mini": { id: "openai/o3-mini", name: "o3-mini", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 1.1, output: 4.4, cacheRead: 0.55, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, type: "chat" }, "chat:openai/o3-pro": { id: "openai/o3-pro", name: "o3 Pro", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 20, output: 80, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/o4-mini": { id: "openai/o4-mini", name: "o4-mini", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.1, output: 4.4, cacheRead: 0.275, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:particle/particle-1": { id: "particle/particle-1", name: "Particle-1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.125, output: 0.5, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:poolside/laguna-s-2.1": { id: "poolside/laguna-s-2.1", name: "Laguna S 2.1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.09, output: 0.18, cacheRead: 9e-3, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, type: "chat" }, "chat:quiverai/arrow-2": { id: "quiverai/arrow-2", name: "Arrow 2", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5 }, contextWindow: 131072, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:quiverai/arrow-2-telos": { id: "quiverai/arrow-2-telos", name: "Arrow 2 Telos", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 6, output: 30, cacheRead: 0.6, cacheWrite: 7.5 }, contextWindow: 131072, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:reflection/beam": { id: "reflection/beam", name: "Beam 1.0", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, type: "chat" }, "chat:reflection/beam-free": { id: "reflection/beam-free", name: "Beam 1.0 (Free)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, type: "chat" }, "chat:sakana/fugu-max": { id: "sakana/fugu-max", name: "Fugu Max", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 1e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:sakana/fugu-ultra": { id: "sakana/fugu-ultra", name: "Fugu Ultra", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 10, output: 45, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 1e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:sakana/fugu-ultra-v2": { id: "sakana/fugu-ultra-v2", name: "Fugu Ultra v2", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 10, output: 45, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 1e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:sakana/namazu": { id: "sakana/namazu", name: "Sakana Namazu", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.95, output: 4, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 256e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.20-multi-agent": { id: "spacexai/grok-4.20-multi-agent", name: "Grok 4.20 Multi-Agent", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 5, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 2e6, maxTokens: 2e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.20-multi-agent-batch": { id: "spacexai/grok-4.20-multi-agent-batch", name: "Grok 4.20 Multi-Agent (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 2, cacheRead: 0.16, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2, output: 4, cacheRead: 0.32, cacheWrite: 0 }] }, contextWindow: 2e6, maxTokens: 2e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.20-multi-agent-beta": { id: "spacexai/grok-4.20-multi-agent-beta", name: "Grok 4.20 Multi Agent Beta", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 5, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 2e6, maxTokens: 2e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.20-non-reasoning": { id: "spacexai/grok-4.20-non-reasoning", name: "Grok 4.20 Non-Reasoning", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 5, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 2e6, maxTokens: 2e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.20-non-reasoning-batch": { id: "spacexai/grok-4.20-non-reasoning-batch", name: "Grok 4.20 Non-Reasoning (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 2, cacheRead: 0.16, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2, output: 4, cacheRead: 0.32, cacheWrite: 0 }] }, contextWindow: 2e6, maxTokens: 2e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.20-non-reasoning-beta": { id: "spacexai/grok-4.20-non-reasoning-beta", name: "Grok 4.20 Beta Non-Reasoning", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 5, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 2e6, maxTokens: 2e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.20-reasoning": { id: "spacexai/grok-4.20-reasoning", name: "Grok 4.20 Reasoning", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 5, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 2e6, maxTokens: 2e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.20-reasoning-batch": { id: "spacexai/grok-4.20-reasoning-batch", name: "Grok 4.20 Reasoning (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 2, cacheRead: 0.16, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2, output: 4, cacheRead: 0.32, cacheWrite: 0 }] }, contextWindow: 2e6, maxTokens: 2e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.20-reasoning-beta": { id: "spacexai/grok-4.20-reasoning-beta", name: "Grok 4.20 Beta Reasoning", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 5, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 2e6, maxTokens: 2e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.3": { id: "spacexai/grok-4.3", name: "Grok 4.3", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 5, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 1e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.3-batch": { id: "spacexai/grok-4.3-batch", name: "Grok 4.3 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 2, cacheRead: 0.16, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2, output: 4, cacheRead: 0.32, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 1e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.5": { id: "spacexai/grok-4.5", name: "Grok 4.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 6, cacheRead: 0.3, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 0.6, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 5e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.6": { id: "spacexai/grok-4.6", name: "Grok 4.6", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 5e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.7": { id: "spacexai/grok-4.7", name: "Grok 4.7", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 5e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-build-0.1": { id: "spacexai/grok-build-0.1", name: "Grok Build 0.1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 2, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2, output: 4, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 256e3, maxTokens: 256e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-voice-3.0": { id: "spacexai/grok-voice-3.0", name: "Grok Voice 3.0", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4096, maxTokens: 4096, type: "chat" }, "chat:stealth/glyph-cluster": { id: "stealth/glyph-cluster", name: "Glyph Cluster", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 256e3, type: "chat" }, "chat:stepfun/step-3.7-flash": { id: "stepfun/step-3.7-flash", name: "Step 3.7 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.2, output: 1.15, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 256e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:stepfun/step-5-preview": { id: "stepfun/step-5-preview", name: "Step 5 Preview", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 2.7, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:tencent/hy3": { id: "tencent/hy3", name: "Hy3", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.14, output: 0.58, cacheRead: 0.035, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, type: "chat" }, "chat:tencent/hy4-preview": { id: "tencent/hy4-preview", name: "Tencent Hy4 Preview", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.834, output: 2.501, cacheRead: 0.042, cacheWrite: 0 }, contextWindow: 1024e3, maxTokens: 64e3, type: "chat" }, "chat:thinkingmachines/inkling": { id: "thinkingmachines/inkling", name: "Inkling", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 4.05, cacheRead: 0.17, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 256e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:thinkingmachines/inkling-small": { id: "thinkingmachines/inkling-small", name: "Inkling Small", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.45, output: 1.2, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 1e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:xiaomi/mimo-v2.5": { id: "xiaomi/mimo-v2.5", name: "MiMo M2.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.119, output: 0.238, cacheRead: 25e-4, cacheWrite: 0 }, contextWindow: 105e4, maxTokens: 131100, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:xiaomi/mimo-v2.5-pro": { id: "xiaomi/mimo-v2.5-pro", name: "MiMo V2.5 Pro", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.3045, output: 0.609, cacheRead: 28e-4, cacheWrite: 0 }, contextWindow: 105e4, maxTokens: 131e3, type: "chat" }, "chat:xiaomi/mimo-v2.6-flash": { id: "xiaomi/mimo-v2.6-flash", name: "MiMo V2.6 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.14, output: 0.28, cacheRead: 28e-4, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:xiaomi/mimo-v2.6-pro": { id: "xiaomi/mimo-v2.6-pro", name: "MiMo V2.6 Pro", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.435, output: 0.87, cacheRead: 36e-4, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:xiaomi/mimo-v2.6-pro-ultraspeed": { id: "xiaomi/mimo-v2.6-pro-ultraspeed", name: "MiMo V2.6 Pro UltraSpeed", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 4.35, output: 8.7, cacheRead: 0.036, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:zai/glm-4.5": { id: "zai/glm-4.5", name: "GLM 4.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.6, output: 2.2, cacheRead: 0.11, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 96e3, type: "chat" }, "chat:zai/glm-4.5-air": { id: "zai/glm-4.5-air", name: "GLM 4.5 Air", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.2, output: 1.1, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 96e3, type: "chat" }, "chat:zai/glm-4.5v": { id: "zai/glm-4.5v", name: "GLM 4.5V", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.6, output: 1.8, cacheRead: 0.11, cacheWrite: 0 }, contextWindow: 66e3, maxTokens: 16e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:zai/glm-4.6": { id: "zai/glm-4.6", name: "GLM 4.6", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.6, output: 2.2, cacheRead: 0.11, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 96e3, type: "chat" }, "chat:zai/glm-4.7": { id: "zai/glm-4.7", name: "GLM 4.7", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.6, output: 2.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 12e4, type: "chat" }, "chat:zai/glm-4.7-flash": { id: "zai/glm-4.7-flash", name: "GLM 4.7 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.07, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 131e3, type: "chat" }, "chat:zai/glm-4.7-flashx": { id: "zai/glm-4.7-flashx", name: "GLM 4.7 FlashX", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.06, output: 0.4, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 128e3, type: "chat" }, "chat:zai/glm-5": { id: "zai/glm-5", name: "GLM 5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 3.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 202800, maxTokens: 131100, type: "chat" }, "chat:zai/glm-5-turbo": { id: "zai/glm-5-turbo", name: "GLM 5 Turbo", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 1.2, output: 4, cacheRead: 0.24, cacheWrite: 0 }, contextWindow: 202800, maxTokens: 131100, type: "chat" }, "chat:zai/glm-5.1": { id: "zai/glm-5.1", name: "GLM 5.1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 202800, maxTokens: 64e3, type: "chat" }, "chat:zai/glm-5.2": { id: "zai/glm-5.2", name: "GLM 5.2", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.8, output: 2.55, cacheRead: 0.16, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, type: "chat" }, "chat:zai/glm-5.2-fast": { id: "zai/glm-5.2-fast", name: "GLM 5.2 Fast", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 2.8, output: 8.8, cacheRead: 0.56, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, type: "chat" }, "chat:zai/glm-5.3": { id: "zai/glm-5.3", name: "GLM 5.3", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 1.4, output: 4.4, cacheRead: 0.14, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 1e6, type: "chat" }, "chat:zai/glm-5.3-fast": { id: "zai/glm-5.3-fast", name: "GLM 5.3 Fast", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 2.1, output: 6.6, cacheRead: 0.21, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, type: "chat" }, "chat:zai/glm-5.3-flash": { id: "zai/glm-5.3-flash", name: "GLM 5.3 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:zai/glm-5.3-flashx": { id: "zai/glm-5.3-flashx", name: "GLM 5.3 FlashX", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.37, output: 1.25, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:zai/glm-5v-turbo": { id: "zai/glm-5v-turbo", name: "GLM 5V Turbo", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.2, output: 4, cacheRead: 0.24, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "typesafe-system-one": { "classifier:baseten/elephant-1": { type: "classifier", id: "baseten/elephant-1", name: "Elephant-1", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.035, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 16384 }, "classifier:baseten/joey-1": { type: "classifier", id: "baseten/joey-1", name: "Joey-1", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.01, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 16384 }, "classifier:baseten/mammoth-1": { type: "classifier", id: "baseten/mammoth-1", name: "Mammoth-1", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.1, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 16384 }, "classifier:convaiinnovations/laya": { type: "classifier", id: "convaiinnovations/laya", name: "Laya", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.0105, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 8192 }, "classifier:liquid/d1": { type: "classifier", id: "liquid/d1", name: "Liquid d1", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.02, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 65536 }, "classifier:liquid/d1-ultra": { type: "classifier", id: "liquid/d1-ultra", name: "Liquid d1 Ultra", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32768 }, "classifier:microsoft/microsoft-decision-1": { type: "classifier", id: "microsoft/microsoft-decision-1", name: "Decision-1", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32768 }, "classifier:openai/gpt-6-luna-decisions": { type: "classifier", id: "openai/gpt-6-luna-decisions", name: "GPT-6 Luna Decisions", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.1, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 105e4 }, "classifier:perplexity/pplx-decider-flash-v1.2": { type: "classifier", id: "perplexity/pplx-decider-flash-v1.2", name: "Decider Flash V1.2 4B", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.01, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144 }, "classifier:perplexity/pplx-decider-v1.2": { type: "classifier", id: "perplexity/pplx-decider-v1.2", name: "Decider V1.2 27B", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.02, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144 }, "classifier:scaledown/scaledown-classify-1": { type: "classifier", id: "scaledown/scaledown-classify-1", name: "Classify-1", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.05, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4096 }, "classifier:typesafe-ai/jev": { type: "classifier", id: "typesafe-ai/jev", name: "Jev", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32e3 }, "classifier:typesafe-ai/jev-1.13.0": { type: "classifier", id: "typesafe-ai/jev-1.13.0", name: "Jev 1.13.0", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32e3 }, "classifier:typesafe-ai/jev-1.14.0": { type: "classifier", id: "typesafe-ai/jev-1.14.0", name: "Jev 1.14.0", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32e3 } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.js +var VERCEL_AI_GATEWAY_MODELS = flattenChatModelCatalog("vercel-ai-gateway", vercel_ai_gateway_default); +var VERCEL_AI_GATEWAY_IMAGE_MODELS = flattenImageModelCatalog("vercel-ai-gateway", vercel_ai_gateway_default); +var VERCEL_AI_GATEWAY_CLASSIFIER_MODELS = flattenClassifierModelCatalog("vercel-ai-gateway", vercel_ai_gateway_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/xai.json +var xai_default = { "openai-responses": { "chat:grok-4.3": { id: "grok-4.3", name: "Grok 4.3", api: "openai-responses", provider: "xai", baseUrl: "https://api.x.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 5, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 3e4, compat: { supportsLongCacheRetention: false }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-4.5": { id: "grok-4.5", name: "Grok 4.5", api: "openai-responses", provider: "xai", baseUrl: "https://api.x.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.3, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 0.6, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 5e5, compat: { supportsLongCacheRetention: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-4.6": { id: "grok-4.6", name: "Grok 4.6", api: "openai-responses", provider: "xai", baseUrl: "https://api.x.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 5e5, compat: { supportsLongCacheRetention: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-4.7": { id: "grok-4.7", name: "Grok 4.7", api: "openai-responses", provider: "xai", baseUrl: "https://api.x.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 5e5, compat: { supportsLongCacheRetention: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/xai.models.js +var XAI_MODELS = flattenChatModelCatalog("xai", xai_default); +var XAI_IMAGE_MODELS = flattenImageModelCatalog("xai", xai_default); +var XAI_CLASSIFIER_MODELS = flattenClassifierModelCatalog("xai", xai_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi.json +var xiaomi_default = { "openai-completions": { "chat:mimo-v2.6-flash": { id: "mimo-v2.6-flash", name: "MiMo-V2.6-Flash", api: "openai-completions", provider: "xiaomi", baseUrl: "https://api.xiaomimimo.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.14, output: 0.28, cacheRead: 28e-4, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsReasoningEffort: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { off: "off", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mimo-v2.6-pro": { id: "mimo-v2.6-pro", name: "MiMo-V2.6-Pro", api: "openai-completions", provider: "xiaomi", baseUrl: "https://api.xiaomimimo.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.435, output: 0.87, cacheRead: 36e-4, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsReasoningEffort: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { off: "off", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mimo-v2.6-pro-ultraspeed": { id: "mimo-v2.6-pro-ultraspeed", name: "MiMo-V2.6-Pro-UltraSpeed", api: "openai-completions", provider: "xiaomi", baseUrl: "https://api.xiaomimimo.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 4.35, output: 8.7, cacheRead: 0.036, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsReasoningEffort: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { off: "off", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.js +var XIAOMI_MODELS = flattenChatModelCatalog("xiaomi", xiaomi_default); +var XIAOMI_IMAGE_MODELS = flattenImageModelCatalog("xiaomi", xiaomi_default); +var XIAOMI_CLASSIFIER_MODELS = flattenClassifierModelCatalog("xiaomi", xiaomi_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-ams.json +var xiaomi_token_plan_ams_default = { "openai-completions": { "chat:mimo-v2.6-flash": { id: "mimo-v2.6-flash", name: "MiMo-V2.6-Flash", api: "openai-completions", provider: "xiaomi-token-plan-ams", baseUrl: "https://token-plan-ams.xiaomimimo.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsReasoningEffort: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { off: "off", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mimo-v2.6-pro": { id: "mimo-v2.6-pro", name: "MiMo-V2.6-Pro", api: "openai-completions", provider: "xiaomi-token-plan-ams", baseUrl: "https://token-plan-ams.xiaomimimo.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsReasoningEffort: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { off: "off", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.js +var XIAOMI_TOKEN_PLAN_AMS_MODELS = flattenChatModelCatalog("xiaomi-token-plan-ams", xiaomi_token_plan_ams_default); +var XIAOMI_TOKEN_PLAN_AMS_IMAGE_MODELS = flattenImageModelCatalog("xiaomi-token-plan-ams", xiaomi_token_plan_ams_default); +var XIAOMI_TOKEN_PLAN_AMS_CLASSIFIER_MODELS = flattenClassifierModelCatalog("xiaomi-token-plan-ams", xiaomi_token_plan_ams_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-cn.json +var xiaomi_token_plan_cn_default = { "openai-completions": { "chat:mimo-v2.6-flash": { id: "mimo-v2.6-flash", name: "MiMo-V2.6-Flash", api: "openai-completions", provider: "xiaomi-token-plan-cn", baseUrl: "https://token-plan-cn.xiaomimimo.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsReasoningEffort: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { off: "off", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mimo-v2.6-pro": { id: "mimo-v2.6-pro", name: "MiMo-V2.6-Pro", api: "openai-completions", provider: "xiaomi-token-plan-cn", baseUrl: "https://token-plan-cn.xiaomimimo.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsReasoningEffort: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { off: "off", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.js +var XIAOMI_TOKEN_PLAN_CN_MODELS = flattenChatModelCatalog("xiaomi-token-plan-cn", xiaomi_token_plan_cn_default); +var XIAOMI_TOKEN_PLAN_CN_IMAGE_MODELS = flattenImageModelCatalog("xiaomi-token-plan-cn", xiaomi_token_plan_cn_default); +var XIAOMI_TOKEN_PLAN_CN_CLASSIFIER_MODELS = flattenClassifierModelCatalog("xiaomi-token-plan-cn", xiaomi_token_plan_cn_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-sgp.json +var xiaomi_token_plan_sgp_default = { "openai-completions": { "chat:mimo-v2.6-flash": { id: "mimo-v2.6-flash", name: "MiMo-V2.6-Flash", api: "openai-completions", provider: "xiaomi-token-plan-sgp", baseUrl: "https://token-plan-sgp.xiaomimimo.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsReasoningEffort: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { off: "off", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mimo-v2.6-pro": { id: "mimo-v2.6-pro", name: "MiMo-V2.6-Pro", api: "openai-completions", provider: "xiaomi-token-plan-sgp", baseUrl: "https://token-plan-sgp.xiaomimimo.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsReasoningEffort: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { off: "off", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.js +var XIAOMI_TOKEN_PLAN_SGP_MODELS = flattenChatModelCatalog("xiaomi-token-plan-sgp", xiaomi_token_plan_sgp_default); +var XIAOMI_TOKEN_PLAN_SGP_IMAGE_MODELS = flattenImageModelCatalog("xiaomi-token-plan-sgp", xiaomi_token_plan_sgp_default); +var XIAOMI_TOKEN_PLAN_SGP_CLASSIFIER_MODELS = flattenClassifierModelCatalog("xiaomi-token-plan-sgp", xiaomi_token_plan_sgp_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/zai.json +var zai_default = { "openai-completions": { "chat:glm-4.7": { id: "glm-4.7", name: "GLM-4.7", api: "openai-completions", provider: "zai", baseUrl: "https://api.z.ai/api/coding/paas/v4", reasoning: true, input: ["text"], cost: { input: 0.6, output: 2.2, cacheRead: 0.11, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "zai", supportsStrictMode: true, zaiToolStream: true }, type: "chat" }, "chat:glm-5-turbo": { id: "glm-5-turbo", name: "GLM-5-Turbo", api: "openai-completions", provider: "zai", baseUrl: "https://api.z.ai/api/coding/paas/v4", reasoning: true, input: ["text"], cost: { input: 1.2, output: 4, cacheRead: 0.24, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "zai", supportsStrictMode: true, zaiToolStream: true }, type: "chat" }, "chat:glm-5.2": { id: "glm-5.2", name: "GLM-5.2", api: "openai-completions", provider: "zai", baseUrl: "https://api.z.ai/api/coding/paas/v4", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "zai", supportsStrictMode: true, zaiToolStream: true }, type: "chat" }, "chat:glm-5.2-highspeed": { id: "glm-5.2-highspeed", name: "GLM-5.2 Highspeed", api: "openai-completions", provider: "zai", baseUrl: "https://api.z.ai/api/coding/paas/v4", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "zai", supportsStrictMode: true, zaiToolStream: true }, type: "chat" }, "chat:glm-5.3": { id: "glm-5.3", name: "GLM-5.3", api: "openai-completions", provider: "zai", baseUrl: "https://api.z.ai/api/coding/paas/v4", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "zai", supportsStrictMode: true, zaiToolStream: true }, type: "chat" }, "chat:glm-5.3-flash": { id: "glm-5.3-flash", name: "GLM-5.3-Flash", api: "openai-completions", provider: "zai", baseUrl: "https://api.z.ai/api/coding/paas/v4", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "zai", supportsStrictMode: true, zaiToolStream: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:glm-5.3-highspeed": { id: "glm-5.3-highspeed", name: "GLM-5.3 Highspeed", api: "openai-completions", provider: "zai", baseUrl: "https://api.z.ai/api/coding/paas/v4", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "zai", supportsStrictMode: true, zaiToolStream: true }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/zai.models.js +var ZAI_MODELS = flattenChatModelCatalog("zai", zai_default); +var ZAI_IMAGE_MODELS = flattenImageModelCatalog("zai", zai_default); +var ZAI_CLASSIFIER_MODELS = flattenClassifierModelCatalog("zai", zai_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/zai-coding-cn.json +var zai_coding_cn_default = { "openai-completions": { "chat:glm-4.6v": { id: "glm-4.6v", name: "GLM-4.6V", api: "openai-completions", provider: "zai-coding-cn", baseUrl: "https://open.bigmodel.cn/api/coding/paas/v4", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 0.9, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 32768, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "zai", supportsStrictMode: true, zaiToolStream: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:glm-5.3": { id: "glm-5.3", name: "GLM-5.3", api: "openai-completions", provider: "zai-coding-cn", baseUrl: "https://open.bigmodel.cn/api/coding/paas/v4", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "zai", supportsStrictMode: true, zaiToolStream: true }, type: "chat" }, "chat:glm-5.3-flash": { id: "glm-5.3-flash", name: "GLM-5.3-Flash", api: "openai-completions", provider: "zai-coding-cn", baseUrl: "https://open.bigmodel.cn/api/coding/paas/v4", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "zai", supportsStrictMode: true, zaiToolStream: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:glm-5.3-highspeed": { id: "glm-5.3-highspeed", name: "GLM-5.3 Highspeed", api: "openai-completions", provider: "zai-coding-cn", baseUrl: "https://open.bigmodel.cn/api/coding/paas/v4", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "zai", supportsStrictMode: true, zaiToolStream: true }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.js +var ZAI_CODING_CN_MODELS = flattenChatModelCatalog("zai-coding-cn", zai_coding_cn_default); +var ZAI_CODING_CN_IMAGE_MODELS = flattenImageModelCatalog("zai-coding-cn", zai_coding_cn_default); +var ZAI_CODING_CN_CLASSIFIER_MODELS = flattenClassifierModelCatalog("zai-coding-cn", zai_coding_cn_default); + +// node_modules/@earendil-works/pi-ai/dist/models.generated.js +var MODELS = { + "amazon-bedrock": AMAZON_BEDROCK_MODELS, + "ant-ling": ANT_LING_MODELS, + "anthropic": ANTHROPIC_MODELS, + "azure": AZURE_MODELS, + "baseten": BASETEN_MODELS, + "cerebras": CEREBRAS_MODELS, + "cloudflare-ai-gateway": CLOUDFLARE_AI_GATEWAY_MODELS, + "cloudflare-workers-ai": CLOUDFLARE_WORKERS_AI_MODELS, + "deepseek": DEEPSEEK_MODELS, + "fireworks": FIREWORKS_MODELS, + "github-copilot": GITHUB_COPILOT_MODELS, + "google": GOOGLE_MODELS, + "google-vertex": GOOGLE_VERTEX_MODELS, + "groq": GROQ_MODELS, + "huggingface": HUGGINGFACE_MODELS, + "kimi-coding": KIMI_CODING_MODELS, + "meta": META_MODELS, + "minimax": MINIMAX_MODELS, + "minimax-cn": MINIMAX_CN_MODELS, + "mistral": MISTRAL_MODELS, + "moonshotai": MOONSHOTAI_MODELS, + "moonshotai-cn": MOONSHOTAI_CN_MODELS, + "nvidia": NVIDIA_MODELS, + "openai": OPENAI_MODELS, + "openai-codex": OPENAI_CODEX_MODELS, + "opencode": OPENCODE_MODELS, + "opencode-go": OPENCODE_GO_MODELS, + "openrouter": OPENROUTER_MODELS, + "qwen-token-plan": QWEN_TOKEN_PLAN_MODELS, + "qwen-token-plan-cn": QWEN_TOKEN_PLAN_CN_MODELS, + "qwen-token-plan-individual": QWEN_TOKEN_PLAN_INDIVIDUAL_MODELS, + "radius": RADIUS_MODELS, + "together": TOGETHER_MODELS, + "typesafe": TYPESAFE_MODELS, + "vercel-ai-gateway": VERCEL_AI_GATEWAY_MODELS, + "xai": XAI_MODELS, + "xiaomi": XIAOMI_MODELS, + "xiaomi-token-plan-ams": XIAOMI_TOKEN_PLAN_AMS_MODELS, + "xiaomi-token-plan-cn": XIAOMI_TOKEN_PLAN_CN_MODELS, + "xiaomi-token-plan-sgp": XIAOMI_TOKEN_PLAN_SGP_MODELS, + "zai": ZAI_MODELS, + "zai-coding-cn": ZAI_CODING_CN_MODELS +}; + +// node_modules/@earendil-works/pi-ai/dist/api/openai-completions.lazy.js +init_lazy(); +var openAICompletionsApi = () => lazyApi(() => Promise.resolve().then(() => (init_openai_completions(), openai_completions_exports))); + +// node_modules/@earendil-works/pi-ai/dist/auth/helpers.js +function envApiKeyAuth(name, envVars) { + return { + name, + login: async (interaction) => { + interaction.signal.throwIfAborted(); + const key = await interaction.prompt({ type: "secret", message: `Enter ${name}` }); + interaction.signal.throwIfAborted(); + return { type: "api_key", key }; + }, + resolve: async ({ ctx, credential, signal }) => { + signal.throwIfAborted(); + if (credential?.key) { + return { auth: { apiKey: credential.key }, env: credential.env, source: "stored credential" }; + } + for (const envVar of envVars) { + const value2 = await ctx.env(envVar); + signal.throwIfAborted(); + if (value2) + return { auth: { apiKey: value2 }, source: envVar }; + } + return void 0; + } + }; +} +function lazyOAuth(input) { + let promise; + const loaded = () => { + promise ??= input.load(); + return promise; + }; + return { + name: input.name, + isSubscription: input.isSubscription, + loginLabel: input.loginLabel, + login: async (interaction, options) => (await loaded()).login(interaction, options), + refresh: async (credential, signal) => (await loaded()).refresh(credential, signal), + toAuth: async (credential) => (await loaded()).toAuth(credential) + }; +} + // node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.lazy.js init_lazy(); var anthropicMessagesApi = () => lazyApi(() => Promise.resolve().then(() => (init_anthropic_messages(), anthropic_messages_exports))); @@ -42262,9 +42770,10 @@ var anthropicMessagesApi = () => lazyApi(() => Promise.resolve().then(() => (ini init_lazy(); var openAIResponsesApi = () => lazyApi(() => Promise.resolve().then(() => (init_openai_responses(), openai_responses_exports))); -// node_modules/@earendil-works/pi-ai/dist/api/openai-completions.lazy.js -init_lazy(); -var openAICompletionsApi = () => lazyApi(() => Promise.resolve().then(() => (init_openai_completions(), openai_completions_exports))); +// node_modules/@earendil-works/pi-ai/dist/providers/all.js +function getBuiltinModel(provider2, modelId) { + return MODELS[provider2]?.[modelId]; +} // models.ts var CONFIG = "/etc/sausage/config.yaml"; @@ -42276,22 +42785,25 @@ var adapters = { function resolveModel(provider2, settings, entry2, catalog) { const override = typeof entry2 === "string" ? { id: entry2 } : entry2; const id = override.id; - const known = catalog[settings.catalog ?? provider2]?.models?.[id]; + const known = catalog(settings.catalog ?? provider2, id); const metadata = { - context_window: known?.limit?.context, - max_tokens: known?.limit?.output, + context_window: known?.contextWindow, + max_tokens: known?.maxTokens, reasoning: known?.reasoning, - cost: known?.cost, ...override }; - const cost = { ...known?.cost, ...override.cost }; + const cost = { ...known?.cost }; + const costFields = { input: "input", output: "output", cache_read: "cacheRead", cache_write: "cacheWrite" }; + for (const [key, field] of Object.entries(costFields)) if (override.cost?.[key] !== void 0) cost[field] = override.cost[key]; const missing = ["context_window", "max_tokens", "reasoning"].filter((key) => metadata[key] === void 0); - for (const key of ["input", "output", "cache_read", "cache_write"]) if (cost[key] === void 0) missing.push(`cost.${key}`); + for (const [key, field] of Object.entries(costFields)) if (cost[field] === void 0) missing.push(`cost.${key}`); if (missing.length) throw new Error(`${CONFIG}: ${provider2}/${id} lacks ${missing.join(", ")}`); const extra = Object.keys(override).filter((key) => !["id", "context_window", "max_tokens", "reasoning", "cost"].includes(key)); const extraCost = Object.keys(override.cost ?? {}).filter((key) => !["input", "output", "cache_read", "cache_write"].includes(key)); if (extra.length || extraCost.length) throw new Error(`${CONFIG}: invalid overrides for ${provider2}/${id}: ${[...extra, ...extraCost].join(", ")}`); return { + ...known, + type: "chat", id, name: known?.name ?? id, provider: provider2, @@ -42300,18 +42812,12 @@ function resolveModel(provider2, settings, entry2, catalog) { contextWindow: metadata.context_window, maxTokens: metadata.max_tokens, reasoning: metadata.reasoning, - input: known?.modalities?.input?.filter((type) => ["text", "image"].includes(type)) ?? ["text"], - cost: { input: cost.input, output: cost.output, cacheRead: cost.cache_read, cacheWrite: cost.cache_write } + input: known?.input ?? ["text"], + cost }; } -async function modelCatalog() { - let updated; - try { - const response = await fetch("https://models.dev/api.json", { signal: AbortSignal.timeout(5e3) }); - if (response.ok) updated = await response.json(); - } catch { - } - return Deno.core.ops.op_model_catalog(updated ?? null); +function modelCatalog() { + return getBuiltinModel; } async function configuredModels(readProviders, catalog) { const models2 = createModels(); @@ -59698,43 +60204,8 @@ function systemEntry(sections, tools, timestamp2) { return { model: [message] }; } -// node_modules/@earendil-works/pi-ai/dist/utils/uuid.js -var MAX_UUID_V7_TIMESTAMP = 281474976710655; -var MAX_SEQUENCE = (1n << 41n) - 1n; -var lastOrdinaryTimestamp = -1; -var sequence2; -function uuidv7(timestampMs) { - const requestedTimestamp = timestampMs ?? Date.now(); - if (!Number.isInteger(requestedTimestamp) || requestedTimestamp < 0 || requestedTimestamp > MAX_UUID_V7_TIMESTAMP) { - throw new RangeError(`UUIDv7 timestamp must be an integer between 0 and ${MAX_UUID_V7_TIMESTAMP}`); - } - const effectiveTimestamp = timestampMs === void 0 ? Math.max(requestedTimestamp, lastOrdinaryTimestamp) : timestampMs; - if (timestampMs === void 0) - lastOrdinaryTimestamp = effectiveTimestamp; - const bytes2 = new Uint8Array(16); - globalThis.crypto.getRandomValues(bytes2); - if (sequence2 === void 0) { - sequence2 = BigInt(bytes2[1]) << 32n | BigInt(bytes2[2]) << 24n | BigInt(bytes2[3]) << 16n | BigInt(bytes2[4]) << 8n | BigInt(bytes2[5]); - } else { - if (sequence2 === MAX_SEQUENCE) - throw new RangeError("UUIDv7 generator sequence exhausted"); - sequence2++; - } - const timestamp2 = BigInt(effectiveTimestamp); - for (let index = 5; index >= 0; index--) { - bytes2[index] = Number(timestamp2 >> BigInt((5 - index) * 8)) & 255; - } - bytes2[6] = 112 | Number(sequence2 >> 37n & 0x0fn); - bytes2[7] = Number(sequence2 >> 29n & 0xffn); - bytes2[8] = 128 | Number(sequence2 >> 23n & 0x3fn); - bytes2[9] = Number(sequence2 >> 15n & 0xffn); - bytes2[10] = Number(sequence2 >> 7n & 0xffn); - bytes2[11] = Number((sequence2 & 0x7fn) << 1n) | bytes2[11] & 1; - const hex = Array.from(bytes2, (byte) => byte.toString(16).padStart(2, "0")); - return `${hex.slice(0, 4).join("")}-${hex.slice(4, 6).join("")}-${hex.slice(6, 8).join("")}-${hex.slice(8, 10).join("")}-${hex.slice(10).join("")}`; -} - // node_modules/@earendil-works/pi-durable/dist/harness/provider.js +init_uuid3(); var ProviderDoc = defineDoc({ kind: "pi.provider", version: 1, @@ -77283,49 +77754,6 @@ __export(dist_exports5, { init_lazy(); init_context(); init_credential_store(); - -// node_modules/@earendil-works/pi-ai/dist/auth/helpers.js -function envApiKeyAuth(name, envVars) { - return { - name, - login: async (interaction) => { - interaction.signal.throwIfAborted(); - const key = await interaction.prompt({ type: "secret", message: `Enter ${name}` }); - interaction.signal.throwIfAborted(); - return { type: "api_key", key }; - }, - resolve: async ({ ctx, credential, signal }) => { - signal.throwIfAborted(); - if (credential?.key) { - return { auth: { apiKey: credential.key }, env: credential.env, source: "stored credential" }; - } - for (const envVar of envVars) { - const value2 = await ctx.env(envVar); - signal.throwIfAborted(); - if (value2) - return { auth: { apiKey: value2 }, source: envVar }; - } - return void 0; - } - }; -} -function lazyOAuth(input) { - let promise; - const loaded = () => { - promise ??= input.load(); - return promise; - }; - return { - name: input.name, - isSubscription: input.isSubscription, - loginLabel: input.loginLabel, - login: async (interaction, options) => (await loaded()).login(interaction, options), - refresh: async (credential, signal) => (await loaded()).refresh(credential, signal), - toAuth: async (credential) => (await loaded()).toAuth(credential) - }; -} - -// node_modules/@earendil-works/pi-ai/dist/index.js init_models(); init_models_store(); @@ -77808,29 +78236,8 @@ function fauxProvider(options = {}) { }; } -// node_modules/@earendil-works/pi-ai/dist/session-resources.js -var sessionResourceCleanups = /* @__PURE__ */ new Set(); -function registerSessionResourceCleanup(cleanup) { - sessionResourceCleanups.add(cleanup); - return () => { - sessionResourceCleanups.delete(cleanup); - }; -} -function cleanupSessionResources(sessionId) { - const errors = []; - for (const cleanup of sessionResourceCleanups) { - try { - cleanup(sessionId); - } catch (error) { - errors.push(error); - } - } - if (errors.length > 0) { - throw new AggregateError(errors, "Failed to cleanup session resources"); - } -} - // node_modules/@earendil-works/pi-ai/dist/index.js +init_session_resources(); init_diagnostics(); init_event_stream(); init_identity(); @@ -77850,6 +78257,7 @@ function StringEnum(values, options) { // node_modules/@earendil-works/pi-ai/dist/index.js init_text(); init_transcript(); +init_uuid3(); init_version(); // extensions.ts diff --git a/host/js/models-dev.json b/host/js/models-dev.json deleted file mode 100644 index 0c98e49..0000000 --- a/host/js/models-dev.json +++ /dev/null @@ -1 +0,0 @@ -{"nearai":{"id":"nearai","env":["NEARAI_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://cloud-api.near.ai/v1","name":"NEAR AI Cloud","doc":"https://docs.near.ai/","models":{"anthropic/claude-sonnet-5-5":{"id":"anthropic/claude-sonnet-5-5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"anthropic/claude-fable-5-1":{"id":"anthropic/claude-fable-5-1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25},"canonical_model_id":"anthropic/claude-fable-5-1"},"anthropic/claude-sonnet-5":{"id":"anthropic/claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2},"canonical_model_id":"anthropic/claude-sonnet-5"},"anthropic/claude-fable-5":{"id":"anthropic/claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1},"canonical_model_id":"anthropic/claude-fable-5"},"anthropic/claude-opus-5":{"id":"anthropic/claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5},"canonical_model_id":"anthropic/claude-opus-5"},"anthropic/claude-opus-4-6":{"id":"anthropic/claude-opus-4-6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"anthropic/claude-opus-4-8":{"id":"anthropic/claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic/claude-opus-5-5":{"id":"anthropic/claude-opus-5-5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2},"canonical_model_id":"anthropic/claude-opus-5-5"},"anthropic/claude-sonnet-4-5":{"id":"anthropic/claude-sonnet-4-5","name":"Claude Sonnet 4.5 (latest)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"anthropic/claude-haiku-5-5":{"id":"anthropic/claude-haiku-5-5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"anthropic/claude-sonnet-4-6":{"id":"anthropic/claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"anthropic/claude-opus-4-7":{"id":"anthropic/claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"anthropic/claude-haiku-4-5":{"id":"anthropic/claude-haiku-4-5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"x-ai/grok-4.7":{"id":"x-ai/grok-4.7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.7"},"x-ai/grok-4.6":{"id":"x-ai/grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.6"},"deepseek/deepseek-v3.2":{"id":"deepseek/deepseek-v3.2","name":"DeepSeek V3.2","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes, sparse attention, and tool-use","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":64000},"cost":{"input":1.1,"output":1.1,"cache_read":0.55},"canonical_model_id":"deepseek/deepseek-v3.2"},"deepseek/deepseek-v4.1-flash-1017":{"id":"deepseek/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"google/gemini-2.5-flash":{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"input_audio":1},"canonical_model_id":"google/gemini-2.5-flash"},"google/gemini-3.8-flash":{"id":"google/gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.8-flash"},"google/gemini-2.5-pro":{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.25,"output":10,"cache_read":0.125,"tiers":[{"input":2.5,"output":15,"cache_read":0.25,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":15,"cache_read":0.25}},"canonical_model_id":"google/gemini-2.5-pro"},"google/gemini-3.5-flash":{"id":"google/gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"cache_read":0.15,"input_audio":1.5},"canonical_model_id":"google/gemini-3.5-flash"},"google/gemini-3.1-flash-lite":{"id":"google/gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"input_audio":0.5},"canonical_model_id":"google/gemini-3.1-flash-lite"},"google/gemini-2.5-flash-lite":{"id":"google/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash-Lite","description":"Lean Gemini 2.5 lane for cheap multimodal traffic and quick agents","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.1,"output":0.4,"cache_read":0.01,"input_audio":0.3},"canonical_model_id":"google/gemini-2.5-flash-lite"},"qwen/qwen3.7-max":{"id":"qwen/qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2.8,"output":7.5},"canonical_model_id":"alibaba/qwen3.7-max"},"deepseek-ai/DeepSeek-V4.1-Flash-1017":{"id":"deepseek-ai/DeepSeek-V4.1-Flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"deepseek-ai/DeepSeek-V4.1-Flash-1017-abliterated":{"id":"deepseek-ai/DeepSeek-V4.1-Flash-1017-abliterated","name":"DeepSeek V4.1 Flash 1017 Abliterated","description":"NEAR AI's refusal-removed DeepSeek V4.1 Flash 1017 for security research, with text-only reasoning and tool use inside a private TEE","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-10-29","last_updated":"2026-10-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":384000},"cost":{"input":0.3,"output":1.2,"cache_read":0.006}},"moonshotai/kimi-k3.1-pro":{"id":"moonshotai/kimi-k3.1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":2,"output":10,"cache_read":0.2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"moonshotai/kimi-k2.6":{"id":"moonshotai/kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.81,"output":3.85,"cache_read":0.41},"canonical_model_id":"moonshotai/kimi-k2.6"},"moonshotai/kimi-k3":{"id":"moonshotai/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3.3,"output":16.5,"cache_read":0.33},"canonical_model_id":"moonshotai/kimi-k3"},"openai/gpt-5.5":{"id":"openai/gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"openai/whisper-large-v3":{"id":"openai/whisper-large-v3","type":"transcription","name":"Whisper Large v3","description":"Speech transcription model for accurate audio-to-text and captioning workflows","family":"whisper","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2023-11-06","last_updated":"2023-11-06","modalities":{"input":["audio"],"output":["text"]},"open_weights":true,"limit":{"context":448,"output":448},"cost":{"input":0.01,"output":0.01},"canonical_model_id":"openai/whisper-large-v3"},"openai/gpt-5.2":{"id":"openai/gpt-5.2","name":"GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"openai/gpt-4.1-mini":{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-4.1-mini"},"openai/o4-mini":{"id":"openai/o4-mini","name":"o4-mini","description":"Fast o-series model for compact reasoning, coding, and tool use","family":"o-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":1.1,"output":4.4,"cache_read":0.275},"canonical_model_id":"openai/o4-mini"},"openai/gpt-5.4-mini":{"id":"openai/gpt-5.4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"openai/gpt-5":{"id":"openai/gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"openai/gpt-5.6-sol":{"id":"openai/gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4},"canonical_model_id":"openai/gpt-5.6-sol"},"openai/gpt-4.1":{"id":"openai/gpt-4.1","name":"GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"openai/o3":{"id":"openai/o3","name":"o3","description":"Deliberate o-series reasoner for hard math, coding, and multi-step analysis","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/o3"},"openai/gpt-6-luna":{"id":"openai/gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01},"canonical_model_id":"openai/gpt-6-luna"},"openai/o3-mini":{"id":"openai/o3-mini","name":"o3-mini","description":"Smaller o-series reasoner for economical coding, math, and planning tasks","family":"o-mini","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2024-12-20","last_updated":"2025-01-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":1.1,"output":4.4,"cache_read":0.55},"canonical_model_id":"openai/o3-mini"},"openai/gpt-6-sol":{"id":"openai/gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2},"canonical_model_id":"openai/gpt-6-sol"},"openai/gpt-6-astra":{"id":"openai/gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1},"canonical_model_id":"openai/gpt-6-astra"},"openai/gpt-5.1":{"id":"openai/gpt-5.1","name":"GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1"},"openai/gpt-5-mini":{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"openai/gpt-5.6-luna":{"id":"openai/gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-6.1-sol":{"id":"openai/gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1},"canonical_model_id":"openai/gpt-6.1-sol"},"openai/gpt-5-nano":{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-nano"},"openai/gpt-5.4":{"id":"openai/gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5}},"canonical_model_id":"openai/gpt-5.4"},"openai/gpt-5.4-nano":{"id":"openai/gpt-5.4-nano","name":"GPT-5.4 nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"black-forest-labs/FLUX.2-klein-4B":{"id":"black-forest-labs/FLUX.2-klein-4B","type":"image","name":"FLUX.2 Klein 4B","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"flux","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-01-15","last_updated":"2026-01-15","modalities":{"input":["text","image"],"output":["image"]},"open_weights":true,"limit":{"context":0,"output":0},"canonical_model_id":"black-forest-labs/flux-2-klein-4b"},"z-ai/glm-5.3":{"id":"z-ai/glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.8,"output":5.75,"cache_read":0.45},"canonical_model_id":"zhipuai/glm-5.3"},"z-ai/glm-5.3-flash":{"id":"z-ai/glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.08,"output":0.5,"cache_read":0.012},"canonical_model_id":"zhipuai/glm-5.3-flash"},"Qwen/Qwen3-VL-30B-A3B-Instruct":{"id":"Qwen/Qwen3-VL-30B-A3B-Instruct","name":"Qwen3-VL 30B-A3B Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-04","last_updated":"2025-10-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"output":8192},"cost":{"input":0.15,"output":0.55,"cache_read":0.03},"canonical_model_id":"alibaba/qwen3-vl-30b-a3b-instruct"},"Qwen/Qwen3-Embedding-0.6B":{"id":"Qwen/Qwen3-Embedding-0.6B","type":"embedding","name":"Qwen3 Embedding 0.6B","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-06-05","last_updated":"2025-06-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":1024},"cost":{"input":0.01,"output":0.01},"canonical_model_id":"alibaba/qwen3-embedding-0.6b"},"Qwen/Qwen3-Reranker-0.6B":{"id":"Qwen/Qwen3-Reranker-0.6B","type":"reranking","name":"Qwen3 Reranker 0.6B","description":"Reranking model for improving retrieval quality in search and recommendation systems","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-06-05","last_updated":"2025-06-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":40960,"output":1024},"cost":{"input":0.01,"output":0.01},"canonical_model_id":"alibaba/qwen3-reranker-0.6b"},"Qwen/Qwen3.8-27B-abliterated":{"id":"Qwen/Qwen3.8-27B-abliterated","name":"Qwen3.8 27B Abliterated","description":"NEAR AI's refusal-removed Qwen3.8 27B for security research, with vision, reasoning and tool use inside a private TEE","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-10-29","last_updated":"2026-10-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"cost":{"input":0.04,"output":1.35,"cache_read":0.018}},"Qwen/Qwen3.6-35B-A3B-FP8":{"id":"Qwen/Qwen3.6-35B-A3B-FP8","name":"Qwen 3.6 35B A3B FP8","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":8192},"cost":{"input":0.17,"output":1.1,"cache_read":0.056},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"Qwen/Qwen3.8-27B":{"id":"Qwen/Qwen3.8-27B","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.04,"output":1.35,"cache_read":0.018},"canonical_model_id":"alibaba/qwen3.8-27b"}}},"tempr":{"id":"tempr","env":["TEMPR_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.temprhq.io/v1","name":"Tempr Gateway","doc":"https://temprhq.io/docs/gateway-reference.html","models":{"anthropic/claude-fable-5-1":{"id":"anthropic/claude-fable-5-1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"anthropic/claude-opus-4-5":{"id":"anthropic/claude-opus-4-5","name":"Claude Opus 4.5 (latest)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"anthropic/claude-sonnet-5":{"id":"anthropic/claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"anthropic/claude-sonnet-4-5-20250929":{"id":"anthropic/claude-sonnet-4-5-20250929","name":"Claude Sonnet 4.5","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5-20250929"},"anthropic/claude-fable-5":{"id":"anthropic/claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"anthropic/claude-haiku-4-5-20251001":{"id":"anthropic/claude-haiku-4-5-20251001","name":"Claude Haiku 4.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"anthropic/claude-opus-5":{"id":"anthropic/claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"anthropic/claude-opus-4-5-20251101":{"id":"anthropic/claude-opus-4-5-20251101","name":"Claude Opus 4.5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5-20251101"},"anthropic/claude-opus-4-6":{"id":"anthropic/claude-opus-4-6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"anthropic/claude-opus-4-8":{"id":"anthropic/claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic/claude-sonnet-4-5":{"id":"anthropic/claude-sonnet-4-5","name":"Claude Sonnet 4.5 (latest)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"anthropic/claude-sonnet-4-6":{"id":"anthropic/claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"anthropic/claude-opus-4-7":{"id":"anthropic/claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"anthropic/claude-haiku-4-5":{"id":"anthropic/claude-haiku-4-5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"mistral/mistral-large-2512":{"id":"mistral/mistral-large-2512","name":"Mistral Large 3","description":"Mistral's largest general model for enterprise agents, coding, and multilingual reasoning","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-11","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.5,"output":1.5,"cache_read":0.05},"canonical_model_id":"mistral/mistral-large-2512"},"mistral/mistral-small-2603":{"id":"mistral/mistral-small-2603","name":"Mistral Small 4","description":"Fast Mistral production model for chat, extraction, and cost-sensitive agents","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"mistral/mistral-small-2603"},"mistral/zai-glm-5-2":{"id":"mistral/zai-glm-5-2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"status":"deprecated","cost":{"input":1.4,"output":4.4,"cache_read":0.14},"canonical_model_id":"zhipuai/glm-5.2"},"mistral/zai-glm-5-3":{"id":"mistral/zai-glm-5-3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.14},"canonical_model_id":"zhipuai/glm-5.3"},"mistral/voxtral-small-latest":{"id":"mistral/voxtral-small-latest","name":"Voxtral Small (latest)","description":"Instruct model with native audio input for speech understanding and tool use","family":"voxtral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-15","last_updated":"2025-07-15","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":32000},"cost":{"input":0.1,"output":0.4},"canonical_model_id":"mistral/voxtral-small-latest"},"mistral/mistral-small-latest":{"id":"mistral/mistral-small-latest","name":"Mistral Small (latest)","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"mistral/mistral-small-latest"},"mistral/mistral-medium-latest":{"id":"mistral/mistral-medium-latest","name":"Mistral Medium (latest)","description":"Balanced Mistral model for enterprise assistants, multilingual work, and tools","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-29","last_updated":"2026-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.5,"output":7.5,"cache_read":0.15},"canonical_model_id":"mistral/mistral-medium-latest"},"mistral/mistral-medium-2604":{"id":"mistral/mistral-medium-2604","name":"Mistral Medium 3.5","description":"Balanced Mistral model for enterprise assistants, multilingual work, and tools","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-29","last_updated":"2026-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.5,"output":7.5,"cache_read":0.15},"canonical_model_id":"mistral/mistral-medium-2604"},"mistral/mistral-embed":{"id":"mistral/mistral-embed","type":"embedding","name":"Mistral Embed","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"mistral-embed","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2023-12-11","last_updated":"2023-12-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8000,"output":3072},"cost":{"input":0.1,"output":0},"canonical_model_id":"mistral/mistral-embed"},"mistral/mistral-large-latest":{"id":"mistral/mistral-large-latest","name":"Mistral Large (latest)","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-11","release_date":"2024-11-01","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.5,"output":1.5,"cache_read":0.05},"canonical_model_id":"mistral/mistral-large-latest"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.66,"output":1.98,"reasoning":1.98,"cache_read":0.022},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"deepseek/deepseek-flash":{"id":"deepseek/deepseek-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.15,"output":0.6,"reasoning":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"google/gemini-flash-lite-latest":{"id":"google/gemini-flash-lite-latest","name":"Gemini Flash-Lite Latest","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03},"canonical_model_id":"google/gemini-flash-lite-latest"},"google/gemini-3.8-flash":{"id":"google/gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"input_audio":0.75},"canonical_model_id":"google/gemini-3.8-flash"},"google/gemini-3.5-flash":{"id":"google/gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"cache_read":0.15,"input_audio":1.5},"canonical_model_id":"google/gemini-3.5-flash"},"google/gemini-flash-latest":{"id":"google/gemini-flash-latest","name":"Gemini Flash Latest","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"input_audio":0.75},"canonical_model_id":"google/gemini-flash-latest"},"google/gemini-3.6-flash":{"id":"google/gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"input_audio":0.75},"canonical_model_id":"google/gemini-3.6-flash"},"google/gemini-embedding-001":{"id":"google/gemini-embedding-001","type":"embedding","name":"Gemini Embedding 001","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"gemini","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2025-05","release_date":"2025-05-20","last_updated":"2025-05-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":2048,"output":1},"cost":{"input":0.15,"output":0},"canonical_model_id":"google/gemini-embedding-001"},"google/gemini-embedding-2":{"id":"google/gemini-embedding-2","type":"embedding","name":"Gemini Embedding 2","description":"Multimodal embedding model mapping text, images, video, audio, and PDFs into a unified embedding space","family":"gemini","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2025-11","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":1},"cost":{"input":0.2,"output":0},"canonical_model_id":"google/gemini-embedding-2"},"google/gemini-3.1-pro-preview-customtools":{"id":"google/gemini-3.1-pro-preview-customtools","name":"Gemini 3.1 Pro Preview Custom Tools","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview-customtools"},"google/gemini-3.1-pro-preview":{"id":"google/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"google/gemini-3.1-flash-lite":{"id":"google/gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"input_audio":0.5},"canonical_model_id":"google/gemini-3.1-flash-lite"},"google/gemini-3.5-flash-lite":{"id":"google/gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03},"canonical_model_id":"google/gemini-3.5-flash-lite"},"google/gemma-4-31b-it":{"id":"google/gemma-4-31b-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"canonical_model_id":"google/gemma-4-31b-it"},"google/gemini-3-flash-preview":{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.05,"input_audio":1},"canonical_model_id":"google/gemini-3-flash-preview"},"google/gemma-4-26b-a4b-it":{"id":"google/gemma-4-26b-a4b-it","name":"Gemma 4 26B A4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"google/gemini-3.7-flash":{"id":"google/gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"input_audio":0.75},"canonical_model_id":"google/gemini-3.7-flash"},"zai/glm-5.2":{"id":"zai/glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.2"},"zai/glm-4.6v-flash":{"id":"zai/glm-4.6v-flash","name":"GLM-4.6V-Flash","description":"Lightweight GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.6v-flash"},"zai/glm-4.6v":{"id":"zai/glm-4.6v","name":"GLM-4.6V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0.3,"output":0.9,"cache_read":0.05},"canonical_model_id":"zhipuai/glm-4.6v"},"zai/glm-5.1":{"id":"zai/glm-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.1"},"zai/glm-4.5":{"id":"zai/glm-4.5","name":"GLM-4.5","description":"Hybrid-reasoning GLM release that made the 4.5 line broadly useful","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"cost":{"input":0.6,"output":2.2,"cache_read":0.11,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.5"},"zai/glm-4.7":{"id":"zai/glm-4.7","name":"GLM-4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.2,"cache_read":0.11,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.7"},"zai/glm-5.3":{"id":"zai/glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3"},"zai/glm-5.3-flash":{"id":"zai/glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai/glm-5-turbo":{"id":"zai/glm-5-turbo","name":"GLM-5-Turbo","description":"Faster GLM-5 lane for coding agents that need lower latency","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24,"cache_write":0},"canonical_model_id":"zhipuai/glm-5-turbo"},"zai/glm-4.5-air":{"id":"zai/glm-4.5-air","name":"GLM-4.5-Air","description":"Lighter GLM-4.5 variant for fast coding assistance and cheaper agents","family":"glm-air","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"cost":{"input":0.2,"output":1.1,"cache_read":0.03,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.5-air"},"zai/glm-4.6":{"id":"zai/glm-4.6","name":"GLM-4.6","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.2,"cache_read":0.11,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.6"},"zai/glm-4.5v":{"id":"zai/glm-4.5v","name":"GLM-4.5V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-08-11","last_updated":"2025-08-11","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":64000,"output":16384},"cost":{"input":0.6,"output":1.8,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.5v"},"zai/glm-5.3-flashx":{"id":"zai/glm-5.3-flashx","name":"GLM-5.3-FlashX","description":"High-speed GLM-5.3-Flash serving option for coding and agent workflows","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-18","last_updated":"2026-09-18","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.37,"output":1.25,"cache_read":0.075,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai/glm-5v-turbo":{"id":"zai/glm-5v-turbo","name":"GLM-5V-Turbo","description":"Fast GLM vision model for screenshots, documents, and multimodal agent tasks","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24,"cache_write":0},"canonical_model_id":"zhipuai/glm-5v-turbo"},"zai/glm-4.7-flashx":{"id":"zai/glm-4.7-flashx","name":"GLM-4.7-FlashX","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0.07,"output":0.4,"cache_read":0.01,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.7-flashx"},"zai/glm-5":{"id":"zai/glm-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":1,"output":3.2,"cache_read":0.2,"cache_write":0},"canonical_model_id":"zhipuai/glm-5"},"zai/glm-4.7-flash":{"id":"zai/glm-4.7-flash","name":"GLM-4.7-Flash","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.7-flash"},"zai/glm-4.5-flash":{"id":"zai/glm-4.5-flash","name":"GLM-4.5-Flash","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":98304},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.5-flash"},"groq/allam-2-7b":{"id":"groq/allam-2-7b","name":"ALLaM-2-7b","description":"ALLaM-2-7b instruction tuned model by SDAIA","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-01-23","last_updated":"2025-01-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":4096,"output":4096},"cost":{"input":0,"output":0},"canonical_model_id":"sdaia/allam-2-7b"},"groq/qwen/qwen3.8-27b":{"id":"groq/qwen/qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131042,"output":16384},"cost":{"input":0.8,"output":4,"cache_read":0.4},"canonical_model_id":"alibaba/qwen3.8-27b"},"groq/openai/gpt-oss-20b":{"id":"groq/openai/gpt-oss-20b","name":"GPT OSS 20B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":65536},"cost":{"input":0.075,"output":0.3,"cache_read":0.0375},"canonical_model_id":"openai/gpt-oss-20b"},"groq/openai/gpt-oss-120b":{"id":"groq/openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":65536},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-oss-120b"},"moonshot/kimi-k2.6":{"id":"moonshot/kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"moonshot/kimi-k3":{"id":"moonshot/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3},"canonical_model_id":"moonshotai/kimi-k3"},"moonshot/kimi-k2.7-code":{"id":"moonshot/kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"moonshot/kimi-k2.7-code-highspeed":{"id":"moonshot/kimi-k2.7-code-highspeed","name":"Kimi K2.7 Code Highspeed","description":"Lower-latency Kimi Code variant for interactive edits and coding-agent loops","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.9,"output":8,"cache_read":0.38},"canonical_model_id":"moonshotai/kimi-k2.7-code-highspeed"},"cerebras/qwen-3.8-27b":{"id":"cerebras/qwen-3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":40960},"cost":{"input":0.99,"output":1.49},"canonical_model_id":"alibaba/qwen3.8-27b"},"cerebras/gpt-oss-120b":{"id":"cerebras/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":40960},"cost":{"input":0.35,"output":0.75},"canonical_model_id":"openai/gpt-oss-120b"},"minimax/MiniMax-M2.7":{"id":"minimax/MiniMax-M2.7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0.3,"output":1.2,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.7"},"minimax/MiniMax-M3":{"id":"minimax/MiniMax-M3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":512000},"cost":{"input":0.3,"output":1.2,"cache_read":0.06,"tiers":[{"input":0.6,"output":2.4,"cache_read":0.12,"tier":{"type":"context","size":512000}}],"context_over_200k":{"input":0.6,"output":2.4,"cache_read":0.12}},"canonical_model_id":"minimax/MiniMax-M3"},"minimax/MiniMax-M2.7-highspeed":{"id":"minimax/MiniMax-M2.7-highspeed","name":"MiniMax-M2.7-highspeed","description":"Low-latency M2.7 variant for interactive coding plans and agent loops","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0.6,"output":2.4,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.7-highspeed"},"xiaomi-mimo/mimo-v2.6-pro":{"id":"xiaomi-mimo/mimo-v2.6-pro","name":"MiMo-V2.6-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.435,"output":0.87,"cache_read":0.0036},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"xiaomi-mimo/mimo-v2.6-pro-ultraspeed":{"id":"xiaomi-mimo/mimo-v2.6-pro-ultraspeed","name":"MiMo-V2.6-Pro-UltraSpeed","description":"MiMo pro model for strong multimodal reasoning and agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":4.35,"output":8.7,"cache_read":0.036},"canonical_model_id":"xiaomi/mimo-v2.6-pro-ultraspeed"},"xiaomi-mimo/mimo-v2.6-flash":{"id":"xiaomi-mimo/mimo-v2.6-flash","name":"MiMo-V2.6-Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"xai/grok-4.20-0309-non-reasoning":{"id":"xai/grok-4.20-0309-non-reasoning","name":"Grok 4.20 (Non-Reasoning)","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.20-0309-non-reasoning"},"xai/grok-4.5":{"id":"xai/grok-4.5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.3,"tiers":[{"input":4,"output":12,"cache_read":0.6,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":0.6}},"canonical_model_id":"xai/grok-4.5"},"xai/grok-4.3":{"id":"xai/grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.3"},"xai/grok-4.20-0309-reasoning":{"id":"xai/grok-4.20-0309-reasoning","name":"Grok 4.20 (Reasoning)","description":"Reasoning Grok for document-heavy analysis and long-horizon tool use","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.20-0309-reasoning"},"xai/grok-4.7":{"id":"xai/grok-4.7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.7"},"xai/grok-4.6":{"id":"xai/grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.6"},"xai/grok-build-0.1":{"id":"xai/grok-build-0.1","name":"Grok Build 0.1","description":"Fast Grok coding model tuned for agentic engineering and iterative edits","family":"grok-build","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":1,"output":2,"cache_read":0.2,"tiers":[{"input":2,"output":4,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2,"output":4,"cache_read":0.4}},"canonical_model_id":"xai/grok-build-0.1"}}},"anthropic":{"id":"anthropic","env":["ANTHROPIC_API_KEY"],"npm":"@ai-sdk/anthropic","name":"Anthropic","doc":"https://docs.anthropic.com/en/docs/about-claude/models","models":{"claude-sonnet-5-5":{"id":"claude-sonnet-5-5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"claude-fable-5-1":{"id":"claude-fable-5-1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"claude-opus-4-5":{"id":"claude-opus-4-5","name":"Claude Opus 4.5 (latest)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"claude-sonnet-5":{"id":"claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-29","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5}},"claude-fable-5-2":{"id":"claude-fable-5-2","name":"Claude Fable 5.2","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":16,"output":80,"cache_read":0.4,"cache_write":20},"provider":{"body":{"speed":"fast"}}}}},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"claude-sonnet-4-5-20250929":{"id":"claude-sonnet-4-5-20250929","name":"Claude Sonnet 4.5","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75}},"claude-fable-5":{"id":"claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-06-07","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5}},"claude-haiku-4-5-20251001":{"id":"claude-haiku-4-5-20251001","name":"Claude Haiku 4.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25}},"claude-opus-5":{"id":"claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"provider":{"body":{"speed":"fast"},"headers":{"anthropic-beta":"fast-mode-2026-02-01"}}}}},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"claude-opus-4-5-20251101":{"id":"claude-opus-4-5-20251101","name":"Claude Opus 4.5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25}},"claude-opus-4-6":{"id":"claude-opus-4-6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-04","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25}},"claude-opus-4-8":{"id":"claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"provider":{"body":{"speed":"fast"},"headers":{"anthropic-beta":"fast-mode-2026-02-01"}}}}},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25}},"claude-opus-5-5":{"id":"claude-opus-5-5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":8,"output":40,"cache_read":0.4,"cache_write":10},"provider":{"body":{"speed":"fast"},"headers":{"anthropic-beta":"fast-mode-2026-02-01"}}}}},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"claude-sonnet-4-5":{"id":"claude-sonnet-4-5","name":"Claude Sonnet 4.5 (latest)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"claude-haiku-5-5":{"id":"claude-haiku-5-5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75}},"claude-opus-4-7":{"id":"claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-14","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25}},"claude-haiku-4-5":{"id":"claude-haiku-4-5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"}}},"evroc":{"id":"evroc","env":["EVROC_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://models.think.evroc.com/v1","name":"evroc","doc":"https://docs.evroc.com/products/think/overview.html","models":{"evroc/roc":{"id":"evroc/roc","name":"roc","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-01","release_date":"2026-06-06","last_updated":"2026-06-06","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":262144},"cost":{"input":2.875,"output":11.516}},"google/gemma-4-26B-A4B-it":{"id":"google/gemma-4-26B-A4B-it","name":"Gemma 4 26B A4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.144,"output":0.575},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"intfloat/multilingual-e5-large-instruct":{"id":"intfloat/multilingual-e5-large-instruct","type":"embedding","name":"E5 Multi-Lingual Large Embeddings 0.6B","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"text-embedding","attachment":false,"reasoning":false,"tool_call":false,"release_date":"2024-06-01","last_updated":"2024-06-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":512,"output":512},"cost":{"input":0.114,"output":0.114}},"mistralai/Voxtral-Small-24B-2507":{"id":"mistralai/Voxtral-Small-24B-2507","type":"transcription","name":"Voxtral Small 24B","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"voxtral","attachment":true,"reasoning":false,"tool_call":false,"release_date":"2025-03-01","last_updated":"2025-03-01","modalities":{"input":["audio","text"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":32000},"provider":{"npm":"@ai-sdk/openai"}},"mistralai/Mistral-Medium-3.5-128B":{"id":"mistralai/Mistral-Medium-3.5-128B","name":"Mistral Medium 3.5","description":"Balanced Mistral model for enterprise assistants, multilingual work, and tools","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-29","last_updated":"2026-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.725,"output":6.9},"canonical_model_id":"mistral/mistral-medium-2604"},"moonshotai/Kimi-K2.6":{"id":"moonshotai/Kimi-K2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.4375,"output":5.75},"canonical_model_id":"moonshotai/kimi-k2.6"},"openai/whisper-large-v3":{"id":"openai/whisper-large-v3","type":"transcription","name":"Whisper 3 Large","description":"Open Whisper checkpoint for robust multilingual transcription and captioning","family":"whisper","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2023-11-06","last_updated":"2023-11-06","modalities":{"input":["audio"],"output":["text"]},"open_weights":true,"limit":{"context":448,"output":4096},"provider":{"npm":"@ai-sdk/openai"},"cost":{"input":0.0023,"output":0.0023,"output_audio":2.3},"canonical_model_id":"openai/whisper-large-v3"},"openai/whisper-large-v3-turbo":{"id":"openai/whisper-large-v3-turbo","type":"transcription","name":"Whisper Large v3 Turbo","description":"Speech transcription model for accurate audio-to-text and captioning workflows","family":"whisper","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2024-10-01","last_updated":"2024-10-01","modalities":{"input":["audio"],"output":["text"]},"open_weights":true,"limit":{"context":448,"output":448},"provider":{"npm":"@ai-sdk/openai"},"cost":{"input":0.0023,"output":0.0023,"output_audio":2.3},"canonical_model_id":"openai/whisper-large-v3-turbo"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":0.23,"output":0.92},"canonical_model_id":"openai/gpt-oss-120b"},"KBLab/kb-whisper-large":{"id":"KBLab/kb-whisper-large","type":"transcription","name":"KB Whisper","description":"Speech transcription model for accurate audio-to-text and captioning workflows","family":"whisper","attachment":true,"reasoning":false,"tool_call":false,"release_date":"2024-10-01","last_updated":"2024-10-01","modalities":{"input":["audio"],"output":["text"]},"open_weights":true,"limit":{"context":448,"output":448},"provider":{"npm":"@ai-sdk/openai"}},"Qwen/Qwen3-Reranker-4B":{"id":"Qwen/Qwen3-Reranker-4B","type":"reranking","name":"Qwen3 Reranker 4B","description":"Reranking model for improving retrieval quality in search and recommendation systems","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"release_date":"2025-07-30","last_updated":"2025-07-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":4096},"cost":{"input":0.0575,"output":0}},"Qwen/Qwen3.8-27B":{"id":"Qwen/Qwen3.8-27B","name":"Qwen3.8-27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.87,"output":3.5},"canonical_model_id":"alibaba/qwen3.8-27b"},"Qwen/Qwen3-Embedding-8B":{"id":"Qwen/Qwen3-Embedding-8B","type":"embedding","name":"Qwen3 Embedding 8B","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-06-05","last_updated":"2025-06-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":40960,"output":4096},"cost":{"input":0.115,"output":0.115},"canonical_model_id":"alibaba/qwen3-embedding-8b"},"Qwen/Qwen3.6-35B-A3B":{"id":"Qwen/Qwen3.6-35B-A3B","name":"Qwen3.6 35B-A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.345,"output":1.38},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"zai-org/GLM-5.2":{"id":"zai-org/GLM-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":131072},"cost":{"input":1.4375,"output":5.75},"canonical_model_id":"zhipuai/glm-5.2"},"nvidia/Llama-3.3-70B-Instruct-FP8":{"id":"nvidia/Llama-3.3-70B-Instruct-FP8","name":"Llama-3.3-70B-Instruct","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"cost":{"input":1.15,"output":1.15},"canonical_model_id":"meta/llama-3.3-70b-instruct"}}},"databricks":{"id":"databricks","env":["DATABRICKS_HOST","DATABRICKS_TOKEN"],"npm":"@ai-sdk/openai-compatible","api":"https://${DATABRICKS_HOST}/ai-gateway/mlflow/v1","name":"Databricks","doc":"https://docs.databricks.com/aws/en/machine-learning/foundation-models/","models":{"databricks-gemini-3-pro":{"id":"databricks-gemini-3-pro","name":"Gemini 3 Pro Preview","description":"Preview Gemini flagship for complex reasoning, coding, and rich multimodal prompts","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-11-18","last_updated":"2025-11-18","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3-pro-preview"},"databricks-gpt-oss-20b":{"id":"databricks-gpt-oss-20b","name":"GPT OSS 20B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":25000},"cost":{"input":0.07,"output":0.3},"canonical_model_id":"openai/gpt-oss-20b"},"databricks-gpt-5-1":{"id":"databricks-gpt-5-1","name":"GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":2.5,"output":20,"cache_read":0.25},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1"},"databricks-gpt-5-2":{"id":"databricks-gpt-5-2","name":"GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":3.5,"output":28,"cache_read":0.35},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"databricks-gpt-5":{"id":"databricks-gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":2.5,"output":20,"cache_read":0.25},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"databricks-gpt-5-6-sol":{"id":"databricks-gpt-5-6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":8,"output":40,"cache_read":0.8,"cache_write":10},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"databricks-gpt-5-5":{"id":"databricks-gpt-5-5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":12.5,"output":75,"cache_read":1.25},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"databricks-gpt-5-4":{"id":"databricks-gpt-5-4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":5,"output":30,"cache_read":0.5},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":2.5,"output":15,"cache_read":0.25,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5}},"canonical_model_id":"openai/gpt-5.4"},"databricks-gemini-3-1-pro":{"id":"databricks-gemini-3-1-pro","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"experimental":{"modes":{"fast":{"cost":{"input":3.6,"output":21.6,"cache_read":0.36,"input_audio":3.6},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":2,"output":12,"cache_read":0.2,"input_audio":2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"databricks-claude-haiku-4-5":{"id":"databricks-claude-haiku-4-5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"databricks-gemini-3-5-flash":{"id":"databricks-gemini-3-5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"experimental":{"modes":{"fast":{"cost":{"input":2.7,"output":16.2,"cache_read":0.27,"input_audio":2.7},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":1.5,"output":9,"cache_read":0.15,"input_audio":1.5},"canonical_model_id":"google/gemini-3.5-flash"},"databricks-gpt-5-4-mini":{"id":"databricks-gpt-5-4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":1.5,"output":9,"cache_read":0.15},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"databricks-gemini-3-1-flash-lite":{"id":"databricks-gemini-3-1-flash-lite","name":"Gemini 3.1 Flash Lite Preview","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-03-03","last_updated":"2026-03-03","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"experimental":{"modes":{"fast":{"cost":{"input":0.45,"output":2.7,"cache_read":0.045,"input_audio":0.9},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"input_audio":0.5},"canonical_model_id":"google/gemini-3.1-flash-lite-preview"},"databricks-claude-opus-4-7":{"id":"databricks-claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"databricks-glm-5-2":{"id":"databricks-glm-5-2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"experimental":{"modes":{"fast":{"cost":{"input":2.45,"output":7.7,"cache_read":0.455},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"databricks-claude-opus-4-1":{"id":"databricks-claude-opus-4-1","name":"Claude Opus 4.1 (latest)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-1"},"databricks-claude-sonnet-4":{"id":"databricks-claude-sonnet-4","name":"Claude Sonnet 4","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-20250514"},"databricks-claude-sonnet-4-6":{"id":"databricks-claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"databricks-gpt-5-nano":{"id":"databricks-gpt-5-nano","name":"GPT-5 Nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-nano"},"databricks-gpt-5-4-nano":{"id":"databricks-gpt-5-4-nano","name":"GPT-5.4 nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"databricks-gpt-5-mini":{"id":"databricks-gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":0.45,"output":3.6,"cache_read":0.045},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"databricks-gemini-3-flash":{"id":"databricks-gemini-3-flash","name":"Gemini 3 Flash Preview","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"experimental":{"modes":{"fast":{"cost":{"input":0.9,"output":5.4,"cache_read":0.09,"input_audio":1.8},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.5,"output":3,"cache_read":0.05,"input_audio":1},"canonical_model_id":"google/gemini-3-flash-preview"},"databricks-kimi-k2-7-code":{"id":"databricks-kimi-k2-7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"databricks-gemini-2-5-pro":{"id":"databricks-gemini-2-5-pro","name":"Gemini 2.5 Pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":1.25,"output":10,"cache_read":0.125,"tiers":[{"input":2.5,"output":15,"cache_read":0.25,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":15,"cache_read":0.25}},"canonical_model_id":"google/gemini-2.5-pro"},"databricks-claude-opus-4-5":{"id":"databricks-claude-opus-4-5","name":"Claude Opus 4.5 (latest)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"databricks-gpt-5-6-luna":{"id":"databricks-gpt-5-6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":0.4,"output":2.4,"cache_read":0.04,"cache_write":0.5},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"databricks-claude-opus-4-6":{"id":"databricks-claude-opus-4-6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"databricks-gpt-5-6-terra":{"id":"databricks-gpt-5-6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":4,"output":24,"cache_read":0.4,"cache_write":5},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"databricks-claude-sonnet-4-5":{"id":"databricks-claude-sonnet-4-5","name":"Claude Sonnet 4.5 (latest)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"databricks-gemini-2-5-flash":{"id":"databricks-gemini-2-5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":0,"max":24576}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":0.3,"output":2.5,"cache_read":0.03,"input_audio":1},"canonical_model_id":"google/gemini-2.5-flash"},"databricks-gpt-oss-120b":{"id":"databricks-gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":25000},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"openai/gpt-oss-120b"}}},"freemodel":{"id":"freemodel","env":["FREEMODEL_API_KEY"],"npm":"@ai-sdk/anthropic","api":"https://cc.freemodel.dev/v1","name":"FreeModel","doc":"https://freemodel.dev","models":{"gpt-5.5":{"id":"gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://api.freemodel.dev/v1"},"cost":{"input":5,"output":30,"cache_read":0.5,"cache_write":5},"canonical_model_id":"openai/gpt-5.5"},"gpt-5.4-mini":{"id":"gpt-5.4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://api.freemodel.dev/v1"},"cost":{"input":0.75,"output":4.5,"cache_read":0.075,"cache_write":0.75},"canonical_model_id":"openai/gpt-5.4-mini"},"gpt-5.3-codex":{"id":"gpt-5.3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://api.freemodel.dev/v1"},"cost":{"input":1.75,"output":14,"cache_read":0.175,"cache_write":1.75},"canonical_model_id":"openai/gpt-5.3-codex"},"claude-fable-5":{"id":"claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"claude-haiku-4-5-20251001":{"id":"claude-haiku-4-5-20251001","name":"Claude Haiku 4.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://api.freemodel.dev/v1"},"cost":{"input":2.5,"output":15,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"openai/gpt-5.4"},"claude-opus-4-6":{"id":"claude-opus-4-6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"claude-opus-4-8":{"id":"claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"claude-opus-4-7":{"id":"claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"}}},"azure-cognitive-services":{"id":"azure-cognitive-services","env":["AZURE_COGNITIVE_SERVICES_RESOURCE_NAME","AZURE_COGNITIVE_SERVICES_API_KEY"],"npm":"@ai-sdk/azure","name":"Azure Cognitive Services","doc":"https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models","models":{"grok-4-1-fast-non-reasoning":{"id":"grok-4-1-fast-non-reasoning","name":"Grok 4.1 Fast (Non-Reasoning)","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-06-27","last_updated":"2025-06-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":128000,"output":8192},"provider":{"shape":"completions"},"cost":{"input":0.2,"output":0.5,"cache_read":0.05}},"gpt-5.5":{"id":"gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":12.5,"output":75,"cache_read":1.25},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"gpt-3.5-turbo-1106":{"id":"gpt-3.5-turbo-1106","name":"GPT-3.5 Turbo 1106","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2021-08","release_date":"2023-11-06","last_updated":"2023-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":16384,"output":4096},"status":"deprecated","provider":{"shape":"completions"},"cost":{"input":1,"output":2}},"text-embedding-ada-002":{"id":"text-embedding-ada-002","type":"embedding","name":"text-embedding-ada-002","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"text-embedding","attachment":false,"reasoning":false,"tool_call":false,"release_date":"2022-12-15","last_updated":"2022-12-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":1536},"cost":{"input":0.1,"output":0}},"claude-sonnet-5-5":{"id":"claude-sonnet-5-5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"cohere-embed-v-4-0":{"id":"cohere-embed-v-4-0","type":"embedding","name":"Embed v4","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"cohere-embed","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-04-15","last_updated":"2025-04-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":1536},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/models"},"cost":{"input":0.12,"output":0}},"claude-fable-5-1":{"id":"claude-fable-5-1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"codex-mini":{"id":"codex-mini","name":"Codex Mini","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-04","release_date":"2025-05-16","last_updated":"2025-05-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"status":"deprecated","cost":{"input":1.5,"output":6,"cache_read":0.375}},"gpt-4.1-nano":{"id":"gpt-4.1-nano","name":"GPT-4.1 nano","description":"Tiny GPT-4.1 option for classification, routing, and very high-volume tasks","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"status":"deprecated","cost":{"input":0.1,"output":0.4,"cache_read":0.025},"canonical_model_id":"openai/gpt-4.1-nano"},"gpt-4-turbo-vision":{"id":"gpt-4-turbo-vision","name":"GPT-4 Turbo Vision","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-11","release_date":"2023-11-06","last_updated":"2024-04-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"status":"deprecated","provider":{"shape":"completions"},"cost":{"input":10,"output":30}},"gpt-3.5-turbo-instruct":{"id":"gpt-3.5-turbo-instruct","name":"GPT-3.5 Turbo Instruct","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2021-08","release_date":"2023-09-21","last_updated":"2023-09-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":4096,"output":4096},"status":"deprecated","cost":{"input":1.5,"output":2}},"claude-opus-4-5":{"id":"claude-opus-4-5","name":"Claude Opus 4.5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-11-24","last_updated":"2025-08-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25}},"gpt-5.2":{"id":"gpt-5.2","name":"GPT-5.2","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":3.5,"output":28,"cache_read":0.35},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":1.75,"output":14,"cache_read":0.175}},"o1":{"id":"o1","name":"o1","description":"O-series reasoning model for hard analysis, math, coding, and planning","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2023-09","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"status":"deprecated","cost":{"input":15,"output":60,"cache_read":7.5}},"gpt-4.1-mini":{"id":"gpt-4.1-mini","name":"GPT-4.1 mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"status":"deprecated","cost":{"input":0.4,"output":1.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-4.1-mini"},"o4-mini":{"id":"o4-mini","name":"o4-mini","description":"Fast o-series model for compact reasoning, coding, and tool use","family":"o-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"status":"deprecated","cost":{"input":1.1,"output":4.4,"cache_read":0.275},"canonical_model_id":"openai/o4-mini"},"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/models"},"cost":{"input":0.95,"output":4},"canonical_model_id":"moonshotai/kimi-k2.6"},"gpt-5.2-codex":{"id":"gpt-5.2-codex","name":"GPT-5.2 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-01-14","last_updated":"2026-01-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175}},"gpt-5.4-mini":{"id":"gpt-5.4-mini","name":"GPT-5.4 Mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":1.5,"output":9,"cache_read":0.15},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"model-router":{"id":"model-router","name":"Model Router","description":"Automatic model router for matching prompts to suitable backends and budgets","family":"model-router","attachment":true,"reasoning":false,"tool_call":true,"release_date":"2025-05-19","last_updated":"2025-11-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":16384},"provider":{"npm":"@ai-sdk/azure","shape":"completions"},"cost":{"input":0.14,"output":0}},"phi-4-mini":{"id":"phi-4-mini","name":"Phi-4-mini","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"phi","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-10","release_date":"2024-12-11","last_updated":"2024-12-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"provider":{"shape":"completions"},"cost":{"input":0.075,"output":0.3}},"mistral-medium-2505":{"id":"mistral-medium-2505","name":"Mistral Medium 3","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-05-07","last_updated":"2025-05-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":128000},"provider":{"shape":"completions"},"cost":{"input":0.4,"output":2}},"grok-4-20-reasoning":{"id":"grok-4-20-reasoning","name":"Grok 4.20 (Reasoning)","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-04-08","last_updated":"2026-04-08","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262000,"output":8192},"status":"beta","provider":{"shape":"completions"},"cost":{"input":2,"output":6}},"mistral-small-2503":{"id":"mistral-small-2503","name":"Mistral Small 3.1","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-09","release_date":"2025-03-01","last_updated":"2025-03-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32768},"provider":{"shape":"completions"},"cost":{"input":0.1,"output":0.3}},"gpt-image-2.5-flare":{"id":"gpt-image-2.5-flare","type":"image","name":"GPT Image 2.5 Flare","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-09-08","last_updated":"2026-09-08","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":5,"output":30,"cache_read":1.25},"canonical_model_id":"openai/gpt-image-2.5-flare"},"text-embedding-3-large":{"id":"text-embedding-3-large","type":"embedding","name":"text-embedding-3-large","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"text-embedding","attachment":false,"reasoning":false,"tool_call":false,"release_date":"2024-01-25","last_updated":"2024-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":3072},"cost":{"input":0.13,"output":0}},"gpt-5":{"id":"gpt-5","name":"GPT-5","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125}},"gpt-5.1-codex-max":{"id":"gpt-5.1-codex-max","name":"GPT-5.1 Codex Max","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1-codex-max"},"gpt-5.1-codex":{"id":"gpt-5.1-codex","name":"GPT-5.1 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-14","last_updated":"2025-11-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125}},"gpt-chat-latest":{"id":"gpt-chat-latest","name":"GPT Chat Latest","description":"Compact GPT model for low-latency assistance and high-volume workloads","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-05-05","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"beta","cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"openai/gpt-5.5-instant"},"cohere-command-a":{"id":"cohere-command-a","name":"Command A","description":"Cohere command model for multilingual enterprise agents, tools, and chat","family":"command-a","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2025-03-13","last_updated":"2025-03-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"provider":{"shape":"completions"},"cost":{"input":2.5,"output":10}},"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":8,"output":40,"cache_read":0.8,"cache_write":10},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"claude-sonnet-5":{"id":"claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"gpt-6.1-terra":{"id":"gpt-6.1-terra","name":"GPT-6.1 Terra","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25,"tiers":[{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5}},"canonical_model_id":"openai/gpt-6.1-terra"},"gpt-4.1":{"id":"gpt-4.1","name":"GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"status":"deprecated","cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"o3":{"id":"o3","name":"o3","description":"Deliberate o-series reasoner for hard math, coding, and multi-step analysis","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/o3"},"claude-fable-5-2":{"id":"claude-fable-5-2","name":"Claude Fable 5.2","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"gpt-6-luna":{"id":"gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"grok-4.7":{"id":"grok-4.7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"status":"beta","provider":{"shape":"completions"},"canonical_model_id":"xai/grok-4.7"},"llama-4-scout-17b-16e-instruct":{"id":"llama-4-scout-17b-16e-instruct","name":"Llama 4 Scout 17B 16E Instruct","description":"Open multimodal Llama model for long-context analysis and efficient agents","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"provider":{"shape":"completions"},"cost":{"input":0.2,"output":0.78}},"kimi-k2.5":{"id":"kimi-k2.5","name":"Kimi K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/models"},"cost":{"input":0.6,"output":3},"canonical_model_id":"moonshotai/kimi-k2.5"},"gpt-image-2":{"id":"gpt-image-2","type":"image","name":"GPT-Image-2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-21","last_updated":"2026-04-21","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":5,"output":30,"cache_read":1.25},"canonical_model_id":"openai/gpt-image-2"},"phi-4-multimodal":{"id":"phi-4-multimodal","name":"Phi-4-multimodal","description":"Multimodal model for analyzing text, images, documents, and rich media","family":"phi","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2023-10","release_date":"2024-12-11","last_updated":"2024-12-11","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"provider":{"shape":"completions"},"cost":{"input":0.08,"output":0.32,"input_audio":4}},"text-embedding-3-small":{"id":"text-embedding-3-small","type":"embedding","name":"text-embedding-3-small","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"text-embedding","attachment":false,"reasoning":false,"tool_call":false,"release_date":"2024-01-25","last_updated":"2024-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":1536},"cost":{"input":0.02,"output":0}},"o3-mini":{"id":"o3-mini","name":"o3-mini","description":"Smaller o-series reasoner for economical coding, math, and planning tasks","family":"o-mini","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-05","release_date":"2024-12-20","last_updated":"2025-01-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"status":"deprecated","cost":{"input":1.1,"output":4.4,"cache_read":0.55},"canonical_model_id":"openai/o3-mini"},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek-V4.1-Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"status":"beta","provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/models"},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek-V4-Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/models"},"cost":{"input":1.74,"output":3.48},"canonical_model_id":"deepseek/deepseek-v4-pro"},"gpt-5-pro":{"id":"gpt-5-pro","name":"GPT-5 Pro","description":"Higher-accuracy GPT-5 tier for tough analysis, coding reviews, and planning","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":15,"output":120},"canonical_model_id":"openai/gpt-5-pro"},"gpt-6-sol":{"id":"gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"phi-4":{"id":"phi-4","name":"Phi-4","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","family":"phi","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2023-10","release_date":"2024-12-11","last_updated":"2024-12-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"provider":{"shape":"completions"},"cost":{"input":0.125,"output":0.5}},"gpt-image-1.5":{"id":"gpt-image-1.5","type":"image","name":"GPT-Image-1.5","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-11-25","last_updated":"2025-11-25","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":5,"output":32,"cache_read":1.25},"canonical_model_id":"openai/gpt-image-1.5"},"gpt-5.3-codex":{"id":"gpt-5.3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-02-24","last_updated":"2026-02-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175}},"claude-mythos-5":{"id":"claude-mythos-5","name":"Claude Mythos 5","description":"Restricted Claude model for advanced cybersecurity and biology research workflows","family":"claude-mythos","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"status":"beta","provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-mythos-5"},"phi-4-reasoning":{"id":"phi-4-reasoning","name":"Phi-4-reasoning","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"phi","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"knowledge":"2023-10","release_date":"2024-12-11","last_updated":"2024-12-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":4096},"provider":{"shape":"completions"},"cost":{"input":0.125,"output":0.5}},"claude-fable-5":{"id":"claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"status":"beta","provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"grok-4-1-fast-reasoning":{"id":"grok-4-1-fast-reasoning","name":"Grok 4.1 Fast (Reasoning)","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-06-27","last_updated":"2025-06-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":128000,"output":8192},"provider":{"shape":"completions"},"cost":{"input":0.2,"output":0.5,"cache_read":0.05}},"gpt-6-astra":{"id":"gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/models"},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"gpt-5.1":{"id":"gpt-5.1","name":"GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-14","last_updated":"2025-11-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":2.5,"output":20,"cache_read":0.25},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":1.25,"output":10,"cache_read":0.125}},"gpt-5-mini":{"id":"gpt-5-mini","name":"GPT-5 Mini","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025}},"gpt-5.1-codex-mini":{"id":"gpt-5.1-codex-mini","name":"GPT-5.1 Codex Mini","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-14","last_updated":"2025-11-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025}},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek-V4-Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/models"},"cost":{"input":0.19,"output":0.51},"canonical_model_id":"deepseek/deepseek-v4-flash"},"llama-3.3-70b-instruct":{"id":"llama-3.3-70b-instruct","name":"Llama-3.3-70B-Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"provider":{"shape":"completions"},"cost":{"input":0.71,"output":0.71}},"claude-opus-5":{"id":"claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"grok-4-20-non-reasoning":{"id":"grok-4-20-non-reasoning","name":"Grok 4.20 (Non-Reasoning)","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-04-08","last_updated":"2026-04-08","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262000,"output":8192},"status":"beta","provider":{"shape":"completions"},"cost":{"input":2,"output":6}},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"ministral-3b":{"id":"ministral-3b","name":"Ministral 3B","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-03","release_date":"2024-10-22","last_updated":"2024-10-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"provider":{"shape":"completions"},"cost":{"input":0.04,"output":0.04}},"cohere-embed-v3-english":{"id":"cohere-embed-v3-english","type":"embedding","name":"Embed v3 English","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"cohere-embed","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2023-11-07","last_updated":"2023-11-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":512,"output":1024},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/models"},"cost":{"input":0.1,"output":0}},"gpt-6.1-sol":{"id":"gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-sol"},"gpt-5.4-pro":{"id":"gpt-5.4-pro","name":"GPT-5.4 Pro","description":"More exact GPT-5.4 tier for demanding professional reasoning and agent tasks","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.4-pro"},"phi-4-reasoning-plus":{"id":"phi-4-reasoning-plus","name":"Phi-4-reasoning-plus","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"phi","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"knowledge":"2023-10","release_date":"2024-12-11","last_updated":"2024-12-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":4096},"provider":{"shape":"completions"},"cost":{"input":0.125,"output":0.5}},"gpt-5-nano":{"id":"gpt-5-nano","name":"GPT-5 Nano","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.05,"output":0.4,"cache_read":0.005}},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":5,"output":30,"cache_read":0.5},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":2.5,"output":15,"cache_read":0.25,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5}},"canonical_model_id":"openai/gpt-5.4"},"gpt-image-2.5-sunburst":{"id":"gpt-image-2.5-sunburst","type":"image","name":"GPT Image 2.5 Sunburst","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-09-08","last_updated":"2026-09-08","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":5,"output":30,"cache_read":1.25},"canonical_model_id":"openai/gpt-image-2.5-sunburst"},"claude-opus-4-6":{"id":"claude-opus-4-6","name":"Claude Opus 4.6","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-07-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25,"tiers":[{"input":10,"output":37.5,"cache_read":1,"cache_write":12.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":10,"output":37.5,"cache_read":1,"cache_write":12.5}}},"gpt-4-turbo":{"id":"gpt-4-turbo","name":"GPT-4 Turbo","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2023-11-06","last_updated":"2024-04-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"status":"deprecated","provider":{"shape":"completions"},"cost":{"input":10,"output":30},"canonical_model_id":"openai/gpt-4-turbo"},"gpt-5.4-nano":{"id":"gpt-5.4-nano","name":"GPT-5.4 Nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"grok-4.6":{"id":"grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":128000},"status":"beta","provider":{"shape":"completions"},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.6"},"phi-4-mini-reasoning":{"id":"phi-4-mini-reasoning","name":"Phi-4-mini-reasoning","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"phi","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2023-10","release_date":"2024-12-11","last_updated":"2024-12-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"provider":{"shape":"completions"},"cost":{"input":0.075,"output":0.3}},"gpt-4o":{"id":"gpt-4o","name":"GPT-4o","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"status":"deprecated","cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o"},"claude-opus-4-8":{"id":"claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-31","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25,"tiers":[{"input":10,"output":37.5,"cache_read":1,"cache_write":12.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":10,"output":37.5,"cache_read":1,"cache_write":12.5}},"canonical_model_id":"anthropic/claude-opus-4-8"},"gpt-5-codex":{"id":"gpt-5-codex","name":"GPT-5-Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-09-15","last_updated":"2025-09-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125}},"deepseek-v3.2":{"id":"deepseek-v3.2","name":"DeepSeek-V3.2","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"provider":{"shape":"completions"},"cost":{"input":0.58,"output":1.68}},"gpt-5.6-terra":{"id":"gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":4,"output":24,"cache_read":0.4,"cache_write":5},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"cohere-embed-v3-multilingual":{"id":"cohere-embed-v3-multilingual","type":"embedding","name":"Embed v3 Multilingual","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"cohere-embed","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2023-11-07","last_updated":"2023-11-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":512,"output":1024},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/models"},"cost":{"input":0.1,"output":0}},"gpt-3.5-turbo-0125":{"id":"gpt-3.5-turbo-0125","name":"GPT-3.5 Turbo 0125","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2021-08","release_date":"2024-01-25","last_updated":"2024-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":16384,"output":4096},"status":"deprecated","provider":{"shape":"completions"},"cost":{"input":0.5,"output":1.5}},"claude-opus-5-5":{"id":"claude-opus-5-5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"claude-sonnet-4-5":{"id":"claude-sonnet-4-5","name":"Claude Sonnet 4.5","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-11-18","last_updated":"2025-11-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75}},"codestral-2501":{"id":"codestral-2501","name":"Codestral 25.01","description":"Mistral coding model for code completion, generation, and developer workflows","family":"codestral","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-03","release_date":"2025-01-01","last_updated":"2025-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"provider":{"shape":"completions"},"cost":{"input":0.3,"output":0.9}},"gpt-4o-mini":{"id":"gpt-4o-mini","name":"GPT-4o mini","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"status":"deprecated","cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-4o-mini"},"gpt-image-1":{"id":"gpt-image-1","type":"image","name":"GPT-Image-1","description":"OpenAI image model for production generation, edits, and brand-safe visual workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-04-24","last_updated":"2025-04-24","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":5,"output":40,"cache_read":1.25},"canonical_model_id":"openai/gpt-image-1"},"deepseek-v3.2-speciale":{"id":"deepseek-v3.2-speciale","name":"DeepSeek-V3.2-Speciale","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"provider":{"shape":"completions"},"cost":{"input":0.58,"output":1.68}},"claude-haiku-5-5":{"id":"claude-haiku-5-5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"llama-4-maverick-17b-128e-instruct-fp8":{"id":"llama-4-maverick-17b-128e-instruct-fp8","name":"Llama 4 Maverick 17B 128E Instruct FP8","description":"Open multimodal Llama model for strong reasoning and fast responses","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":16384},"provider":{"shape":"completions"},"cost":{"input":0.25,"output":1}},"claude-opus-4-7":{"id":"claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"claude-haiku-4-5":{"id":"claude-haiku-4-5","name":"Claude Haiku 4.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-11-18","last_updated":"2025-11-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_COGNITIVE_SERVICES_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25}}}},"baseten":{"id":"baseten","env":["BASETEN_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://inference.baseten.co/v1","name":"Baseten","doc":"https://docs.baseten.co/inference/model-apis/overview","models":{"deepseek-ai/DeepSeek-V4.1-Flash-1017":{"id":"deepseek-ai/DeepSeek-V4.1-Flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":262144},"cost":{"input":0.3,"output":1.2,"cache_read":0.007},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"deepseek-ai/DeepSeek-V4-Flash-0731":{"id":"deepseek-ai/DeepSeek-V4-Flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.13,"output":0.26,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepseek-ai/DeepSeek-V4.1-Flash-1017-Fast":{"id":"deepseek-ai/DeepSeek-V4.1-Flash-1017-Fast","name":"DeepSeek V4.1 Flash 1017 Fast","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":262144},"cost":{"input":0.6,"output":2.4,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"deepseek-ai/DeepSeek-V4.1-Flash-Fast":{"id":"deepseek-ai/DeepSeek-V4.1-Flash-Fast","name":"DeepSeek V4.1 Flash Fast","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":32768},"cost":{"input":0.6,"output":2.4,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek-ai/DeepSeek-V4.1-Flash":{"id":"deepseek-ai/DeepSeek-V4.1-Flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":32768},"cost":{"input":0.3,"output":1.2,"cache_read":0.007},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek-ai/DeepSeek-V4-Pro-0813":{"id":"deepseek-ai/DeepSeek-V4-Pro-0813","name":"DeepSeek V4 Pro 0813","description":"Flagship DeepSeek model for coding, reasoning, and agentic work","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":262144},"cost":{"input":1.32,"output":3.96,"cache_read":0.132},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"moonshotai/Kimi-K3":{"id":"moonshotai/Kimi-K3","name":"Kimi K3","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":262144},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"moonshotai/Kimi-K3.1-Pro":{"id":"moonshotai/Kimi-K3.1-Pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":262144},"cost":{"input":2,"output":10,"cache_read":0.2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"OpenAI GPT 120B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128072,"output":128072},"cost":{"input":0.1,"output":0.5,"cache_read":0.1},"canonical_model_id":"openai/gpt-oss-120b"},"zai-org/GLM-5.3-Flash":{"id":"zai-org/GLM-5.3-Flash","name":"GLM 5.3 Flash","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai-org/GLM-5.2":{"id":"zai-org/GLM-5.2","name":"GLM 5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":262144},"cost":{"input":1.4,"output":4.4,"cache_read":0.14},"canonical_model_id":"zhipuai/glm-5.2"},"zai-org/GLM-5.2-Fast":{"id":"zai-org/GLM-5.2-Fast","name":"GLM 5.2 Fast","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":262144},"cost":{"input":2.1,"output":6.6,"cache_read":0.21},"canonical_model_id":"zhipuai/glm-5.2"},"zai-org/GLM-5.3":{"id":"zai-org/GLM-5.3","name":"GLM 5.3","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":262144},"cost":{"input":1.4,"output":4.4,"cache_read":0.14},"canonical_model_id":"zhipuai/glm-5.3"},"zai-org/GLM-5.3-Fast":{"id":"zai-org/GLM-5.3-Fast","name":"GLM 5.3 Fast","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":262144},"cost":{"input":2.1,"output":6.6,"cache_read":0.21},"canonical_model_id":"zhipuai/glm-5.3"},"nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B":{"id":"nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B","name":"Nemotron 3 Ultra","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202800,"output":202800},"cost":{"input":0.6,"output":2.4,"cache_read":0.12},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"}}},"opencode":{"id":"opencode","env":["OPENCODE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://opencode.ai/inference/openai/v1","name":"OpenCode","doc":"https://opencode.ai/v2/docs/console/models/","models":{"trinity-large-preview-free":{"id":"trinity-large-preview-free","name":"Trinity Large Preview","description":"Legacy model retained for compatibility with older integrations","family":"trinity","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-01-27","last_updated":"2026-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0},"canonical_model_id":"arcee-ai/trinity-large-preview"},"qwen3.6-plus":{"id":"qwen3.6-plus","name":"Qwen3.6 Plus","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":0.5,"output":3,"cache_read":0.05,"cache_write":0.625},"canonical_model_id":"alibaba/qwen3.6-plus"},"gpt-5.5":{"id":"gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"muse-spark-1.3":{"id":"muse-spark-1.3","name":"Muse Spark 1.3","description":"Muse Spark 1.3 is a multimodal reasoning model from Meta for long-running agentic, multi-agent, and coding workflows. It improves long-horizon agent collaboration, instruction following, and coding efficiency relative to Muse Spark 1.2.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.3"},"deepseek-v4-flash-free":{"id":"deepseek-v4-flash-free","name":"DeepSeek V4 Flash Free","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"mimo-v2.5-free":{"id":"mimo-v2.5-free","name":"MiMo V2.5 Free","description":"MiMo omni model for text, image, video, audio, and agents","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":32000},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"xiaomi/mimo-v2.5"},"claude-sonnet-5-5":{"id":"claude-sonnet-5-5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"claude-fable-5-1":{"id":"claude-fable-5-1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"gemini-3.8-flash":{"id":"gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"provider":{"npm":"@ai-sdk/google","api":"https://opencode.ai/inference/google/v1beta"},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"input_audio":0.75},"canonical_model_id":"google/gemini-3.8-flash"},"glm-5.3-flash-free":{"id":"glm-5.3-flash-free","name":"GLM-5.3-Flash Free","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":32000},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"zhipuai/glm-5.3-flash"},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"mimo-v2-omni-free":{"id":"mimo-v2-omni-free","name":"MiMo V2 Omni Free","description":"Legacy model retained for compatibility with older integrations","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text","image","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":64000},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"xiaomi/mimo-v2-omni"},"claude-opus-4-5":{"id":"claude-opus-4-5","name":"Claude Opus 4.5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"gpt-5.2":{"id":"gpt-5.2","name":"GPT-5.2","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"gemini-4-carbon":{"id":"gemini-4-carbon","name":"Gemini 4 Carbon","description":"Google's most capable reasoning model for complex software engineering, deep math and science, high factual accuracy, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"provider":{"npm":"@ai-sdk/google","api":"https://opencode.ai/inference/google/v1beta"},"cost":{"input":2,"output":10,"cache_read":0.1,"input_audio":2},"canonical_model_id":"google/gemini-4-carbon"},"grok-4.5":{"id":"grok-4.5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":2,"output":6,"cache_read":0.3,"tiers":[{"input":4,"output":12,"cache_read":0.6,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":0.6}},"canonical_model_id":"xai/grok-4.5"},"fledge-alpha-free":{"id":"fledge-alpha-free","name":"Fledge Alpha Free","description":"Free-tier preview reasoning model with text and image input and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-10-01","last_updated":"2026-10-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0}},"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.95,"output":4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"pulse-alpha-free":{"id":"pulse-alpha-free","name":"Pulse Alpha Free","description":"Stealth reasoning model with text and image input and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-11-02","last_updated":"2026-11-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0}},"gpt-5.2-codex":{"id":"gpt-5.2-codex","name":"GPT-5.2 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2-codex"},"ling-3.0-tiny-free":{"id":"ling-3.0-tiny-free","name":"Ling-3.0-tiny Free","description":"Compact MoE model for responsive agents, instruction following, and multi-turn conversations","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-06","last_updated":"2026-08-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0}},"gpt-5.4-mini":{"id":"gpt-5.4-mini","name":"GPT-5.4 Mini","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"muse-spark-1.3-contributor-free":{"id":"muse-spark-1.3-contributor-free","name":"Muse Spark 1.3 Free","description":"Muse Spark 1.3 is a multimodal reasoning model from Meta for coding and agentic workflows.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"status":"deprecated","provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"meta/muse-spark-1.3"},"nemotron-3.5-super-vl-free":{"id":"nemotron-3.5-super-vl-free","name":"Nemotron 3.5 Super VL Free","description":"NVIDIA vision-language reasoning model for text, image, and video understanding and agentic tool use","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"nvidia/nemotron-3.5-super-vl-120b-a12b"},"minimax-m2.1":{"id":"minimax-m2.1","name":"MiniMax-M2.1","description":"Legacy model retained for compatibility with older integrations","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-01","release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.3,"output":1.2,"cache_read":0.1},"canonical_model_id":"minimax/MiniMax-M2.1"},"ling-3.1-flash-free":{"id":"ling-3.1-flash-free","name":"Ling 3.1 Flash Free","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"inclusionai/ling-3.1-flash"},"muse-spark-1.2-contributor-free":{"id":"muse-spark-1.2-contributor-free","name":"Muse Spark 1.2 Free","description":"Muse Spark 1.2 is a coding-focused update to Muse Spark 1.1 with improvements in code generation, complex debugging, codebase understanding, and end-to-end developer workflows.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"status":"deprecated","provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"meta/muse-spark-1.2"},"ling-2.6-flash-free":{"id":"ling-2.6-flash-free","name":"Ling 2.6 Flash Free","description":"Legacy model retained for compatibility with older integrations","family":"ling-flash-free","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-04-21","last_updated":"2026-04-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262100,"output":32800},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0}},"deepseek-v4.1-flash-free":{"id":"deepseek-v4.1-flash-free","name":"DeepSeek V4.1 Flash Free","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":32000},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"gpt-5":{"id":"gpt-5","name":"GPT-5","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":1.07,"output":8.5,"cache_read":0.107},"canonical_model_id":"openai/gpt-5"},"ling-3.0-flash-fin-free":{"id":"ling-3.0-flash-fin-free","name":"Ling 3.0 Flash Fin Free","description":"Finance-enhanced model for financial research, multi-step investment workflows, and long-horizon planning and execution","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-27","last_updated":"2026-09-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"inclusionai/ling-3.0-flash-fin"},"longcat-2.0-free":{"id":"longcat-2.0-free","name":"LongCat-2.0 Free","description":"Meituan LongCat-2.0, a reasoning model with tool calling and a 1M-token context window","family":"longcat","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"meituan/longcat-2.0"},"gpt-5.1-codex-max":{"id":"gpt-5.1-codex-max","name":"GPT-5.1 Codex Max","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1-codex-max"},"qwen3-coder":{"id":"qwen3-coder","name":"Qwen3 Coder","description":"Legacy model retained for compatibility with older integrations","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.45,"output":1.8},"canonical_model_id":"alibaba/qwen3-coder-480b-a35b-instruct"},"nemotron-3-super-free":{"id":"nemotron-3-super-free","name":"Nemotron 3 Super Free","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":128000},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"},"gpt-5.1-codex":{"id":"gpt-5.1-codex","name":"GPT-5.1 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":1.07,"output":8.5,"cache_read":0.107},"canonical_model_id":"openai/gpt-5.1-codex"},"cat-jam-free":{"id":"cat-jam-free","name":"Cat Jam Free","description":"A text-only reasoning model for coding and agentic workflows, with tool calling and structured JSON outputs.","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-10-12","last_updated":"2026-10-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0}},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3},"canonical_model_id":"moonshotai/kimi-k3"},"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"gemini-3.5-flash":{"id":"gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"provider":{"npm":"@ai-sdk/google","api":"https://opencode.ai/inference/google/v1beta"},"cost":{"input":1.5,"output":9,"cache_read":0.15,"input_audio":1.5},"canonical_model_id":"google/gemini-3.5-flash"},"claude-sonnet-5":{"id":"claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"claude-fable-5-2":{"id":"claude-fable-5-2","name":"Claude Fable 5.2","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"gemini-3.6-flash":{"id":"gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"provider":{"npm":"@ai-sdk/google","api":"https://opencode.ai/inference/google/v1beta"},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"input_audio":0.75},"canonical_model_id":"google/gemini-3.6-flash"},"exo-free":{"id":"exo-free","name":"Exo Free","description":"Free-tier preview reasoning model with text and image input and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"temperature":false,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0}},"ll-alpha-free":{"id":"ll-alpha-free","name":"LL Alpha Free","description":"Best in class local model","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-06","release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0}},"gpt-6-luna":{"id":"gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"grok-4.7":{"id":"grok-4.7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.7"},"nemotron-3.5-lightning-free":{"id":"nemotron-3.5-lightning-free","name":"Nemotron 3.5 Lightning Free","description":"Fast NVIDIA Nemotron MoE for reliable agentic tasks across enterprise workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"nvidia/nemotron-3.5-lightning"},"minimax-m3-free":{"id":"minimax-m3-free","name":"MiniMax-M3 Free","description":"Legacy model retained for compatibility with older integrations","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":32000},"status":"deprecated","provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"minimax/MiniMax-M3"},"qwen3.8-flash":{"id":"qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":0.15,"output":0.47,"cache_read":0.016,"cache_write":0.2},"canonical_model_id":"alibaba/qwen3.8-flash"},"glm-5.1":{"id":"glm-5.1","name":"GLM-5.1","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.1"},"glm-4.7-free":{"id":"glm-4.7-free","name":"GLM-4.7 Free","description":"Legacy model retained for compatibility with older integrations","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"zhipuai/glm-4.7"},"kimi-k2.5":{"id":"kimi-k2.5","name":"Kimi K2.5","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.6,"output":3,"cache_read":0.1},"canonical_model_id":"moonshotai/kimi-k2.5"},"x-preview-f-free":{"id":"x-preview-f-free","name":"Ox Alpha Free (Unlimited)","description":"Stealth reasoning model for coding, agentic tasks, and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-21","last_updated":"2026-08-21","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0}},"beam-free":{"id":"beam-free","name":"Beam Free","description":"Sparse mixture-of-experts reasoning model with 23B active parameters for coding and agentic workflows","family":"beam","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-06-30","release_date":"2026-10-05","last_updated":"2026-10-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"reflection/beam-1.0-501b-a23b"},"grok-code":{"id":"grok-code","name":"Grok Code Fast 1","description":"Legacy model retained for compatibility with older integrations","family":"grok","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-09-02","last_updated":"2025-09-02","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"xai/grok-code-fast-1"},"minimax-m2.5":{"id":"minimax-m2.5","name":"MiniMax-M2.5","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-01","release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M2.5"},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"north-mini-code-free":{"id":"north-mini-code-free","name":"North Mini Code Free","description":"Cohere coding model for practical software engineering and agentic edits","family":"north","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-09-23","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":64000},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0},"canonical_model_id":"cohere/north-mini-code-1-0"},"gpt-5.3-codex-spark":{"id":"gpt-5.3-codex-spark","name":"GPT-5.3 Codex Spark","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex-spark","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":128000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex-spark"},"claude-3-5-haiku":{"id":"claude-3-5-haiku","name":"Claude Haiku 3.5","description":"Legacy model retained for compatibility with older integrations","family":"claude-haiku","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-07-31","release_date":"2024-10-22","last_updated":"2024-10-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8192},"status":"deprecated","provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":0.8,"output":4,"cache_read":0.08,"cache_write":1},"canonical_model_id":"anthropic/claude-3-5-haiku-20241022"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":1.74,"output":3.48,"cache_read":0.145},"canonical_model_id":"deepseek/deepseek-v4-pro"},"hy3-preview-free":{"id":"hy3-preview-free","name":"Hy3 preview Free","description":"Legacy model retained for compatibility with older integrations","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":64000},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"tencent/hy3-preview"},"deepseek-v4-flash-vision-exp":{"id":"deepseek-v4-flash-vision-exp","name":"DeepSeek V4 Flash Vision Exp","description":"Experimental multimodal DeepSeek V4 Flash model for image understanding, coding, and agentic work","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-21","last_updated":"2026-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.14,"output":0.28,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash-vision-exp"},"glm-4.7":{"id":"glm-4.7","name":"GLM-4.7","description":"Legacy model retained for compatibility with older integrations","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.6,"output":2.2,"cache_read":0.1},"canonical_model_id":"zhipuai/glm-4.7"},"gpt-6-sol":{"id":"gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"mimo-v2-flash-free":{"id":"mimo-v2-flash-free","name":"MiMo V2 Flash Free","description":"Legacy model retained for compatibility with older integrations","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12-01","release_date":"2025-12-16","last_updated":"2026-02-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"xiaomi/mimo-v2-flash"},"inkling-2-small-free":{"id":"inkling-2-small-free","name":"Inkling 2 Small Free","description":"Inkling 2 Small, free for a limited time","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-11-05","last_updated":"2026-11-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"thinkingmachines/inkling-2-small"},"hy3-free":{"id":"hy3-free","name":"Hy3 Free","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":190000,"input":192000,"output":64000},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"tencent/hy3"},"gemini-4-argon":{"id":"gemini-4-argon","name":"Gemini 4 Argon","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"provider":{"npm":"@ai-sdk/google","api":"https://opencode.ai/inference/google/v1beta"},"cost":{"input":2,"output":10,"cache_read":0.1,"input_audio":2},"canonical_model_id":"google/gemini-4-argon"},"muse-wonder-1.0":{"id":"muse-wonder-1.0","name":"Muse Wonder","description":"Muse Wonder is a frontier multimodal reasoning model from Meta for personal and professional agents, long-horizon coding, and computer use. It combines Active Memory, which carries relevant context across conversations, with Active Focus, which keeps it working through blockers toward a goal.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-12","last_updated":"2026-10-12","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":4,"output":20,"cache_read":0.2},"canonical_model_id":"meta/muse-wonder-1.0"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"gpt-5.3-codex":{"id":"gpt-5.3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"claude-fable-5":{"id":"claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"gemini-3-pro":{"id":"gemini-3-pro","name":"Gemini 3 Pro","description":"Legacy model retained for compatibility with older integrations","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-11-18","last_updated":"2025-11-18","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","provider":{"npm":"@ai-sdk/google","api":"https://opencode.ai/inference/google/v1beta"},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3-pro-preview"},"minimax-m3":{"id":"minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":512000,"output":128000},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"},"claude-sonnet-4":{"id":"claude-sonnet-4","name":"Claude Sonnet 4","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"status":"deprecated","provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75,"tiers":[{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5}},"canonical_model_id":"anthropic/claude-sonnet-4-0"},"glm-5-free":{"id":"glm-5-free","name":"GLM-5 Free","description":"Legacy model retained for compatibility with older integrations","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"zhipuai/glm-5"},"kimi-k2":{"id":"kimi-k2","name":"Kimi K2","description":"Legacy model retained for compatibility with older integrations","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2025-09-05","last_updated":"2025-09-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.4,"output":2.5,"cache_read":0.4},"canonical_model_id":"moonshotai/kimi-k2-0905"},"gpt-6-astra":{"id":"gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"gpt-5.1":{"id":"gpt-5.1","name":"GPT-5.1","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":1.07,"output":8.5,"cache_read":0.107},"canonical_model_id":"openai/gpt-5.1"},"longcat-2.5-free":{"id":"longcat-2.5-free","name":"LongCat 2.5 Free","description":"Meituan's multimodal reasoning model for long-horizon coding and agent tasks, with visual understanding and a 1M-token context window","family":"longcat","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":false,"release_date":"2026-11-02","last_updated":"2026-11-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":262144},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"meituan/longcat-2.5"},"gpt-5.1-codex-mini":{"id":"gpt-5.1-codex-mini","name":"GPT-5.1 Codex Mini","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5.1-codex-mini"},"minimax-m2.1-free":{"id":"minimax-m2.1-free","name":"MiniMax-M2.1 Free","description":"Legacy model retained for compatibility with older integrations","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"minimax/MiniMax-M2.1"},"gpt-5.5-pro":{"id":"gpt-5.5-pro","name":"GPT-5.5 Pro","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":30,"output":180,"cache_read":30},"canonical_model_id":"openai/gpt-5.5-pro"},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.14,"output":0.28,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"minimax-m2.5-free":{"id":"minimax-m2.5-free","name":"MiniMax-M2.5 Free","description":"Legacy model retained for compatibility with older integrations","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"minimax/MiniMax-M2.5"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"claude-opus-5":{"id":"claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"gemini-3.5-flash-lite":{"id":"gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"provider":{"npm":"@ai-sdk/google","api":"https://opencode.ai/inference/google/v1beta"},"cost":{"input":0.3,"output":2.5,"cache_read":0.03},"canonical_model_id":"google/gemini-3.5-flash-lite"},"kimi-k2-thinking":{"id":"kimi-k2-thinking","name":"Kimi K2 Thinking","description":"Legacy model retained for compatibility with older integrations","family":"kimi-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-08","release_date":"2025-11-06","last_updated":"2025-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.4,"output":2.5,"cache_read":0.4},"canonical_model_id":"moonshotai/kimi-k2-thinking"},"flint-40b-free":{"id":"flint-40b-free","name":"Flint 40B Free","description":"Open-weight mixture-of-experts model with about 2.5B active parameters for local coding agents","family":"flint","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-06","release_date":"2026-10-21","last_updated":"2026-10-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"recursive/flint"},"iceman-free":{"id":"iceman-free","name":"Iceman Free","description":"Stealth model, free for a limited time","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"release_date":"2026-11-06","last_updated":"2026-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0}},"gpt-6.1-sol":{"id":"gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-sol"},"mimo-v2.6-flash-free":{"id":"mimo-v2.6-flash-free","name":"MiMo-V2.6-Flash Free","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":32000},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"gpt-5.4-pro":{"id":"gpt-5.4-pro","name":"GPT-5.4 Pro","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":30,"output":180,"cache_read":30},"canonical_model_id":"openai/gpt-5.4-pro"},"gpt-5-nano":{"id":"gpt-5-nano","name":"GPT-5 Nano","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-nano"},"space-bunny-free":{"id":"space-bunny-free","name":"Space Bunny Free","description":"Anonymous preview reasoning model for coding, agentic tasks, tool use, and multimodal input","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"release_date":"2026-09-23","last_updated":"2026-09-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":524288,"output":524288},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":2.5,"output":15,"cache_read":0.25,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5}},"canonical_model_id":"openai/gpt-5.4"},"glm-4.6":{"id":"glm-4.6","name":"GLM-4.6","description":"Legacy model retained for compatibility with older integrations","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.6,"output":2.2,"cache_read":0.1},"canonical_model_id":"zhipuai/glm-4.6"},"mimo-v2-pro-free":{"id":"mimo-v2-pro-free","name":"MiMo V2 Pro Free","description":"Legacy model retained for compatibility with older integrations","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":64000},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"xiaomi/mimo-v2-pro"},"step-5-preview-free":{"id":"step-5-preview-free","name":"Step 5 Preview Free","description":"StepFun's next-generation flagship base model for coding and professional knowledge work, with native text, image, and video input and a 1M-token context window","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":65536},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"stepfun/step-5-preview"},"claude-opus-4-6":{"id":"claude-opus-4-6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"gemini-3-flash":{"id":"gemini-3-flash","name":"Gemini 3 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"provider":{"npm":"@ai-sdk/google","api":"https://opencode.ai/inference/google/v1beta"},"cost":{"input":0.5,"output":3,"cache_read":0.05},"canonical_model_id":"google/gemini-3-flash-preview"},"gpt-5.4-nano":{"id":"gpt-5.4-nano","name":"GPT-5.4 Nano","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"qwen3.6-plus-free":{"id":"qwen3.6-plus-free","name":"Qwen3.6 Plus Free","description":"Legacy model retained for compatibility with older integrations","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536},"status":"deprecated","provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"alibaba/qwen3.6-plus"},"qwen3.5-plus":{"id":"qwen3.5-plus","name":"Qwen3.5 Plus","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-16","last_updated":"2026-02-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25},"canonical_model_id":"alibaba/qwen3.5-plus"},"grok-4.6":{"id":"grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.6"},"big-pickle":{"id":"big-pickle","name":"Big Pickle","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"big-pickle","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-10-17","last_updated":"2025-10-17","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":160000,"output":32000},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"ring-2.6-1t-free":{"id":"ring-2.6-1t-free","name":"Ring 2.6 1T Free","description":"Legacy model retained for compatibility with older integrations","family":"ring-1t-free","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-06","release_date":"2026-05-08","last_updated":"2026-05-08","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":66000},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0}},"crouton-alpha-free":{"id":"crouton-alpha-free","name":"Crouton Alpha Free","description":"Stealth reasoning model with text, image, video and PDF input and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-03","last_updated":"2026-11-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":270000},"status":"deprecated","provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0}},"kimi-k2.5-free":{"id":"kimi-k2.5-free","name":"Kimi K2.5 Free","description":"Legacy model retained for compatibility with older integrations","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"moonshotai/kimi-k2.5"},"claude-opus-4-8":{"id":"claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"gpt-5-codex":{"id":"gpt-5-codex","name":"GPT-5 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-09-15","last_updated":"2025-09-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":1.07,"output":8.5,"cache_read":0.107},"canonical_model_id":"openai/gpt-5-codex"},"muse-ember-1.0":{"id":"muse-ember-1.0","name":"Muse Ember 1.0","description":"Reasoning model from Meta with text, image, video and PDF input and tool use","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":270000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.1,"output":0.5,"cache_read":0.004,"cache_write":0,"tiers":[{"input":0.3,"output":1.5,"cache_read":0.012,"cache_write":0,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":0.3,"output":1.5,"cache_read":0.012,"cache_write":0}},"canonical_model_id":"meta/muse-ember-1.0"},"grok-build-0.1":{"id":"grok-build-0.1","name":"Grok Build 0.1","description":"Fast Grok coding model tuned for agentic engineering and iterative edits","family":"grok-build","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":1,"output":2,"cache_read":0.2},"canonical_model_id":"xai/grok-build-0.1"},"minimax-m3.1-flash-free":{"id":"minimax-m3.1-flash-free","name":"MiniMax M3.1 Flash Free","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":512000},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"gpt-5.6-terra":{"id":"gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"minimax-m2.7":{"id":"minimax-m2.7","name":"MiniMax-M2.7","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-01","release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M2.7"},"nemotron-3-ultra-free":{"id":"nemotron-3-ultra-free","name":"Nemotron 3 Ultra Free","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"claude-opus-5-5":{"id":"claude-opus-5-5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"qwen3.8-max":{"id":"qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max"},"mistral-large-4":{"id":"mistral-large-4","name":"Mistral Large 4","description":"Mistral's 1T-parameter multimodal MoE for reasoning, coding, and agentic work","family":"mistral-large","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"output":262144},"provider":{"npm":"@ai-sdk/mistral","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0.68,"output":2.09,"cache_read":0.07},"canonical_model_id":"mistral/mistral-large-4"},"longcat-2.5-preview-free":{"id":"longcat-2.5-preview-free","name":"LongCat 2.5 Preview Free","description":"Meituan's multimodal reasoning model for coding and agent tasks, with image understanding and a 1M-token context window","family":"longcat","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":false,"release_date":"2026-09-25","last_updated":"2026-09-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"meituan/longcat-2.5-preview"},"claude-sonnet-4-5":{"id":"claude-sonnet-4-5","name":"Claude Sonnet 4.5","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"interleaved":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75,"tiers":[{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5}},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"ling-3.0-flash-free":{"id":"ling-3.0-flash-free","name":"Ling-3.0-flash Free","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-23","last_updated":"2026-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"inclusionai/ling-3.0-flash"},"claude-opus-4-1":{"id":"claude-opus-4-1","name":"Claude Opus 4.1","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"status":"deprecated","provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-1"},"claude-haiku-5-5":{"id":"claude-haiku-5-5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"laguna-s-2.1-free":{"id":"laguna-s-2.1-free","name":"Laguna S 2.1 Free","description":"Agentic coding model from Poolside in the XS size class for local deployment","family":"laguna","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":32000},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"poolside/laguna-s-2.1"},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"interleaved":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"muse-spark-1.2":{"id":"muse-spark-1.2","name":"Muse Spark 1.2","description":"Muse Spark 1.2 is a coding-focused update to Muse Spark 1.1 with improvements in code generation, complex debugging, codebase understanding, and end-to-end developer workflows.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.2"},"glm-5":{"id":"glm-5","name":"GLM-5","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"provider":{"api":"https://opencode.ai/inference/openai/v1"},"cost":{"input":1,"output":3.2,"cache_read":0.2},"canonical_model_id":"zhipuai/glm-5"},"claude-opus-4-7":{"id":"claude-opus-4-7","name":"Claude Opus 4.7","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"gemini-3.7-flash":{"id":"gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"provider":{"npm":"@ai-sdk/google","api":"https://opencode.ai/inference/google/v1beta"},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"input_audio":0.75},"canonical_model_id":"google/gemini-3.7-flash"},"gemini-3.1-pro":{"id":"gemini-3.1-pro","name":"Gemini 3.1 Pro Preview","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"provider":{"npm":"@ai-sdk/google","api":"https://opencode.ai/inference/google/v1beta"},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"claude-haiku-4-5":{"id":"claude-haiku-4-5","name":"Claude Haiku 4.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/anthropic/v1"},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"}}},"minimax-cn":{"id":"minimax-cn","env":["MINIMAX_API_KEY"],"npm":"@ai-sdk/anthropic","api":"https://api.minimax.cn/anthropic/v1","name":"MiniMax (minimax.cn)","doc":"https://platform.minimaxi.com/docs/guides/quickstart","models":{"MiniMax-M2.1":{"id":"MiniMax-M2.1","name":"MiniMax-M2.1","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0.3137,"output":1.2549,"cache_read":0.0314,"cache_write":0.3922}},"MiniMax-M2.5":{"id":"MiniMax-M2.5","name":"MiniMax-M2.5","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0.3137,"output":1.2549,"cache_read":0.0314,"cache_write":0.3922}},"MiniMax-M2.7":{"id":"MiniMax-M2.7","name":"MiniMax-M2.7","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0.3137,"output":1.2549,"cache_read":0.0627,"cache_write":0.3922}},"MiniMax-M2.5-highspeed":{"id":"MiniMax-M2.5-highspeed","name":"MiniMax-M2.5-highspeed","description":"High-speed MiniMax model for low-latency coding and agent workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-02-13","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0.6275,"output":2.5098,"cache_read":0.0314,"cache_write":0.3922}},"MiniMax-M3":{"id":"MiniMax-M3","name":"MiniMax-M3","description":"MiniMax multimodal coding model for long-context reasoning and agent tasks","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-25","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":524288},"cost":{"input":0.3137,"output":1.2549,"cache_read":0.0627,"tiers":[{"input":0.6275,"output":2.5098,"cache_read":0.1255,"tier":{"type":"context","size":512000}}],"context_over_200k":{"input":0.6275,"output":2.5098,"cache_read":0.1255}}},"MiniMax-M2.7-highspeed":{"id":"MiniMax-M2.7-highspeed","name":"MiniMax-M2.7-highspeed","description":"High-speed MiniMax model for low-latency coding and agent workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0.6275,"output":2.5098,"cache_read":0.0627,"cache_write":0.3922}},"MiniMax-M3.1-Flash":{"id":"MiniMax-M3.1-Flash","name":"MiniMax-M3.1-Flash","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":524288},"cost":{"input":0.1494,"output":0.5976,"cache_read":0.0149},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"MiniMax-M2":{"id":"MiniMax-M2","name":"MiniMax-M2","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-10-27","last_updated":"2025-10-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0.3137,"output":1.2549,"cache_read":0.0314,"cache_write":0.3922}}}},"empiriolabs":{"id":"empiriolabs","env":["EMPIRIOLABS_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.empiriolabs.ai/v1","name":"EmpirioLabs AI","doc":"https://docs.empiriolabs.ai","models":{"seed-2-0-code":{"id":"seed-2-0-code","name":"Seed 2.0 Code","description":"ByteDance Seed coding model for multimodal software engineering and long-running agents","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":229096,"output":128000},"cost":{"input":0.4,"output":2.4,"cache_read":0.4,"tiers":[{"input":0.8,"output":4.8,"cache_read":0.8,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-code"},"gemma-4-26b-a4b":{"id":"gemma-4-26b-a4b","name":"Gemma 4 26B-A4B","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.05,"output":0.29,"cache_read":0.025},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"mimo-v2-6-pro-ultraspeed":{"id":"mimo-v2-6-pro-ultraspeed","name":"MiMo V2.6 Pro UltraSpeed","description":"MiMo pro model for strong multimodal reasoning and agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":4.35,"output":8.7,"cache_read":4.35},"canonical_model_id":"xiaomi/mimo-v2.6-pro-ultraspeed"},"seed-2-0-lite":{"id":"seed-2-0-lite","name":"Seed 2.0 Lite","description":"Cost-efficient ByteDance Seed 2.0 model for production chat, analysis, and structured generation","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":229096,"output":128000},"cost":{"input":0.31,"output":2.5,"cache_read":0.31,"tiers":[{"input":0.62,"output":5,"cache_read":0.62,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-lite"},"qwen3-6-plus":{"id":"qwen3-6-plus","name":"Qwen3.6 Plus","description":"Earlier Qwen multimodal workhorse for million-token agent and document tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":1,"max":131072}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.5,"tiers":[{"input":2,"output":6,"cache_read":2,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":2,"output":6,"cache_read":2}},"canonical_model_id":"alibaba/qwen3.6-plus"},"seed-2-0-pro":{"id":"seed-2-0-pro","name":"Seed 2.0 Pro","description":"Flagship ByteDance Seed 2.0 model for complex multimodal reasoning and long-horizon agent workflows","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":229096,"output":128000},"cost":{"input":0.63,"output":3.79,"cache_read":0.63,"tiers":[{"input":1.26,"output":7.58,"cache_read":1.26,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-pro"},"qwen3-6-flash":{"id":"qwen3-6-flash","name":"Qwen3.6 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.6","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":1,"max":64000}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.25,"tiers":[{"input":1,"output":4,"cache_read":1,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":1,"output":4,"cache_read":1}},"canonical_model_id":"alibaba/qwen3.6-flash"},"glm-5-3-flash":{"id":"glm-5-3-flash","name":"GLM 5.3 Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.075,"output":0.25,"cache_read":0.075},"canonical_model_id":"zhipuai/glm-5.3-flash"},"glm-4-5-flash":{"id":"glm-4-5-flash","name":"GLM 4.5 Flash","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":98304},"cost":{"input":0,"output":0},"canonical_model_id":"zhipuai/glm-4.5-flash"},"fugu-max":{"id":"fugu-max","name":"Fugu Max","description":"Multi-agent model for routing expert agents across complex analytical tasks","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"sakana/fugu-max"},"qwen3-5-27b":{"id":"qwen3-5-27b","name":"Qwen3.5 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":1,"max":81920}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":258048,"output":64000},"cost":{"input":0.086,"output":0.688,"cache_read":0.086,"tiers":[{"input":0.258,"output":2.064,"cache_read":0.258,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3.5-27b"},"glm-5-2":{"id":"glm-5-2","name":"GLM 5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":1.4},"canonical_model_id":"zhipuai/glm-5.2"},"seed-2-0-mini":{"id":"seed-2-0-mini","name":"Seed 2.0 Mini","description":"Lightweight ByteDance Seed 2.0 model for low-latency multimodal reasoning and high-volume tasks","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":229156,"output":128000},"cost":{"input":0.12,"output":0.5,"cache_read":0.12,"tiers":[{"input":0.24,"output":1,"cache_read":0.24,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-mini"},"step-5-preview":{"id":"step-5-preview","name":"Step 5 Preview","description":"StepFun's next-generation flagship base model for coding and professional knowledge work, with native text, image, and video input and a 1M-token context window","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1024000,"output":131072},"cost":{"input":1,"output":2.7,"cache_read":0.1},"canonical_model_id":"stepfun/step-5-preview"},"qwen3-6-27b":{"id":"qwen3-6-27b","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":1,"max":131072}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":229376,"output":64000},"cost":{"input":0.412564,"output":2.475384,"cache_read":0.412564},"canonical_model_id":"alibaba/qwen3.6-27b"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":3},"canonical_model_id":"moonshotai/kimi-k3"},"step-3-5-flash-2603":{"id":"step-3-5-flash-2603","name":"Step 3.5 Flash 2603","description":"StepFun flash model for efficient multimodal reasoning, coding, and tool use","family":"step","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":256000,"output":131072},"cost":{"input":0.1,"output":0.3,"cache_read":0.02},"canonical_model_id":"stepfun/step-3.5-flash-2603"},"kimi-k3-1-pro":{"id":"kimi-k3-1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":2,"output":10,"cache_read":0.184},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"minimax-m3-1-flash":{"id":"minimax-m3-1-flash","name":"MiniMax M3.1 Flash","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":524288},"cost":{"input":0.1125,"output":0.45,"cache_read":0.01125},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"qwen3-5-4b":{"id":"qwen3-5-4b","name":"Qwen3.5 4B","description":"Qwen3.5 4B is a low-cost multimodal reasoning model with 256K context, image and video input, function tools, and structured output.","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":1024,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-02","last_updated":"2026-03-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.04,"output":0.07,"cache_read":0.02},"canonical_model_id":"alibaba/qwen3.5-4b"},"deepseek-v4-pro-0813":{"id":"deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":1,"max":393216}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":393216},"cost":{"input":1.32,"output":3.96,"cache_read":1.32},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"qwen3-5-9b":{"id":"qwen3-5-9b","name":"Qwen3.5 9B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":1024,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.09,"output":0.13,"cache_read":0.045},"canonical_model_id":"alibaba/qwen3.5-9b"},"mimo-v2-6-pro":{"id":"mimo-v2-6-pro","name":"MiMo V2.6 Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.435,"output":0.87,"cache_read":0.435},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"qwen3-8-omni-flash":{"id":"qwen3-8-omni-flash","name":"Qwen3.8 Omni Flash","description":"Qwen omni model for text, vision, audio, and multimodal agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":1,"max":262144}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-17","last_updated":"2026-09-17","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1006592,"output":131072},"cost":{"input":0.3,"output":0.94,"cache_read":0.3},"canonical_model_id":"alibaba/qwen3.8-omni-flash"},"kimi-k2-7-code":{"id":"kimi-k2-7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0.95,"output":4,"cache_read":0.95},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"qwen3-7-plus":{"id":"qwen3-7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":1,"max":262144}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"output":65536},"cost":{"input":0.4,"output":1.6,"cache_read":0.4,"tiers":[{"input":1.2,"output":4.8,"cache_read":1.2,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":1.2,"output":4.8,"cache_read":1.2}},"canonical_model_id":"alibaba/qwen3.7-plus"},"step-3-5-flash":{"id":"step-3-5-flash","name":"Step 3.5 Flash","description":"StepFun flash lane for quick multimodal reasoning and coding assistance","family":"step","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-29","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":256000,"output":131072},"cost":{"input":0.1,"output":0.3,"cache_read":0.02},"canonical_model_id":"stepfun/step-3.5-flash"},"muse-spark-1-3":{"id":"muse-spark-1-3","name":"Muse Spark 1.3","description":"Muse Spark 1.3 is a multimodal reasoning model from Meta for long-running agentic, multi-agent, and coding workflows. It improves long-horizon agent collaboration, instruction following, and coding efficiency relative to Muse Spark 1.2.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":1},"canonical_model_id":"meta/muse-spark-1.3"},"mimo-v2-6-flash":{"id":"mimo-v2-6-flash","name":"MiMo V2.6 Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.14,"output":0.28,"cache_read":0.14},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"mistral-small-4":{"id":"mistral-small-4","name":"Mistral Small 4","description":"Fast Mistral production model for chat, extraction, and cost-sensitive agents","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.15,"output":0.6,"cache_read":0.15},"canonical_model_id":"mistral/mistral-small-2603"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":1,"max":393216}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":393216},"cost":{"input":1.65,"output":3.3,"cache_read":1.65},"canonical_model_id":"deepseek/deepseek-v4-pro"},"gemma-3-27b":{"id":"gemma-3-27b","name":"Gemma 3 27B","description":"Largest open Gemma 3 instruction model for multilingual text generation and visual understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"google/gemma-3-27b-it"},"qwen3-5-397b-a17b":{"id":"qwen3-5-397b-a17b","name":"Qwen3.5 397B-A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":1,"max":81920}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":258048,"output":64000},"status":"deprecated","cost":{"input":0.172,"output":1.032,"cache_read":0.172,"tiers":[{"input":0.43,"output":2.58,"cache_read":0.43,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"minimax-m2-7":{"id":"minimax-m2-7","name":"MiniMax M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0.15,"output":0.6,"cache_read":0.03},"canonical_model_id":"minimax/MiniMax-M2.7"},"fugu-ultra-v1-0":{"id":"fugu-ultra-v1-0","name":"Fugu Ultra v1.0","description":"Quality-first multi-agent model for hard research, analysis, and competitions","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-06-15","last_updated":"2026-06-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":7.5,"output":45,"cache_read":1.5,"tiers":[{"input":15,"output":67.5,"cache_read":3,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":15,"output":67.5,"cache_read":3}},"canonical_model_id":"sakana/fugu-ultra"},"glm-4-6v-flash":{"id":"glm-4-6v-flash","name":"GLM 4.6V Flash","description":"Lightweight GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0,"output":0},"canonical_model_id":"zhipuai/glm-4.6v-flash"},"qwen3-8-27b":{"id":"qwen3-8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.17,"output":0.5,"cache_read":0.08},"canonical_model_id":"alibaba/qwen3.8-27b"},"glm-4-7-flash":{"id":"glm-4-7-flash","name":"GLM 4.7 Flash","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"zhipuai/glm-4.7-flash"},"fugu-ultra-v2-0":{"id":"fugu-ultra-v2-0","name":"Fugu Ultra v2.0","description":"Quality-first multi-agent model for hard research, analysis, and competitions","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-08-28","release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"sakana/fugu-ultra-v2"},"minimax-m3":{"id":"minimax-m3","name":"MiniMax M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":524288},"cost":{"input":0.225,"output":0.9,"cache_read":0.045,"tiers":[{"input":0.45,"output":1.8,"cache_read":0.09,"tier":{"type":"context","size":512000}}],"context_over_200k":{"input":0.45,"output":1.8,"cache_read":0.09}},"canonical_model_id":"minimax/MiniMax-M3"},"muse-spark-1-1":{"id":"muse-spark-1-1","name":"Muse Spark 1.1","description":"Muse Spark is a natively multimodal reasoning model with support for tool-use, visual chain of thought, and multi-agent orchestration.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-08","last_updated":"2026-07-09","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":1},"canonical_model_id":"meta/muse-spark-1.1"},"kimi-k2-6":{"id":"kimi-k2-6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":1,"max":81920}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16000},"cost":{"input":0.8939,"output":3.7131,"cache_read":0.1788},"canonical_model_id":"moonshotai/kimi-k2.6"},"step-3-7-flash":{"id":"step-3-7-flash","name":"Step 3.7 Flash","description":"Newer StepFun flash model for faster agents, coding, and multimodal prompts","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":256000,"output":131072},"cost":{"input":0.2,"output":1.15,"cache_read":0.04},"canonical_model_id":"stepfun/step-3.7-flash"},"glm-5-3":{"id":"glm-5-3","name":"GLM 5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":1.4},"canonical_model_id":"zhipuai/glm-5.3"},"fugu-ultra-v1-1":{"id":"fugu-ultra-v1-1","name":"Fugu Ultra v1.1","description":"Quality-first multi-agent model for hard research, analysis, and competitions","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-06-15","last_updated":"2026-06-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"sakana/fugu-ultra"},"glm-5-1":{"id":"glm-5-1","name":"GLM 5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":1,"max":38912}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202745,"output":128000},"cost":{"input":0.825,"output":3.301,"cache_read":0.165,"tiers":[{"input":1.1,"output":3.851,"cache_read":0.22,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-5.1"},"qwen3-7-max":{"id":"qwen3-7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":1,"max":262144}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"output":65536},"cost":{"input":2.5,"output":7.5,"cache_read":2.5},"canonical_model_id":"alibaba/qwen3.7-max"},"minimax-m2-7-highspeed":{"id":"minimax-m2-7-highspeed","name":"MiniMax M2.7 Highspeed","description":"Low-latency M2.7 variant for interactive coding plans and agent loops","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0.3,"output":1.2,"cache_read":0.03},"canonical_model_id":"minimax/MiniMax-M2.7-highspeed"},"qwen3-8-max-0902":{"id":"qwen3-8-max-0902","name":"Qwen3.8 Max 0902","description":"2026-09-02 upgraded snapshot of Qwen3.8 Max with stronger coding, collaborative agents, and multimodal document understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":1,"max":262144}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"output":131072},"cost":{"input":2,"output":6,"cache_read":2},"canonical_model_id":"alibaba/qwen3.8-max-0902"},"qwen3-6-35b-a3b":{"id":"qwen3-6-35b-a3b","name":"Qwen3.6 35B A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.07,"output":0.42,"cache_read":0.035},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"muse-spark-1-2":{"id":"muse-spark-1-2","name":"Muse Spark 1.2","description":"Muse Spark 1.2 is a coding-focused update to Muse Spark 1.1 with improvements in code generation, complex debugging, codebase understanding, and end-to-end developer workflows.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":1},"canonical_model_id":"meta/muse-spark-1.2"},"qwen3-5-122b-a10b":{"id":"qwen3-5-122b-a10b","name":"Qwen3.5 122B-A10B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":1,"max":81920}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":258048,"output":64000},"cost":{"input":0.115,"output":0.917,"cache_read":0.115,"tiers":[{"input":0.287,"output":2.294,"cache_read":0.287,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"qwen3-8-max":{"id":"qwen3-8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":1,"max":262144}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"output":131072},"cost":{"input":2,"output":6,"cache_read":2},"canonical_model_id":"alibaba/qwen3.8-max"},"qwen3-7-flash":{"id":"qwen3-7-flash","name":"Qwen3.7 Flash","description":"Lightweight multimodal Qwen model for high-throughput text, image, and video tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":1,"max":131072}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"input":991808,"output":65536},"cost":{"input":0.03,"output":0.13,"cache_read":0.006,"tiers":[{"input":0.1,"output":0.4,"cache_read":0.02,"tier":{"type":"context","size":32000}},{"input":0.2,"output":0.8,"cache_read":0.04,"tier":{"type":"context","size":256000}}]},"canonical_model_id":"alibaba/qwen3.7-flash"},"muse-glimmer-30b":{"id":"muse-glimmer-30b","name":"Muse Glimmer 30B","description":"Muse Glimmer is a 30-billion-parameter open-weight multimodal model from Meta Superintelligence Labs, distilled from Muse Spark for always-on local agents, tool use, coding, and image understanding.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-08-10","last_updated":"2026-08-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.2,"output":0.8,"cache_read":0.05},"canonical_model_id":"meta/muse-glimmer-30b"},"deepseek-v4-1-flash-1017":{"id":"deepseek-v4-1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":1,"max":393216}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":393216},"cost":{"input":0.2,"output":0.8,"cache_read":0.02},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"qwen3-5-flash":{"id":"qwen3-5-flash","name":"Qwen3.5 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1,"max":81920}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":995904,"output":32768},"cost":{"input":0.09,"output":0.368,"cache_read":0.09},"canonical_model_id":"alibaba/qwen3.5-flash"},"deepseek-v4-flash-0731":{"id":"deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":1,"max":393216}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":393216},"cost":{"input":0.424,"output":1.272,"cache_read":0.424},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"glm-4-7-flashx":{"id":"glm-4-7-flashx","name":"GLM 4.7 FlashX","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":0.07,"output":0.4,"cache_read":0.063},"canonical_model_id":"zhipuai/glm-4.7-flashx"},"qwen3-5-plus":{"id":"qwen3-5-plus","name":"Qwen3.5 Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1,"max":81920}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-16","last_updated":"2026-02-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"output":65536},"status":"deprecated","cost":{"input":0.36,"output":2.21,"cache_read":0.36,"tiers":[{"input":0.45,"output":2.76,"cache_read":0.45,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":0.45,"output":2.76,"cache_read":0.45}},"canonical_model_id":"alibaba/qwen3.5-plus"},"kimi-k2-7-code-highspeed":{"id":"kimi-k2-7-code-highspeed","name":"Kimi K2.7 Code Highspeed","description":"Lower-latency Kimi Code variant for interactive edits and coding-agent loops","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":1.9,"output":8,"cache_read":1.9},"canonical_model_id":"moonshotai/kimi-k2.7-code-highspeed"},"qwen3-8-flash":{"id":"qwen3-8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":1,"max":262144}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"output":131072},"cost":{"input":0.16,"output":0.47,"cache_read":0.16},"canonical_model_id":"alibaba/qwen3.8-flash"},"qwen3-5-35b-a3b":{"id":"qwen3-5-35b-a3b","name":"Qwen3.5 35B-A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens","min":1,"max":81920}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":258048,"output":64000},"cost":{"input":0.057,"output":0.459,"cache_read":0.057,"tiers":[{"input":0.229,"output":1.835,"cache_read":0.229,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3.5-35b-a3b"},"seed-2-1-turbo":{"id":"seed-2-1-turbo","name":"Seed 2.1 Turbo","description":"Faster ByteDance Seed 2.1 model for multimodal reasoning and latency-sensitive agent workflows","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-23","last_updated":"2026-06-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":229093,"output":65536},"cost":{"input":0.63,"output":3.13,"cache_read":0.63},"canonical_model_id":"bytedance-seed/seed-2.1-turbo"}}},"tinfoil":{"id":"tinfoil","env":["TINFOIL_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://inference.tinfoil.sh/v1","name":"Tinfoil","doc":"https://docs.tinfoil.sh","models":{"gpt-oss-safeguard-120b":{"id":"gpt-oss-safeguard-120b","name":"gpt-oss-safeguard-120b","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-10-29","last_updated":"2025-10-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"openai/gpt-oss-safeguard-120b"},"nomic-embed-text":{"id":"nomic-embed-text","name":"Nomic Embed Text v1.5","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2024-02","last_updated":"2024-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":768},"cost":{"input":0.016,"output":0}},"llama3-3-70b":{"id":"llama3-3-70b","name":"Llama-3.3-70B-Instruct","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":4096},"cost":{"input":1.75,"output":2.75},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":4,"output":20,"cache_read":0.6},"canonical_model_id":"moonshotai/kimi-k3"},"kimi-k3-1-pro":{"id":"kimi-k3-1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":4,"output":20,"cache_read":0.4},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"deepseek-v4-1-flash":{"id":"deepseek-v4-1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"status":"beta","cost":{"input":0.6,"output":1.45,"cache_read":0.01},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"glm-5-3":{"id":"glm-5-3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.8,"output":5.75,"cache_read":0.45},"canonical_model_id":"zhipuai/glm-5.3"},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"gpt-oss-120b","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"openai/gpt-oss-120b"},"gemma4-31b":{"id":"gemma4-31b","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.4,"output":1},"canonical_model_id":"google/gemma-4-31b-it"}}},"tencent-tokenhub":{"id":"tencent-tokenhub","env":["TENCENT_TOKENHUB_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://tokenhub.tencentmaas.com/v1","name":"Tencent TokenHub","doc":"https://cloud.tencent.com/document/product/1823/130050","models":{"hy4":{"id":"hy4","name":"Hy4","description":"A next-generation multimodal productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-11-04","last_updated":"2026-11-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":983010,"output":65536},"cost":{"input":0.834,"output":2.501,"cache_read":0.042},"canonical_model_id":"tencent/hy4"},"hy3":{"id":"hy3","name":"Hy3","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":192000,"output":128000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"tencent/hy3"},"hy4-preview":{"id":"hy4-preview","name":"Hy4 preview","description":"A next-generation productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-08-28","last_updated":"2026-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1024000,"output":64000},"cost":{"input":0.834,"output":2.501,"cache_read":0.042},"canonical_model_id":"tencent/hy4-preview"},"hy3-preview":{"id":"hy3-preview","name":"Hy3 preview","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":64000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"tencent/hy3-preview"}}},"xiaomi-token-plan-sgp":{"id":"xiaomi-token-plan-sgp","env":["XIAOMI_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://token-plan-sgp.xiaomimimo.com/v1","name":"Xiaomi Token Plan (Singapore)","doc":"https://platform.xiaomimimo.com/#/docs","models":{"mimo-v2.6-pro":{"id":"mimo-v2.6-pro","name":"MiMo-V2.6-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"mimo-v2.6-flash":{"id":"mimo-v2.6-flash","name":"MiMo-V2.6-Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"mimo-v2.5-tts":{"id":"mimo-v2.5-tts","type":"speech","name":"MiMo-V2.5-TTS","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"mimo","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":8192,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"xiaomi/mimo-v2.5-tts"},"mimo-v2.5-tts-voicedesign":{"id":"mimo-v2.5-tts-voicedesign","type":"speech","name":"MiMo-V2.5-TTS-VoiceDesign","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"mimo","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":8192,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"xiaomi/mimo-v2.5-tts-voicedesign"},"mimo-v2.5-pro":{"id":"mimo-v2.5-pro","name":"MiMo-V2.5-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"mimo-v2.5":{"id":"mimo-v2.5","name":"MiMo-V2.5","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"xiaomi/mimo-v2.5"},"mimo-v2.5-tts-voiceclone":{"id":"mimo-v2.5-tts-voiceclone","type":"speech","name":"MiMo-V2.5-TTS-VoiceClone","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"mimo","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":8192,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"xiaomi/mimo-v2.5-tts-voiceclone"}}},"cline-pass":{"id":"cline-pass","env":["CLINE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.cline.bot/api/v1","name":"ClinePass","doc":"https://docs.cline.bot/getting-started/clinepass","models":{"cline-pass/glm-5.2":{"id":"cline-pass/glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"status":"deprecated","cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"cline-pass/kimi-k2.6":{"id":"cline-pass/kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0.95,"output":4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"cline-pass/kimi-k3":{"id":"cline-pass/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"cline-pass/mimo-v2.6-pro":{"id":"cline-pass/mimo-v2.6-pro","name":"MiMo-V2.6-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.435,"output":0.87,"cache_read":0.0036},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"cline-pass/deepseek-v4.1-flash":{"id":"cline-pass/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"cline-pass/deepseek-v4-pro":{"id":"cline-pass/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.66,"output":1.98,"cache_read":0.022},"canonical_model_id":"deepseek/deepseek-v4-pro"},"cline-pass/glm-5.3":{"id":"cline-pass/glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"cline-pass/mimo-v2.6-flash":{"id":"cline-pass/mimo-v2.6-flash","name":"MiMo-V2.6-Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"cline-pass/qwen3.7-plus":{"id":"cline-pass/qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.4,"output":1.6,"cache_read":0.04,"cache_write":0.5,"tiers":[{"input":1.2,"output":4.8,"cache_read":0.12,"cache_write":1.5,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":1.2,"output":4.8,"cache_read":0.12,"cache_write":1.5}},"canonical_model_id":"alibaba/qwen3.7-plus"},"cline-pass/minimax-m3":{"id":"cline-pass/minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":512000},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"},"cline-pass/qwen3.7-max":{"id":"cline-pass/qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2.5,"output":7.5,"cache_read":0.5,"cache_write":3.125},"canonical_model_id":"alibaba/qwen3.7-max"},"cline-pass/kimi-k2.7-code":{"id":"cline-pass/kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"cline-pass/deepseek-v4-flash":{"id":"cline-pass/deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"deprecated","cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"deepseek/deepseek-v4-flash"},"cline-pass/glm-5.3-flash":{"id":"cline-pass/glm-5.3-flash","name":"cline-pass/glm-5.3-flash","description":"Latest natively multimodal model in the GLM-5 series","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"cline-pass/mimo-v2.5":{"id":"cline-pass/mimo-v2.5","name":"MiMo-V2.5","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"xiaomi/mimo-v2.5"},"cline-pass/mimo-v2.5-pro":{"id":"cline-pass/mimo-v2.5-pro","name":"MiMo-V2.5-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.74,"output":3.48,"cache_read":0.0145},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"cline-pass/qwen3.8-max":{"id":"cline-pass/qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max"},"cline-pass/muse-spark-1.3-contributor":{"id":"cline-pass/muse-spark-1.3-contributor","name":"Muse Spark 1.3 Contributor","description":"Muse Spark 1.3 is a multimodal reasoning model from Meta for long-running agentic, multi-agent, and coding workflows. It improves long-horizon agent collaboration, instruction following, and coding efficiency relative to Muse Spark 1.2.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.1,"output":0.2,"cache_read":0.002},"canonical_model_id":"meta/muse-spark-1.3"}}},"llmgateway-providers":{"id":"llmgateway-providers","env":["LLMGATEWAY_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.llmgateway.io/v1","name":"LLM Gateway","doc":"https://llmgateway.io/docs","models":{"anthropic/claude-sonnet-5-5":{"id":"anthropic/claude-sonnet-5-5","name":"Claude Sonnet 5.5 (Anthropic)","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"anthropic/claude-fable-5-1":{"id":"anthropic/claude-fable-5-1","name":"Claude Fable 5.1 (Anthropic)","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"anthropic/claude-sonnet-5":{"id":"anthropic/claude-sonnet-5","name":"Claude Sonnet 5 (Anthropic)","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"anthropic/claude-fable-5-2":{"id":"anthropic/claude-fable-5-2","name":"Claude Fable 5.2 (Anthropic)","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"anthropic/claude-sonnet-4-5-20250929":{"id":"anthropic/claude-sonnet-4-5-20250929","name":"Claude Sonnet 4.5 (2025-09-29) (Anthropic)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5-20250929"},"anthropic/claude-fable-5":{"id":"anthropic/claude-fable-5","name":"Claude Fable 5 (Anthropic)","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"anthropic/claude-haiku-4-5-20251001":{"id":"anthropic/claude-haiku-4-5-20251001","name":"Claude Haiku 4.5 (2025-10-01) (Anthropic)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"anthropic/claude-opus-5":{"id":"anthropic/claude-opus-5","name":"Claude Opus 5 (Anthropic)","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"anthropic/claude-opus-4-5-20251101":{"id":"anthropic/claude-opus-4-5-20251101","name":"Claude Opus 4.5 (Anthropic)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]},{"type":"budget_tokens","min":1024,"max":31999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5-20251101"},"anthropic/claude-opus-4-6":{"id":"anthropic/claude-opus-4-6","name":"Claude Opus 4.6 (Anthropic)","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"anthropic/claude-opus-4-8":{"id":"anthropic/claude-opus-4-8","name":"Claude Opus 4.8 (Anthropic)","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic/claude-opus-5-5":{"id":"anthropic/claude-opus-5-5","name":"Claude Opus 5.5 (Anthropic)","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"anthropic/claude-sonnet-4-5":{"id":"anthropic/claude-sonnet-4-5","name":"Claude Sonnet 4.5 (Anthropic)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"anthropic/claude-haiku-5-5":{"id":"anthropic/claude-haiku-5-5","name":"Claude Haiku 5.5 (Anthropic)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125},"canonical_model_id":"anthropic/claude-haiku-5-5"},"anthropic/claude-sonnet-4-6":{"id":"anthropic/claude-sonnet-4-6","name":"Claude Sonnet 4.6 (Anthropic)","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"anthropic/claude-opus-4-7":{"id":"anthropic/claude-opus-4-7","name":"Claude Opus 4.7 (Anthropic)","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"anthropic/claude-haiku-4-5":{"id":"anthropic/claude-haiku-4-5","name":"Claude Haiku 4.5 (Anthropic)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"baidu/glm-5.2":{"id":"baidu/glm-5.2","name":"GLM-5.2 (Baidu)","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"baidu/kimi-k3":{"id":"baidu/kimi-k3","name":"Kimi K3 (Baidu)","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"baidu/glm-5.1":{"id":"baidu/glm-5.1","name":"GLM-5.1 (Baidu)","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.1"},"baidu/deepseek-v4.1-flash":{"id":"baidu/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash (Baidu)","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"baidu/deepseek-v4-pro":{"id":"baidu/deepseek-v4-pro","name":"DeepSeek V4 Pro (Baidu)","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.32,"output":3.96,"cache_read":0.042},"canonical_model_id":"deepseek/deepseek-v4-pro"},"baidu/glm-5.3":{"id":"baidu/glm-5.3","name":"GLM-5.3 (Baidu)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"baidu/deepseek-v4-flash":{"id":"baidu/deepseek-v4-flash","name":"DeepSeek V4 Flash (Baidu)","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.44,"output":1.32,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4-flash"},"baidu/glm-5.3-flash":{"id":"baidu/glm-5.3-flash","name":"GLM-5.3 Flash (Baidu)","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"baidu/deepseek-v4-flash-0731":{"id":"baidu/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731 (Baidu)","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.44,"output":1.32,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"baidu/deepseek-v4.1-flash-1017":{"id":"baidu/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017 (Baidu)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.28,"output":1.13,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"aws-mantle/gpt-5.6-sol":{"id":"aws-mantle/gpt-5.6-sol","name":"GPT-5.6 Sol (AWS Mantle)","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":921600,"output":128000},"cost":{"input":4.4,"output":22,"cache_read":0.44,"cache_write":5.5},"canonical_model_id":"openai/gpt-5.6-sol"},"aws-mantle/gpt-6-astra":{"id":"aws-mantle/gpt-6-astra","name":"GPT-6 Astra (AWS Mantle)","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"openai/gpt-6-astra"},"aws-mantle/gpt-5.6-luna":{"id":"aws-mantle/gpt-5.6-luna","name":"GPT-5.6 Luna (AWS Mantle)","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":921600,"output":128000},"cost":{"input":0.22,"output":1.32,"cache_read":0.022,"cache_write":0.275},"canonical_model_id":"openai/gpt-5.6-luna"},"aws-mantle/gpt-5.6-terra":{"id":"aws-mantle/gpt-5.6-terra","name":"GPT-5.6 Terra (AWS Mantle)","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":921600,"output":128000},"cost":{"input":2.2,"output":13.2,"cache_read":0.22,"cache_write":2.75},"canonical_model_id":"openai/gpt-5.6-terra"},"scx-ai-gp/glm-5.2-fast":{"id":"scx-ai-gp/glm-5.2-fast","name":"GLM-5.2 Turbo (SCX.ai)","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":2.156,"output":6.776,"cache_read":0.429},"canonical_model_id":"zhipuai/glm-5.2"},"scx-ai-gp/glm-5.2":{"id":"scx-ai-gp/glm-5.2","name":"GLM-5.2 (SCX.ai)","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.605,"output":2.123,"cache_read":0.154},"canonical_model_id":"zhipuai/glm-5.2"},"scx-ai-gp/kimi-k3.1-pro":{"id":"scx-ai-gp/kimi-k3.1-pro","name":"Kimi K3.1 Pro (scx-ai-gp)","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.9,"output":9.5,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"scx-ai-gp/kimi-k3":{"id":"scx-ai-gp/kimi-k3","name":"Kimi K3 (SCX.ai)","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":3.135,"output":15.675,"cache_read":0.319},"canonical_model_id":"moonshotai/kimi-k3"},"scx-ai-gp/deepseek-v4.1-flash":{"id":"scx-ai-gp/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash (SCX.ai)","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.15,"output":0.6,"cache_read":0.01},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"scx-ai-gp/glm-5.3-fast":{"id":"scx-ai-gp/glm-5.3-fast","name":"GLM 5.3 Fast (SCX.ai)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":2.8,"output":8.8,"cache_read":0.56},"canonical_model_id":"zhipuai/glm-5.3"},"scx-ai-gp/glm-5.3":{"id":"scx-ai-gp/glm-5.3","name":"GLM-5.3 (SCX.ai)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":0.924,"output":2.904,"cache_read":0.1716},"canonical_model_id":"zhipuai/glm-5.3"},"scx-ai-gp/kimi-k2.7-code":{"id":"scx-ai-gp/kimi-k2.7-code","name":"Kimi K2.7 Code (SCX.ai)","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.737,"output":3.08,"cache_read":0.143},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"scx-ai-gp/glm-5.3-flash":{"id":"scx-ai-gp/glm-5.3-flash","name":"GLM-5.3 Flash (SCX.ai)","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.088,"output":0.25,"cache_read":0.025},"canonical_model_id":"zhipuai/glm-5.3-flash"},"scx-ai-gp/qwen3.8-max":{"id":"scx-ai-gp/qwen3.8-max","name":"Qwen3.8 Max (SCX.ai)","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":1.54,"output":4.631,"cache_read":0.198,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max"},"scx-ai-gp/deepseek-v4.1-flash-1017":{"id":"scx-ai-gp/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017 (scx-ai-gp)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1050000,"output":384000},"cost":{"input":0.135,"output":0.54,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"aws-bedrock/grok-4-6":{"id":"aws-bedrock/grok-4-6","name":"Grok 4.6 (AWS Bedrock)","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.6"},"aws-bedrock/claude-sonnet-5-5":{"id":"aws-bedrock/claude-sonnet-5-5","name":"Claude Sonnet 5.5 (AWS Bedrock)","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"aws-bedrock/claude-fable-5-1":{"id":"aws-bedrock/claude-fable-5-1","name":"Claude Fable 5.1 (AWS Bedrock)","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"aws-bedrock/grok-4-3":{"id":"aws-bedrock/grok-4-3","name":"Grok 4.3 (AWS Bedrock)","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.3"},"aws-bedrock/llama-4-scout-17b-instruct":{"id":"aws-bedrock/llama-4-scout-17b-instruct","name":"Llama 4 Scout 17B Instruct (AWS Bedrock)","description":"Open Llama with long-context vision for efficient multimodal agents","family":"llama","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":2048},"status":"deprecated","cost":{"input":0.17,"output":0.66},"canonical_model_id":"meta/llama-4-scout-17b-instruct"},"aws-bedrock/kimi-k3":{"id":"aws-bedrock/kimi-k3","name":"Kimi K3 (AWS Bedrock)","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"moonshotai/kimi-k3"},"aws-bedrock/claude-sonnet-5":{"id":"aws-bedrock/claude-sonnet-5","name":"Claude Sonnet 5 (AWS Bedrock)","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"aws-bedrock/claude-fable-5-2":{"id":"aws-bedrock/claude-fable-5-2","name":"Claude Fable 5.2 (AWS Bedrock)","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"aws-bedrock/grok-4-7":{"id":"aws-bedrock/grok-4-7","name":"Grok 4.7 (AWS Bedrock)","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"output":524288},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.7"},"aws-bedrock/claude-sonnet-4-5-20250929":{"id":"aws-bedrock/claude-sonnet-4-5-20250929","name":"Claude Sonnet 4.5 (2025-09-29) (AWS Bedrock)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8192},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5-20250929"},"aws-bedrock/claude-fable-5":{"id":"aws-bedrock/claude-fable-5","name":"Claude Fable 5 (AWS Bedrock)","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"aws-bedrock/llama-3.1-70b-instruct":{"id":"aws-bedrock/llama-3.1-70b-instruct","name":"Llama 3.1 70B Instruct (AWS Bedrock)","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":2048},"status":"deprecated","cost":{"input":0.72,"output":0.72},"canonical_model_id":"meta/llama-3.1-70b-instruct"},"aws-bedrock/claude-haiku-4-5-20251001":{"id":"aws-bedrock/claude-haiku-4-5-20251001","name":"Claude Haiku 4.5 (2025-10-01) (AWS Bedrock)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"aws-bedrock/claude-opus-5":{"id":"aws-bedrock/claude-opus-5","name":"Claude Opus 5 (AWS Bedrock)","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"aws-bedrock/claude-opus-4-5-20251101":{"id":"aws-bedrock/claude-opus-4-5-20251101","name":"Claude Opus 4.5 (AWS Bedrock)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]},{"type":"budget_tokens","min":1024,"max":31999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5-20251101"},"aws-bedrock/claude-opus-4-6":{"id":"aws-bedrock/claude-opus-4-6","name":"Claude Opus 4.6 (AWS Bedrock)","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"aws-bedrock/claude-opus-4-8":{"id":"aws-bedrock/claude-opus-4-8","name":"Claude Opus 4.8 (AWS Bedrock)","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"aws-bedrock/claude-opus-5-5":{"id":"aws-bedrock/claude-opus-5-5","name":"Claude Opus 5.5 (AWS Bedrock)","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"aws-bedrock/claude-sonnet-4-5":{"id":"aws-bedrock/claude-sonnet-4-5","name":"Claude Sonnet 4.5 (AWS Bedrock)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8192},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"aws-bedrock/claude-haiku-5-5":{"id":"aws-bedrock/claude-haiku-5-5","name":"Claude Haiku 5.5 (AWS Bedrock)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125},"canonical_model_id":"anthropic/claude-haiku-5-5"},"aws-bedrock/claude-sonnet-4-6":{"id":"aws-bedrock/claude-sonnet-4-6","name":"Claude Sonnet 4.6 (AWS Bedrock)","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"aws-bedrock/llama-4-maverick-17b-instruct":{"id":"aws-bedrock/llama-4-maverick-17b-instruct","name":"Llama 4 Maverick 17B Instruct (AWS Bedrock)","description":"Open multimodal Llama for strong reasoning with efficient everyday serving","family":"llama","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":2048},"status":"deprecated","cost":{"input":0.24,"output":0.97},"canonical_model_id":"meta/llama-4-maverick-17b-instruct"},"aws-bedrock/claude-opus-4-7":{"id":"aws-bedrock/claude-opus-4-7","name":"Claude Opus 4.7 (AWS Bedrock)","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"aws-bedrock/claude-haiku-4-5":{"id":"aws-bedrock/claude-haiku-4-5","name":"Claude Haiku 4.5 (AWS Bedrock)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"perplexity/sonar":{"id":"perplexity/sonar","name":"Sonar (Perplexity)","description":"Fast web-grounded Sonar for current answers, citations, and lightweight retrieval","family":"sonar","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-09-01","release_date":"2024-01-01","last_updated":"2025-09-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":130000,"output":4096},"cost":{"input":0.25,"output":2.5,"cache_write":0.25},"canonical_model_id":"perplexity/sonar"},"mistral/codestral-2508":{"id":"mistral/codestral-2508","name":"Codestral (Mistral AI)","description":"Mistral code model for low-latency completion, fill-in-the-middle, and code generation","family":"codestral","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-07-30","last_updated":"2025-07-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":0.3,"output":0.9},"canonical_model_id":"mistral/codestral-2508"},"mistral/mistral-small-2506":{"id":"mistral/mistral-small-2506","name":"Mistral Small 3.2 (Mistral AI)","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-03","release_date":"2025-06-20","last_updated":"2025-06-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.1,"output":0.3},"canonical_model_id":"mistral/mistral-small-2506"},"mistral/mistral-medium-3-5":{"id":"mistral/mistral-medium-3-5","name":"Mistral Medium 3.5 (Mistral AI)","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-30","last_updated":"2026-04-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":262144},"cost":{"input":1.5,"output":7.5},"canonical_model_id":"mistral/mistral-medium-3-5"},"mistral/mistral-large-2512":{"id":"mistral/mistral-large-2512","name":"Mistral Large 3 (Mistral AI)","description":"Mistral's largest general model for enterprise agents, coding, and multilingual reasoning","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-11","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.5,"output":1.5},"canonical_model_id":"mistral/mistral-large-2512"},"mistral/ministral-3b-2512":{"id":"mistral/ministral-3b-2512","name":"Ministral 3B (Mistral AI)","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.1,"output":0.1},"canonical_model_id":"mistral/ministral-3b-2512"},"mistral/ministral-8b-2512":{"id":"mistral/ministral-8b-2512","name":"Ministral 8B (Mistral AI)","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.15,"output":0.15},"canonical_model_id":"mistral/ministral-8b-2512"},"mistral/mistral-small-2603":{"id":"mistral/mistral-small-2603","name":"Mistral Small 4 (Mistral AI)","description":"Fast Mistral production model for chat, extraction, and cost-sensitive agents","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"mistral/mistral-small-2603"},"mistral/glm-5.3":{"id":"mistral/glm-5.3","name":"GLM-5.3 (Mistral AI)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.14},"canonical_model_id":"zhipuai/glm-5.3"},"mistral/devstral-2512":{"id":"mistral/devstral-2512","name":"Devstral 2 (Mistral AI)","description":"Mistral's coding-agent model for repository work, terminal tasks, and software fixes","family":"devstral","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-12","release_date":"2025-12-09","last_updated":"2025-12-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.4,"output":2},"canonical_model_id":"mistral/devstral-2512"},"mistral/mistral-large-4":{"id":"mistral/mistral-large-4","name":"Mistral Large 4 (Mistral AI)","description":"Mistral's 1T-parameter multimodal MoE for reasoning, coding, and agentic work","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":262144},"cost":{"input":1.36,"output":4.18,"cache_read":0.14},"canonical_model_id":"mistral/mistral-large-4"},"mistral/ministral-14b-2512":{"id":"mistral/ministral-14b-2512","name":"Ministral 14B (Mistral AI)","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.2,"output":0.2},"canonical_model_id":"mistral/ministral-14b-2512"},"mistral/mistral-large-latest":{"id":"mistral/mistral-large-latest","name":"Mistral Large Latest (Mistral AI)","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-11","release_date":"2024-11-01","last_updated":"2025-12-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":262144},"cost":{"input":4,"output":12},"canonical_model_id":"mistral/mistral-large-latest"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro (DeepSeek)","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1050000,"output":393216},"cost":{"input":0.66,"output":1.98,"cache_read":0.022},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-v4.1-flash-1017":{"id":"deepseek/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017 (DeepSeek)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1050000,"output":393216},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"cloudflare/deepseek-v4-pro":{"id":"cloudflare/deepseek-v4-pro","name":"DeepSeek V4 Pro (Cloudflare)","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":1.32,"output":3.96,"cache_read":0.044},"canonical_model_id":"deepseek/deepseek-v4-pro"},"cloudflare/glm-5.3":{"id":"cloudflare/glm-5.3","name":"GLM-5.3 (Cloudflare)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"cloudflare/deepseek-v4-flash":{"id":"cloudflare/deepseek-v4-flash","name":"DeepSeek V4 Flash (Cloudflare)","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.44,"output":1.32,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4-flash"},"cloudflare/glm-5.3-flash":{"id":"cloudflare/glm-5.3-flash","name":"GLM-5.3 Flash (Cloudflare)","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"cloudflare/deepseek-v4-flash-0731":{"id":"cloudflare/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731 (Cloudflare)","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.44,"output":1.32,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"cloudflare/deepseek-v4.1-flash-1017":{"id":"cloudflare/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017 (Cloudflare)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"greenference/qwen3-30b-a3b":{"id":"greenference/qwen3-30b-a3b","name":"Qwen3 30B A3B (greenference)","description":"Sparse MoE Qwen model with 3B active parameters for efficient chat and reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":4096},"cost":{"input":0.095,"output":0.285},"canonical_model_id":"alibaba/qwen3-30b-a3b"},"greenference/qwen3-14b":{"id":"greenference/qwen3-14b","name":"Qwen3 14B (greenference)","description":"Tool-capable chat model for instruction following and agentic application workflows","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":16384,"output":8192},"cost":{"input":0.076,"output":0.228}},"greenference/glm-5.3-flash":{"id":"greenference/glm-5.3-flash","name":"GLM-5.3 Flash (greenference)","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.14,"output":0.49,"cache_read":0.028},"canonical_model_id":"zhipuai/glm-5.3-flash"},"greenference/qwen3.6-27b":{"id":"greenference/qwen3.6-27b","name":"Qwen3.6 27B (greenference)","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"output":8192},"cost":{"input":0.15,"output":1.35},"canonical_model_id":"alibaba/qwen3.6-27b"},"flexai/glm-5.2":{"id":"flexai/glm-5.2","name":"GLM-5.2 (flexai)","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.7,"output":2.2,"cache_read":0.105},"canonical_model_id":"zhipuai/glm-5.2"},"flexai/deepseek-v4-flash":{"id":"flexai/deepseek-v4-flash","name":"DeepSeek V4 Flash (flexai)","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.119,"output":0.238,"cache_read":0.004},"canonical_model_id":"deepseek/deepseek-v4-flash"},"flexai/glm-5.3-flash":{"id":"flexai/glm-5.3-flash","name":"GLM-5.3 Flash (flexai)","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.08,"output":0.5,"cache_read":0.012},"canonical_model_id":"zhipuai/glm-5.3-flash"},"flexai/gpt-oss-120b":{"id":"flexai/gpt-oss-120b","name":"GPT OSS 120B (flexai)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.05,"output":0.25,"cache_read":0.01},"canonical_model_id":"openai/gpt-oss-120b"},"flexai/deepseek-v4.1-flash-1017":{"id":"flexai/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017 (flexai)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.15,"output":0.6,"cache_read":0.004},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"vertex-openai/grok-4-6":{"id":"vertex-openai/grok-4-6","name":"Grok 4.6 (Vertex AI (OpenAI-compatible))","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.6"},"vertex-openai/grok-4-20-reasoning":{"id":"vertex-openai/grok-4-20-reasoning","name":"Grok 4.20 Reasoning (Vertex AI (OpenAI-compatible))","description":"Reasoning Grok for document-heavy analysis and long-horizon tool use","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.20-0309-reasoning"},"vertex-openai/grok-4-7":{"id":"vertex-openai/grok-4-7","name":"Grok 4.7 (Vertex AI (OpenAI-compatible))","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"output":524288},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.7"},"vertex-openai/grok-4-20-non-reasoning":{"id":"vertex-openai/grok-4-20-non-reasoning","name":"Grok 4.20 Non-Reasoning (Vertex AI (OpenAI-compatible))","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.20-0309-non-reasoning"},"bytedance/glm-5.2":{"id":"bytedance/glm-5.2","name":"GLM-5.2 (ByteDance)","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1024000,"output":128000},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"bytedance/seed-2-0-pro-260328":{"id":"bytedance/seed-2-0-pro-260328","name":"Seed 2.0 Pro (260328) (ByteDance)","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-28","last_updated":"2026-03-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":0.5,"output":3,"cache_read":0.1}},"bytedance/seed-2-0-lite-260428":{"id":"bytedance/seed-2-0-lite-260428","name":"Seed 2.0 Lite (260428) (ByteDance)","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-28","last_updated":"2026-04-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":0.25,"output":2,"cache_read":0.05}},"bytedance/seed-2-0-code-preview-260328":{"id":"bytedance/seed-2-0-code-preview-260328","name":"Seed 2.0 Code Preview (260328) (ByteDance)","description":"Coding model for repository understanding, refactors, and agentic engineering tasks","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-28","last_updated":"2026-03-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":0.5,"output":3,"cache_read":0.1}},"bytedance/deepseek-v4-pro":{"id":"bytedance/deepseek-v4-pro","name":"DeepSeek V4 Pro (ByteDance)","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":1.32,"output":3.96,"cache_read":0.044},"canonical_model_id":"deepseek/deepseek-v4-pro"},"bytedance/deepseek-v4-flash":{"id":"bytedance/deepseek-v4-flash","name":"DeepSeek V4 Flash (ByteDance)","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.44,"output":1.32,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4-flash"},"bytedance/deepseek-v4-flash-0731":{"id":"bytedance/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731 (ByteDance)","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.44,"output":1.32,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"bytedance/seed-2-0-mini-260428":{"id":"bytedance/seed-2-0-mini-260428","name":"Seed 2.0 Mini (260428) (ByteDance)","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-28","last_updated":"2026-04-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":0.1,"output":0.4,"cache_read":0.02}},"azure-anthropic/claude-sonnet-5-5":{"id":"azure-anthropic/claude-sonnet-5-5","name":"Claude Sonnet 5.5 (Azure Anthropic)","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"azure-anthropic/claude-fable-5-1":{"id":"azure-anthropic/claude-fable-5-1","name":"Claude Fable 5.1 (Azure Anthropic)","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"azure-anthropic/claude-sonnet-5":{"id":"azure-anthropic/claude-sonnet-5","name":"Claude Sonnet 5 (Azure Anthropic)","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"azure-anthropic/claude-fable-5":{"id":"azure-anthropic/claude-fable-5","name":"Claude Fable 5 (Azure Anthropic)","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"azure-anthropic/claude-opus-5":{"id":"azure-anthropic/claude-opus-5","name":"Claude Opus 5 (Azure Anthropic)","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"azure-anthropic/claude-opus-4-6":{"id":"azure-anthropic/claude-opus-4-6","name":"Claude Opus 4.6 (Azure Anthropic)","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"azure-anthropic/claude-opus-4-8":{"id":"azure-anthropic/claude-opus-4-8","name":"Claude Opus 4.8 (Azure Anthropic)","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"azure-anthropic/claude-opus-5-5":{"id":"azure-anthropic/claude-opus-5-5","name":"Claude Opus 5.5 (Azure Anthropic)","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"azure-anthropic/claude-opus-4-7":{"id":"azure-anthropic/claude-opus-4-7","name":"Claude Opus 4.7 (Azure Anthropic)","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"zai/glm-5.2":{"id":"zai/glm-5.2","name":"GLM-5.2 (Z AI)","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"zai/glm-4.5-x":{"id":"zai/glm-4.5-x","name":"GLM-4.5 X (Z AI)","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":128000},"cost":{"input":2.2,"output":8.9,"cache_read":0.45}},"zai/glm-4.5-airx":{"id":"zai/glm-4.5-airx","name":"GLM-4.5 AirX (Z AI)","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":128000},"cost":{"input":1.1,"output":4.5,"cache_read":0.22}},"zai/glm-4.6v":{"id":"zai/glm-4.6v","name":"GLM-4.6V (Z AI)","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16000},"cost":{"input":0.3,"output":0.9,"cache_read":0.05},"canonical_model_id":"zhipuai/glm-4.6v"},"zai/glm-5.1":{"id":"zai/glm-5.1","name":"GLM-5.1 (Z AI)","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.1"},"zai/glm-4.5":{"id":"zai/glm-4.5","name":"GLM-4.5 (Z AI)","description":"Hybrid-reasoning GLM release that made the 4.5 line broadly useful","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":98304},"cost":{"input":0.6,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.5"},"zai/glm-4.7":{"id":"zai/glm-4.7","name":"GLM-4.7 (Z AI)","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.6,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.7"},"zai/glm-5.3":{"id":"zai/glm-5.3","name":"GLM-5.3 (Z AI)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"zai/glm-4-32b-0414-128k":{"id":"zai/glm-4-32b-0414-128k","name":"GLM-4 32B (0414-128k) (Z AI)","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":128000},"cost":{"input":0.1,"output":0.1}},"zai/glm-5.3-flash":{"id":"zai/glm-5.3-flash","name":"GLM-5.3 Flash (Z AI)","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai/glm-4.5-air":{"id":"zai/glm-4.5-air","name":"GLM-4.5 Air (Z AI)","description":"Lighter GLM-4.5 variant for fast coding assistance and cheaper agents","family":"glm-air","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":98304},"cost":{"input":0.2,"output":1.1,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-4.5-air"},"zai/glm-4.6":{"id":"zai/glm-4.6","name":"GLM-4.6 (Z AI)","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0.6,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.6"},"zai/glm-4.5v":{"id":"zai/glm-4.5v","name":"GLM-4.5V (Z AI)","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-08-11","last_updated":"2025-08-11","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16000},"cost":{"input":0.6,"output":1.8,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.5v"},"zai/glm-4.7-flashx":{"id":"zai/glm-4.7-flashx","name":"GLM-4.7 FlashX (Z AI)","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.07,"output":0.4,"cache_read":0.01},"canonical_model_id":"zhipuai/glm-4.7-flashx"},"zai/glm-5":{"id":"zai/glm-5","name":"GLM-5 (Z AI)","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202800,"output":131100},"cost":{"input":1,"output":3.2,"cache_read":0.2},"canonical_model_id":"zhipuai/glm-5"},"zai/glm-4.6v-flashx":{"id":"zai/glm-4.6v-flashx","name":"GLM-4.6V FlashX (Z AI)","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16000},"cost":{"input":0.04,"output":0.4,"cache_read":0.004}},"entrim/glm-5.3":{"id":"entrim/glm-5.3","name":"GLM-5.3 (entrim)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.5,"output":2,"cache_read":0.15},"canonical_model_id":"zhipuai/glm-5.3"},"entrim/glm-5.3-flash":{"id":"entrim/glm-5.3-flash","name":"GLM-5.3 Flash (entrim)","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.1,"output":0.35,"cache_read":0.0175},"canonical_model_id":"zhipuai/glm-5.3-flash"},"entrim/deepseek-v4.1-flash-1017":{"id":"entrim/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017 (entrim)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.2,"output":0.8,"cache_read":0.005},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"runware/glm-5.2":{"id":"runware/glm-5.2","name":"GLM-5.2 (Runware)","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1024000,"output":128000},"cost":{"input":0.8,"output":2.55,"cache_read":0.16},"canonical_model_id":"zhipuai/glm-5.2"},"runware/kimi-k3.1-pro":{"id":"runware/kimi-k3.1-pro","name":"Kimi K3.1 Pro (runware)","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":950000,"output":131072},"cost":{"input":2,"output":10,"cache_read":0.2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"runware/kimi-k3":{"id":"runware/kimi-k3","name":"Kimi K3 (Runware)","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"runware/deepseek-v4.1-flash":{"id":"runware/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash (Runware)","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.15,"output":0.6,"cache_read":0.01},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"runware/deepseek-v4-pro":{"id":"runware/deepseek-v4-pro","name":"DeepSeek V4 Pro (Runware)","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.961,"output":1.922,"cache_read":0.079},"canonical_model_id":"deepseek/deepseek-v4-pro"},"runware/glm-5.3":{"id":"runware/glm-5.3","name":"GLM-5.3 (Runware)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.2},"canonical_model_id":"zhipuai/glm-5.3"},"runware/deepseek-v4-flash":{"id":"runware/deepseek-v4-flash","name":"DeepSeek V4 Flash (Runware)","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.076,"output":0.153,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4-flash"},"runware/glm-5.3-flash":{"id":"runware/glm-5.3-flash","name":"GLM-5.3 Flash (Runware)","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"runware/gemma-4-31b-it":{"id":"runware/gemma-4-31b-it","name":"Gemma 4 31B IT (Runware)","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.102,"output":0.297,"cache_read":0.012},"canonical_model_id":"google/gemma-4-31b-it"},"runware/deepseek-v4.1-flash-1017":{"id":"runware/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017 (runware)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.15,"output":0.6,"cache_read":0.01},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"together-ai/kimi-k3":{"id":"together-ai/kimi-k3","name":"Kimi K3 (Together AI)","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":1000000},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"together-ai/deepseek-v4.1-flash":{"id":"together-ai/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash (Together AI)","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"together-ai/deepseek-v4-pro":{"id":"together-ai/deepseek-v4-pro","name":"DeepSeek V4 Pro (Together AI)","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":163840},"cost":{"input":1.32,"output":3.96,"cache_read":0.13},"canonical_model_id":"deepseek/deepseek-v4-pro"},"together-ai/glm-4.7":{"id":"together-ai/glm-4.7","name":"GLM-4.7 (Together AI)","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":false,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":128000},"cost":{"input":0.45,"output":2},"canonical_model_id":"zhipuai/glm-4.7"},"together-ai/glm-5.3":{"id":"together-ai/glm-5.3","name":"GLM-5.3 (Together AI)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943717},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"together-ai/minimax-m3.1-flash":{"id":"together-ai/minimax-m3.1-flash","name":"MiniMax M3.1 Flash (Together AI)","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"together-ai/glm-5.3-flash":{"id":"together-ai/glm-5.3-flash","name":"GLM-5.3 Flash (Together AI)","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943717},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"together-ai/muse-glimmer-30b":{"id":"together-ai/muse-glimmer-30b","name":"Muse Glimmer 30B (Together AI)","description":"Muse Glimmer is a 30-billion-parameter open-weight multimodal model from Meta Superintelligence Labs, distilled from Muse Spark for always-on local agents, tool use, coding, and image understanding.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-08-10","last_updated":"2026-08-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":117964},"cost":{"input":0.35,"output":1.5,"cache_read":0.04},"canonical_model_id":"meta/muse-glimmer-30b"},"together-ai/gpt-oss-120b":{"id":"together-ai/gpt-oss-120b","name":"GPT OSS 120B (Together AI)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"openai/gpt-oss-120b"},"together-ai/deepseek-v4.1-flash-1017":{"id":"together-ai/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017 (Together AI)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"google-vertex/gemini-3.8-flash":{"id":"google-vertex/gemini-3.8-flash","name":"Gemini 3.8 Flash (Google Vertex AI)","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"cache_write":0.08333},"canonical_model_id":"google/gemini-3.8-flash"},"google-vertex/gemini-4-carbon":{"id":"google-vertex/gemini-4-carbon","name":"Gemini 4 Carbon (Google Vertex AI)","description":"Google's most capable reasoning model for complex software engineering, deep math and science, high factual accuracy, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":0.375},"canonical_model_id":"google/gemini-4-carbon"},"google-vertex/gemini-3.5-flash":{"id":"google-vertex/gemini-3.5-flash","name":"Gemini 3.5 Flash (Google Vertex AI)","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"cache_read":0.15,"cache_write":0.08333,"input_audio":3},"canonical_model_id":"google/gemini-3.5-flash"},"google-vertex/gemini-3.6-flash":{"id":"google-vertex/gemini-3.6-flash","name":"Gemini 3.6 Flash (Google Vertex AI)","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"cache_write":0.08333},"canonical_model_id":"google/gemini-3.6-flash"},"google-vertex/gemini-3.1-pro-preview":{"id":"google-vertex/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro (Preview) (Google Vertex AI)","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"google-vertex/gemini-3.1-flash-lite":{"id":"google-vertex/gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite (Google Vertex AI)","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"cache_write":0.08333,"input_audio":0.5},"canonical_model_id":"google/gemini-3.1-flash-lite"},"google-vertex/gemini-4-argon":{"id":"google-vertex/gemini-4-argon","name":"Gemini 4 Argon (Google Vertex AI)","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":0.375},"canonical_model_id":"google/gemini-4-argon"},"google-vertex/gemini-3.5-flash-lite":{"id":"google-vertex/gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite (Google Vertex AI)","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"cache_write":0.08333},"canonical_model_id":"google/gemini-3.5-flash-lite"},"google-vertex/gemini-3-flash-preview":{"id":"google-vertex/gemini-3-flash-preview","name":"Gemini 3 Flash (Preview) (Google Vertex AI)","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.5,"output":3,"cache_read":0.05,"input_audio":1},"canonical_model_id":"google/gemini-3-flash-preview"},"google-vertex/gemini-3.7-flash":{"id":"google-vertex/gemini-3.7-flash","name":"Gemini 3.7 Flash (Google Vertex AI)","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"cache_write":0.08333},"canonical_model_id":"google/gemini-3.7-flash"},"nebius/minimax-m3.1-flash":{"id":"nebius/minimax-m3.1-flash","name":"MiniMax M3.1 Flash (Nebius AI)","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"ranoai/deepseek-v4-flash":{"id":"ranoai/deepseek-v4-flash","name":"DeepSeek V4 Flash (RanoAI)","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":393216},"cost":{"input":0.14,"output":0.28,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash"},"sciforium/deepseek-v4.1-flash-1017":{"id":"sciforium/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017 (sciforium)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"luminal/deepseek-v4.1-flash":{"id":"luminal/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash (luminal)","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.135,"output":0.54,"cache_read":0.0027},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"tencent/glm-5.2":{"id":"tencent/glm-5.2","name":"GLM-5.2 (Tencent Cloud)","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"tencent/kimi-k2.6":{"id":"tencent/kimi-k2.6","name":"Kimi K2.6 (Tencent Cloud)","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.858,"output":3.566,"cache_read":0.145},"canonical_model_id":"moonshotai/kimi-k2.6"},"tencent/step-5-preview":{"id":"tencent/step-5-preview","name":"Step 5 Preview (Tencent Cloud)","description":"StepFun's next-generation flagship base model for coding and professional knowledge work, with native text, image, and video input and a 1M-token context window","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":65536},"cost":{"input":1,"output":2.7,"cache_read":0.1},"canonical_model_id":"stepfun/step-5-preview"},"tencent/kimi-k3":{"id":"tencent/kimi-k3","name":"Kimi K3 (Tencent Cloud)","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"tencent/glm-5.1":{"id":"tencent/glm-5.1","name":"GLM-5.1 (Tencent Cloud)","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.1"},"tencent/mimo-v2.6-pro":{"id":"tencent/mimo-v2.6-pro","name":"MiMo V2.6 Pro (Tencent Cloud)","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.435,"output":0.87,"cache_read":0.0036},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"tencent/hy-mt2-plus":{"id":"tencent/hy-mt2-plus","name":"Hy-MT2 Plus (Tencent Cloud)","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":4096},"cost":{"input":0.074,"output":0.295}},"tencent/deepseek-v4.1-flash":{"id":"tencent/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash (Tencent Cloud)","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":393216},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"tencent/deepseek-v4-pro":{"id":"tencent/deepseek-v4-pro","name":"DeepSeek V4 Pro (Tencent Cloud)","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":393216},"cost":{"input":0.66,"output":1.98,"cache_read":0.022},"canonical_model_id":"deepseek/deepseek-v4-pro"},"tencent/glm-5.3":{"id":"tencent/glm-5.3","name":"GLM-5.3 (Tencent Cloud)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"tencent/mimo-v2.6-flash":{"id":"tencent/mimo-v2.6-flash","name":"MiMo V2.6 Flash (Tencent Cloud)","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"tencent/minimax-m3":{"id":"tencent/minimax-m3","name":"MiniMax M3 (Tencent Cloud)","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"},"tencent/kimi-k2.7-code":{"id":"tencent/kimi-k2.7-code","name":"Kimi K2.7 Code (Tencent Cloud)","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"tencent/deepseek-v4-flash":{"id":"tencent/deepseek-v4-flash","name":"DeepSeek V4 Flash (Tencent Cloud)","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":393216},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4-flash"},"tencent/kimi-k2.7-code-highspeed":{"id":"tencent/kimi-k2.7-code-highspeed","name":"Kimi K2.7 Code Highspeed (Tencent Cloud)","description":"Lower-latency Kimi Code variant for interactive edits and coding-agent loops","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.9,"output":8,"cache_read":0.38},"canonical_model_id":"moonshotai/kimi-k2.7-code-highspeed"},"tencent/glm-5.3-flash":{"id":"tencent/glm-5.3-flash","name":"GLM-5.3 Flash (Tencent Cloud)","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"tencent/glm-5-turbo":{"id":"tencent/glm-5-turbo","name":"GLM-5 Turbo (Tencent Cloud)","description":"Faster GLM-5 lane for coding agents that need lower latency","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":128000},"cost":{"input":1.2,"output":4,"cache_read":0.24},"canonical_model_id":"zhipuai/glm-5-turbo"},"tencent/hy3":{"id":"tencent/hy3","name":"Hy3 (Tencent Cloud)","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0.132,"output":0.528,"cache_read":0.033},"canonical_model_id":"tencent/hy3"},"tencent/hy4-preview":{"id":"tencent/hy4-preview","name":"Hy4 Preview (Tencent Cloud)","description":"A next-generation productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-28","last_updated":"2026-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":65536},"cost":{"input":0.834,"output":2.501,"cache_read":0.042},"canonical_model_id":"tencent/hy4-preview"},"tencent/deepseek-v4-flash-0731":{"id":"tencent/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731 (Tencent Cloud)","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":393216},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"tencent/glm-5.3-flashx":{"id":"tencent/glm-5.3-flashx","name":"GLM-5.3 FlashX (Tencent Cloud)","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-18","last_updated":"2026-09-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.37,"output":1.25,"cache_read":0.075}},"tencent/kimi-k2.8-preview":{"id":"tencent/kimi-k2.8-preview","name":"Kimi K2.8 Preview (Tencent Cloud)","description":"Kimi coding model with more efficient thinking and up to 1M context, available through Kimi Code","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":1,"output":4,"cache_read":0.25},"canonical_model_id":"moonshotai/kimi-k2.8-preview"},"tencent/minimax-m2.7":{"id":"tencent/minimax-m2.7","name":"MiniMax M2.7 (Tencent Cloud)","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M2.7"},"tencent/glm-5v-turbo":{"id":"tencent/glm-5v-turbo","name":"GLM-5V Turbo (Tencent Cloud)","description":"Fast GLM vision model for screenshots, documents, and multimodal agent tasks","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":128000},"cost":{"input":1.2,"output":4,"cache_read":0.24},"canonical_model_id":"zhipuai/glm-5v-turbo"},"tencent/deepseek-v4.1-flash-1017":{"id":"tencent/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017 (Tencent Cloud)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":393216},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"tencent/glm-5":{"id":"tencent/glm-5","name":"GLM-5 (Tencent Cloud)","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":1,"output":3.2,"cache_read":0.2},"canonical_model_id":"zhipuai/glm-5"},"alibaba/qwen3.6-plus":{"id":"alibaba/qwen3.6-plus","name":"Qwen3.6 Plus (Alibaba Cloud)","description":"Earlier Qwen multimodal workhorse for million-token agent and document tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.05,"cache_write":0.625,"tiers":[{"input":2,"output":6,"cache_read":0.2,"cache_write":2.5,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":2,"output":6,"cache_read":0.2,"cache_write":2.5}},"canonical_model_id":"alibaba/qwen3.6-plus"},"alibaba/qwen-plus-latest":{"id":"alibaba/qwen-plus-latest","name":"Qwen Plus Latest (Alibaba Cloud)","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2024-09-09","last_updated":"2024-09-09","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32000},"cost":{"input":0.4,"output":1.2,"cache_read":0.08,"cache_write":0.5}},"alibaba/glm-5.2":{"id":"alibaba/glm-5.2","name":"GLM-5.2 (Alibaba Cloud)","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.28},"canonical_model_id":"zhipuai/glm-5.2"},"alibaba/qwen3.8-omni-flash":{"id":"alibaba/qwen3.8-omni-flash","name":"Qwen3.8 Omni Flash (Alibaba Cloud)","description":"Qwen omni model for text, vision, audio, and multimodal agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-17","last_updated":"2026-09-17","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"output":131072},"cost":{"input":0.15,"output":0.47,"cache_read":0.016},"canonical_model_id":"alibaba/qwen3.8-omni-flash"},"alibaba/qwen-max":{"id":"alibaba/qwen-max","name":"Qwen Max (Alibaba Cloud)","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-04","release_date":"2024-04-03","last_updated":"2025-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":8192},"cost":{"input":1.6,"output":6.4},"canonical_model_id":"alibaba/qwen-max"},"alibaba/kimi-k3":{"id":"alibaba/kimi-k3","name":"Kimi K3 (Alibaba Cloud)","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"alibaba/qwen-plus":{"id":"alibaba/qwen-plus","name":"Qwen Plus (Alibaba Cloud)","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-04","release_date":"2024-01-25","last_updated":"2025-09-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":32000},"cost":{"input":0.4,"output":1.2,"cache_read":0.08,"cache_write":0.5},"canonical_model_id":"alibaba/qwen-plus"},"alibaba/qwen3.8-flash":{"id":"alibaba/qwen3.8-flash","name":"Qwen3.8 Flash (Alibaba Cloud)","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"output":131072},"cost":{"input":0.15,"output":0.47,"cache_read":0.016,"cache_write":0.2},"canonical_model_id":"alibaba/qwen3.8-flash"},"alibaba/kimi-k2.5":{"id":"alibaba/kimi-k2.5","name":"Kimi K2.5 (Alibaba Cloud)","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":98304},"cost":{"input":0.574,"output":3.011},"canonical_model_id":"moonshotai/kimi-k2.5"},"alibaba/qwen35-397b-a17b":{"id":"alibaba/qwen35-397b-a17b","name":"Qwen3.5 397B A17B (Alibaba Cloud)","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.6,"output":3.6},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"alibaba/deepseek-v4.1-flash":{"id":"alibaba/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash (Alibaba Cloud)","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":393216},"cost":{"input":0.3,"output":1.2,"cache_read":0.03},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"alibaba/deepseek-v4-pro":{"id":"alibaba/deepseek-v4-pro","name":"DeepSeek V4 Pro (Alibaba Cloud)","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":393216},"cost":{"input":2.4,"output":4.8,"cache_read":0.2},"canonical_model_id":"deepseek/deepseek-v4-pro"},"alibaba/glm-5.3":{"id":"alibaba/glm-5.3","name":"GLM-5.3 (Alibaba Cloud)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.28},"canonical_model_id":"zhipuai/glm-5.3"},"alibaba/qwen3.5-35b-a3b":{"id":"alibaba/qwen3.5-35b-a3b","name":"Qwen3.5 35B A3B (Alibaba Cloud)","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.25,"output":2},"canonical_model_id":"alibaba/qwen3.5-35b-a3b"},"alibaba/qwen3.7-plus":{"id":"alibaba/qwen3.7-plus","name":"Qwen3.7 Plus (Alibaba Cloud)","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"output":65536},"cost":{"input":0.4,"output":1.6,"cache_read":0.08,"cache_write":0.5},"canonical_model_id":"alibaba/qwen3.7-plus"},"alibaba/qwen3.7-max":{"id":"alibaba/qwen3.7-max","name":"Qwen3.7 Max (Alibaba Cloud)","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"output":65536},"cost":{"input":2.5,"output":7.5,"cache_read":0.5,"cache_write":3.125},"canonical_model_id":"alibaba/qwen3.7-max"},"alibaba/deepseek-v4-flash":{"id":"alibaba/deepseek-v4-flash","name":"DeepSeek V4 Flash (Alibaba Cloud)","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":393216},"cost":{"input":0.2,"output":0.4,"cache_read":0.04},"canonical_model_id":"deepseek/deepseek-v4-flash"},"alibaba/qwen3.6-flash":{"id":"alibaba/qwen3.6-flash","name":"Qwen3.6 Flash (Alibaba Cloud)","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.6","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.05,"cache_write":0.3125},"canonical_model_id":"alibaba/qwen3.6-flash"},"alibaba/qwen3.7-flash":{"id":"alibaba/qwen3.7-flash","name":"Qwen3.7 Flash (Alibaba Cloud)","description":"Lightweight multimodal Qwen model for high-throughput text, image, and video tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"input":991808,"output":65536},"cost":{"input":0.03,"output":0.13,"cache_read":0.006,"cache_write":0.0375},"canonical_model_id":"alibaba/qwen3.7-flash"},"alibaba/qwen3.6-35b-a3b":{"id":"alibaba/qwen3.6-35b-a3b","name":"Qwen3.6 35B A3B (Alibaba Cloud)","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.375,"output":2.25},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"alibaba/qwen-flash":{"id":"alibaba/qwen-flash","name":"Qwen Flash (Alibaba Cloud)","description":"Efficient Qwen model for fast chat, extraction, and high-volume workloads","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32000},"cost":{"input":0.05,"output":0.4,"cache_read":0.01,"cache_write":0.0625},"canonical_model_id":"alibaba/qwen-flash"},"alibaba/deepseek-v4-flash-0731":{"id":"alibaba/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731 (Alibaba Cloud)","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":393216},"cost":{"input":0.2,"output":0.4,"cache_read":0.04},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"alibaba/qwen3-vl-plus":{"id":"alibaba/qwen3-vl-plus","name":"Qwen3 VL Plus (Alibaba Cloud)","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"cost":{"input":0.2,"output":1.6,"cache_read":0.04,"cache_write":0.25},"canonical_model_id":"alibaba/qwen3-vl-plus"},"alibaba/qwen3.8-max":{"id":"alibaba/qwen3.8-max","name":"Qwen3.8 Max (Alibaba Cloud)","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max"},"alibaba/qwen3.5-27b":{"id":"alibaba/qwen3.5-27b","name":"Qwen3.5 27B (Alibaba Cloud)","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.3,"output":2.4},"canonical_model_id":"alibaba/qwen3.5-27b"},"alibaba/deepseek-v4.1-flash-1017":{"id":"alibaba/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017 (Alibaba Cloud)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":393216},"cost":{"input":0.3,"output":1.2,"cache_read":0.03},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"alibaba/qwen3-coder-flash":{"id":"alibaba/qwen3-coder-flash","name":"Qwen3 Coder Flash (Alibaba Cloud)","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":997952,"output":65536},"cost":{"input":0.3,"output":1.5,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"alibaba/qwen3-coder-flash"},"alibaba/glm-5":{"id":"alibaba/glm-5","name":"GLM-5 (Alibaba Cloud)","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":16384},"cost":{"input":0.573,"output":2.58},"canonical_model_id":"zhipuai/glm-5"},"alibaba/qwen3.5-122b-a10b":{"id":"alibaba/qwen3.5-122b-a10b","name":"Qwen3.5 122B A10B (Alibaba Cloud)","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.4,"output":3.2},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"groq/gpt-oss-20b":{"id":"groq/gpt-oss-20b","name":"GPT OSS 20B (Groq)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32766},"cost":{"input":0.1,"output":0.5},"canonical_model_id":"openai/gpt-oss-20b"},"groq/gpt-oss-120b":{"id":"groq/gpt-oss-120b","name":"GPT OSS 120B (Groq)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32766},"cost":{"input":0.15,"output":0.75},"canonical_model_id":"openai/gpt-oss-120b"},"openai/gpt-live-transcribe":{"id":"openai/gpt-live-transcribe","type":"transcription","name":"GPT Live Transcribe (OpenAI)","description":"Low-latency streaming speech-to-text model with keyword and language hints","family":"gpt","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2026-07-28","last_updated":"2026-07-28","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-live-transcribe"},"openai/gpt-5.2-pro":{"id":"openai/gpt-5.2-pro","name":"GPT-5.2 Pro (OpenAI)","description":"Higher-accuracy GPT-5.2 variant for tougher reasoning and review workflows","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":272000},"cost":{"input":21,"output":168},"canonical_model_id":"openai/gpt-5.2-pro"},"openai/gpt-5.5":{"id":"openai/gpt-5.5","name":"GPT-5.5 (OpenAI)","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"openai/gpt-5.2":{"id":"openai/gpt-5.2","name":"GPT-5.2 (OpenAI)","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"openai/gpt-4.1-mini":{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 Mini (OpenAI)","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-4.1-mini"},"openai/gpt-5.4-mini":{"id":"openai/gpt-5.4-mini","name":"GPT-5.4 Mini (OpenAI)","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"openai/gpt-5":{"id":"openai/gpt-5","name":"GPT-5 (OpenAI)","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"openai/gpt-5.6-sol":{"id":"openai/gpt-5.6-sol","name":"GPT-5.6 Sol (OpenAI)","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5},"canonical_model_id":"openai/gpt-5.6-sol"},"openai/gpt-6.1-terra":{"id":"openai/gpt-6.1-terra","name":"GPT-6.1 Terra (OpenAI)","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25},"canonical_model_id":"openai/gpt-6.1-terra"},"openai/gpt-4.1":{"id":"openai/gpt-4.1","name":"GPT-4.1 (OpenAI)","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"openai/o3":{"id":"openai/o3","name":"o3 (OpenAI)","description":"Deliberate o-series reasoner for hard math, coding, and multi-step analysis","family":"o","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/o3"},"openai/gpt-6-luna":{"id":"openai/gpt-6-luna","name":"GPT-6 Luna (OpenAI)","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125},"canonical_model_id":"openai/gpt-6-luna"},"openai/gpt-5-pro":{"id":"openai/gpt-5-pro","name":"GPT-5 Pro (OpenAI)","description":"Higher-accuracy GPT-5 tier for tough analysis, coding reviews, and planning","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":272000},"cost":{"input":15,"output":120},"canonical_model_id":"openai/gpt-5-pro"},"openai/gpt-6-sol":{"id":"openai/gpt-6-sol","name":"GPT-6 Sol (OpenAI)","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"openai/gpt-6-sol"},"openai/gpt-4o-transcribe":{"id":"openai/gpt-4o-transcribe","name":"GPT-4o Transcribe (OpenAI)","description":"Speech transcription model for accurate audio-to-text and captioning workflows","family":"gpt","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-03-20","last_updated":"2025-03-20","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":false,"limit":{"context":16000,"output":2000},"cost":{"input":2.5,"output":10,"input_audio":6}},"openai/gpt-5.3-codex":{"id":"openai/gpt-5.3-codex","name":"GPT-5.3 Codex (OpenAI)","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"openai/gpt-6-astra":{"id":"openai/gpt-6-astra","name":"GPT-6 Astra (OpenAI)","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"openai/gpt-6-astra"},"openai/gpt-5.1":{"id":"openai/gpt-5.1","name":"GPT-5.1 (OpenAI)","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1"},"openai/gpt-5-mini":{"id":"openai/gpt-5-mini","name":"GPT-5 Mini (OpenAI)","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"openai/gpt-5.5-pro":{"id":"openai/gpt-5.5-pro","name":"GPT-5.5 Pro (OpenAI)","description":"Highest-accuracy GPT-5.5 tier for slower, precision-heavy reasoning and coding","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.5-pro"},"openai/gpt-4o-mini-transcribe":{"id":"openai/gpt-4o-mini-transcribe","name":"GPT-4o Mini Transcribe (OpenAI)","description":"Speech transcription model for accurate audio-to-text and captioning workflows","family":"gpt","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-03-20","last_updated":"2025-03-20","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":false,"limit":{"context":16000,"output":2000},"cost":{"input":1.25,"output":5,"input_audio":3}},"openai/gpt-5.6-luna":{"id":"openai/gpt-5.6-luna","name":"GPT-5.6 Luna (OpenAI)","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-6.1-sol":{"id":"openai/gpt-6.1-sol","name":"GPT-6.1 Sol (OpenAI)","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"openai/gpt-6.1-sol"},"openai/gpt-5.4-pro":{"id":"openai/gpt-5.4-pro","name":"GPT-5.4 Pro (OpenAI)","description":"More exact GPT-5.4 tier for demanding professional reasoning and agent tasks","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180},"canonical_model_id":"openai/gpt-5.4-pro"},"openai/gpt-5-nano":{"id":"openai/gpt-5-nano","name":"GPT-5 Nano (OpenAI)","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-nano"},"openai/gpt-5.4":{"id":"openai/gpt-5.4","name":"GPT-5.4 (OpenAI)","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25},"canonical_model_id":"openai/gpt-5.4"},"openai/gpt-5.4-nano":{"id":"openai/gpt-5.4-nano","name":"GPT-5.4 Nano (OpenAI)","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"openai/gpt-4o":{"id":"openai/gpt-4o","name":"GPT-4o (OpenAI)","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o"},"openai/gpt-5.6-terra":{"id":"openai/gpt-5.6-terra","name":"GPT-5.6 Terra (OpenAI)","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"openai/gpt-5.6-terra"},"openai/gpt-transcribe":{"id":"openai/gpt-transcribe","type":"transcription","name":"GPT Transcribe (OpenAI)","description":"High-accuracy speech-to-text model for audio files and committed Realtime turns","family":"gpt","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-07-28","last_updated":"2026-07-28","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-transcribe"},"openai/gpt-4o-mini":{"id":"openai/gpt-4o-mini","name":"GPT-4o Mini (OpenAI)","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-4o-mini"},"vertex-anthropic/claude-sonnet-5":{"id":"vertex-anthropic/claude-sonnet-5","name":"Claude Sonnet 5 (Vertex AI (Anthropic))","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"vertex-anthropic/claude-opus-4-5-20251101":{"id":"vertex-anthropic/claude-opus-4-5-20251101","name":"Claude Opus 4.5 (Vertex AI (Anthropic))","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]},{"type":"budget_tokens","min":1024,"max":31999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5-20251101"},"vertex-anthropic/claude-opus-4-6":{"id":"vertex-anthropic/claude-opus-4-6","name":"Claude Opus 4.6 (Vertex AI (Anthropic))","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"vertex-anthropic/claude-sonnet-4-5":{"id":"vertex-anthropic/claude-sonnet-4-5","name":"Claude Sonnet 4.5 (Vertex AI (Anthropic))","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"vertex-anthropic/claude-sonnet-4-6":{"id":"vertex-anthropic/claude-sonnet-4-6","name":"Claude Sonnet 4.6 (Vertex AI (Anthropic))","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"vertex-anthropic/claude-opus-4-7":{"id":"vertex-anthropic/claude-opus-4-7","name":"Claude Opus 4.7 (Vertex AI (Anthropic))","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"vertex-anthropic/claude-haiku-4-5":{"id":"vertex-anthropic/claude-haiku-4-5","name":"Claude Haiku 4.5 (Vertex AI (Anthropic))","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"meta-contributor/muse-spark-1.2-contributor":{"id":"meta-contributor/muse-spark-1.2-contributor","name":"Muse Spark 1.2 Contributor (Meta Contributor)","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-06","last_updated":"2026-08-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.1,"output":0.2,"cache_read":0.002}},"meta-contributor/muse-spark-1.3-contributor":{"id":"meta-contributor/muse-spark-1.3-contributor","name":"Muse Spark 1.3 Contributor (Meta Contributor)","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.1,"output":0.2,"cache_read":0.002}},"novita/glm-5.2":{"id":"novita/glm-5.2","name":"GLM-5.2 (NovitaAI)","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"novita/kimi-k2.6":{"id":"novita/kimi-k2.6","name":"Kimi K2.6 (NovitaAI)","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.8,"output":3.4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"novita/llama-4-scout-17b-instruct":{"id":"novita/llama-4-scout-17b-instruct","name":"Llama 4 Scout 17B Instruct (NovitaAI)","description":"Open Llama with long-context vision for efficient multimodal agents","family":"llama","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.18,"output":0.59},"canonical_model_id":"meta/llama-4-scout-17b-instruct"},"novita/kimi-k3":{"id":"novita/kimi-k3","name":"Kimi K3 (NovitaAI)","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"novita/qwen3-vl-30b-a3b-instruct":{"id":"novita/qwen3-vl-30b-a3b-instruct","name":"Qwen3 VL 30B A3B Instruct (NovitaAI)","description":"Open vision-language MoE model for image and video understanding, documents, and visual agents","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-10-04","last_updated":"2025-10-04","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.2,"output":0.7},"canonical_model_id":"alibaba/qwen3-vl-30b-a3b-instruct"},"novita/qwen3.8-27b":{"id":"novita/qwen3.8-27b","name":"Qwen3.8 27B (NovitaAI)","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.42,"output":3,"cache_read":0.085},"canonical_model_id":"alibaba/qwen3.8-27b"},"novita/glm-4.6v":{"id":"novita/glm-4.6v","name":"GLM-4.6V (NovitaAI)","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16000},"cost":{"input":0.3,"output":0.9,"cache_read":0.055},"canonical_model_id":"zhipuai/glm-4.6v"},"novita/qwen3.8-flash":{"id":"novita/qwen3.8-flash","name":"Qwen3.8 Flash (NovitaAI)","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.47,"cache_read":0.016},"canonical_model_id":"alibaba/qwen3.8-flash"},"novita/glm-5.1":{"id":"novita/glm-5.1","name":"GLM-5.1 (NovitaAI)","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":1.38,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.1"},"novita/minimax-m2.5":{"id":"novita/minimax-m2.5","name":"MiniMax M2.5 (NovitaAI)","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131100},"cost":{"input":0.3,"output":1.2,"cache_read":0.03},"canonical_model_id":"minimax/MiniMax-M2.5"},"novita/qwen35-397b-a17b":{"id":"novita/qwen35-397b-a17b","name":"Qwen3.5 397B A17B (NovitaAI)","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":64000},"cost":{"input":0.6,"output":3.6},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"novita/deepseek-v4.1-flash":{"id":"novita/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash (NovitaAI)","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"novita/ling-3.0-flash":{"id":"novita/ling-3.0-flash","name":"InclusionAI Ling 3.0 Flash (NovitaAI)","description":"Hybrid-linear MoE reasoning model with 124B total and 5.1B active parameters for efficient agents","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-23","last_updated":"2026-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.06,"output":0.18,"cache_read":0.012},"canonical_model_id":"inclusionai/ling-3.0-flash"},"novita/glm-4.7":{"id":"novita/glm-4.7","name":"GLM-4.7 (NovitaAI)","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":128000},"cost":{"input":0.6,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.7"},"novita/qwen3.8-2.4t-a95b":{"id":"novita/qwen3.8-2.4t-a95b","name":"Qwen3.8 2.4T A95B (NovitaAI)","description":"Open-weight sparse MoE (2.4T total, 95B active), the open-weight twin of Qwen3.8 Max for coding, research, complex reasoning, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"novita/glm-5.3":{"id":"novita/glm-5.3","name":"GLM-5.3 (NovitaAI)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"novita/minimax-m3.1-flash":{"id":"novita/minimax-m3.1-flash","name":"MiniMax M3.1 Flash (NovitaAI)","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":524288},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"novita/minimax-m3":{"id":"novita/minimax-m3","name":"MiniMax M3 (NovitaAI)","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"},"novita/qwen3.7-max":{"id":"novita/qwen3.7-max","name":"Qwen3.7 Max (NovitaAI)","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":1.25,"output":3.75,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.7-max"},"novita/kimi-k2":{"id":"novita/kimi-k2","name":"Kimi K2 (NovitaAI)","description":"Kimi model for long-context chat, coding, and agentic reasoning","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-07-11","last_updated":"2025-07-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":131072},"cost":{"input":0.57,"output":2.3}},"novita/kimi-k2.7-code":{"id":"novita/kimi-k2.7-code","name":"Kimi K2.7 Code (NovitaAI)","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"novita/deepseek-v4-flash":{"id":"novita/deepseek-v4-flash","name":"DeepSeek V4 Flash (NovitaAI)","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1050000,"output":393216},"cost":{"input":0.14,"output":0.28,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash"},"novita/llama-3.3-70b-instruct":{"id":"novita/llama-3.3-70b-instruct","name":"Llama 3.3 70B Instruct (NovitaAI)","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":120000},"cost":{"input":0.135,"output":0.4},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"novita/glm-5.3-flash":{"id":"novita/glm-5.3-flash","name":"GLM-5.3 Flash (NovitaAI)","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"novita/gemma-4-31b-it":{"id":"novita/gemma-4-31b-it","name":"Gemma 4 31B IT (NovitaAI)","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.14,"output":0.4},"canonical_model_id":"google/gemma-4-31b-it"},"novita/hy3":{"id":"novita/hy3","name":"Hy3 (NovitaAI)","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":192000,"output":262144},"cost":{"input":0.14,"output":0.58,"cache_read":0.035},"canonical_model_id":"tencent/hy3"},"novita/glm-4.6":{"id":"novita/glm-4.6","name":"GLM-4.6 (NovitaAI)","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.55,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.6"},"novita/qwen3.6-35b-a3b":{"id":"novita/qwen3.6-35b-a3b","name":"Qwen3.6 35B A3B (NovitaAI)","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":64000},"cost":{"input":0.248,"output":1.485},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"novita/gemma-4-26b-a4b-it":{"id":"novita/gemma-4-26b-a4b-it","name":"Gemma 4 26B A4B IT (NovitaAI)","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.13,"output":0.4},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"novita/glm-4.5v":{"id":"novita/glm-4.5v","name":"GLM-4.5V (NovitaAI)","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-08-11","last_updated":"2025-08-11","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":16000},"cost":{"input":0.6,"output":1.8,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.5v"},"novita/deepseek-v4-flash-0731":{"id":"novita/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731 (NovitaAI)","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1050000,"output":393216},"cost":{"input":0.14,"output":0.28,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"novita/minimax-m2.7":{"id":"novita/minimax-m2.7","name":"MiniMax M2.7 (NovitaAI)","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131100},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M2.7"},"novita/qwen3.8-max":{"id":"novita/qwen3.8-max","name":"Qwen3.8 Max (NovitaAI)","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.8-max"},"novita/step-3.7-flash":{"id":"novita/step-3.7-flash","name":"Step 3.7 Flash (NovitaAI)","description":"Newer StepFun flash model for faster agents, coding, and multimodal prompts","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2026-03-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"cost":{"input":0.2,"output":1.15,"cache_read":0.04},"canonical_model_id":"stepfun/step-3.7-flash"},"novita/deepseek-v4.1-flash-1017":{"id":"novita/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017 (NovitaAI)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"novita/glm-5":{"id":"novita/glm-5","name":"GLM-5 (NovitaAI)","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202800,"output":131072},"cost":{"input":1,"output":3.2,"cache_read":0.2},"canonical_model_id":"zhipuai/glm-5"},"novita/llama-4-maverick-17b-instruct":{"id":"novita/llama-4-maverick-17b-instruct","name":"Llama 4 Maverick 17B Instruct (NovitaAI)","description":"Open multimodal Llama for strong reasoning with efficient everyday serving","family":"llama","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":8192},"cost":{"input":0.27,"output":0.85},"canonical_model_id":"meta/llama-4-maverick-17b-instruct"},"novita/qwen3.5-122b-a10b":{"id":"novita/qwen3.5-122b-a10b","name":"Qwen3.5 122B A10B (NovitaAI)","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.4,"output":3.2},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"moonshot/kimi-k3.1-pro-highspeed":{"id":"moonshot/kimi-k3.1-pro-highspeed","name":"Kimi K3.1 Pro Highspeed (Moonshot AI)","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":4}},"moonshot/kimi-k3.1-pro":{"id":"moonshot/kimi-k3.1-pro","name":"Kimi K3.1 Pro (Moonshot AI)","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"moonshot/kimi-k2.6":{"id":"moonshot/kimi-k2.6","name":"Kimi K2.6 (Moonshot AI)","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"moonshot/kimi-k3":{"id":"moonshot/kimi-k3","name":"Kimi K3 (Moonshot AI)","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"moonshot/kimi-k2.5":{"id":"moonshot/kimi-k2.5","name":"Kimi K2.5 (Moonshot AI)","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.6,"output":3,"cache_read":0.1},"canonical_model_id":"moonshotai/kimi-k2.5"},"moonshot/kimi-k2.7-code":{"id":"moonshot/kimi-k2.7-code","name":"Kimi K2.7 Code (Moonshot AI)","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"moonshot/kimi-k2.7-code-highspeed":{"id":"moonshot/kimi-k2.7-code-highspeed","name":"Kimi K2.7 Code Highspeed (Moonshot AI)","description":"Lower-latency Kimi Code variant for interactive edits and coding-agent loops","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.9,"output":8,"cache_read":0.38},"canonical_model_id":"moonshotai/kimi-k2.7-code-highspeed"},"xiaomi/mimo-v2.6-pro":{"id":"xiaomi/mimo-v2.6-pro","name":"MiMo V2.6 Pro (Xiaomi)","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.435,"output":0.87,"cache_read":0.0036},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"xiaomi/mimo-v2.6-flash":{"id":"xiaomi/mimo-v2.6-flash","name":"MiMo V2.6 Flash (Xiaomi)","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"google-ai-studio/gemini-3.8-flash":{"id":"google-ai-studio/gemini-3.8-flash","name":"Gemini 3.8 Flash (Google AI Studio)","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"cache_write":0.08333},"canonical_model_id":"google/gemini-3.8-flash"},"google-ai-studio/gemini-4-carbon":{"id":"google-ai-studio/gemini-4-carbon","name":"Gemini 4 Carbon (Google AI Studio)","description":"Google's most capable reasoning model for complex software engineering, deep math and science, high factual accuracy, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":0.375},"canonical_model_id":"google/gemini-4-carbon"},"google-ai-studio/gemini-pro-latest":{"id":"google-ai-studio/gemini-pro-latest","name":"Gemini Pro Latest (Google AI Studio)","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-27","last_updated":"2026-02-27","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2}},"google-ai-studio/gemini-3.6-flash":{"id":"google-ai-studio/gemini-3.6-flash","name":"Gemini 3.6 Flash (Google AI Studio)","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"cache_write":0.08333},"canonical_model_id":"google/gemini-3.6-flash"},"google-ai-studio/gemini-3.1-pro-preview":{"id":"google-ai-studio/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro (Preview) (Google AI Studio)","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"google-ai-studio/gemini-3.1-flash-lite":{"id":"google-ai-studio/gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite (Google AI Studio)","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"cache_write":0.08333,"input_audio":0.5},"canonical_model_id":"google/gemini-3.1-flash-lite"},"google-ai-studio/gemini-4-argon":{"id":"google-ai-studio/gemini-4-argon","name":"Gemini 4 Argon (Google AI Studio)","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":0.375},"canonical_model_id":"google/gemini-4-argon"},"google-ai-studio/gemini-3.5-flash-lite":{"id":"google-ai-studio/gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite (Google AI Studio)","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"cache_write":0.08333},"canonical_model_id":"google/gemini-3.5-flash-lite"},"google-ai-studio/gemini-3-flash-preview":{"id":"google-ai-studio/gemini-3-flash-preview","name":"Gemini 3 Flash (Preview) (Google AI Studio)","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.5,"output":3,"cache_read":0.05,"input_audio":1},"canonical_model_id":"google/gemini-3-flash-preview"},"runpod/kimi-k3.1-pro-highspeed":{"id":"runpod/kimi-k3.1-pro-highspeed","name":"Kimi K3.1 Pro Highspeed (Runpod)","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":4,"output":20,"cache_read":0.2}},"runpod/kimi-k3.1-pro":{"id":"runpod/kimi-k3.1-pro","name":"Kimi K3.1 Pro (Runpod)","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":2,"output":10,"cache_read":0.2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"runpod/kimi-k3":{"id":"runpod/kimi-k3","name":"Kimi K3 (Runpod)","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"runpod/glm-5.3":{"id":"runpod/glm-5.3","name":"GLM-5.3 (Runpod)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0.77,"output":2.42,"cache_read":0.143},"canonical_model_id":"zhipuai/glm-5.3"},"cerebras/gpt-oss-120b":{"id":"cerebras/gpt-oss-120b","name":"GPT OSS 120B (Cerebras)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.35,"output":0.75},"canonical_model_id":"openai/gpt-oss-120b"},"reka-ai/reka-edge-2603":{"id":"reka-ai/reka-edge-2603","name":"Reka Edge 2603 (reka-ai)","description":"Multimodal model for analyzing text, images, documents, and rich media","family":"reka","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-09","last_updated":"2026-10-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":16384,"output":16384},"cost":{"input":0.1,"output":0.1}},"reka-ai/deepseek-v4.1-flash":{"id":"reka-ai/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash (reka-ai)","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.135,"output":0.54,"cache_read":0.007},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"reka-ai/glm-5.3":{"id":"reka-ai/glm-5.3","name":"GLM-5.3 (reka-ai)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":262144},"cost":{"input":0.45,"output":1.8,"cache_read":0.135},"canonical_model_id":"zhipuai/glm-5.3"},"reka-ai/glm-5.3-flash":{"id":"reka-ai/glm-5.3-flash","name":"GLM-5.3 Flash (reka-ai)","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":262144},"cost":{"input":0.11,"output":0.3,"cache_read":0.02},"canonical_model_id":"zhipuai/glm-5.3-flash"},"reka-ai/deepseek-v4.1-flash-1017":{"id":"reka-ai/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017 (reka-ai)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"minimax/minimax-m2.1":{"id":"minimax/minimax-m2.1","name":"MiniMax M2.1 (MiniMax)","description":"Earlier MiniMax agent model for practical coding and productivity tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"output":131072},"cost":{"input":0.27,"output":1.1},"canonical_model_id":"minimax/MiniMax-M2.1"},"minimax/minimax-m2.1-lightning":{"id":"minimax/minimax-m2.1-lightning","name":"MiniMax M2.1 Lightning (MiniMax)","description":"High-speed MiniMax model for low-latency coding and agent workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":196608,"output":131072},"cost":{"input":0.12,"output":0.48}},"minimax/minimax-m2.5-highspeed":{"id":"minimax/minimax-m2.5-highspeed","name":"MiniMax M2.5 Highspeed (MiniMax)","description":"High-speed MiniMax model for low-latency coding and agent workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-13","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131100},"cost":{"input":0.6,"output":2.4,"cache_read":0.03},"canonical_model_id":"minimax/MiniMax-M2.5-highspeed"},"minimax/minimax-text-01":{"id":"minimax/minimax-text-01","name":"MiniMax Text 01 (MiniMax)","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-01-15","last_updated":"2025-01-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.2,"output":1.1}},"minimax/minimax-m2.5":{"id":"minimax/minimax-m2.5","name":"MiniMax M2.5 (MiniMax)","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131100},"cost":{"input":0.3,"output":1.2,"cache_read":0.03},"canonical_model_id":"minimax/MiniMax-M2.5"},"minimax/minimax-m2":{"id":"minimax/minimax-m2","name":"MiniMax M2 (MiniMax)","description":"Efficient open MiniMax model built for coding agents and tool-heavy workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-10-27","last_updated":"2025-10-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"output":131072},"cost":{"input":0.2,"output":1,"cache_read":0.03},"canonical_model_id":"minimax/MiniMax-M2"},"minimax/minimax-m3.1-flash":{"id":"minimax/minimax-m3.1-flash","name":"MiniMax M3.1 Flash (MiniMax)","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":524288},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"minimax/minimax-m3":{"id":"minimax/minimax-m3","name":"MiniMax M3 (MiniMax)","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":512000,"output":131072},"cost":{"input":0.6,"output":2.4,"cache_read":0.12},"canonical_model_id":"minimax/MiniMax-M3"},"minimax/minimax-m2.7-highspeed":{"id":"minimax/minimax-m2.7-highspeed","name":"MiniMax M2.7 Highspeed (MiniMax)","description":"Low-latency M2.7 variant for interactive coding plans and agent loops","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131100},"cost":{"input":0.6,"output":2.4,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M2.7-highspeed"},"minimax/minimax-m2.7":{"id":"minimax/minimax-m2.7","name":"MiniMax M2.7 (MiniMax)","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131100},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M2.7"},"quartz/gemini-3.1-pro-preview":{"id":"quartz/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro (Preview) (Quartz)","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"meta/muse-spark-1.3":{"id":"meta/muse-spark-1.3","name":"Muse Spark 1.3 (Meta)","description":"Muse Spark 1.3 is a multimodal reasoning model from Meta for long-running agentic, multi-agent, and coding workflows. It improves long-horizon agent collaboration, instruction following, and coding efficiency relative to Muse Spark 1.2.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.3"},"meta/muse-spark-1.1":{"id":"meta/muse-spark-1.1","name":"Muse Spark 1.1 (Meta)","description":"Muse Spark is a natively multimodal reasoning model with support for tool-use, visual chain of thought, and multi-agent orchestration.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-08","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.1"},"meta/muse-wonder-1.0":{"id":"meta/muse-wonder-1.0","name":"Muse Wonder 1.0 (Meta)","description":"Muse Wonder is a frontier multimodal reasoning model from Meta for personal and professional agents, long-horizon coding, and computer use. It combines Active Memory, which carries relevant context across conversations, with Active Focus, which keeps it working through blockers toward a goal.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-12","last_updated":"2026-10-12","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":4,"output":20,"cache_read":0.2},"canonical_model_id":"meta/muse-wonder-1.0"},"meta/muse-ember-1.0":{"id":"meta/muse-ember-1.0","name":"Muse Ember 1.0 (Meta)","description":"Muse Ember is Meta's smallest and most efficient reasoning model, built for the work agents repeat all day: tool calls, coding subtasks, routing, extraction, and long-document parsing. It pairs with Muse Wonder or Muse Spark, which plan while Muse Ember handles the volume.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":524288},"cost":{"input":0.1,"output":0.5,"cache_read":0.004},"canonical_model_id":"meta/muse-ember-1.0"},"meta/muse-spark-1.2":{"id":"meta/muse-spark-1.2","name":"Muse Spark 1.2 (Meta)","description":"Muse Spark 1.2 is a coding-focused update to Muse Spark 1.1 with improvements in code generation, complex debugging, codebase understanding, and end-to-end developer workflows.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.2"},"deepinfra/qwen3-vl-235b-a22b-instruct":{"id":"deepinfra/qwen3-vl-235b-a22b-instruct","name":"Qwen3 VL 235B A22B Instruct (DeepInfra)","description":"Qwen vision-language instruct model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.2,"output":0.88,"cache_read":0.11},"canonical_model_id":"alibaba/qwen3-vl-235b-a22b-instruct"},"deepinfra/ling-3.0-flash-vl":{"id":"deepinfra/ling-3.0-flash-vl","name":"Ling 3.0 Flash VL (DeepInfra)","description":"Native multimodal hybrid MoE model for image and video understanding, reasoning, and visual agents","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.06,"output":0.18,"cache_read":0.012},"canonical_model_id":"inclusionai/ling-3.0-flash-vl"},"deepinfra/qwen3-vl-30b-a3b-instruct":{"id":"deepinfra/qwen3-vl-30b-a3b-instruct","name":"Qwen3 VL 30B A3B Instruct (DeepInfra)","description":"Open vision-language MoE model for image and video understanding, documents, and visual agents","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-10-04","last_updated":"2025-10-04","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"alibaba/qwen3-vl-30b-a3b-instruct"},"deepinfra/mimo-v2.6-pro":{"id":"deepinfra/mimo-v2.6-pro","name":"MiMo V2.6 Pro (DeepInfra)","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536},"cost":{"input":0.435,"output":0.87,"cache_read":0.0036},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"deepinfra/qwen3.5-9b":{"id":"deepinfra/qwen3.5-9b","name":"Qwen3.5 9B (DeepInfra)","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.1,"output":0.15},"canonical_model_id":"alibaba/qwen3.5-9b"},"deepinfra/deepseek-v4.1-flash":{"id":"deepinfra/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash (DeepInfra)","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.2,"output":0.6,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepinfra/deepseek-v4-pro":{"id":"deepinfra/deepseek-v4-pro","name":"DeepSeek V4 Pro (DeepInfra)","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":64000},"cost":{"input":1.3,"output":2.6,"cache_read":0.1},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepinfra/ling-3.0-flash":{"id":"deepinfra/ling-3.0-flash","name":"InclusionAI Ling 3.0 Flash (DeepInfra)","description":"Hybrid-linear MoE reasoning model with 124B total and 5.1B active parameters for efficient agents","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-23","last_updated":"2026-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.06,"output":0.18,"cache_read":0.012},"canonical_model_id":"inclusionai/ling-3.0-flash"},"deepinfra/mimo-v2.6-flash":{"id":"deepinfra/mimo-v2.6-flash","name":"MiMo V2.6 Flash (DeepInfra)","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536},"cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"deepinfra/granite-4.2-8b":{"id":"deepinfra/granite-4.2-8b","name":"Granite 4.2 8B (DeepInfra)","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"granite","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-25","last_updated":"2026-08-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":117964},"cost":{"input":0.06,"output":0.25,"cache_read":0.015},"canonical_model_id":"ibm/granite-4.2-8b"},"deepinfra/minimax-m3":{"id":"deepinfra/minimax-m3","name":"MiniMax M3 (DeepInfra)","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":524288},"cost":{"input":0.28,"output":1.1,"cache_read":0.056},"canonical_model_id":"minimax/MiniMax-M3"},"deepinfra/deepseek-v4-flash":{"id":"deepinfra/deepseek-v4-flash","name":"DeepSeek V4 Flash (DeepInfra)","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":393216},"cost":{"input":0.09,"output":0.18,"cache_read":0.018},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepinfra/nemotron-3-ultra-550b":{"id":"deepinfra/nemotron-3-ultra-550b","name":"Nemotron 3 Ultra 550B (DeepInfra)","description":"Nemotron multimodal model for visual reasoning and agentic AI workflows","family":"nemotron","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":262144},"cost":{"input":0.5,"output":2.2,"cache_read":0.1}},"deepinfra/gemma-4-31b-it":{"id":"deepinfra/gemma-4-31b-it","name":"Gemma 4 31B IT (DeepInfra)","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.2,"output":0.4},"canonical_model_id":"google/gemma-4-31b-it"},"deepinfra/gemma-4-26b-a4b-it":{"id":"deepinfra/gemma-4-26b-a4b-it","name":"Gemma 4 26B A4B IT (DeepInfra)","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.07,"output":0.34},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"deepinfra/muse-glimmer-30b":{"id":"deepinfra/muse-glimmer-30b","name":"Muse Glimmer 30B (DeepInfra)","description":"Muse Glimmer is a 30-billion-parameter open-weight multimodal model from Meta Superintelligence Labs, distilled from Muse Spark for always-on local agents, tool use, coding, and image understanding.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-08-10","last_updated":"2026-08-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.3,"output":1.2,"cache_read":0.04},"canonical_model_id":"meta/muse-glimmer-30b"},"deepinfra/deepseek-v3.2":{"id":"deepinfra/deepseek-v3.2","name":"DeepSeek V3.2 (DeepInfra)","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes, sparse attention, and tool-use","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":160000,"output":65536},"cost":{"input":0.26,"output":0.38,"cache_read":0.13},"canonical_model_id":"deepseek/deepseek-v3.2"},"deepinfra/deepseek-v4-flash-0731":{"id":"deepinfra/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731 (DeepInfra)","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":393216},"cost":{"input":0.08,"output":0.18,"cache_read":0.016},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepinfra/deepseek-v4.1-flash-1017":{"id":"deepinfra/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017 (DeepInfra)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.2,"output":0.6,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"azure/gpt-live-transcribe":{"id":"azure/gpt-live-transcribe","type":"transcription","name":"GPT Live Transcribe (Azure)","description":"Low-latency streaming speech-to-text model with keyword and language hints","family":"gpt","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2026-07-28","last_updated":"2026-07-28","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-live-transcribe"},"azure/gpt-5.5":{"id":"azure/gpt-5.5","name":"GPT-5.5 (Azure)","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"azure/grok-4-3":{"id":"azure/grok-4-3","name":"Grok 4.3 (Azure)","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-30","last_updated":"2026-04-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8192},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}}},"azure/gpt-5.2":{"id":"azure/gpt-5.2","name":"GPT-5.2 (Azure)","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"azure/gpt-4.1-mini":{"id":"azure/gpt-4.1-mini","name":"GPT-4.1 Mini (Azure)","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-4.1-mini"},"azure/gpt-5.2-codex":{"id":"azure/gpt-5.2-codex","name":"GPT-5.2 Codex (Azure)","description":"Code-specialist GPT for repository edits, reviews, and long-running software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2-codex"},"azure/gpt-5.4-mini":{"id":"azure/gpt-5.4-mini","name":"GPT-5.4 Mini (Azure)","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"azure/gpt-5":{"id":"azure/gpt-5","name":"GPT-5 (Azure)","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"azure/gpt-5.1-codex":{"id":"azure/gpt-5.1-codex","name":"GPT-5.1 Codex (Azure)","description":"Codex GPT for repository edits, code review, and practical software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":272000},"cost":{"input":1.25,"output":10},"canonical_model_id":"openai/gpt-5.1-codex"},"azure/gpt-5.6-sol":{"id":"azure/gpt-5.6-sol","name":"GPT-5.6 Sol (Azure)","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5},"canonical_model_id":"openai/gpt-5.6-sol"},"azure/gpt-6.1-terra":{"id":"azure/gpt-6.1-terra","name":"GPT-6.1 Terra (Azure)","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25},"canonical_model_id":"openai/gpt-6.1-terra"},"azure/gpt-4.1":{"id":"azure/gpt-4.1","name":"GPT-4.1 (Azure)","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"azure/gpt-6-luna":{"id":"azure/gpt-6-luna","name":"GPT-6 Luna (Azure)","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125},"canonical_model_id":"openai/gpt-6-luna"},"azure/gpt-5-pro":{"id":"azure/gpt-5-pro","name":"GPT-5 Pro (Azure)","description":"Higher-accuracy GPT-5 tier for tough analysis, coding reviews, and planning","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":15,"output":120},"canonical_model_id":"openai/gpt-5-pro"},"azure/gpt-6-sol":{"id":"azure/gpt-6-sol","name":"GPT-6 Sol (Azure)","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"openai/gpt-6-sol"},"azure/gpt-4o-transcribe":{"id":"azure/gpt-4o-transcribe","type":"transcription","name":"GPT-4o Transcribe (Azure)","description":"Speech-to-text model powered by GPT-4o for accurate transcription","family":"gpt","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-06-01","release_date":"2025-03-20","last_updated":"2025-03-20","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":false,"limit":{"context":16000,"output":2000},"cost":{"input":2.5,"output":10,"input_audio":6},"canonical_model_id":"openai/gpt-4o-transcribe"},"azure/gpt-5.3-codex":{"id":"azure/gpt-5.3-codex","name":"GPT-5.3 Codex (Azure)","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"azure/grok-4-1-fast-reasoning":{"id":"azure/grok-4-1-fast-reasoning","name":"Grok 4.1 Fast Reasoning (Azure)","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-11-19","last_updated":"2025-11-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":128000},"cost":{"input":0.2,"output":0.5}},"azure/gpt-6-astra":{"id":"azure/gpt-6-astra","name":"GPT-6 Astra (Azure)","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"openai/gpt-6-astra"},"azure/gpt-5.1":{"id":"azure/gpt-5.1","name":"GPT-5.1 (Azure)","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1"},"azure/gpt-5-mini":{"id":"azure/gpt-5-mini","name":"GPT-5 Mini (Azure)","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"azure/gpt-5.1-codex-mini":{"id":"azure/gpt-5.1-codex-mini","name":"GPT-5.1 Codex mini (Azure)","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5.1-codex-mini"},"azure/gpt-4o-mini-transcribe":{"id":"azure/gpt-4o-mini-transcribe","type":"transcription","name":"GPT-4o Mini Transcribe (Azure)","description":"Speech-to-text model powered by GPT-4o Mini for fast, accurate transcription","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-06-01","release_date":"2025-03-20","last_updated":"2025-03-20","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":false,"limit":{"context":16000,"output":2000},"cost":{"input":1.25,"output":5,"input_audio":3},"canonical_model_id":"openai/gpt-4o-mini-transcribe"},"azure/gpt-5.6-luna":{"id":"azure/gpt-5.6-luna","name":"GPT-5.6 Luna (Azure)","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25},"canonical_model_id":"openai/gpt-5.6-luna"},"azure/gpt-6.1-sol":{"id":"azure/gpt-6.1-sol","name":"GPT-6.1 Sol (Azure)","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"openai/gpt-6.1-sol"},"azure/gpt-5.4-pro":{"id":"azure/gpt-5.4-pro","name":"GPT-5.4 Pro (Azure)","description":"More exact GPT-5.4 tier for demanding professional reasoning and agent tasks","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180},"canonical_model_id":"openai/gpt-5.4-pro"},"azure/gpt-5-nano":{"id":"azure/gpt-5-nano","name":"GPT-5 Nano (Azure)","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-nano"},"azure/gpt-5.4":{"id":"azure/gpt-5.4","name":"GPT-5.4 (Azure)","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25},"canonical_model_id":"openai/gpt-5.4"},"azure/gpt-5.4-nano":{"id":"azure/gpt-5.4-nano","name":"GPT-5.4 Nano (Azure)","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"azure/gpt-4o":{"id":"azure/gpt-4o","name":"GPT-4o (Azure)","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o"},"azure/gpt-oss-120b":{"id":"azure/gpt-oss-120b","name":"GPT OSS 120B (Azure)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"openai/gpt-oss-120b"},"azure/gpt-5.6-terra":{"id":"azure/gpt-5.6-terra","name":"GPT-5.6 Terra (Azure)","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"openai/gpt-5.6-terra"},"azure/gpt-transcribe":{"id":"azure/gpt-transcribe","type":"transcription","name":"GPT Transcribe (Azure)","description":"High-accuracy speech-to-text model for audio files and committed Realtime turns","family":"gpt","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-07-28","last_updated":"2026-07-28","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-transcribe"},"azure/gpt-4o-mini":{"id":"azure/gpt-4o-mini","name":"GPT-4o Mini (Azure)","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-4o-mini"},"inference.net/kimi-k3.1-pro":{"id":"inference.net/kimi-k3.1-pro","name":"Kimi K3.1 Pro (Inference.net)","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":2,"output":10,"cache_read":0.2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"inference.net/glm-5.3":{"id":"inference.net/glm-5.3","name":"GLM-5.3 (Inference.net)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.9,"output":3,"cache_read":0.15},"canonical_model_id":"zhipuai/glm-5.3"},"inference.net/minimax-m3.1-flash":{"id":"inference.net/minimax-m3.1-flash","name":"MiniMax M3.1 Flash (Inference.net)","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":524288},"cost":{"input":0.1,"output":0.5,"cache_read":0.005},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"inference.net/deepseek-v4-flash":{"id":"inference.net/deepseek-v4-flash","name":"DeepSeek V4 Flash (Inference.net)","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.23,"output":0.62,"cache_read":0.0028},"canonical_model_id":"deepseek/deepseek-v4-flash"},"inference.net/glm-5.3-flash":{"id":"inference.net/glm-5.3-flash","name":"GLM-5.3 Flash (Inference.net)","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":128000},"cost":{"input":0.09,"output":0.28,"cache_read":0.02},"canonical_model_id":"zhipuai/glm-5.3-flash"},"inference.net/deepseek-v4.1-flash-cyber":{"id":"inference.net/deepseek-v4.1-flash-cyber","name":"DeepSeek V4.1 Flash Cyber (Inference.net)","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-29","last_updated":"2026-10-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1040000,"output":393216},"cost":{"input":0.3,"output":1,"cache_read":0.007}},"inference.net/llama-3.2-11b-instruct":{"id":"inference.net/llama-3.2-11b-instruct","name":"Llama 3.2 11B Instruct (Inference.net)","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":128000},"cost":{"input":0.07,"output":0.33}},"inference.net/deepseek-v4.1-flash-1017":{"id":"inference.net/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017 (Inference.net)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0.3,"output":1,"cache_read":0.007},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"scx-ai/qwen3-32b":{"id":"scx-ai/qwen3-32b","name":"Qwen3 32B (SCX.ai (Turbo))","description":"Dense open Qwen model for self-hosted chat, reasoning, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":8192},"cost":{"input":0.36,"output":0.87},"canonical_model_id":"alibaba/qwen3-32b"},"scx-ai/gpt-oss-120b":{"id":"scx-ai/gpt-oss-120b","name":"GPT OSS 120B (SCX.ai (Turbo))","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.17,"output":0.55},"canonical_model_id":"openai/gpt-oss-120b"},"scx-ai/minimax-m2.7":{"id":"scx-ai/minimax-m2.7","name":"MiniMax M2.7 (SCX.ai (Turbo))","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"output":196608},"cost":{"input":0.48,"output":1.79,"cache_read":0.05},"canonical_model_id":"minimax/MiniMax-M2.7"},"consensusprotocol/qwen3.8-27b":{"id":"consensusprotocol/qwen3.8-27b","name":"Qwen3.8 27B (consensusprotocol)","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":32768},"cost":{"input":0.08,"output":0.35,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3.8-27b"},"consensusprotocol/gpt-oss-20b":{"id":"consensusprotocol/gpt-oss-20b","name":"GPT OSS 20B (Consensus Protocol)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0.04,"output":0.19,"cache_read":0.01},"canonical_model_id":"openai/gpt-oss-20b"},"consensusprotocol/deepseek-v4.1-flash":{"id":"consensusprotocol/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash (Consensus Protocol)","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.15,"output":0.55,"cache_read":0.005},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"consensusprotocol/deepseek-v4-flash":{"id":"consensusprotocol/deepseek-v4-flash","name":"DeepSeek V4 Flash (Consensus Protocol)","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.1,"output":0.2,"cache_read":0.005},"canonical_model_id":"deepseek/deepseek-v4-flash"},"consensusprotocol/glm-5.3-flash":{"id":"consensusprotocol/glm-5.3-flash","name":"GLM-5.3 Flash (Consensus Protocol)","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.1,"output":0.25,"cache_read":0.01},"canonical_model_id":"zhipuai/glm-5.3-flash"},"consensusprotocol/gemma-4-31b-it":{"id":"consensusprotocol/gemma-4-31b-it","name":"Gemma 4 31B IT (Consensus Protocol)","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.1,"output":0.25,"cache_read":0.01},"canonical_model_id":"google/gemma-4-31b-it"},"consensusprotocol/deepseek-v4.1-flash-uncensored":{"id":"consensusprotocol/deepseek-v4.1-flash-uncensored","name":"DeepSeek V4.1 Flash 1017 Uncensored (HeimdaLLM) (consensusprotocol)","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.18,"output":0.65,"cache_read":0.005}},"fireworks/kimi-k3-fast":{"id":"fireworks/kimi-k3-fast","name":"Kimi K3 Fast (Fireworks AI)","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1040384,"output":1040384},"cost":{"input":4.5,"output":22.5,"cache_read":0.45},"canonical_model_id":"moonshotai/kimi-k3"},"fireworks/kimi-k3":{"id":"fireworks/kimi-k3","name":"Kimi K3 (Fireworks AI)","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1040384,"output":1040384},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"fireworks/deepseek-v4.1-flash":{"id":"fireworks/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash (Fireworks AI)","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.22,"output":0.66,"cache_read":0.007},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"fireworks/glm-5.3":{"id":"fireworks/glm-5.3","name":"GLM-5.3 (Fireworks AI)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"fireworks/glm-5.3-flash":{"id":"fireworks/glm-5.3-flash","name":"GLM-5.3 Flash (Fireworks AI)","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"xai/grok-4-6":{"id":"xai/grok-4-6","name":"Grok 4.6 (xAI)","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.6"},"xai/grok-4-3":{"id":"xai/grok-4-3","name":"Grok 4.3 (xAI)","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.3"},"xai/grok-4":{"id":"xai/grok-4","name":"Grok 4 (xAI)","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-07-09","last_updated":"2025-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":3,"output":15,"cache_read":0.75}},"xai/grok-4-7":{"id":"xai/grok-4-7","name":"Grok 4.7 (xAI)","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.7"},"xai/grok-4-5":{"id":"xai/grok-4-5","name":"Grok 4.5 (xAI)","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.3},"canonical_model_id":"xai/grok-4.5"},"xai/grok-build-0-1":{"id":"xai/grok-build-0-1","name":"Grok Build 0.1 (xAI)","description":"Fast Grok coding model tuned for agentic engineering and iterative edits","family":"grok-build","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":1,"output":2,"cache_read":0.2,"tiers":[{"input":2,"output":4,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2,"output":4,"cache_read":0.4}},"canonical_model_id":"xai/grok-build-0.1"},"xai/grok-4-20-beta-0309-reasoning":{"id":"xai/grok-4-20-beta-0309-reasoning","name":"Grok 4.20 Beta Reasoning (0309) (xAI)","description":"Reasoning Grok for document-heavy analysis and long-horizon tool use","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"cost":{"input":2,"output":6,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.20-0309-reasoning"},"xai/grok-4-20-beta-0309-non-reasoning":{"id":"xai/grok-4-20-beta-0309-non-reasoning","name":"Grok 4.20 Beta Non-Reasoning (0309) (xAI)","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"cost":{"input":2,"output":6,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.20-0309-non-reasoning"},"canopywave/glm-5.2":{"id":"canopywave/glm-5.2","name":"GLM-5.2 (CanopyWave)","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":32768},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"canopywave/kimi-k2.6":{"id":"canopywave/kimi-k2.6","name":"Kimi K2.6 (CanopyWave)","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.95,"output":4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"canopywave/kimi-k3":{"id":"canopywave/kimi-k3","name":"Kimi K3 (CanopyWave)","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"canopywave/qwen3.8-flash":{"id":"canopywave/qwen3.8-flash","name":"Qwen3.8 Flash (CanopyWave)","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.02},"canonical_model_id":"alibaba/qwen3.8-flash"},"canopywave/minimax-m3.1-flash":{"id":"canopywave/minimax-m3.1-flash","name":"MiniMax M3.1 Flash (CanopyWave)","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"canopywave/glm-5.3-flash":{"id":"canopywave/glm-5.3-flash","name":"GLM-5.3 Flash (CanopyWave)","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"canopywave/deepseek-v4-flash-0731":{"id":"canopywave/deepseek-v4-flash-0731","name":"deepseek-v4-flash-0731 (CanopyWave)","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.44,"output":1.32,"cache_read":0.04},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"sakana/fugu-max":{"id":"sakana/fugu-max","name":"Fugu Max (Sakana AI)","description":"Multi-agent model for routing expert agents across complex analytical tasks","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"sakana/fugu-max"},"sakana/fugu-ultra-v2.0":{"id":"sakana/fugu-ultra-v2.0","name":"Fugu Ultra v2.0 (Sakana AI)","description":"Quality-first multi-agent model for hard research, analysis, and competitions","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-08-28","release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"sakana/fugu-ultra-v2"},"sakana/fugu-ultra":{"id":"sakana/fugu-ultra","name":"Fugu Ultra (Sakana AI)","description":"Quality-first multi-agent model for hard research, analysis, and competitions","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"release_date":"2026-06-15","last_updated":"2026-06-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"sakana/fugu-ultra"}}},"dinference":{"id":"dinference","env":["DINFERENCE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.dinference.com/v1","name":"DInference","doc":"https://dinference.com","models":{"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"status":"deprecated","cost":{"input":1.25,"output":3.89},"canonical_model_id":"zhipuai/glm-5.2"},"glm-5.1":{"id":"glm-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"status":"deprecated","cost":{"input":1.25,"output":3.89},"canonical_model_id":"zhipuai/glm-5.1"},"minimax-m2.5":{"id":"minimax-m2.5","name":"MiniMax-M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":32000},"status":"deprecated","cost":{"input":0.22,"output":0.88},"canonical_model_id":"minimax/MiniMax-M2.5"},"glm-4.7":{"id":"glm-4.7","name":"GLM-4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.45,"output":1.65},"canonical_model_id":"zhipuai/glm-4.7"},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"GPT OSS 120B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.0675,"output":0.27},"canonical_model_id":"openai/gpt-oss-120b"},"glm-5":{"id":"glm-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.75,"output":2.4},"canonical_model_id":"zhipuai/glm-5"}}},"kilo":{"id":"kilo","env":["KILO_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.kilo.ai/api/gateway","name":"Kilo Gateway","doc":"https://kilo.ai","models":{"anthropic/claude-opus-4.6":{"id":"anthropic/claude-opus-4.6","name":"Claude Opus 4.6","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"anthropic/claude-opus-4.7":{"id":"anthropic/claude-opus-4.7","name":"Claude Opus 4.7","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"anthropic/claude-opus-4.8":{"id":"anthropic/claude-opus-4.8","name":"Claude Opus 4.8","description":"Claude Opus 4.8 is Anthropic's most capable generally available model in the Opus family. It supports text, image, and file inputs with text output, with reasoning support and a 1M-token...","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic/claude-opus-4.5":{"id":"anthropic/claude-opus-4.5","name":"Claude Opus 4.5 (latest)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"anthropic/claude-opus-5.5":{"id":"anthropic/claude-opus-5.5","name":"Claude Opus 5.5","description":"Claude Opus 5.5 is Anthropic's flagship model for demanding reasoning, coding, and long-horizon agentic work, succeeding Claude Opus 5. It is particularly strong at multi-step changes in large codebases, code...","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"anthropic/claude-haiku-4.5":{"id":"anthropic/claude-haiku-4.5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"anthropic/claude-sonnet-5":{"id":"anthropic/claude-sonnet-5","name":"Claude Sonnet 5","description":"Sonnet 5 is Anthropic's most capable Sonnet-class model, with frontier performance across coding, agents, and professional work. It supports adaptive thinking with selectable reasoning effort levels (low, medium, high, max,...","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"anthropic/claude-sonnet-4.5":{"id":"anthropic/claude-sonnet-4.5","name":"Claude Sonnet 4.5 (latest)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"anthropic/claude-fable-5.2":{"id":"anthropic/claude-fable-5.2","name":"Anthropic: Claude Fable 5.2","description":"Claude Fable 5.2 is Anthropic's most capable model for the most demanding technical work, with gains over Fable 5.1 in coding, reasoning, and vision. In prerelease testing it completed otherwise-infeasible...","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"anthropic/claude-fable-5.1":{"id":"anthropic/claude-fable-5.1","name":"Claude Fable 5.1","description":"Claude Fable 5.1 improves on Claude Fable 5 across the board, with the biggest gains in agentic coding, long-running agentic workflows, and knowledge work: long code refactors, front-end and visual...","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"anthropic/claude-opus-4.1":{"id":"anthropic/claude-opus-4.1","name":"Claude Opus 4.1 (latest)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-1"},"anthropic/claude-sonnet-4.6":{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"anthropic/claude-fable-5":{"id":"anthropic/claude-fable-5","name":"Claude Fable 5","description":"Claude Fable 5 is a Mythos-class model from Anthropic, built for autonomous knowledge work and coding. It supports text, image, and file inputs with text output, with reasoning support and...","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"anthropic/claude-opus-5":{"id":"anthropic/claude-opus-5","name":"Claude Opus 5","description":"Claude Opus 5 is Anthropic’s flagship model for demanding reasoning, coding, and long-horizon agentic work. It is particularly strong at end-to-end software tasks, code review and bug finding, visual analysis...","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"anthropic/claude-sonnet-5.5":{"id":"anthropic/claude-sonnet-5.5","name":"Claude Sonnet 5.5","description":"Claude Sonnet 5.5 is Anthropic's Sonnet-class model for well-scoped everyday work, succeeding Claude Sonnet 5 as a direct upgrade. It is especially strong at building features, fixing bugs, and producing...","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"anthropic/claude-haiku-5.5":{"id":"anthropic/claude-haiku-5.5","name":"Claude Haiku 5.5","description":"Claude Haiku 5.5 is Anthropic's small, fast model for high-volume, cost-sensitive work such as summarization, subagents, and browser use. It succeeds Claude Haiku 4.5 with stronger coding, computer use, and...","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125},"canonical_model_id":"anthropic/claude-haiku-5-5"},"writer/palmyra-x5":{"id":"writer/palmyra-x5","name":"Writer: Palmyra X5","description":"General-purpose chat model for instruction following, writing, and analysis","family":"palmyra","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1040000,"output":8192},"cost":{"input":0.6,"output":6},"canonical_model_id":"writer/palmyra-x5"},"aion-labs/aion-3.0":{"id":"aion-labs/aion-3.0","name":"AionLabs: Aion-3.0","description":"Aion-3.0 is a multi-model roleplaying and storytelling system from AionLabs, built on the GLM family of models. It uses a collaborative generation process in which multiple specialized models each contribute...","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-05-05","last_updated":"2026-05-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":32768},"cost":{"input":3,"output":6,"cache_read":0.75},"canonical_model_id":"aion-labs/aion-3.0"},"aion-labs/aion-3.5-mini":{"id":"aion-labs/aion-3.5-mini","name":"AionLabs: Aion 3.5 Mini","description":"Aion 3.5 Mini is a multi-model roleplaying and storytelling system from AionLabs, built on the GLM family of models. It is the smaller, lower-cost sibling of Aion 3.5 and uses...","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-09-23","last_updated":"2026-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"cost":{"input":0.7,"output":1.4,"cache_read":0.18}},"aion-labs/aion-2.0":{"id":"aion-labs/aion-2.0","name":"AionLabs: Aion-2.0","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-21","last_updated":"2025-12-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":32768},"cost":{"input":0.8,"output":1.6,"cache_read":0.2},"canonical_model_id":"aion-labs/aion-2.0"},"aion-labs/aion-3.0-mini":{"id":"aion-labs/aion-3.0-mini","name":"AionLabs: Aion-3.0-Mini","description":"Aion-3.0 Mini is a multi-model roleplaying and storytelling system from AionLabs, built on the DeepSeek family of models. It uses a collaborative generation process in which multiple specialized models each...","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-05-14","last_updated":"2026-05-14","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":32768},"cost":{"input":0.7,"output":1.4,"cache_read":0.18},"canonical_model_id":"aion-labs/aion-3.0-mini"},"aion-labs/aion-rp-llama-3.1-8b":{"id":"aion-labs/aion-rp-llama-3.1-8b","name":"AionLabs: Aion-RP 1.0 (8B)","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12-31","release_date":"2025-02-04","last_updated":"2025-02-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":29491},"cost":{"input":0.8,"output":1.6},"canonical_model_id":"aion-labs/aion-rp-llama-3.1-8b"},"aion-labs/aion-3.5":{"id":"aion-labs/aion-3.5","name":"AionLabs: Aion 3.5","description":"Aion 3.5 is a multi-model roleplaying and storytelling system from AionLabs, built on the GLM family of models. It uses a collaborative generation process in which multiple specialized models each...","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-09-23","last_updated":"2026-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"cost":{"input":3,"output":6,"cache_read":0.75}},"anthracite-org/magnum-v4-72b":{"id":"anthracite-org/magnum-v4-72b","name":"Magnum v4 72B","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-06-30","release_date":"2024-10-22","last_updated":"2024-10-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":4096},"cost":{"input":2.5,"output":5,"cache_read":2.5},"canonical_model_id":"anthracite-org/magnum-v4-72b"},"baidu/ernie-5.5-flash-preview:free":{"id":"baidu/ernie-5.5-flash-preview:free","name":"Baidu: ERNIE-5.5-Flash-Preview (free)","description":"ERNIE 5.5 Flash Preview is the latest foundation model in the ERNIE family, with comprehensive improvements in coding, agentic capabilities, knowledge work, and deep research. It has 280 billion total...","family":"ernie","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1024000,"output":921600},"cost":{"input":0,"output":0}},"baidu/ernie-light-dt-1.0-intl":{"id":"baidu/ernie-light-dt-1.0-intl","name":"Baidu: ERNIE-Light-DT-1.0","description":"ERNIE-Light-DT-1.0 is based on open-source GLM models and includes research findings from Baidu Search's Lightning large model. It features Baidu Sparse Attention (BSA), a unique sparse attention mechanism developed by...","family":"ernie","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1024000,"output":131072},"cost":{"input":1.13,"output":3.94,"cache_read":0.113}},"amazon/nova-pro-v1":{"id":"amazon/nova-pro-v1","name":"Amazon: Nova Pro 1.0","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"nova-pro","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10-31","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":5120},"cost":{"input":0.8,"output":3.2},"canonical_model_id":"amazon/nova-pro-v1"},"amazon/nova-premier-v1":{"id":"amazon/nova-premier-v1","name":"Amazon: Nova Premier 1.0","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"nova","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10","release_date":"2025-04-30","last_updated":"2025-04-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32000},"status":"deprecated","cost":{"input":2.5,"output":12.5,"cache_read":0.625},"canonical_model_id":"amazon/nova-premier"},"amazon/nova-2-lite-v1":{"id":"amazon/nova-2-lite-v1","name":"Amazon: Nova 2 Lite","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"nova","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-10","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65535},"cost":{"input":0.3,"output":2.5},"canonical_model_id":"amazon/nova-2-lite-v1"},"amazon/nova-lite-v1":{"id":"amazon/nova-lite-v1","name":"Amazon: Nova Lite 1.0","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-lite","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10-31","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":5120},"cost":{"input":0.06,"output":0.24},"canonical_model_id":"amazon/nova-lite-v1"},"amazon/nova-micro-v1":{"id":"amazon/nova-micro-v1","name":"Amazon: Nova Micro 1.0","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-micro","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10-31","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":5120},"cost":{"input":0.035,"output":0.14},"canonical_model_id":"amazon/nova-micro-v1"},"meituan/longcat-2.0":{"id":"meituan/longcat-2.0","name":"Meituan: LongCat 2.0","description":"LongCat 2.0 is a sparse mixture-of-experts language model from Meituan, with 48B active parameters out of 1.6T total. It is suited for coding, repository-level changes, long-horizon problem solving, and agentic...","family":"longcat","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048756,"output":262144},"cost":{"input":0.75,"output":3,"cache_read":0.015},"canonical_model_id":"meituan/longcat-2.0"},"particle-ai/particle-1":{"id":"particle-ai/particle-1","name":"Particle AI: Particle-1","description":"Particle-1 is a token-efficient agentic coding model from Particle AI, post-trained on DeepSeek V4.1 Flash. It is suited for software engineering work such as terminal workflows, codebase changes, and data...","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-28","last_updated":"2026-10-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.05,"output":0.5,"cache_read":0.003}},"perplexity/sonar-pro":{"id":"perplexity/sonar-pro","name":"Perplexity: Sonar Pro","description":"Advanced Sonar search model for deeper research and cited synthesis","family":"sonar-pro","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-03-07","last_updated":"2025-03-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8000},"cost":{"input":3,"output":15}},"perplexity/sonar":{"id":"perplexity/sonar","name":"Perplexity: Sonar","description":"Sonar search model for current answers, retrieval, and citation-backed chat","family":"sonar","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-01-27","last_updated":"2025-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":127072,"output":114364},"cost":{"input":1,"output":1}},"perplexity/sonar-reasoning-pro":{"id":"perplexity/sonar-reasoning-pro","name":"Perplexity: Sonar Reasoning Pro","description":"Web-grounded reasoning model for multi-step research and cited answers","family":"sonar-reasoning","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-03-07","last_updated":"2025-03-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":115200},"cost":{"input":2,"output":8}},"perplexity/sonar-deep-research":{"id":"perplexity/sonar-deep-research","name":"Perplexity: Sonar Deep Research","description":"Sonar search model for current answers, retrieval, and citation-backed chat","family":"sonar-deep-research","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-03-07","last_updated":"2025-03-07","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":115200},"cost":{"input":2,"output":8,"reasoning":3}},"perplexity/sonar-pro-search":{"id":"perplexity/sonar-pro-search","name":"Perplexity: Sonar Pro Search","description":"Advanced Sonar search model for deeper research and cited synthesis","family":"sonar-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-10-30","last_updated":"2025-10-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8000},"cost":{"input":3,"output":15}},"rekaai/reka-flash-3":{"id":"rekaai/reka-flash-3","name":"Reka Flash 3","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"reka","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-01-31","release_date":"2025-03-10","last_updated":"2025-03-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":58982},"cost":{"input":0.1,"output":0.2},"canonical_model_id":"rekaai/reka-flash-3"},"rekaai/reka-edge":{"id":"rekaai/reka-edge","name":"Reka Edge","description":"Multimodal model for analyzing text, images, documents, and rich media","family":"reka","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["image","text","video"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"output":14745},"cost":{"input":0.1,"output":0.1},"canonical_model_id":"rekaai/reka-edge"},"x-ai/grok-4.5":{"id":"x-ai/grok-4.5","name":"Grok 4.5","description":"Grok 4.5 is SpaceXAI's smartest model with frontier performance on coding, knowledge work, and STEM.","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":450000},"cost":{"input":2,"output":6,"cache_read":0.3},"canonical_model_id":"xai/grok-4.5"},"x-ai/grok-4.3":{"id":"x-ai/grok-4.3","name":"Grok 4.3","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":900000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2},"canonical_model_id":"xai/grok-4.3"},"x-ai/grok-4.7":{"id":"x-ai/grok-4.7","name":"Grok 4.7","description":"Grok 4.7 is SpaceXAI's smartest model with frontier performance on coding, knowledge work, and STEM.","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":450000},"cost":{"input":2,"output":6,"cache_read":0.5,"cache_write":0},"canonical_model_id":"xai/grok-4.7"},"x-ai/grok-4.20":{"id":"x-ai/grok-4.20","name":"SpaceXAI: Grok 4.20","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-31","last_updated":"2026-03-31","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":1800000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2}},"x-ai/grok-4.6":{"id":"x-ai/grok-4.6","name":"Grok 4.6","description":"Grok 4.6 is SpaceXAI's smartest model with frontier performance on coding, knowledge work, and STEM.","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":450000},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.6"},"x-ai/grok-build-0.1":{"id":"x-ai/grok-build-0.1","name":"Grok Build 0.1","description":"Grok coding model for agentic engineering, edits, and codebase workflows","family":"grok-build","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":230400},"cost":{"input":1,"output":2,"cache_read":0.2},"canonical_model_id":"xai/grok-build-0.1"},"x-ai/grok-4.20-multi-agent":{"id":"x-ai/grok-4.20-multi-agent","name":"SpaceXAI: Grok 4.20 Multi-Agent","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-03-31","last_updated":"2026-03-31","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":1800000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2}},"deepseek/deepseek-r1-0528":{"id":"deepseek/deepseek-r1-0528","name":"DeepSeek R1 0528","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-05-28","last_updated":"2025-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":32768},"cost":{"input":0.5,"output":2.15,"cache_read":0.35},"canonical_model_id":"deepseek/deepseek-r1-0528"},"deepseek/deepseek-chat-v3-0324":{"id":"deepseek/deepseek-chat-v3-0324","name":"DeepSeek V3 0324","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07-31","release_date":"2025-03-24","last_updated":"2025-03-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":115200},"cost":{"input":0.29,"output":1.14,"cache_read":0.11},"canonical_model_id":"deepseek/deepseek-chat-v3-0324"},"deepseek/deepseek-v3.2-exp":{"id":"deepseek/deepseek-v3.2-exp","name":"DeepSeek: DeepSeek V3.2 Exp","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":163840,"output":147456},"cost":{"input":0.27,"output":0.41}},"deepseek/deepseek-v4-pro-0813":{"id":"deepseek/deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro 0813 is a large-scale mixture-of-experts model from DeepSeek. This is the GA release of DeepSeek V4 Pro.","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":1.32,"output":3.96,"cache_read":0.044},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"deepseek/deepseek-v4.1-flash":{"id":"deepseek/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash is a sparse mixture-of-experts model from DeepSeek, and the cost-efficient tier of the V4.1 family. DeepSeek reports that it exceeds V4 Pro on performance, speed, and task...","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Flagship DeepSeek model for coding, reasoning, and agentic work","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1024000,"output":384000},"cost":{"input":1.6,"output":3.2,"cache_read":0.135},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-v3.1-terminus":{"id":"deepseek/deepseek-v3.1-terminus","name":"DeepSeek: DeepSeek V3.1 Terminus","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-09-22","last_updated":"2025-09-22","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":163840,"output":147456},"cost":{"input":0.27,"output":1}},"deepseek/deepseek-v4-flash-vision-exp":{"id":"deepseek/deepseek-v4-flash-vision-exp","name":"DeepSeek V4 Flash Vision Exp","description":"DeepSeek V4 Flash Vision Exp is an experimental vision-enabled version of [DeepSeek V4 Flash 0731](https://openrouter.ai/deepseek/deepseek-v4-flash-0731) from DeepSeek, adding image understanding while matching the base model on text capabilities including agents,...","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-21","last_updated":"2026-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048575,"output":943717},"cost":{"input":0.44,"output":1.32,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4-flash-vision-exp"},"deepseek/deepseek-chat":{"id":"deepseek/deepseek-chat","name":"DeepSeek Chat","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2025-12-01","last_updated":"2026-02-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":16384},"cost":{"input":0.32,"output":0.89},"canonical_model_id":"deepseek/deepseek-chat"},"deepseek/deepseek-v4-flash":{"id":"deepseek/deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.09,"output":0.18,"cache_read":0.018},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek/deepseek-chat-v3.1":{"id":"deepseek/deepseek-chat-v3.1","name":"DeepSeek V3.1","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":147456},"cost":{"input":0.25,"output":0.95,"cache_read":0.13},"canonical_model_id":"deepseek/deepseek-chat-v3.1"},"deepseek/deepseek-v3.2":{"id":"deepseek/deepseek-v3.2","name":"DeepSeek V3.2","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":147456},"cost":{"input":0.26,"output":0.38,"cache_read":0.13},"canonical_model_id":"deepseek/deepseek-v3.2"},"deepseek/deepseek-v4-flash-0731":{"id":"deepseek/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"DeepSeek V4 Flash 0731 is a sparse mixture-of-experts model from DeepSeek, with 13B active parameters out of 284B total. This re-post-trained revision is suited for coding, reasoning, and agent workflows.","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":0.44,"output":1.32,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepseek/deepseek-v4.1-flash-1017":{"id":"deepseek/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"DeepSeek V4.1 Flash 1017 is the October 17, 2026 snapshot of DeepSeek V4.1 Flash, served by DeepSeek under the `deepseek-flash` API model name. V4.1 Flash is a sparse mixture-of-experts model...","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"inclusionai/ling-3.0-flash-vl":{"id":"inclusionai/ling-3.0-flash-vl","name":"inclusionAI: Ling 3.0 Flash VL","description":"Ling 3.0 Flash VL builds on Ling 3.0 Flash (124B total / 5.5B active MoE from InclusionAI), further strengthening its language capabilities while adding native visual perception and advanced visual...","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.06,"output":0.18,"cache_read":0.012},"canonical_model_id":"inclusionai/ling-3.0-flash-vl"},"inclusionai/ling-3.0-tiny":{"id":"inclusionai/ling-3.0-tiny","name":"inclusionAI: Ling 3.0 Tiny","description":"Ling 3.0 Tiny is a mixture-of-experts model from InclusionAI, with 1.3B active parameters out of 7.9B total. It is designed for responsive agents, instruction following, and multi-turn conversations, with switchable...","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-06","last_updated":"2026-08-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":250000},"cost":{"input":0.015,"output":0.045,"cache_read":0.003}},"inclusionai/ling-3.0-flash":{"id":"inclusionai/ling-3.0-flash","name":"inclusionAI: Ling 3.0 Flash","description":"*Ling-3.0-flash* is a *124B-parameter Mixture-of-Experts (MoE) model*, with approximately *5.1B parameters activated per token*. The model is designed with *token efficiency and production-scale agentic inference* as key priorities, enabling developers...","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-23","last_updated":"2026-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.06,"output":0.18,"cache_read":0.012},"canonical_model_id":"inclusionai/ling-3.0-flash"},"inclusionai/ling-3.1-flash":{"id":"inclusionai/ling-3.1-flash","name":"inclusionAI: Ling 3.1 Flash","description":"Ling 3.1 Flash is a hybrid reasoning mixture-of-experts model from inclusionAI, with 25B active parameters out of 560B total.","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":262144},"cost":{"input":0.3,"output":0.9,"cache_read":0.06},"canonical_model_id":"inclusionai/ling-3.1-flash"},"google/gemini-2.5-flash":{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"status":"deprecated","cost":{"input":0.15,"output":1.25,"reasoning":1.25,"cache_read":0.015,"cache_write":0.041667},"canonical_model_id":"google/gemini-2.5-flash"},"google/gemini-3.1-flash-lite-image":{"id":"google/gemini-3.1-flash-lite-image","type":"image","name":"Nano Banana 2 Lite","description":"Nano Banana 2 Lite (Gemini 3.1 Flash Lite Image) is Google's fastest, most cost-efficient Gemini image model, built for high-velocity developer pipelines and rapid-fire visual exploration. It delivers text-to-image generation...","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","high"]}],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["image","text","pdf"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":58982},"cost":{"input":0.25,"output":1.5},"canonical_model_id":"google/gemini-3.1-flash-lite-image"},"google/gemini-3.8-flash":{"id":"google/gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Gemini 3.8 Flash is Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows.","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"reasoning":3.75,"cache_read":0.075,"cache_write":0.041667},"canonical_model_id":"google/gemini-3.8-flash"},"google/gemini-3.1-flash-image-preview":{"id":"google/gemini-3.1-flash-image-preview","type":"image","name":"Nano Banana 2 Preview","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","high"]}],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-26","last_updated":"2026-02-26","modalities":{"input":["text","image","pdf"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":58982},"cost":{"input":0.5,"output":3},"canonical_model_id":"google/gemini-3.1-flash-image-preview"},"google/gemini-4-carbon":{"id":"google/gemini-4-carbon","name":"Google: Gemini 4 Carbon","description":"Gemini 4 Carbon is a frontier Gemini 4 model from Google for coding, agentic and complex reasoning work. It takes text, image, audio, video and file input, supports long decode...","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":2,"output":10,"reasoning":10,"cache_read":0.1,"cache_write":0.1875},"canonical_model_id":"google/gemini-4-carbon"},"google/gemma-3-27b-it":{"id":"google/gemma-3-27b-it","name":"Gemma 3 27B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":117964},"cost":{"input":0.08,"output":0.16},"canonical_model_id":"google/gemma-3-27b-it"},"google/gemma-2-27b-it":{"id":"google/gemma-2-27b-it","name":"Gemma 2 27B","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-06-30","release_date":"2024-07-13","last_updated":"2024-07-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":2048},"cost":{"input":0.65,"output":0.65},"canonical_model_id":"google/gemma-2-27b-it"},"google/lyria-3-pro-preview":{"id":"google/lyria-3-pro-preview","name":"Lyria 3 Pro Preview","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"lyria","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-03-25","last_updated":"2026-03-25","modalities":{"input":["text","image"],"output":["text","audio"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"google/lyria-3-pro-preview"},"google/gemini-2.5-pro":{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":0.625,"output":5,"reasoning":5,"cache_read":0.0625,"cache_write":0.1875},"canonical_model_id":"google/gemini-2.5-pro"},"google/gemini-3.5-flash":{"id":"google/gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":4.5,"reasoning":4.5,"cache_read":0.075,"cache_write":0.041667},"canonical_model_id":"google/gemini-3.5-flash"},"google/gemini-3.6-flash":{"id":"google/gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Gemini 3.6 Flash is a high-efficiency model from Google for coding, agentic workflows, and web and app development. It is designed to produce polished outputs with fewer unnecessary edits and...","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.375,"output":1.875,"reasoning":1.875,"cache_read":0.0375,"cache_write":0.020833},"canonical_model_id":"google/gemini-3.6-flash"},"google/gemini-3.1-flash-image":{"id":"google/gemini-3.1-flash-image","type":"image","name":"Nano Banana 2","description":"Gemini 3.1 Flash Image, a.k.a. \"Nano Banana 2,\" is Google’s latest state of the art image generation and editing model, delivering Pro-level visual quality at Flash speed. It combines advanced...","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","high"]}],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["image","text","pdf"],"output":["text","image"]},"open_weights":false,"limit":{"context":131072,"output":32768},"cost":{"input":0.5,"output":3},"canonical_model_id":"google/gemini-3.1-flash-image"},"google/gemini-3.1-pro-preview-customtools":{"id":"google/gemini-3.1-pro-preview-customtools","name":"Gemini 3.1 Pro Preview Custom Tools","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"reasoning":12,"cache_read":0.2,"cache_write":0.375},"canonical_model_id":"google/gemini-3.1-pro-preview-customtools"},"google/gemma-3-4b-it":{"id":"google/gemma-3-4b-it","name":"Gemma 3 4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.04,"output":0.05,"cache_read":0.02},"canonical_model_id":"google/gemma-3-4b-it"},"google/gemini-3.1-pro-preview":{"id":"google/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1,"output":6,"reasoning":6,"cache_read":0.1,"cache_write":0.1875},"canonical_model_id":"google/gemini-3.1-pro-preview"},"google/gemini-3.1-flash-lite":{"id":"google/gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.125,"output":0.75,"reasoning":0.75,"cache_read":0.0125,"cache_write":0.041667},"canonical_model_id":"google/gemini-3.1-flash-lite"},"google/gemini-2.5-flash-lite":{"id":"google/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash-Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"status":"deprecated","cost":{"input":0.05,"output":0.2,"reasoning":0.2,"cache_read":0.005,"cache_write":0.041667},"canonical_model_id":"google/gemini-2.5-flash-lite"},"google/gemini-4-argon":{"id":"google/gemini-4-argon","name":"Gemini 4 Argon","description":"Gemini 4 Argon is Google's flagship reasoning model, built for complex software engineering, deep mathematical and scientific problem solving, and autonomous multi-step agents. Google trained it to keep context across...","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":2,"output":10,"reasoning":10,"cache_read":0.1,"cache_write":0.1875},"canonical_model_id":"google/gemini-4-argon"},"google/gemini-2.5-pro-preview":{"id":"google/gemini-2.5-pro-preview","name":"Gemini 2.5 Pro Preview 06-05","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01-31","release_date":"2025-06-05","last_updated":"2025-06-05","modalities":{"input":["pdf","image","text","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.625,"output":5,"reasoning":5,"cache_read":0.0625,"cache_write":0.1875},"canonical_model_id":"google/gemini-2.5-pro-preview"},"google/gemini-3.1-flash-lite-preview":{"id":"google/gemini-3.1-flash-lite-preview","name":"Gemini 3.1 Flash Lite Preview","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-03-03","last_updated":"2026-03-03","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.125,"output":0.75,"reasoning":0.75,"cache_read":0.0125,"cache_write":0.041667},"canonical_model_id":"google/gemini-3.1-flash-lite-preview"},"google/gemini-3-pro-image-preview":{"id":"google/gemini-3-pro-image-preview","type":"image","name":"Nano Banana Pro Preview","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-11-20","last_updated":"2025-11-20","modalities":{"input":["image","text","pdf"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":32768},"cost":{"input":1,"output":6,"reasoning":6,"cache_read":0.1,"cache_write":0.1875},"canonical_model_id":"google/gemini-3-pro-image-preview"},"google/gemini-3.5-flash-lite":{"id":"google/gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Gemini 3.5 Flash Lite is a high-efficiency model from Google with upgraded agentic capabilities. It is suited for subagents that execute focused tasks within complex, multi-agent workflows.","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.15,"output":1.25,"reasoning":1.25,"cache_read":0.015,"cache_write":0.041667},"canonical_model_id":"google/gemini-3.5-flash-lite"},"google/gemma-4-31b-it":{"id":"google/gemma-4-31b-it","name":"Gemma 4 31B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["image","text","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0.1,"output":0.34,"cache_read":0.1},"canonical_model_id":"google/gemma-4-31b-it"},"google/gemini-3-flash-preview":{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"reasoning":1.5,"cache_read":0.025,"cache_write":0.041667},"canonical_model_id":"google/gemini-3-flash-preview"},"google/gemini-2.5-flash-image":{"id":"google/gemini-2.5-flash-image","type":"image","name":"Nano Banana","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-26","last_updated":"2025-08-26","modalities":{"input":["image","text","pdf"],"output":["text","image"]},"open_weights":false,"limit":{"context":32768,"output":8192},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"cache_write":0.083333},"canonical_model_id":"google/gemini-2.5-flash-image"},"google/gemma-4-26b-a4b-it":{"id":"google/gemma-4-26b-a4b-it","name":"Gemma 4 26B A4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["image","text","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":128000},"cost":{"input":0.015,"output":0.045,"cache_read":0.007},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"google/gemini-omni-1.2-flash":{"id":"google/gemini-omni-1.2-flash","type":"video","name":"Google: Gemini Omni 1.2 Flash","description":"Gemini Omni 1.2 Flash is Google's native multimodal video generation and editing model, the successor to Gemini Omni 1.1 Flash. It generates clips up to 15 seconds long with native...","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-11-05","last_updated":"2026-11-05","modalities":{"input":["text","image","video","pdf"],"output":["text","video"]},"open_weights":false,"limit":{"context":131072,"output":65536},"cost":{"input":1.5,"output":9},"canonical_model_id":"google/gemini-omni-1.2-flash"},"google/gemini-3-pro-image":{"id":"google/gemini-3-pro-image","type":"image","name":"Nano Banana Pro","description":"Nano Banana Pro is Google’s most advanced image-generation and editing model, built on Gemini 3 Pro. It extends the original Nano Banana with significantly improved multimodal reasoning, real-world grounding, and...","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["image","text","pdf"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":32768},"cost":{"input":2,"output":12,"reasoning":12,"cache_read":0.2,"cache_write":0.375},"canonical_model_id":"google/gemini-3-pro-image"},"google/gemma-3-12b-it":{"id":"google/gemma-3-12b-it","name":"Gemma 3 12B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.04,"output":0.12},"canonical_model_id":"google/gemma-3-12b-it"},"google/gemini-omni-1.1-flash":{"id":"google/gemini-omni-1.1-flash","type":"video","name":"Google: Gemini Omni 1.1 Flash","description":"Gemini Omni 1.1 Flash is Google's native multimodal video generation and editing model, the generally available successor to Gemini Omni Flash Preview. It is suited for text-to-video, image-to-video, first and...","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-08-27","last_updated":"2026-08-27","modalities":{"input":["text","image","video","pdf"],"output":["text","video"]},"open_weights":false,"limit":{"context":131072,"output":65536},"cost":{"input":1.5,"output":9},"canonical_model_id":"google/gemini-omni-1.1-flash"},"google/lyria-3-clip-preview":{"id":"google/lyria-3-clip-preview","name":"Lyria 3 Clip Preview","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"lyria","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-03-25","last_updated":"2026-03-25","modalities":{"input":["text","image"],"output":["text","audio"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"google/lyria-3-clip-preview"},"google/gemini-3.7-flash":{"id":"google/gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"Gemini 3.7 Flash is a multimodal model from Google for fast agentic workflows, coding, and complex multi-step reasoning. It is designed for tasks that require responsive performance and reliable multi-step...","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"reasoning":3.75,"cache_read":0.075,"cache_write":0.041667},"canonical_model_id":"google/gemini-3.7-flash"},"google/gemini-nano-banana-2.1":{"id":"google/gemini-nano-banana-2.1","type":"image","name":"Nano Banana 2.1","description":"Nano Banana 2.1 (Gemini Nano Banana 2.1) is Google's image generation and editing model on the Flash tier, succeeding Nano Banana 2 and Nano Banana Pro. It improves product recontextualization,...","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["image","text","pdf"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":58982},"cost":{"input":1.5,"output":7.5},"canonical_model_id":"google/gemini-nano-banana-2.1"},"qwen/qwen3.6-plus":{"id":"qwen/qwen3.6-plus","name":"Qwen3.6 Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.325,"output":1.95,"cache_write":0.40625},"canonical_model_id":"alibaba/qwen3.6-plus"},"qwen/qwen-2.5-72b-instruct":{"id":"qwen/qwen-2.5-72b-instruct","name":"Qwen2.5 72B Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2024-09-19","last_updated":"2024-09-19","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":16384},"cost":{"input":0.36,"output":0.4}},"qwen/qwen3-coder-30b-a3b-instruct":{"id":"qwen/qwen3-coder-30b-a3b-instruct","name":"Qwen3-Coder 30B-A3B Instruct","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-31","last_updated":"2025-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"alibaba/qwen3-coder-30b-a3b-instruct"},"qwen/qwen3-30b-a3b":{"id":"qwen/qwen3-30b-a3b","name":"Qwen3 30B A3B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":40960,"output":16384},"cost":{"input":0.12,"output":0.5},"canonical_model_id":"alibaba/qwen3-30b-a3b"},"qwen/qwen3-vl-235b-a22b-instruct":{"id":"qwen/qwen3-vl-235b-a22b-instruct","name":"Qwen3 VL 235B A22B Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.21,"output":1.9,"cache_read":0.1},"canonical_model_id":"alibaba/qwen3-vl-235b-a22b-instruct"},"qwen/qwen2.5-vl-72b-instruct":{"id":"qwen/qwen2.5-vl-72b-instruct","name":"Qwen: Qwen2.5 VL 72B Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-01-26","last_updated":"2025-01-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":115200},"cost":{"input":0.8,"output":1,"cache_read":0.4},"canonical_model_id":"alibaba/qwen2-5-vl-72b-instruct"},"qwen/qwen3-235b-a22b-thinking-2507":{"id":"qwen/qwen3-235b-a22b-thinking-2507","name":"Qwen: Qwen3 235B A22B Thinking 2507","description":"Qwen reasoning model for deliberate problem solving, math, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-07-25","last_updated":"2025-07-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.45,"output":3.5},"canonical_model_id":"alibaba/qwen3-235b-a22b-thinking-2507"},"qwen/qwen3.8-omni-flash":{"id":"qwen/qwen3.8-omni-flash","name":"Qwen3.8 Omni Flash","description":"Qwen3.8 Omni Flash is an omni-modal reasoning model from Alibaba, the first Qwen model built around agentic capabilities with native audio-video understanding. It is suited for audio-video analysis and summarization,...","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-17","last_updated":"2026-09-17","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.47,"cache_read":0.016},"canonical_model_id":"alibaba/qwen3.8-omni-flash"},"qwen/qwen3-vl-8b-instruct":{"id":"qwen/qwen3-vl-8b-instruct","name":"Qwen: Qwen3 VL 8B Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-14","last_updated":"2025-10-14","modalities":{"input":["image","text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":235929},"cost":{"input":0.25,"output":0.75,"cache_read":0.12}},"qwen/qwen3-coder":{"id":"qwen/qwen3-coder","name":"Qwen: Qwen3 Coder 480B A35B","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.3,"output":1,"cache_read":0.1},"canonical_model_id":"alibaba/qwen3-coder-480b-a35b-instruct"},"qwen/qwen3-14b":{"id":"qwen/qwen3-14b","name":"Qwen: Qwen3 14B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":40960,"output":36864},"cost":{"input":0.1,"output":0.22}},"qwen/qwen3-vl-30b-a3b-thinking":{"id":"qwen/qwen3-vl-30b-a3b-thinking","name":"Qwen: Qwen3 VL 30B A3B Thinking","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":235929},"cost":{"input":0.29,"output":1}},"qwen/qwen3-vl-30b-a3b-instruct":{"id":"qwen/qwen3-vl-30b-a3b-instruct","name":"Qwen3 VL 30B A3B Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-04","last_updated":"2025-10-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"alibaba/qwen3-vl-30b-a3b-instruct"},"qwen/qwen3.8-27b":{"id":"qwen/qwen3.8-27b","name":"Qwen3.8 27B","description":"Qwen3.8 27B is an open-weight dense vision-language model from Qwen. It is suited for coding, professional workflows, research, multimodal interaction, and long-running agent tasks, with flexible thinking that can be...","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.425,"output":2.55,"cache_read":0.085,"cache_write":0.53125},"canonical_model_id":"alibaba/qwen3.8-27b"},"qwen/qwen-plus":{"id":"qwen/qwen-plus","name":"Qwen Plus","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-01-25","last_updated":"2025-09-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":0.26,"output":0.78,"cache_read":0.052,"cache_write":0.325},"canonical_model_id":"alibaba/qwen-plus"},"qwen/qwen3.8-flash":{"id":"qwen/qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen3.8 Flash is a multimodal reasoning model from Alibaba. It is suited for coding assistance, agentic workflows, visual understanding, document and codebase analysis, desktop interaction, chart analysis, and long-video analysis.","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.47,"cache_read":0.016,"cache_write":0.2},"canonical_model_id":"alibaba/qwen3.8-flash"},"qwen/qwen3-30b-a3b-instruct-2507":{"id":"qwen/qwen3-30b-a3b-instruct-2507","name":"Qwen: Qwen3 30B A3B Instruct 2507","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.1,"output":0.3,"cache_read":0.1},"canonical_model_id":"alibaba/qwen3-30b-a3b-instruct-2507"},"qwen/qwen3.5-flash-02-23":{"id":"qwen/qwen3.5-flash-02-23","name":"Qwen: Qwen3.5-Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.5","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-25","last_updated":"2026-02-25","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.065,"output":0.26}},"qwen/qwen3.5-397b-a17b":{"id":"qwen/qwen3.5-397b-a17b","name":"Qwen3.5 397B-A17B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":64000},"cost":{"input":0.39,"output":2.34},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"qwen/qwen3.5-9b":{"id":"qwen/qwen3.5-9b","name":"Qwen3.5 9B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":40960},"status":"deprecated","cost":{"input":0.04,"output":0.06,"cache_read":0.036},"canonical_model_id":"alibaba/qwen3.5-9b"},"qwen/qwen3.8-max-prime":{"id":"qwen/qwen3.8-max-prime","name":"Qwen 3.8 Max Prime","description":"Qwen3.8 Max Prime is a higher-throughput variant of Qwen3.8 Max from Alibaba's Qwen team, served as a separate SKU at a higher price point. It accepts text, image, and video...","family":"qwen3.8-max","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-23","last_updated":"2026-09-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":4,"output":12,"cache_read":0.5},"canonical_model_id":"alibaba/qwen3.8-max-prime"},"qwen/qwen3.8-max-0902":{"id":"qwen/qwen3.8-max-0902","name":"Qwen3.8 Max 0902","description":"Qwen3.8 Max 0902 is an updated snapshot of Qwen3.8 Max from Alibaba's Qwen team. It is a 2.4-trillion-parameter mixture-of-experts model that accepts text, image, and video input and returns text,...","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max-0902"},"qwen/qwen3-235b-a22b-2507":{"id":"qwen/qwen3-235b-a22b-2507","name":"Qwen: Qwen3 235B A22B Instruct 2507","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":117964},"cost":{"input":0.14,"output":0.8,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"qwen/qwen3.8-2.4t-a95b":{"id":"qwen/qwen3.8-2.4t-a95b","name":"Qwen3.8 2.4T A95B","description":"Open-weight sparse MoE (2.4T total, 95B active), the open-weight twin of Qwen3.8 Max for coding, research, complex reasoning, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"qwen/qwen3.5-35b-a3b":{"id":"qwen/qwen3.5-35b-a3b","name":"Qwen3.5 35B-A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":81920},"cost":{"input":0.1625,"output":1.3},"canonical_model_id":"alibaba/qwen3.5-35b-a3b"},"qwen/qwen3.7-plus":{"id":"qwen/qwen3.7-plus","name":"Qwen3.7 Plus","description":"Qwen3.7-Plus is a cost-effective model in Alibaba's Qwen3.7 series. It supports text and image input with text output, building on the series' text capabilities with a comprehensive upgrade to its...","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.32,"output":1.28,"cache_read":0.064,"cache_write":0.4},"canonical_model_id":"alibaba/qwen3.7-plus"},"qwen/qwen3.7-max":{"id":"qwen/qwen3.7-max","name":"Qwen3.7 Max","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":1.475,"output":4.425,"cache_read":0.295,"cache_write":1.84375},"canonical_model_id":"alibaba/qwen3.7-max"},"qwen/qwen3.6-flash":{"id":"qwen/qwen3.6-flash","name":"Qwen3.6 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.6","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.1875,"output":1.125,"cache_write":0.234375},"canonical_model_id":"alibaba/qwen3.6-flash"},"qwen/qwen3.7-flash":{"id":"qwen/qwen3.7-flash","name":"Qwen3.7 Flash","description":"Qwen3.7 Flash is a vision-language reasoning model from Alibaba. It is suited for multimodal agents, visual coding, search, and computer interaction, with strengths in object recognition, spatial understanding, and real-world...","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":991808,"output":65536},"cost":{"input":0.03,"output":0.13,"cache_read":0.006,"cache_write":0.038},"canonical_model_id":"alibaba/qwen3.7-flash"},"qwen/qwen3.5-plus-02-15":{"id":"qwen/qwen3.5-plus-02-15","name":"Qwen: Qwen3.5 Plus 2026-02-15","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.5","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-16","last_updated":"2026-02-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.26,"output":1.56}},"qwen/qwen3.6-27b":{"id":"qwen/qwen3.6-27b","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":81920},"cost":{"input":0.45,"output":2.7},"canonical_model_id":"alibaba/qwen3.6-27b"},"qwen/qwen3.6-35b-a3b":{"id":"qwen/qwen3.6-35b-a3b","name":"Qwen3.6 35B-A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.1,"output":0.9,"cache_read":0.025},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"qwen/qwen3-coder-next":{"id":"qwen/qwen3-coder-next","name":"Qwen3 Coder Next","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-02-03","last_updated":"2026-02-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.12,"output":0.8,"cache_read":0.07},"canonical_model_id":"alibaba/qwen3-coder-next"},"qwen/qwen3-next-80b-a3b-instruct":{"id":"qwen/qwen3-next-80b-a3b-instruct","name":"Qwen3-Next 80B-A3B Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0.09,"output":1.1},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-instruct"},"qwen/qwen3-32b":{"id":"qwen/qwen3-32b","name":"Qwen3 32B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":40960,"output":16384},"cost":{"input":0.08,"output":0.28},"canonical_model_id":"alibaba/qwen3-32b"},"qwen/qwen3.5-27b":{"id":"qwen/qwen3.5-27b","name":"Qwen3.5 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":81920},"cost":{"input":0.195,"output":1.56},"canonical_model_id":"alibaba/qwen3.5-27b"},"qwen/qwen3-coder-flash":{"id":"qwen/qwen3-coder-flash","name":"Qwen3 Coder Flash","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.195,"output":0.975,"cache_read":0.039,"cache_write":0.24375},"canonical_model_id":"alibaba/qwen3-coder-flash"},"qwen/qwen3.5-plus-20260420":{"id":"qwen/qwen3.5-plus-20260420","name":"Qwen: Qwen3.5 Plus 2026-04-20","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.5","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.3,"output":1.8,"cache_write":0.375}},"qwen/qwen-2.5-coder-32b-instruct":{"id":"qwen/qwen-2.5-coder-32b-instruct","name":"Qwen2.5 Coder 32B Instruct","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2024-11-12","last_updated":"2024-11-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":29491},"cost":{"input":0.66,"output":1},"canonical_model_id":"alibaba/qwen2.5-coder-32b-instruct"},"qwen/qwen3.5-122b-a10b":{"id":"qwen/qwen3.5-122b-a10b","name":"Qwen3.5 122B-A10B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.26,"output":2.08},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"~deepseek/deepseek-pro-latest":{"id":"~deepseek/deepseek-pro-latest","name":"DeepSeek: DeepSeek Pro Latest","description":"This model always redirects to the latest model in the DeepSeek Pro family.","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-14","last_updated":"2026-09-14","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":393216},"cost":{"input":0.0999,"output":8,"cache_read":0.0999}},"~deepseek/deepseek-flash-latest":{"id":"~deepseek/deepseek-flash-latest","name":"DeepSeek: DeepSeek Flash Latest","description":"This model always redirects to the latest model in the DeepSeek Flash family.","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-14","last_updated":"2026-09-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":0.022,"output":0.4,"cache_read":0.004}},"~deepseek/deepseek-v4-flash-latest":{"id":"~deepseek/deepseek-v4-flash-latest","name":"DeepSeek: DeepSeek V4 Flash Latest","description":"This model always redirects to the latest model in the DeepSeek V4 Flash family.","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-01","last_updated":"2026-08-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":0.0434,"output":0.3,"cache_read":0.035}},"bytedance/ui-tars-1.5-7b":{"id":"bytedance/ui-tars-1.5-7b","name":"ByteDance: UI-TARS 7B ","description":"Multimodal model for analyzing text, images, documents, and rich media","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["image","text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":2048},"cost":{"input":0.1,"output":0.2,"cache_read":0.1}},"~moonshotai/kimi-latest":{"id":"~moonshotai/kimi-latest","name":"MoonshotAI: Kimi Latest","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":0.1824,"output":11.0055,"cache_read":0.18}},"kt/midm-k-3.0-pro":{"id":"kt/midm-k-3.0-pro","name":"KT: Mi:dm K 3.0 Pro","description":"Mi:dm K 3.0 Pro is a Mixture-of-Experts reasoning model from KT, with 120B total and 12B active parameters. It uses a hybrid architecture that mixes Mamba, MoE and attention layers.","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-11-05","last_updated":"2026-11-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":261795,"output":235615},"cost":{"input":0.2,"output":0.8,"cache_read":0.04}},"nousresearch/hermes-4-405b":{"id":"nousresearch/hermes-4-405b","name":"Nous: Hermes 4 405B","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"hermes","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-08-31","release_date":"2025-08-26","last_updated":"2025-08-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":117964},"cost":{"input":1,"output":3,"cache_read":0.2},"canonical_model_id":"nousresearch/hermes-4-405b"},"~unbiased/pareto-latest":{"id":"~unbiased/pareto-latest","name":"Pareto Latest","description":"This model always redirects to the latest model in the Pareto family.","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.8,"output":3.2,"cache_read":0.03}},"~google/gemini-pro-latest":{"id":"~google/gemini-pro-latest","name":"Google: Gemini Pro Latest","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["audio","pdf","image","text","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":2,"output":10,"reasoning":10,"cache_read":0.1,"cache_write":0.1875}},"~google/gemini-flash-latest":{"id":"~google/gemini-flash-latest","name":"Google: Gemini Flash Latest","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"reasoning":3.75,"cache_read":0.075,"cache_write":0.041667}},"thedrummer/unslopnemo-12b":{"id":"thedrummer/unslopnemo-12b","name":"TheDrummer: UnslopNemo 12B","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-04-30","release_date":"2024-11-08","last_updated":"2024-11-08","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1024000,"output":819200},"cost":{"input":0.4,"output":0.4},"canonical_model_id":"thedrummer/unslopnemo-12b"},"thedrummer/cydonia-24b-v4.1":{"id":"thedrummer/cydonia-24b-v4.1","name":"TheDrummer: Cydonia 24B V4.1","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-04-30","release_date":"2025-09-27","last_updated":"2025-09-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":117964},"cost":{"input":0.3,"output":0.5,"cache_read":0.15},"canonical_model_id":"thedrummer/cydonia-24b-v4.1"},"thedrummer/skyfall-36b-v2":{"id":"thedrummer/skyfall-36b-v2","name":"TheDrummer: Skyfall 36B V2","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-06-30","release_date":"2025-03-10","last_updated":"2025-03-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":29491},"cost":{"input":0.55,"output":0.8,"cache_read":0.25},"canonical_model_id":"thedrummer/skyfall-36b-v2"},"tencent/hy-mt2-7b":{"id":"tencent/hy-mt2-7b","name":"Hy-MT2-7B","description":"Hy-MT2-7B is a 7B-parameter translation model from Tencent. It supports 33 language pairs and five Chinese dialect and minority-language pairs, with workflows for structured, delimiter-based, contextual, glossary-based, and style-guided translation.","family":"Hy","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":4096},"cost":{"input":0.074,"output":0.295},"canonical_model_id":"tencent/hy-mt2-7b"},"tencent/hy-mt2-30b-a3b":{"id":"tencent/hy-mt2-30b-a3b","name":"Hy-MT2-30B-A3B","description":"Hy-MT2-30B-A3B is Tencent's flagship translation model in the Hy-MT2 family. It supports 33 language pairs and five Chinese dialect and minority-language pairs, with workflows for structured, delimiter-based, contextual, glossary-based, and...","family":"Hy","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":4096},"cost":{"input":0.074,"output":0.295},"canonical_model_id":"tencent/hy-mt2-30b-a3b"},"tencent/hunyuan-a13b-instruct":{"id":"tencent/hunyuan-a13b-instruct","name":"Tencent: Hunyuan A13B Instruct","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"hunyuan","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-07-08","last_updated":"2025-07-08","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":117964},"cost":{"input":0.14,"output":0.57}},"tencent/hy4":{"id":"tencent/hy4","name":"Tencent: Hy4","description":"The official release of Hy4 delivers comprehensive and substantial improvements over Hy4 Preview, with particularly strong gains in agentic capabilities and performance across a wide range of long-horizon, real-world productivity...","family":"Hy","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-04","last_updated":"2026-11-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":983010,"output":65536},"cost":{"input":0.834,"output":2.501,"cache_read":0.042},"canonical_model_id":"tencent/hy4"},"tencent/hy3":{"id":"tencent/hy3","name":"Hy3","description":"Hy3 is a 295B-parameter Mixture-of-Experts model from Tencent (21B active, 192 experts with top-8 routing) built for reasoning, agentic workflows, and real-world production use. It supports a configurable reasoning effort:...","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":192000,"output":128000},"cost":{"input":0.132,"output":0.528,"cache_read":0.033},"canonical_model_id":"tencent/hy3"},"tencent/hy4-preview":{"id":"tencent/hy4-preview","name":"Hy4 preview","description":"Tencent: Hy4 preview is a mixture-of-experts model from Tencent, with 49B active parameters out of 770B total. It is designed for coding agents, complex tool-use workflows, and productivity tasks that...","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-28","last_updated":"2026-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":64000},"cost":{"input":0.834,"output":2.501,"cache_read":0.042},"canonical_model_id":"tencent/hy4-preview"},"tencent/hy-mt2-1.8b":{"id":"tencent/hy-mt2-1.8b","name":"Hy-MT2-1.8B","description":"Hy-MT2-1.8B is a compact 1.8B-parameter translation model from Tencent. It supports 33 language pairs and five Chinese dialect and minority-language pairs, with workflows for structured, delimiter-based, contextual, glossary-based, and style-guided...","family":"Hy","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":4096},"cost":{"input":0.044,"output":0.177},"canonical_model_id":"tencent/hy-mt2-1.8b"},"tencent/hy3-preview":{"id":"tencent/hy3-preview","name":"Hy3 preview","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.18,"output":0.6,"cache_read":0.06},"canonical_model_id":"tencent/hy3-preview"},"mistralai/voxtral-small-24b-2507":{"id":"mistralai/voxtral-small-24b-2507","name":"Voxtral Small 24B 2507","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"voxtral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-15","last_updated":"2025-07-15","modalities":{"input":["text","audio","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":26214},"cost":{"input":0.1,"output":0.3,"cache_read":0.01},"canonical_model_id":"mistral/voxtral-small-24b-2507"},"mistralai/mistral-large-4-0":{"id":"mistralai/mistral-large-4-0","name":"Mistral: Mistral Large 4","description":"Mistral Large 4 is a frontier multimodal (text and image input) model from Mistral AI built for reasoning, coding, and agentic workloads. It offers a 512K-token context window with up...","family":"mistral-large","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":262144},"cost":{"input":0.7,"output":2.1,"cache_read":0.07},"canonical_model_id":"mistral/mistral-large-4"},"mistralai/codestral-2508":{"id":"mistralai/codestral-2508","name":"Codestral 25.08","description":"Mistral coding model for code completion, generation, and developer workflows","family":"codestral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-30","last_updated":"2025-07-30","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":204800},"cost":{"input":0.3,"output":0.9,"cache_read":0.03},"canonical_model_id":"mistral/codestral-2508"},"mistralai/mistral-small-3.1-24b-instruct":{"id":"mistralai/mistral-small-3.1-24b-instruct","name":"Mistral Small 3.1 24B","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-10-31","release_date":"2025-03-17","last_updated":"2025-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":102400},"cost":{"input":0.351,"output":0.555},"canonical_model_id":"mistral/mistral-small-3.1-24b-instruct"},"mistralai/mixtral-8x22b-instruct":{"id":"mistralai/mixtral-8x22b-instruct","name":"Mixtral 8x22B Instruct","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-01-31","release_date":"2024-04-17","last_updated":"2024-04-17","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":52428},"cost":{"input":2,"output":6,"cache_read":0.2},"canonical_model_id":"mistral/mixtral-8x22b-instruct"},"mistralai/mistral-medium-3-5":{"id":"mistralai/mistral-medium-3-5","name":"Mistral Medium 3.5","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-30","last_updated":"2026-04-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":209715},"cost":{"input":1.5,"output":7.5},"canonical_model_id":"mistral/mistral-medium-3-5"},"mistralai/mistral-large-2512":{"id":"mistralai/mistral-large-2512","name":"Mistral Large 3","description":"Mistral Large 3 2512 is Mistral’s most capable model to date, featuring a sparse mixture-of-experts architecture with 41B active parameters (675B total), and released under the Apache 2.0 license.","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-11","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":209715},"cost":{"input":0.5,"output":1.5,"cache_read":0.05},"canonical_model_id":"mistral/mistral-large-2512"},"mistralai/ministral-3b-2512":{"id":"mistralai/ministral-3b-2512","name":"Ministral 3 3B 2512","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":104857},"cost":{"input":0.1,"output":0.1,"cache_read":0.01},"canonical_model_id":"mistral/ministral-3b-2512"},"mistralai/ministral-8b-2512":{"id":"mistralai/ministral-8b-2512","name":"Ministral 3 8B 2512","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":209715},"cost":{"input":0.15,"output":0.15,"cache_read":0.015},"canonical_model_id":"mistral/ministral-8b-2512"},"mistralai/mistral-large-2407":{"id":"mistralai/mistral-large-2407","name":"Mistral Large 2407","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-03-31","release_date":"2024-07-24","last_updated":"2024-07-24","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":104857},"cost":{"input":2,"output":6,"cache_read":0.2},"canonical_model_id":"mistral/mistral-large-2407"},"mistralai/mistral-small-24b-instruct-2501":{"id":"mistralai/mistral-small-24b-instruct-2501","name":"Mistral Small 3","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2023-10-31","release_date":"2025-01-30","last_updated":"2025-01-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":16384},"cost":{"input":0.05,"output":0.08},"canonical_model_id":"mistral/mistral-small-24b-instruct-2501"},"mistralai/mistral-small-3.2-24b-instruct":{"id":"mistralai/mistral-small-3.2-24b-instruct","name":"Mistral Small 3.2 24B","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-10-31","release_date":"2025-06-20","last_updated":"2025-06-20","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":26214},"cost":{"input":0.1,"output":0.3,"cache_read":0.01},"canonical_model_id":"mistral/mistral-small-3.2-24b-instruct"},"mistralai/mistral-medium-3.1":{"id":"mistralai/mistral-medium-3.1","name":"Mistral Medium 3.1","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06-30","release_date":"2025-08-12","last_updated":"2025-08-12","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":104857},"cost":{"input":0.4,"output":2,"cache_read":0.04},"canonical_model_id":"mistral/mistral-medium-3.1"},"mistralai/mistral-small-2603":{"id":"mistralai/mistral-small-2603","name":"Mistral Small 4","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":209715},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"mistral/mistral-small-2603"},"mistralai/mistral-nemo":{"id":"mistralai/mistral-nemo","name":"Mistral Nemo","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-nemo","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.15,"output":0.15,"cache_read":0.015},"canonical_model_id":"mistral/mistral-nemo"},"mistralai/devstral-2512":{"id":"mistralai/devstral-2512","name":"Devstral 2","description":"Devstral 2 is a state-of-the-art open-source model by Mistral AI specializing in agentic coding. It is a 123B-parameter dense transformer model supporting a 256K context window. Devstral 2 supports exploring...","family":"devstral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-12","release_date":"2025-12-09","last_updated":"2025-12-09","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":209715},"cost":{"input":0.4,"output":2,"cache_read":0.04},"canonical_model_id":"mistral/devstral-2512"},"mistralai/mistral-saba":{"id":"mistralai/mistral-saba","name":"Saba","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-02-17","last_updated":"2025-02-17","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":26214},"cost":{"input":0.2,"output":0.6,"cache_read":0.02},"canonical_model_id":"mistral/mistral-saba"},"mistralai/mistral-large":{"id":"mistralai/mistral-large","name":"Mistral Large","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-11-30","release_date":"2024-02-26","last_updated":"2024-02-26","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":102400},"cost":{"input":2,"output":6,"cache_read":0.2},"canonical_model_id":"mistral/mistral-large"},"mistralai/mistral-medium-3":{"id":"mistralai/mistral-medium-3","name":"Mistral Medium 3","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-07","last_updated":"2025-05-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":104857},"cost":{"input":0.4,"output":2,"cache_read":0.04},"canonical_model_id":"mistral/mistral-medium-3"},"mistralai/ministral-14b-2512":{"id":"mistralai/ministral-14b-2512","name":"Ministral 3 14B 2512","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":209715},"cost":{"input":0.2,"output":0.2,"cache_read":0.02},"canonical_model_id":"mistral/ministral-14b-2512"},"microsoft/phi-4":{"id":"microsoft/phi-4","name":"Microsoft: Phi 4","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","family":"phi","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-01-10","last_updated":"2025-01-10","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":16384,"output":14745},"cost":{"input":0.056,"output":0.112}},"kilo-auto/small":{"id":"kilo-auto/small","name":"Auto Small","description":"Automatic model router for matching prompts to suitable backends and budgets","family":"auto","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"1970-01-01","last_updated":"1970-01-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"cost":{"input":0.05,"output":0.4,"reasoning":0,"cache_read":0.005}},"kilo-auto/balanced":{"id":"kilo-auto/balanced","name":"Auto Balanced","description":"Automatic model router for matching prompts to suitable backends and budgets","family":"auto","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"1970-01-01","last_updated":"1970-01-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.325,"output":1.95,"reasoning":0,"cache_read":0.0325,"cache_write":0.40625}},"kilo-auto/free":{"id":"kilo-auto/free","name":"Auto Free","description":"Automatic model router for matching prompts to suitable backends and budgets","family":"auto","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"1970-01-01","last_updated":"1970-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32768},"cost":{"input":0,"output":0,"reasoning":0,"cache_read":0,"cache_write":0}},"kilo-auto/frontier":{"id":"kilo-auto/frontier","name":"Auto Frontier","description":"Automatic model router for matching prompts to suitable backends and budgets","family":"auto","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"1970-01-01","last_updated":"1970-01-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"reasoning":0,"cache_read":0.5,"cache_write":6.25}},"kilo-auto/efficient":{"id":"kilo-auto/efficient","name":"Auto Efficient","description":"Routes each request to the cheapest model that gets the job done, based on continuously benchmarked accuracy and cost.","family":"auto","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"1970-01-01","last_updated":"1970-01-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.325,"output":1.95,"reasoning":0,"cache_read":0.0325,"cache_write":0.40625}},"moonshotai/kimi-k3.1-pro":{"id":"moonshotai/kimi-k3.1-pro","name":"MoonshotAI: Kimi K3.1 Pro","description":"Kimi K3.1 Pro is Moonshot AI's flagship open-weight multimodal reasoning model and a post-trained successor to Kimi K3, with a 1M-token context window. It is built for long-horizon coding, 3D...","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":0.2375,"output":8.4085,"cache_read":0.2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"moonshotai/kimi-k2.6":{"id":"moonshotai/kimi-k2.6","name":"Kimi K2.6","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.65,"output":3.41,"cache_read":0.15},"canonical_model_id":"moonshotai/kimi-k2.6"},"moonshotai/kimi-k2-0905":{"id":"moonshotai/kimi-k2-0905","name":"Kimi K2 Instruct 0905","description":"Kimi model for long-context chat, coding, and agentic reasoning","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-09-05","last_updated":"2025-09-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":98304},"cost":{"input":0.6,"output":2.5},"canonical_model_id":"moonshotai/kimi-k2-0905"},"moonshotai/kimi-k3":{"id":"moonshotai/kimi-k3","name":"Kimi K3","description":"Kimi K3 is a 2.8T parameter open-weight multimodal reasoning model from Moonshot AI. It is suited for complex coding, knowledge work, and long-horizon agentic workflows, and is particularly strong at...","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"moonshotai/kimi-k3"},"moonshotai/kimi-k2.5":{"id":"moonshotai/kimi-k2.5","name":"Kimi K2.5","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":65536},"cost":{"input":0.6,"output":3},"canonical_model_id":"moonshotai/kimi-k2.5"},"moonshotai/kimi-k2":{"id":"moonshotai/kimi-k2","name":"Kimi K2 0711","description":"Kimi model for long-context chat, coding, and agentic reasoning","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-12-31","release_date":"2025-07-11","last_updated":"2025-07-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"cost":{"input":0.57,"output":2.3},"canonical_model_id":"moonshotai/kimi-k2"},"moonshotai/kimi-k2.7-code":{"id":"moonshotai/kimi-k2.7-code","name":"Kimi K2.7 Code","description":"MoonshotAI: Kimi K2.7 Code is a coding-focused model in Moonshot AI's Kimi K2 family, built to complete end-to-end programming tasks reliably over long contexts. It uses a native multimodal mixture-of-experts...","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.6,"output":3.5,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"moonshotai/kimi-k2-thinking":{"id":"moonshotai/kimi-k2-thinking","name":"Kimi K2 Thinking","description":"Kimi reasoning model for long-horizon research, planning, and tool use","family":"kimi-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-11-06","last_updated":"2025-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":98304},"cost":{"input":0.6,"output":2.5,"cache_read":0.15},"canonical_model_id":"moonshotai/kimi-k2-thinking"},"perceptron/perceptron-mk1":{"id":"perceptron/perceptron-mk1","name":"Perceptron: Perceptron Mk1","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-05-12","last_updated":"2026-05-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":8192},"cost":{"input":0.15,"output":1.5},"canonical_model_id":"perceptron/perceptron-mk1"},"perceptron/perceptron-mk1.5":{"id":"perceptron/perceptron-mk1.5","name":"Perceptron: Perceptron Mk1.5","description":"Perceptron Mk1.5 is Perceptron's embodied reasoning model for physical agents. It accepts text, image, video, and audio input, and answers with text plus optional structured annotations: points, boxes, polygons, tracks,...","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-25","last_updated":"2026-09-25","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":36864,"output":8192},"cost":{"input":0.15,"output":1.5}},"openai/gpt-5.2-pro":{"id":"openai/gpt-5.2-pro","name":"GPT-5.2 Pro","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["image","text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":21,"output":168},"canonical_model_id":"openai/gpt-5.2-pro"},"openai/gpt-5.5":{"id":"openai/gpt-5.5","name":"GPT-5.5","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"openai/gpt-5.5"},"openai/gpt-4.1-nano":{"id":"openai/gpt-4.1-nano","name":"GPT-4.1 nano","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["image","text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":942818},"cost":{"input":0.1,"output":0.4,"cache_read":0.03},"canonical_model_id":"openai/gpt-4.1-nano"},"openai/gpt-5.2":{"id":"openai/gpt-5.2","name":"GPT-5.2","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"openai/gpt-4.1-mini":{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 mini","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-4.1-mini"},"openai/gpt-5.2-codex":{"id":"openai/gpt-5.2-codex","name":"GPT-5.2 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2-codex"},"openai/gpt-6-sol-pro":{"id":"openai/gpt-6-sol-pro","name":"OpenAI: GPT-6 Sol Pro","description":"GPT-6 Sol Pro is the same underlying model as [GPT-6 Sol](https://openrouter.ai/openai/gpt-6-sol), served with `reasoning.mode` set to `pro` for higher-quality responses on complex tasks. Learn more in OpenAI's docs: https://developers.openai.com/api/docs/guides/reasoning#reasoning-mode","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5}},"openai/gpt-5.4-mini":{"id":"openai/gpt-5.4-mini","name":"GPT-5.4 mini","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"openai/gpt-oss-safeguard-20b":{"id":"openai/gpt-oss-safeguard-20b","name":"GPT OSS Safeguard 20B","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-29","last_updated":"2025-10-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":65536},"cost":{"input":0.075,"output":0.3,"cache_read":0.0375},"canonical_model_id":"openai/gpt-oss-safeguard-20b"},"openai/gpt-5-image":{"id":"openai/gpt-5-image","type":"image","name":"GPT-5 Image","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-10-01","release_date":"2025-10-14","last_updated":"2025-10-14","modalities":{"input":["image","text","pdf"],"output":["image","text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"cost":{"input":10,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-5-image"},"openai/gpt-5.6-terra-pro":{"id":"openai/gpt-5.6-terra-pro","name":"GPT-5.6 Terra","description":"GPT-5.6 Terra Pro is the same underlying model as [GPT-5.6 Terra](https://openrouter.ai/openai/gpt-5.6-terra), served with `reasoning.mode` set to `pro` for higher-quality responses on complex tasks. Learn more in OpenAI's docs: https://developers.openai.com/api/docs/guides/reasoning#reasoning-mode","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"openai/gpt-5.6-terra"},"openai/gpt-5":{"id":"openai/gpt-5","name":"GPT-5","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"openai/gpt-5.1-codex-max":{"id":"openai/gpt-5.1-codex-max","name":"GPT-5.1 Codex Max","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1-codex-max"},"openai/gpt-5.1-codex":{"id":"openai/gpt-5.1-codex","name":"GPT-5.1 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.13},"canonical_model_id":"openai/gpt-5.1-codex"},"openai/gpt-chat-latest":{"id":"openai/gpt-chat-latest","name":"OpenAI: GPT Chat Latest","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-05-05","last_updated":"2026-05-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5}},"openai/gpt-5.6-sol":{"id":"openai/gpt-5.6-sol","name":"GPT-5.6 Sol","description":"GPT-5.6 Sol is the flagship model in OpenAI's GPT-5.6 series. It is suited for complex reasoning, coding, and agentic workflows, and is particularly strong at command-line and multi-step coding tasks...","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5},"canonical_model_id":"openai/gpt-5.6-sol"},"openai/gpt-6.1-terra":{"id":"openai/gpt-6.1-terra","name":"OpenAI: GPT-6.1 Terra","description":"GPT-6.1 Terra is the mid-tier model in OpenAI's GPT-6.1 series, built for fast, capable computer use at a lower price than GPT-6.1 Sol. It reads what is on screen, takes...","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25},"canonical_model_id":"openai/gpt-6.1-terra"},"openai/gpt-4.1":{"id":"openai/gpt-4.1","name":"GPT-4.1","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"openai/o3":{"id":"openai/o3","name":"o3","description":"O-series reasoning model for hard analysis, math, coding, and planning","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/o3"},"openai/gpt-4o-2024-11-20":{"id":"openai/gpt-4o-2024-11-20","name":"GPT-4o (2024-11-20)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-11-20","last_updated":"2024-11-20","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o-2024-11-20"},"openai/gpt-6-luna-pro":{"id":"openai/gpt-6-luna-pro","name":"OpenAI: GPT-6 Luna Pro","description":"GPT-6 Luna Pro is the same underlying model as [GPT-6 Luna](https://openrouter.ai/openai/gpt-6-luna), served with `reasoning.mode` set to `pro` for higher-quality responses on complex tasks. Learn more in OpenAI's docs: https://developers.openai.com/api/docs/guides/reasoning#reasoning-mode","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125}},"openai/gpt-6-luna":{"id":"openai/gpt-6-luna","name":"GPT-6 Luna","description":"GPT-6 Luna is the fast, cost-efficient model in OpenAI's GPT-6 series, positioned below GPT-6 Sol. It is suited for high-volume and latency-sensitive workloads such as chat, classification, and lightweight agentic...","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125},"canonical_model_id":"openai/gpt-6-luna"},"openai/gpt-3.5-turbo-16k":{"id":"openai/gpt-3.5-turbo-16k","name":"OpenAI: GPT-3.5 Turbo 16k","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2023-08-28","last_updated":"2023-08-28","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":16385,"output":4096},"cost":{"input":3,"output":4}},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT OSS 20B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":117964},"cost":{"input":0.018,"output":0.09,"cache_read":0.009},"canonical_model_id":"openai/gpt-oss-20b"},"openai/gpt-6-astra-pro":{"id":"openai/gpt-6-astra-pro","name":"OpenAI: GPT-6 Astra Pro ($$$$)","description":"GPT-6 Astra Pro is the same underlying model as [GPT-6 Astra](https://openrouter.ai/openai/gpt-6-astra), served with `reasoning.mode` set to `pro` for higher-quality responses on complex tasks. Learn more in OpenAI's docs: https://developers.openai.com/api/docs/guides/reasoning#reasoning-mode","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5}},"openai/gpt-audio":{"id":"openai/gpt-audio","type":"chat","name":"GPT-Audio","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-10-01","release_date":"2025-08-28","last_updated":"2025-08-28","modalities":{"input":["text","audio","pdf"],"output":["text","audio"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10},"canonical_model_id":"openai/gpt-audio"},"openai/gpt-4":{"id":"openai/gpt-4","name":"GPT-4","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-11","release_date":"2023-11-06","last_updated":"2024-04-09","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":8191,"output":4096},"cost":{"input":30,"output":60},"canonical_model_id":"openai/gpt-4"},"openai/gpt-5-pro":{"id":"openai/gpt-5-pro","name":"GPT-5 Pro","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["image","text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":15,"output":120},"canonical_model_id":"openai/gpt-5-pro"},"openai/gpt-6.1-sol-pro":{"id":"openai/gpt-6.1-sol-pro","name":"OpenAI: GPT-6.1 Sol Pro","description":"GPT-6.1 Sol Pro is the same underlying model as [GPT-6.1 Sol](https://openrouter.ai/openai/gpt-6.1-sol), served with `reasoning.mode` set to `pro` for higher-quality responses on complex tasks. **Cost note:** pro mode spends far more...","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5}},"openai/gpt-6-sol":{"id":"openai/gpt-6-sol","name":"GPT-6 Sol","description":"GPT-6 Sol is the cost-efficient high-end model in OpenAI's GPT-6 series, positioned below the flagship GPT-6 Astra and above the fast GPT-6 Luna tier. It is suited for demanding professional...","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"openai/gpt-6-sol"},"openai/gpt-5.3-codex":{"id":"openai/gpt-5.3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"openai/gpt-4o-mini-2024-07-18":{"id":"openai/gpt-4o-mini-2024-07-18","name":"OpenAI: GPT-4o-mini (2024-07-18)","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-4o-mini"},"openai/gpt-4o-2024-05-13":{"id":"openai/gpt-4o-2024-05-13","name":"GPT-4o (2024-05-13)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-05-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"cost":{"input":5,"output":15},"canonical_model_id":"openai/gpt-4o-2024-05-13"},"openai/gpt-6-astra":{"id":"openai/gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's flagship model for demanding end-to-end work. It is suited for advanced analysis, software engineering, deep research, scientific work, and document creation, with particular strengths in long-horizon...","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"openai/gpt-6-astra"},"openai/gpt-5.1":{"id":"openai/gpt-5.1","name":"GPT-5.1","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["image","text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1"},"openai/gpt-5-mini":{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"openai/gpt-5.1-codex-mini":{"id":"openai/gpt-5.1-codex-mini","name":"GPT-5.1 Codex mini","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["image","text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.03},"canonical_model_id":"openai/gpt-5.1-codex-mini"},"openai/gpt-5.5-pro":{"id":"openai/gpt-5.5-pro","name":"GPT-5.5 Pro","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180},"canonical_model_id":"openai/gpt-5.5-pro"},"openai/gpt-5.6-luna-pro":{"id":"openai/gpt-5.6-luna-pro","name":"GPT-5.6 Luna","description":"GPT-5.6 Luna Pro is the same underlying model as [GPT-5.6 Luna](https://openrouter.ai/openai/gpt-5.6-luna), served with `reasoning.mode` set to `pro` for higher-quality responses on complex tasks. Learn more in OpenAI's docs: https://developers.openai.com/api/docs/guides/reasoning#reasoning-mode","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-5.6-luna":{"id":"openai/gpt-5.6-luna","name":"GPT-5.6 Luna","description":"GPT-5.6 Luna is a fast, cost-efficient model in OpenAI's GPT-5.6 series. It is suited for high-volume, latency-sensitive tasks such as chat, classification, and lightweight agentic workflows, providing capable reasoning for...","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-6.1-sol":{"id":"openai/gpt-6.1-sol","name":"GPT-6.1 Sol","description":"GPT-6.1 Sol is an upgrade to GPT-6 Sol from OpenAI, positioned below the flagship GPT-6 Astra in the GPT-6 series. It is suited for agentic coding, computer use, document-heavy professional...","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"openai/gpt-6.1-sol"},"openai/gpt-6.1-terra-pro":{"id":"openai/gpt-6.1-terra-pro","name":"OpenAI: GPT-6.1 Terra Pro","description":"GPT-6.1 Terra Pro is the same underlying model as [GPT-6.1 Terra](https://openrouter.ai/openai/gpt-6.1-terra), served with `reasoning.mode` set to `pro` for higher-quality responses on complex tasks. **Cost note:** pro mode spends far more...","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25}},"openai/gpt-audio-mini":{"id":"openai/gpt-audio-mini","type":"chat","name":"GPT-Audio Mini","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-10-01","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","audio","pdf"],"output":["text","audio"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.6,"output":2.4},"canonical_model_id":"openai/gpt-audio-mini"},"openai/gpt-5.4-pro":{"id":"openai/gpt-5.4-pro","name":"GPT-5.4 Pro","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180},"canonical_model_id":"openai/gpt-5.4-pro"},"openai/gpt-5-nano":{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-nano"},"openai/gpt-5.4":{"id":"openai/gpt-5.4","name":"GPT-5.4","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25},"canonical_model_id":"openai/gpt-5.4"},"openai/gpt-5.4-image-2":{"id":"openai/gpt-5.4-image-2","type":"image","name":"GPT-5.4 Image 2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":false,"structured_output":true,"temperature":false,"release_date":"2026-04-21","last_updated":"2026-04-21","modalities":{"input":["image","text","pdf"],"output":["image","text"]},"open_weights":false,"limit":{"context":272000,"output":128000},"cost":{"input":8,"output":15,"cache_read":2},"canonical_model_id":"openai/gpt-5.4-image-2"},"openai/o3-pro":{"id":"openai/o3-pro","name":"o3-pro","description":"O-series reasoning model for hard analysis, math, coding, and planning","family":"o-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-06-10","last_updated":"2025-06-10","modalities":{"input":["text","pdf","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":20,"output":80},"canonical_model_id":"openai/o3-pro"},"openai/gpt-4o-2024-08-06":{"id":"openai/gpt-4o-2024-08-06","name":"GPT-4o (2024-08-06)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-08-06","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o-2024-08-06"},"openai/gpt-5.4-nano":{"id":"openai/gpt-5.4-nano","name":"GPT-5.4 nano","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"openai/gpt-3.5-turbo-0613":{"id":"openai/gpt-3.5-turbo-0613","name":"OpenAI: GPT-3.5 Turbo (older v0613)","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2024-01-25","last_updated":"2024-01-25","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":4095,"output":3685},"cost":{"input":1,"output":2}},"openai/gpt-4o":{"id":"openai/gpt-4o","name":"GPT-4o","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":65536},"cost":{"input":0.03,"output":0.15,"cache_read":0.015},"canonical_model_id":"openai/gpt-oss-120b"},"openai/gpt-5.6-terra":{"id":"openai/gpt-5.6-terra","name":"GPT-5.6 Terra","description":"GPT-5.6 Terra is a balanced model in OpenAI's GPT-5.6 series, positioned between the flagship Sol tier and the cost-efficient Luna tier. It is suited for everyday coding, reasoning, and agentic...","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"openai/gpt-5.6-terra"},"openai/gpt-5-image-mini":{"id":"openai/gpt-5-image-mini","type":"image","name":"GPT-5 Image Mini","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-10-16","last_updated":"2025-10-16","modalities":{"input":["pdf","image","text"],"output":["image","text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"cost":{"input":2.5,"output":2,"cache_read":0.25},"canonical_model_id":"openai/gpt-5-image-mini"},"openai/gpt-4o-mini":{"id":"openai/gpt-4o-mini","name":"GPT-4o mini","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-4o-mini"},"openai/gpt-5.6-sol-pro":{"id":"openai/gpt-5.6-sol-pro","name":"GPT-5.6 Sol","description":"GPT-5.6 Sol Pro is the same underlying model as [GPT-5.6 Sol](https://openrouter.ai/openai/gpt-5.6-sol), served with `reasoning.mode` set to `pro` for higher-quality responses on complex tasks. Learn more in OpenAI's docs: https://developers.openai.com/api/docs/guides/reasoning#reasoning-mode","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5},"canonical_model_id":"openai/gpt-5.6-sol"},"elorian/glimpse":{"id":"elorian/glimpse","name":"Elorian: Glimpse","description":"Glimpse is a multimodal visual reasoning model from Elorian, built for visual understanding and complex visual reasoning in the physical world. It reasons directly over images and video rather than...","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":256000},"cost":{"input":0.6,"output":3,"cache_read":0.06}},"cognitivecomputations/dolphin-mistral-24b-venice-edition":{"id":"cognitivecomputations/dolphin-mistral-24b-venice-edition","name":"Venice: Uncensored","description":"Venice Uncensored Dolphin Mistral 24B Venice Edition is a fine-tuned variant of Mistral-Small-24B-Instruct-2501, developed by dphn.ai in collaboration with Venice.ai. This model is designed as an “uncensored” instruct-tuned LLM, preserving...","family":"mistral","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-04-30","release_date":"2025-07-09","last_updated":"2025-07-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0.2,"output":0.9},"canonical_model_id":"cognitivecomputations/dolphin-mistral-24b-venice-edition"},"cohere/command-r-plus-08-2024":{"id":"cohere/command-r-plus-08-2024","name":"Command R+","description":"Cohere retrieval model for long-context chat and enterprise RAG workflows","family":"command-r","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2024-08-30","last_updated":"2024-08-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4000},"cost":{"input":2.5,"output":10},"canonical_model_id":"cohere/command-r-plus-08-2024"},"cohere/command-r7b-12-2024":{"id":"cohere/command-r7b-12-2024","name":"Command R7B","description":"Cohere command model for multilingual enterprise agents, tools, and chat","family":"command-r","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2024-12-13","last_updated":"2024-12-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4000},"cost":{"input":0.0375,"output":0.15},"canonical_model_id":"cohere/command-r7b-12-2024"},"cohere/command-a-plus":{"id":"cohere/command-a-plus","name":"Cohere: Command A+","description":"Command A+ is Cohere's flagship model for enterprise agentic workflows. It accepts text and image inputs with a 192K context window, supports native tool calling with strict tool schemas, structured...","family":"command-a","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04-01","release_date":"2026-05-20","last_updated":"2026-06-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":192000,"output":64000},"cost":{"input":0.3,"output":1.5,"cache_read":0.15},"canonical_model_id":"cohere/command-a-plus-05-2026"},"cohere/command-r-08-2024":{"id":"cohere/command-r-08-2024","name":"Command R","description":"Cohere retrieval model for long-context chat and enterprise RAG workflows","family":"command-r","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2024-08-30","last_updated":"2024-08-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4000},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"cohere/command-r-08-2024"},"cohere/command-a":{"id":"cohere/command-a","name":"Command A","description":"Cohere command model for multilingual enterprise agents, tools, and chat","family":"command-a","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08-31","release_date":"2025-03-13","last_updated":"2025-03-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":8192},"cost":{"input":2.5,"output":10},"canonical_model_id":"cohere/command-a"},"cohere/north-mini-code:free":{"id":"cohere/north-mini-code:free","name":"Cohere: North Mini Code (free)","description":"North Mini Code is Cohere's first agentic coding model and the debut of its North family. A sparse mixture-of-experts model with 30B total parameters and 3B active, it is optimized...","family":"north","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-09-23","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":64000},"cost":{"input":0,"output":0},"canonical_model_id":"cohere/north-mini-code-1-0"},"ricursiveai/ripple-65b-preview":{"id":"ricursiveai/ripple-65b-preview","name":"Ricursive: Ripple 65B Preview","description":"Ripple-65B-Preview by ricursiveAI, a 65B model with native tool calling, served in BF16.","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-04","last_updated":"2026-11-04","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.1,"output":0.3,"cache_read":0.025}},"xiaomi/mimo-v2.6-pro":{"id":"xiaomi/mimo-v2.6-pro","name":"MiMo-V2.6-Pro","description":"MiMo-V2.6-Pro is the flagship foundation model developed by Xiaomi. Built at a scale of over 1T parameters, it is designed to push the ceiling of capability for the most demanding...","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.435,"output":0.87,"cache_read":0.004},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"xiaomi/mimo-v2.6-pro-ultraspeed":{"id":"xiaomi/mimo-v2.6-pro-ultraspeed","name":"MiMo-V2.6-Pro-UltraSpeed","description":"MiMo-V2.6-Pro-UltraSpeed is the fast speed edition of Xiaomi's flagship foundation model, MiMo-V2.6-Pro. Built from the same 1T MiMo-V2.6-Pro checkpoint, it matches the original model in quality while delivering roughly 10x...","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":4.35,"output":8.7,"cache_read":0.036},"canonical_model_id":"xiaomi/mimo-v2.6-pro-ultraspeed"},"xiaomi/mimo-v2.6-flash":{"id":"xiaomi/mimo-v2.6-flash","name":"MiMo-V2.6-Flash","description":"MiMo-V2.6-Flash is an open-source foundation model developed by Xiaomi. Built on a Mixture-of-Experts architecture with 309B total parameters and 15B activated per token, it employs a hybrid attention mechanism for...","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.1,"output":0.28,"cache_read":0.0028},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"xiaomi/mimo-v2.5":{"id":"xiaomi/mimo-v2.5","name":"MiMo-V2.5","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":65536},"status":"deprecated","cost":{"input":0.4,"output":2,"cache_read":0.08,"tiers":[{"input":0.8,"output":4,"cache_read":0.16,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":0.8,"output":4,"cache_read":0.16}},"canonical_model_id":"xiaomi/mimo-v2.5"},"xiaomi/mimo-v2.5-pro":{"id":"xiaomi/mimo-v2.5-pro","name":"MiMo-V2.5-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"status":"deprecated","cost":{"input":0.435,"output":0.87,"cache_read":0.0036,"tiers":[{"input":2,"output":6,"cache_read":0.4,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":2,"output":6,"cache_read":0.4}},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"ibm-granite/granite-4.2-8b":{"id":"ibm-granite/granite-4.2-8b","name":"IBM: Granite 4.2 8B","description":"Granite 4.2 8B is a dense reasoning model from IBM. It is suited for mathematics, code generation, multilingual dialogue, and agentic workflows that need multi-step reasoning. It supports full, low-effort,...","family":"granite","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-25","last_updated":"2026-08-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":117964},"cost":{"input":0.06,"output":0.15,"cache_read":0.015},"canonical_model_id":"ibm/granite-4.2-8b"},"mancer/weaver":{"id":"mancer/weaver","name":"Mancer: Weaver (alpha)","description":"An attempt to recreate Claude-style verbosity, but don't expect the same level of coherence or memory. Meant for use in roleplay/narrative situations.","family":"alpha","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-06-30","release_date":"2023-08-02","last_updated":"2023-08-02","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8000,"output":6000},"cost":{"input":0.3,"output":0.5,"cache_read":0.3},"canonical_model_id":"mancer/weaver"},"minimax/minimax-m2.5":{"id":"minimax/minimax-m2.5","name":"MiniMax-M2.5","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.27,"output":1.08,"cache_read":0.027},"canonical_model_id":"minimax/MiniMax-M2.5"},"minimax/minimax-m3.1-flash":{"id":"minimax/minimax-m3.1-flash","name":"MiniMax: MiniMax M3.1 Flash","description":"MiniMax-M3.1-Flash is a multimodal model from MiniMax. Compared with M3, it delivers significant improvements across multiple benchmarks, particularly in complex agentic tasks, coding, and cybersecurity. It is built for complex,...","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":524288},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"minimax/minimax-m3":{"id":"minimax/minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":512000},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"},"minimax/minimax-m2.7":{"id":"minimax/minimax-m2.7","name":"MiniMax-M2.7","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"output":176947},"cost":{"input":0.21,"output":0.84,"cache_read":0.042},"canonical_model_id":"minimax/MiniMax-M2.7"},"thinkingmachines/inkling-small":{"id":"thinkingmachines/inkling-small","name":"Inkling Small","description":"Inkling Small is an open-weight multimodal mixture-of-experts model from Thinking Machines Lab, with 12B active parameters out of 276B total. It is positioned as the smaller, more efficient member of...","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-30","last_updated":"2026-07-30","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":262144},"cost":{"input":0.45,"output":1.2,"cache_read":0.1},"canonical_model_id":"thinkingmachines/inkling-small"},"thinkingmachines/inkling-2-small:free":{"id":"thinkingmachines/inkling-2-small:free","name":"Thinking Machines: Inkling 2 Small (free)","description":"Inkling 2 Small is a multimodal mixture-of-experts reasoning model from Thinking Machines Lab, with 17B active parameters out of 594B total. It is the first model in the second Inkling...","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-11-05","last_updated":"2026-11-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"thinkingmachines/inkling-2-small"},"thinkingmachines/inkling":{"id":"thinkingmachines/inkling","name":"Inkling","description":"Inkling is an open-weight multimodal mixture-of-experts model from Thinking Machines Lab, with 41B active parameters out of 975B total. It is designed for general-purpose reasoning, coding, agentic and tool-use systems,...","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":471859},"cost":{"input":1,"output":4.05,"cache_read":0.17},"canonical_model_id":"thinkingmachines/inkling"},"reflection/beam-1.0-501b-a23b":{"id":"reflection/beam-1.0-501b-a23b","name":"Reflection: Beam 1.0 501B A23B","description":"Beam 1.0 is Reflection's open-weight reasoning model for coding and long-horizon agentic workflows. It uses a sparse mixture-of-experts architecture with 501B total and 23B active parameters per token, and a...","family":"beam","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-06-30","release_date":"2026-10-05","last_updated":"2026-10-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":0.25,"output":1,"cache_read":0.05},"canonical_model_id":"reflection/beam-1.0-501b-a23b"},"upstage/solar-pro4":{"id":"upstage/solar-pro4","name":"Upstage: Solar Pro 4","description":"Solar Pro 4 is a large language model from Upstage. It is suited for agentic workflows, office productivity, document-intensive work, and coding.","family":"solar-pro","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02","release_date":"2026-08-06","last_updated":"2026-08-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"upstage/solar-pro4"},"upstage/solar-mini4":{"id":"upstage/solar-mini4","name":"Upstage: Solar Mini 4","description":"Solar Mini 4 is Upstage's compact, cost-efficient language model, a 35B-parameter mixture-of-experts with 3B active parameters and a 524K context window. It is built for agentic use cases where response...","family":"solar-mini","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"output":131072},"cost":{"input":0.1,"output":0.4,"cache_read":0.01},"canonical_model_id":"upstage/solar-mini4"},"prism-ml/ternary-bonsai-2-27b":{"id":"prism-ml/ternary-bonsai-2-27b","name":"PrismML: Ternary Bonsai 2 27B","description":"Bonsai 2 27B is a 27B-parameter reasoning model from PrismML derived from Qwen3.8-27B. It supports coding, mathematics, tool calling, and image understanding with a 262K-token context window. Ternary compression shrinks...","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-18","last_updated":"2026-09-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"cost":{"input":0.075,"output":0.5,"cache_read":0.0375}},"prism-ml/ternary-bonsai-2-9b":{"id":"prism-ml/ternary-bonsai-2-9b","name":"PrismML: Ternary Bonsai 2 9B","description":"Ternary Bonsai 2 9B is PrismML’s compact, open-weight language model for conversational AI, reasoning, and tool use. Built on Qwen3.5, it uses ternary weights packed into 2 bits for efficient...","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-16","last_updated":"2026-10-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536},"cost":{"input":0.08,"output":0.13,"cache_read":0.04}},"meta/muse-spark-1.3":{"id":"meta/muse-spark-1.3","name":"Muse Spark 1.3","description":"Muse Spark 1.3 is a multimodal reasoning model from Meta for long-running agentic, multi-agent, and coding workflows. It is designed to keep track of information across extended tasks, work through...","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.3"},"meta/muse-wonder":{"id":"meta/muse-wonder","name":"Meta: Muse Wonder","description":"Muse Wonder is a frontier reasoning model from Meta, designed for complex personal and professional agentic tasks. It accepts text, images, video, audio, and PDF documents and returns text, with...","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-12","last_updated":"2026-10-12","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":4,"output":20,"cache_read":0.2}},"meta/muse-spark-1.1":{"id":"meta/muse-spark-1.1","name":"Muse Spark 1.1","description":"Muse Spark 1.1 is a multimodal reasoning model from Meta, built for agentic tasks. It accepts text, images, video, audio, and PDF documents and returns text, with a 1M-token context...","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-08","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.1"},"meta/muse-spark-1.2-contributor":{"id":"meta/muse-spark-1.2-contributor","name":"Meta: Muse Spark 1.2 Contributor","description":"Muse Spark 1.2 contributor tier is a reasoning model from Meta designed for developers who want to start building at an even lower cost. It’s meaningfully cheaper than Muse Spark...","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-21","last_updated":"2026-08-21","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":0.1,"output":0.2,"cache_read":0.002}},"meta/muse-spark-open":{"id":"meta/muse-spark-open","name":"Muse Spark Open","description":"Muse Spark Open is a coding-optimized open-weight model. Trained specifically for agentic coding workflows, it delivers higher first-attempt accuracy, reliable tool calling, and deep codebase understanding across the repos developers...","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":262144},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-open"},"meta/muse-ember":{"id":"meta/muse-ember","name":"Meta: Muse Ember","description":"Muse Ember is the smallest and most efficient model from Meta that’s designed for complex reasoning execution and the work agents repeat all day: tool calls, coding agent subtasks, routing,...","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":0.1,"output":0.5,"cache_read":0.004}},"meta/muse-glimmer-30b":{"id":"meta/muse-glimmer-30b","name":"Muse Glimmer 30B","description":"Muse Glimmer 30B is a dense, open-weight multimodal model from Meta Superintelligence Labs, distilled from Muse Spark and optimized for autonomous agents on consumer hardware. It is suited for long-horizon...","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-08-10","last_updated":"2026-08-10","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.3,"output":1.2,"cache_read":0.04},"canonical_model_id":"meta/muse-glimmer-30b"},"meta/muse-spark-1.2":{"id":"meta/muse-spark-1.2","name":"Muse Spark 1.2","description":"Muse Spark 1.2 is a reasoning model from Meta, designed for complex agentic tasks. It accepts text, images, video, audio, and PDF documents, returns text, and offers a 1M-token context...","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.2"},"meta/muse-spark-1.3-contributor":{"id":"meta/muse-spark-1.3-contributor","name":"Meta: Muse Spark 1.3 Contributor","description":"Muse Spark 1.3 Contributor is the cost-efficient contributor tier of Meta’s multimodal reasoning model for experimentation, learning, and early-stage agentic, multi-agent, and coding workflows. It is designed to track information...","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":0.1,"output":0.2,"cache_read":0.002}},"~openai/gpt-terra-latest":{"id":"~openai/gpt-terra-latest","name":"OpenAI: GPT Terra Latest","description":"This model always redirects to the latest model in the OpenAI GPT Terra family.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25}},"~openai/gpt-mini-latest":{"id":"~openai/gpt-mini-latest","name":"OpenAI: GPT Mini Latest","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075}},"~openai/gpt-sol-latest":{"id":"~openai/gpt-sol-latest","name":"OpenAI: GPT Sol Latest","description":"This model always redirects to the latest model in the OpenAI GPT Sol family.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5}},"~openai/gpt-luna-latest":{"id":"~openai/gpt-luna-latest","name":"OpenAI: GPT Luna Latest","description":"This model always redirects to the latest model in the OpenAI GPT Luna family.","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125}},"~openai/gpt-astra-latest":{"id":"~openai/gpt-astra-latest","name":"OpenAI: GPT Astra Latest ($$$$)","description":"This model always redirects to the latest model in the OpenAI GPT Astra family.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5}},"stepfun/step-5-preview":{"id":"stepfun/step-5-preview","name":"Step 5 Preview","description":"Step 5 Preview is StepFun's flagship model for agentic work, built on a sparse Mixture-of-Experts architecture (27B active / 600B total parameters). It performs strongly in software engineering and professional...","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":64000},"cost":{"input":1,"output":2.7,"cache_read":0.1},"canonical_model_id":"stepfun/step-5-preview"},"stepfun/step-3.7-flash":{"id":"stepfun/step-3.7-flash","name":"Step 3.7 Flash","description":"Step 3.7 Flash is StepFun's latest high-efficiency multimodal Mixture-of-Experts model. It pairs a 196B-parameter language backbone with a vision encoder for native image and video understanding, activating roughly 11B parameters...","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":230400},"cost":{"input":0.2,"output":1.15,"cache_read":0.04},"canonical_model_id":"stepfun/step-3.7-flash"},"stepfun/step-3.5-flash":{"id":"stepfun/step-3.5-flash","name":"Step 3.5 Flash","description":"StepFun flash model for efficient multimodal reasoning, coding, and tool use","family":"step","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-29","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.1,"output":0.3},"canonical_model_id":"stepfun/step-3.5-flash"},"fireworks/ember-1":{"id":"fireworks/ember-1","name":"Fireworks: Ember-1","description":"Ember-1 is a specialized reasoning model from Fireworks Research, built on [Kimi K3](https://openrouter.ai/moonshotai/kimi-k3). It is designed to make every token go further: it produces shorter reasoning traces, using roughly 40%...","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"fireworks/ember-1"},"undi95/remm-slerp-l2-13b":{"id":"undi95/remm-slerp-l2-13b","name":"ReMM SLERP 13B","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2023-06-30","release_date":"2023-07-22","last_updated":"2023-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":6144,"output":5529},"cost":{"input":0.3,"output":0.5,"cache_read":0.2},"canonical_model_id":"undi95/remm-slerp-l2-13b"},"openrouter/pareto-code":{"id":"openrouter/pareto-code","name":"Pareto Code Router","description":"Coding model for repository understanding, refactors, and agentic engineering tasks","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-21","last_updated":"2026-05-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":65536},"cost":{"input":0,"output":0}},"openrouter/free":{"id":"openrouter/free","name":"OpenRouter Free Models Router","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-01","last_updated":"2026-02-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32768},"cost":{"input":0,"output":0}},"openrouter/auto":{"id":"openrouter/auto","name":"Auto Router","description":"Image model for prompt-driven generation, editing, and visual design workflows","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-15","last_updated":"2026-03-15","modalities":{"input":["audio","image","pdf","text","video"],"output":["image","text"]},"open_weights":false,"limit":{"context":2000000,"output":32768},"cost":{"input":0,"output":0}},"openrouter/bodybuilder":{"id":"openrouter/bodybuilder","name":"Body Builder (beta)","description":"Preview model for early access evaluation, prototyping, and compatibility testing","attachment":false,"reasoning":false,"tool_call":false,"release_date":"2026-03-15","last_updated":"2026-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32768},"status":"beta","cost":{"input":0,"output":0}},"~z-ai/glm-latest":{"id":"~z-ai/glm-latest","name":"Z.ai: GLM Latest","description":"This model always redirects to the latest GLM model from Z.ai.","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-19","last_updated":"2026-08-19","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":0.0699,"output":1.4,"cache_read":0.0689}},"~z-ai/glm-flash-latest":{"id":"~z-ai/glm-flash-latest","name":"Z.ai: GLM Flash Latest","description":"This model always redirects to the latest model in the GLM Flash family.","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-27","last_updated":"2026-08-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.0399,"output":0.0784,"cache_read":0.03}},"dots-studio/dots-3-note-preview:free":{"id":"dots-studio/dots-3-note-preview:free","name":"Dots Studio: Dots3-Note Preview (free)","description":"Dots3-Note Preview is an open-weight mixture-of-experts model from Dots Studio, with 16B active parameters out of 280B total. It is the lightest model in the Dots 3 family and is...","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":512000,"output":460800},"cost":{"input":0,"output":0}},"unbiased/pareto-26.10-preview":{"id":"unbiased/pareto-26.10-preview","name":"Pareto 26.10 Preview","description":"Pareto is a multimodal composite model built for research, coding, and agentic workflows, while delivering frontier-level performance across a broad range of general-purpose tasks. This is a preview of the...","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-01","last_updated":"2026-10-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.8,"output":3.2,"cache_read":0.03}},"unbiased/pareto-26.10":{"id":"unbiased/pareto-26.10","name":"Pareto 26.10","description":"Pareto is a multimodal composite model built for research, coding, and agentic workflows, while delivering frontier-level performance across a broad range of general-purpose tasks.","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.8,"output":3.2,"cache_read":0.03}},"unbiased/pareto-26.9":{"id":"unbiased/pareto-26.9","name":"Pareto 26.9","description":"Pareto is a multimodal composite model built for research, coding, and agentic workflows, while delivering frontier-level performance across a broad range of general-purpose tasks.","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":2.5,"output":7.5,"cache_read":0.25}},"z-ai/glm-5.2":{"id":"z-ai/glm-5.2","name":"GLM-5.2","description":"GLM 5.2 is a large-scale reasoning model from Z.ai. It supports text input and output with a 1M-token context window, and is suited for long-horizon agent workflows, project-level software engineering,...","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"z-ai/glm-4.6v":{"id":"z-ai/glm-4.6v","name":"GLM-4.6V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.3,"output":0.9,"cache_read":0.055},"canonical_model_id":"zhipuai/glm-4.6v"},"z-ai/glm-5.1":{"id":"z-ai/glm-5.1","name":"GLM-5.1","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.1"},"z-ai/glm-5.3-flashx-legal":{"id":"z-ai/glm-5.3-flashx-legal","name":"Z.ai: GLM 5.3 FlashX Legal","description":"GLM-5.3-FlashX-Legal (GLM-Legal) is Z.ai's legal-domain variant of GLM-5.3-FlashX, a native multimodal model that accepts text, image, and video input and produces text. It adds legal-domain mid-training and post-training with reinforcement...","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-02","last_updated":"2026-11-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.37,"output":1.25,"cache_read":0.075}},"z-ai/glm-4.5":{"id":"z-ai/glm-4.5","name":"GLM-4.5","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"cost":{"input":0.6,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.5"},"z-ai/glm-4.7":{"id":"z-ai/glm-4.7","name":"GLM-4.7","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.7"},"z-ai/glm-5.3":{"id":"z-ai/glm-5.3","name":"GLM-5.3","description":"GLM-5.3 is a large-scale reasoning model from Z.ai, built for complex software engineering and long-horizon agent tasks. It supports text input and output with a 1M-token context window, and improves...","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"z-ai/glm-5.3-flash":{"id":"z-ai/glm-5.3-flash","name":"GLM-5.3-Flash","description":"GLM-5.3-Flash is a native multimodal model from Z.ai. It is suited for efficient coding and long-horizon agent tasks. Its hybrid sparse and linear attention architecture maintains accurate long-context behavior while...","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"z-ai/glm-5-turbo":{"id":"z-ai/glm-5-turbo","name":"GLM-5-Turbo","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":202752,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24},"canonical_model_id":"zhipuai/glm-5-turbo"},"z-ai/glm-4.5-air":{"id":"z-ai/glm-4.5-air","name":"GLM-4.5-Air","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-air","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"cost":{"input":0.2,"output":1.1,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-4.5-air"},"z-ai/glm-4.6":{"id":"z-ai/glm-4.6","name":"GLM-4.6","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":0.5,"output":2,"cache_read":0.1},"canonical_model_id":"zhipuai/glm-4.6"},"z-ai/glm-4.5v":{"id":"z-ai/glm-4.5v","name":"GLM-4.5V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-08-11","last_updated":"2025-08-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":16384},"cost":{"input":0.6,"output":1.8,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.5v"},"z-ai/glm-5.3-flashx":{"id":"z-ai/glm-5.3-flashx","name":"Z.ai: GLM 5.3 FlashX","description":"GLM-5.3-FlashX is the high-speed variant of Z.ai's GLM-5.3-Flash, a native multimodal model delivering inference speeds of up to 200 tokens/s. Built on the same hybrid sparse and linear attention architecture...","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-09-18","last_updated":"2026-09-18","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.37,"output":1.25,"cache_read":0.075}},"z-ai/glm-5.3-prime":{"id":"z-ai/glm-5.3-prime","name":"Z.ai: GLM 5.3 Prime","description":"GLM-5.3-Prime is the high-speed variant of Z.ai's GLM-5.3, inheriting its full capabilities while delivering 1.5–2× the output throughput through inference acceleration. It supports text input and output with a 1M-token...","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-09-23","last_updated":"2026-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2.8,"output":8.8,"cache_read":0.56}},"z-ai/glm-5v-turbo":{"id":"z-ai/glm-5v-turbo","name":"GLM-5V-Turbo","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["image","text","video"],"output":["text"]},"open_weights":false,"limit":{"context":202752,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24},"canonical_model_id":"zhipuai/glm-5v-turbo"},"z-ai/glm-5":{"id":"z-ai/glm-5","name":"GLM-5","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":1,"output":3.2,"cache_read":0.2},"canonical_model_id":"zhipuai/glm-5"},"z-ai/glm-4.7-flash":{"id":"z-ai/glm-4.7-flash","name":"GLM-4.7-Flash","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":117964},"cost":{"input":0.0605,"output":0.4},"canonical_model_id":"zhipuai/glm-4.7-flash"},"meta-llama/llama-3.2-3b-instruct":{"id":"meta-llama/llama-3.2-3b-instruct","name":"Meta: Llama 3.2 3B Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":117964},"cost":{"input":0.05,"output":0.33},"canonical_model_id":"meta/llama-3.2-3b-instruct"},"meta-llama/llama-guard-4-12b":{"id":"meta-llama/llama-guard-4-12b","name":"Meta: Llama Guard 4 12B","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"llama","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-04-29","last_updated":"2025-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":16384},"cost":{"input":0.144,"output":0.144},"canonical_model_id":"meta/llama-guard-4-12b"},"meta-llama/llama-4-maverick":{"id":"meta-llama/llama-4-maverick","name":"Meta: Llama 4 Maverick","description":"Open multimodal Llama model for strong reasoning and fast responses","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":32768},"cost":{"input":0.35,"output":1,"cache_read":0.17},"canonical_model_id":"meta/llama-4-maverick-17b-instruct"},"meta-llama/llama-3.1-8b-instruct":{"id":"meta-llama/llama-3.1-8b-instruct","name":"Llama-3.1-8B-Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.02,"output":0.04},"canonical_model_id":"meta/llama-3.1-8b-instruct"},"meta-llama/llama-3.1-70b-instruct":{"id":"meta-llama/llama-3.1-70b-instruct","name":"Llama-3.1-70B-Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"cost":{"input":0.72,"output":0.72},"canonical_model_id":"meta/llama-3.1-70b-instruct"},"meta-llama/llama-3.3-70b-instruct":{"id":"meta-llama/llama-3.3-70b-instruct","name":"Llama-3.3-70B-Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":115200},"cost":{"input":0.1,"output":0.32},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"meta-llama/llama-4-scout":{"id":"meta-llama/llama-4-scout","name":"Meta: Llama 4 Scout","description":"Open multimodal Llama model for long-context analysis and efficient agents","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":327680,"output":16384},"cost":{"input":0.08,"output":0.24},"canonical_model_id":"meta/llama-4-scout-17b-instruct"},"meta-llama/llama-3.2-1b-instruct":{"id":"meta-llama/llama-3.2-1b-instruct","name":"Llama 3.2 1B Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":60000,"output":54000},"cost":{"input":0.027,"output":0.201},"canonical_model_id":"meta/llama-3.2-1b-instruct"},"liquid/lfm-3-1.7b":{"id":"liquid/lfm-3-1.7b","name":"LiquidAI: LFM3-1.7B","description":"A compact 1.7B-parameter text model with a 256K-token context, post-trained for agents, tool calling, and structured outputs. It reasons before it answers. Prompts and outputs may be retained and used...","family":"liquid","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-06","last_updated":"2026-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":8192},"cost":{"input":0.08,"output":0.2,"cache_read":0.02}},"liquid/lfm-2.5-24b-a2b":{"id":"liquid/lfm-2.5-24b-a2b","name":"LiquidAI: LFM2.5-24B-A2B","description":"LFM2.5-24B-A2B is a mixture-of-experts reasoning model from Liquid AI with 24B total and 2.45B active parameters. It always reasons before answering and is built for agents that call tools. Liquid...","family":"liquid","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"cost":{"input":0.05,"output":0.7,"cache_read":0.025}},"liquid/lfm-2.5-2.6b":{"id":"liquid/lfm-2.5-2.6b","name":"LiquidAI: LFM2.5-2.6B (retires Nov 13)","description":"LFM2.5-2.6B is a compact reasoning model from Liquid AI. It is suited for agent workflows, data extraction, RAG, and long-context processing. Liquid advises against using it for agentic coding or...","family":"liquid","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"cost":{"input":0.35,"output":0.5,"cache_read":0.04}},"liquid/lfm-3-1.7b:free":{"id":"liquid/lfm-3-1.7b:free","name":"LiquidAI: LFM3-1.7B (free)","description":"A compact 1.7B-parameter text model with a 256K-token context, post-trained for agents, tool calling, and structured outputs. It reasons before it answers. Prompts and outputs may be retained and used...","family":"liquid","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-06","last_updated":"2026-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":8192},"cost":{"input":0,"output":0}},"nex-agi/nex-n2.5-pro":{"id":"nex-agi/nex-n2.5-pro","name":"Nex AGI: Nex-N2.5-Pro","description":"Nex-N2.5 is an agentic model built to turn goals into working, verified outcomes. Its core strength is agentic coding within a visual feedback loop: it can explore codebases, implement multi-file...","family":"agi","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-08","last_updated":"2026-09-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":235929},"cost":{"input":0.075,"output":0.25,"cache_read":0.015}},"nex-agi/nex-n2.5-mini":{"id":"nex-agi/nex-n2.5-mini","name":"Nex AGI: Nex-N2.5-Mini","description":"Nex-N2.5 is an agentic model built to turn goals into working, verified outcomes. Its core strength is agentic coding within a visual feedback loop: it can explore codebases, implement multi-file...","family":"agi","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","medium","high"]}],"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-09-08","last_updated":"2026-09-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":235929},"cost":{"input":0.025,"output":0.1,"cache_read":0.0025}},"nex-agi/nex-n2.6":{"id":"nex-agi/nex-n2.6","name":"Nex AGI: Nex-N2.6","description":"Nex-N2.6 is an agentic model from Nex AGI, built on [GLM-5.3-Flash](https://huggingface.co/zai-org/GLM-5.3-Flash-BF16) with about 321B parameters. It is suited for computer use, coding, and long-horizon tasks that involve tools. Compared with...","family":"agi","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":235929},"cost":{"input":0.15,"output":0.5,"cache_read":0.03}},"moondream/moondream3-preview":{"id":"moondream/moondream3-preview","name":"Moondream: Moondream 3 Preview","description":"Moondream 3 Preview is a vision-language model from Moondream with 9B total parameters and 2B active (mixture-of-experts). It handles visual question answering, captioning, OCR, and visual reasoning over images, with...","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":4096},"cost":{"input":0.3,"output":2.5}},"moondream/moondream3.1-9b-a2b":{"id":"moondream/moondream3.1-9b-a2b","name":"Moondream: Moondream 3.1","description":"Moondream 3.1 is a vision-language model from Moondream, the successor to Moondream 3 Preview, with 9B total parameters and 2B active (mixture-of-experts). It handles visual question answering, captioning, OCR, and...","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":4096},"cost":{"input":0.3,"output":2.5}},"~x-ai/grok-latest":{"id":"~x-ai/grok-latest","name":"xAI: Grok Latest","description":"This model always redirects to the latest Grok model from xAI.","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":450000},"cost":{"input":2,"output":6,"cache_read":0.5,"cache_write":0}},"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free":{"id":"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free","name":"NVIDIA: Nemotron 3 Nano Omni (free)","description":"Open Nemotron omni model combining reasoning with text, vision, and audio","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-28","last_updated":"2026-04-28","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning"},"nvidia/nemotron-3-ultra-550b-a55b":{"id":"nvidia/nemotron-3-ultra-550b-a55b","name":"Nemotron 3 Ultra 550B A55B","description":"NVIDIA Nemotron 3 Ultra is an open frontier-reasoning and orchestration model from NVIDIA, with 55B active parameters out of 550B total (MoE). Built on a hybrid Transformer-Mamba mixture-of-experts architecture, it...","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202800,"output":182520},"cost":{"input":0.4,"output":1.76,"cache_read":0.08},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"nvidia/nemotron-3-nano-30b-a3b":{"id":"nvidia/nemotron-3-nano-30b-a3b","name":"Nemotron 3 Nano 30B A3B","description":"Small Nemotron 3 MoE for efficient coding, math, and long-context agents","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06-25","release_date":"2025-12-15","last_updated":"2025-12-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.06,"output":0.24,"cache_read":0.012},"canonical_model_id":"nvidia/nemotron-3-nano-30b-a3b"},"nvidia/nemotron-3.5-super-vl":{"id":"nvidia/nemotron-3.5-super-vl","name":"NVIDIA: Nemotron 3.5 Super VL","description":"NVIDIA Nemotron 3.5 Super VL is an open multimodal mixture-of-experts model from NVIDIA, with 12B active parameters out of 120B total. It takes text, images, documents, GUI screenshots, and video...","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":0.06,"output":0.35,"cache_read":0.01},"canonical_model_id":"nvidia/nemotron-3.5-super-vl-120b-a12b"},"nvidia/nemotron-3.5-super-vl:free":{"id":"nvidia/nemotron-3.5-super-vl:free","name":"NVIDIA: Nemotron 3.5 Super VL (free)","description":"NVIDIA Nemotron 3.5 Super VL is an open multimodal mixture-of-experts model from NVIDIA, with 12B active parameters out of 120B total. It takes text, images, documents, GUI screenshots, and video... **Terms of service** For NVIDIA free endpoints (Super/Ultra/etc): Trial use only - do not submit personal or confidential data. Your use is logged for security purposes and to improve NVIDIA products and services. The logged session data for improvement purposes is not linked to your identity or any persistent identifier. For more information about our data processing practices, see our [Privacy Policy](https://www.nvidia.com/en-us/about-nvidia/privacy-policy/). By interacting with this endpoint, you consent to our collection, recording, and use of such information and the [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf).","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3.5-super-vl-120b-a12b"},"nvidia/nemotron-3.5-lightning":{"id":"nvidia/nemotron-3.5-lightning","name":"Nemotron 3.5 Lightning 30B A3B","description":"NVIDIA Nemotron 3.5 Lightning is an open mixture-of-experts model from NVIDIA, with 3B active parameters out of 30B total. It is suited for high-throughput agentic workloads and specialized tasks that...","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.025,"output":0.12,"cache_read":0.0125},"canonical_model_id":"nvidia/nemotron-3.5-lightning"},"nvidia/nemotron-3.5-lightning:free":{"id":"nvidia/nemotron-3.5-lightning:free","name":"NVIDIA: Nemotron 3.5 Lightning (free)","description":"NVIDIA Nemotron 3.5 Lightning is an open mixture-of-experts model from NVIDIA, with 3B active parameters out of 30B total. It is suited for high-throughput agentic workloads and specialized tasks that... **Terms of service** For NVIDIA free endpoints (Super/Ultra/etc): Trial use only - do not submit personal or confidential data. Your use is logged for security purposes and to improve NVIDIA products and services. The logged session data for improvement purposes is not linked to your identity or any persistent identifier. For more information about our data processing practices, see our [Privacy Policy](https://www.nvidia.com/en-us/about-nvidia/privacy-policy/). By interacting with this endpoint, you consent to our collection, recording, and use of such information and the [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf).","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-09","release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3.5-lightning"},"nvidia/nemotron-3-ultra-550b-a55b:free":{"id":"nvidia/nemotron-3-ultra-550b-a55b:free","name":"NVIDIA: Nemotron 3 Ultra (free)","description":"NVIDIA Nemotron 3 Ultra is an open frontier-reasoning and orchestration model from NVIDIA, with 55B active parameters out of 550B total (MoE). Built on a hybrid Transformer-Mamba mixture-of-experts architecture, it... **Terms of service** For NVIDIA free endpoints (Super/Ultra/etc): Trial use only - do not submit personal or confidential data. Your use is logged for security purposes and to improve NVIDIA products and services. The logged session data for improvement purposes is not linked to your identity or any persistent identifier. For more information about our data processing practices, see our [Privacy Policy](https://www.nvidia.com/en-us/about-nvidia/privacy-policy/). By interacting with this endpoint, you consent to our collection, recording, and use of such information and the [NVIDIA API Trial Terms of Service](https://assets.ngc.nvidia.com/products/api-catalog/legal/NVIDIA%20API%20Trial%20Terms%20of%20Service.pdf).","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"nvidia/nemotron-3-super-120b-a12b":{"id":"nvidia/nemotron-3-super-120b-a12b","name":"Nemotron 3 Super 120B A12B","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0.075,"output":0.4},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"},"nvidia/nemotron-3.5-content-safety":{"id":"nvidia/nemotron-3.5-content-safety","name":"Nemotron 3.5 Content Safety","description":"NVIDIA Nemotron 3.5 Content Safety is a compact 4B-parameter multimodal guardrail model from NVIDIA, fine-tuned from Google Gemma-3-4B. It moderates both inputs to and responses from LLMs and VLMs, accepting...","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":117964},"cost":{"input":0.2,"output":0.2},"canonical_model_id":"nvidia/nemotron-3.5-content-safety"},"stealth/glyph-cluster":{"id":"stealth/glyph-cluster","name":"Stealth: Glyph Cluster (free)","description":"Your prompts and completions may be retained and used to train or improve the provider's services. Glyph Cluster is a reasoning model for coding and long-context analysis, served through Vercel AI Gateway during its stealth period at no cost. It supports function calling and streaming, takes text input only, and does not support structured outputs. Zero Data Retention is not available for this model.","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-08-26","last_updated":"2025-08-26","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":0,"output":0,"reasoning":0,"cache_read":0,"cache_write":0}},"~anthropic/claude-sonnet-latest":{"id":"~anthropic/claude-sonnet-latest","name":"Anthropic: Claude Sonnet Latest","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5}},"~anthropic/claude-fable-latest":{"id":"~anthropic/claude-fable-latest","name":"Anthropic: Claude Fable Latest","description":"This model always redirects to the latest model in the Claude Fable family.","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10}},"~anthropic/claude-opus-latest":{"id":"~anthropic/claude-opus-latest","name":"Anthropic: Claude Opus Latest","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-04-21","last_updated":"2026-04-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5}},"~anthropic/claude-haiku-latest":{"id":"~anthropic/claude-haiku-latest","name":"Anthropic: Claude Haiku Latest","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125}},"morph/morph-v3-large":{"id":"morph/morph-v3-large","name":"Morph: Morph V3 Large","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"morph","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-07-07","last_updated":"2025-07-07","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":0.9,"output":1.9},"canonical_model_id":"morph/morph-v3-large"},"morph/morph-v3-fast":{"id":"morph/morph-v3-fast","name":"Morph: Morph V3 Fast","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"morph","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-07-07","last_updated":"2025-07-07","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":0.8,"output":1.2},"canonical_model_id":"morph/morph-v3-fast"},"gryphe/mythomax-l2-13b":{"id":"gryphe/mythomax-l2-13b","name":"MythoMax 13B","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2023-08-10","last_updated":"2023-08-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":4096,"output":3686},"cost":{"input":0.08,"output":0.11},"canonical_model_id":"gryphe/mythomax-l2-13b"},"sakana/fugu-max":{"id":"sakana/fugu-max","name":"Fugu Max","description":"Fugu Max is the cost-performance model in Sakana AI's Fugu family. Rather than a single monolithic model, Fugu is a learned multi-agent orchestration system: a language model trained to route...","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"sakana/fugu-max"},"sakana/fugu-ultra-v2":{"id":"sakana/fugu-ultra-v2","name":"Fugu Ultra v2","description":"Fugu Ultra v2 is the higher-performance model in Sakana AI's Fugu family. Rather than a single monolithic model, Fugu is a learned multi-agent orchestration system: a language model trained to...","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-08-28","release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"sakana/fugu-ultra-v2"},"sakana/fugu-ultra":{"id":"sakana/fugu-ultra","name":"Fugu Ultra","description":"Fugu Ultra is the higher-performance model in Sakana AI's Fugu family. Rather than a single monolithic model, Fugu is a learned multi-agent orchestration system: a language model trained to route...","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-06-15","last_updated":"2026-06-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"sakana/fugu-ultra"},"sakana/sakana-namazu":{"id":"sakana/sakana-namazu","name":"Sakana Namazu","description":"Sakana Namazu is a Japanese-specialized reasoning model from Sakana AI, based on Kimi K2.6 with additional training for Japanese language and business contexts. It is suited for Japanese instruction following,...","family":"sakana-namazu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536},"cost":{"input":0.95,"output":4,"cache_read":0.15},"canonical_model_id":"sakana/sakana-namazu"},"scaledown/extract":{"id":"scaledown/extract","name":"ScaleDown: Extract","description":"Extract is a description-driven entity extraction model from ScaleDown. Instead of a fixed set of entity types, callers describe the fields they want in plain English through `provider.options.scaledown.entities`, and the...","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":900000},"cost":{"input":0.05,"output":0}},"scaledown/summarize":{"id":"scaledown/summarize","name":"ScaleDown: Summarize","description":"Summarize is an abstractive summarization model from ScaleDown. It condenses long text and documents into a fluent, faithful rewrite rather than lifting sentences from the source, and is suited for...","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":4000},"cost":{"input":0.05,"output":0}},"sao10k/l3-lunaris-8b":{"id":"sao10k/l3-lunaris-8b","name":"Sao10K: Llama 3 8B Lunaris","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2023-12-31","release_date":"2024-08-13","last_updated":"2024-08-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":7372},"cost":{"input":0.04,"output":0.05},"canonical_model_id":"sao10k/l3-lunaris-8b"},"sao10k/l3.1-euryale-70b":{"id":"sao10k/l3.1-euryale-70b","name":"Sao10K: Llama 3.1 Euryale 70B v2.2","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2023-12-31","release_date":"2024-08-28","last_updated":"2024-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.85,"output":0.85},"canonical_model_id":"sao10k/l3.1-euryale-70b"},"bytedance-seed/seed-2.0-mini":{"id":"bytedance-seed/seed-2.0-mini","name":"Seed 2.0 Mini","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":0.1,"output":0.4},"canonical_model_id":"bytedance-seed/seed-2.0-mini"},"bytedance-seed/seed-2.0-lite":{"id":"bytedance-seed/seed-2.0-lite","name":"Seed 2.0 Lite","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":0.25,"output":2},"canonical_model_id":"bytedance-seed/seed-2.0-lite"},"bytedance-seed/seed-2-1-turbo":{"id":"bytedance-seed/seed-2-1-turbo","name":"ByteDance Seed: Seed 2.1 Turbo","description":"Seed 2.1 Turbo is a multimodal model from ByteDance Seed for coding and long-horizon agent workflows. It is suited for end-to-end software delivery, multi-step task execution, and understanding visual and...","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-23","last_updated":"2026-06-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":235929},"cost":{"input":0.5,"output":2.5},"canonical_model_id":"bytedance-seed/seed-2.1-turbo"},"relace/relace-search":{"id":"relace/relace-search","name":"Relace: Relace Search","description":"Tool-capable chat model for instruction following and agentic application workflows","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"cost":{"input":1,"output":3},"canonical_model_id":"relace/relace-search"},"relace/relace-apply-3":{"id":"relace/relace-apply-3","name":"Relace: Relace Apply 3","description":"General-purpose chat model for instruction following, writing, and analysis","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2025-09-26","last_updated":"2025-09-26","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"cost":{"input":0.85,"output":1.25},"canonical_model_id":"relace/relace-apply-3"},"motif-technologies/motif-3":{"id":"motif-technologies/motif-3","name":"Motif Technologies: Motif 3","description":"Motif 3 is a Mixture-of-Experts language model from Motif Technologies, with 314B total and 13.2B active parameters. It is a general-purpose multilingual model for English and Korean, particularly strong at...","family":"motif","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-11-02","last_updated":"2026-11-02","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":235929},"cost":{"input":0.3,"output":1.2,"cache_read":0.06}},"inference-net/schematron-v2-turbo":{"id":"inference-net/schematron-v2-turbo","name":"Inference.net: Schematron V2 Turbo","description":"Schematron V2 Turbo is a 3B-parameter HTML-to-JSON extraction model from Inference.net. It prioritizes throughput for high-volume extraction workloads. Extraction instructions must be supplied through a JSON schema in response_format rather...","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"cost":{"input":0.03,"output":0.15,"cache_read":0.03},"canonical_model_id":"inference-net/schematron-v2-turbo"},"inference-net/schematron-v2-small":{"id":"inference-net/schematron-v2-small","name":"Inference.net: Schematron V2 Small","description":"Schematron V2 Small is a 3B-parameter HTML-to-JSON extraction model from Inference.net. It prioritizes extraction quality for complex schemas and long pages. Extraction instructions must be supplied through a JSON schema...","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"cost":{"input":0.05,"output":0.23,"cache_read":0.05},"canonical_model_id":"inference-net/schematron-v2-small"}}},"lowrouter":{"id":"lowrouter","env":["LOWROUTER_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.lowrouter.ai/v1","name":"LowRouter","doc":"https://lowrouter.ai/docs/models/available","models":{"auto/mistralai/codestral-2508":{"id":"auto/mistralai/codestral-2508","name":"Codestral 25.08","description":"Mistral code model for low-latency completion, fill-in-the-middle, and code generation","family":"codestral","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-30","last_updated":"2025-07-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"cost":{"input":0.3138,"output":0.9413,"cache_read":0.0314},"canonical_model_id":"mistral/codestral-2508"},"auto/mistralai/mistral-medium-3.5":{"id":"auto/mistralai/mistral-medium-3.5","name":"Mistral Medium 3.5","description":"Balanced Mistral model for enterprise assistants, multilingual work, and tools","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-29","last_updated":"2026-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.5688,"output":7.8442,"cache_read":0.1569},"canonical_model_id":"mistral/mistral-medium-2604"},"auto/mistralai/mistral-large-2512":{"id":"auto/mistralai/mistral-large-2512","name":"Mistral Large 3","description":"Mistral's largest general model for enterprise agents, coding, and multilingual reasoning","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-11","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.5229,"output":1.5688,"cache_read":0.0523},"canonical_model_id":"mistral/mistral-large-2512"},"auto/mistralai/ministral-3b-2512":{"id":"auto/mistralai/ministral-3b-2512","name":"Ministral 3 3B","description":"Compact open vision-language model for edge deployment, instruction following, and tool use","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.1046,"output":0.1046,"cache_read":0.0105},"canonical_model_id":"mistral/ministral-3-3b-instruct-2512"},"auto/mistralai/ministral-8b-2512":{"id":"auto/mistralai/ministral-8b-2512","name":"Ministral 3 8B","description":"Compact open vision-language model for edge deployment, instruction following, and tool use","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.1569,"output":0.1569,"cache_read":0.0157},"canonical_model_id":"mistral/ministral-3-8b-instruct-2512"},"auto/mistralai/mistral-small-2603":{"id":"auto/mistralai/mistral-small-2603","name":"Mistral Small 4","description":"Fast Mistral production model for chat, extraction, and cost-sensitive agents","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.1569,"output":0.6275,"cache_read":0.0157},"canonical_model_id":"mistral/mistral-small-2603"},"auto/mistralai/mistral-large-4":{"id":"auto/mistralai/mistral-large-4","name":"Mistral Large 4","description":"Mistral's 1T-parameter multimodal MoE for reasoning, coding, and agentic work","family":"mistral-large","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"output":262144},"status":"beta","cost":{"input":1.4367,"output":4.4156,"cache_read":0.1479},"canonical_model_id":"mistral/mistral-large-4"},"auto/mistralai/ministral-14b-2512":{"id":"auto/mistralai/ministral-14b-2512","name":"Ministral 3 14B","description":"Open vision-language model for efficient local deployment, instruction following, and tool use","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.2092,"output":0.2092,"cache_read":0.0209},"canonical_model_id":"mistral/ministral-3-14b-instruct-2512"},"auto/openai/gpt-oss-safeguard-120b":{"id":"auto/openai/gpt-oss-safeguard-120b","name":"GPT OSS Safeguard 120B","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-29","last_updated":"2025-10-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.18,"output":0.73},"canonical_model_id":"openai/gpt-oss-safeguard-120b"},"auto/openai/gpt-5.5":{"id":"auto/openai/gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"auto/openai/gpt-5.2":{"id":"auto/openai/gpt-5.2","name":"GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"auto/openai/gpt-4.1-mini":{"id":"auto/openai/gpt-4.1-mini","name":"GPT-4.1 mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-4.1-mini"},"auto/openai/gpt-5.4-mini":{"id":"auto/openai/gpt-5.4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"auto/openai/gpt-oss-safeguard-20b":{"id":"auto/openai/gpt-oss-safeguard-20b","name":"GPT OSS Safeguard 20B","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-29","last_updated":"2025-10-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.08,"output":0.24},"canonical_model_id":"openai/gpt-oss-safeguard-20b"},"auto/openai/gpt-5":{"id":"auto/openai/gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"auto/openai/gpt-5.6-sol":{"id":"auto/openai/gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"auto/openai/gpt-6.1-terra":{"id":"auto/openai/gpt-6.1-terra","name":"GPT-6.1 Terra","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25,"tiers":[{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5}},"canonical_model_id":"openai/gpt-6.1-terra"},"auto/openai/gpt-4.1":{"id":"auto/openai/gpt-4.1","name":"GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"auto/openai/o3":{"id":"auto/openai/o3","name":"o3","description":"Deliberate o-series reasoner for hard math, coding, and multi-step analysis","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/o3"},"auto/openai/gpt-6-luna":{"id":"auto/openai/gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"auto/openai/gpt-oss-20b":{"id":"auto/openai/gpt-oss-20b","name":"GPT OSS 20B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.113,"output":0.4745},"canonical_model_id":"openai/gpt-oss-20b"},"auto/openai/gpt-6-sol":{"id":"auto/openai/gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"auto/openai/gpt-6-astra":{"id":"auto/openai/gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"auto/openai/gpt-5-mini":{"id":"auto/openai/gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"auto/openai/gpt-5.6-luna":{"id":"auto/openai/gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"auto/openai/gpt-6.1-sol":{"id":"auto/openai/gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-sol"},"auto/openai/gpt-5-nano":{"id":"auto/openai/gpt-5-nano","name":"GPT-5 Nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-nano"},"auto/openai/gpt-5.4":{"id":"auto/openai/gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5}},"canonical_model_id":"openai/gpt-5.4"},"auto/openai/gpt-4o":{"id":"auto/openai/gpt-4o","name":"GPT-4o","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o"},"auto/openai/gpt-oss-120b":{"id":"auto/openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.1695,"output":0.6779},"canonical_model_id":"openai/gpt-oss-120b"},"auto/openai/gpt-5.6-terra":{"id":"auto/openai/gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"auto/openai/gpt-4o-mini":{"id":"auto/openai/gpt-4o-mini","name":"GPT-4o mini","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-4o-mini"}}},"alibaba-token-plan-cn":{"id":"alibaba-token-plan-cn","env":["ALIBABA_TOKEN_PLAN_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1","name":"Alibaba Token Plan (China)","doc":"https://www.alibabacloud.com/help/zh/model-studio/token-plan-overview","models":{"qwen3.6-plus":{"id":"qwen3.6-plus","name":"Qwen3.6 Plus","description":"Earlier Qwen multimodal workhorse for million-token agent and document tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":131072}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"alibaba/qwen3.6-plus"},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.2"},"happyhorse-1.1-r2v":{"id":"happyhorse-1.1-r2v","type":"video","name":"HappyHorse 1.1 Reference-to-Video","description":"Video model for reference-guided video generation","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-07-17","last_updated":"2026-07-17","modalities":{"input":["image","text"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/alibaba","api":"https://token-plan.cn-beijing.maas.aliyuncs.com"},"cost":{"input":0,"output":0}},"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k2.6"},"qwen-image-2.0":{"id":"qwen-image-2.0","type":"image","name":"Qwen Image 2.0","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-03-03","last_updated":"2026-03-03","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":8192,"output":0},"provider":{"api":"https://token-plan.cn-beijing.maas.aliyuncs.com/api/v1"},"cost":{"input":0,"output":0}},"MiniMax-M2.5":{"id":"MiniMax-M2.5","name":"MiniMax-M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"input":196601,"output":32768},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"minimax/MiniMax-M2.5"},"qwen-image-2.0-pro":{"id":"qwen-image-2.0-pro","type":"image","name":"Qwen Image 2.0 Pro","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-03-03","last_updated":"2026-03-03","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":8192,"output":0},"provider":{"api":"https://token-plan.cn-beijing.maas.aliyuncs.com/api/v1"},"cost":{"input":0,"output":0}},"deepseek-v4-pro-0813":{"id":"deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"qwen3.8-flash":{"id":"qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"alibaba/qwen3.8-flash"},"glm-5.1":{"id":"glm-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":128000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.1"},"kimi-k2.5":{"id":"kimi-k2.5","name":"Kimi K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":98304},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k2.5"},"happyhorse-1.1-i2v":{"id":"happyhorse-1.1-i2v","type":"video","name":"HappyHorse 1.1 Image-to-Video","description":"Video model for image-to-video generation","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-07-17","last_updated":"2026-07-17","modalities":{"input":["image","text"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/alibaba","api":"https://token-plan.cn-beijing.maas.aliyuncs.com"},"cost":{"input":0,"output":0}},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"deepseek/deepseek-v4-pro"},"qwen3.8-max-preview":{"id":"qwen3.8-max-preview","name":"Qwen3.8 Max Preview","description":"Preview Qwen flagship for million-token multimodal reasoning and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","min":0,"max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-07-19","last_updated":"2026-07-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"alibaba/qwen3.8-max-preview"},"happyhorse-1.1-t2v":{"id":"happyhorse-1.1-t2v","type":"video","name":"HappyHorse 1.1 Text-to-Video","description":"Video model for prompt-driven text-to-video generation","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-07-17","last_updated":"2026-07-17","modalities":{"input":["text"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/alibaba","api":"https://token-plan.cn-beijing.maas.aliyuncs.com"},"cost":{"input":0,"output":0}},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3"},"qwen3.7-plus":{"id":"qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"alibaba/qwen3.7-plus"},"qwen3.7-max":{"id":"qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"alibaba/qwen3.7-max"},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"deepseek/deepseek-v4-flash"},"qwen3.6-flash":{"id":"qwen3.6-flash","name":"Qwen3.6 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.6","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":131072}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"alibaba/qwen3.6-flash"},"wan2.7-image":{"id":"wan2.7-image","type":"image","name":"Wan2.7 Image","description":"Image model for prompt-driven generation, editing, and visual design workflows","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":8192,"output":0},"provider":{"api":"https://token-plan.cn-beijing.maas.aliyuncs.com/api/v1"},"cost":{"input":0,"output":0}},"deepseek-v3.2":{"id":"deepseek-v3.2","name":"DeepSeek V3.2","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-03","last_updated":"2025-12-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":65536},"status":"deprecated","cost":{"input":0,"output":0}},"deepseek-v4-flash-0731":{"id":"deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"qwen3.8-max":{"id":"qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","min":0,"max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"alibaba/qwen3.8-max"},"deepseek-v4.1-flash-1017":{"id":"deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"wan2.7-image-pro":{"id":"wan2.7-image-pro","type":"image","name":"Wan2.7 Image Pro","description":"Image model for prompt-driven generation, editing, and visual design workflows","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":8192,"output":0},"provider":{"api":"https://token-plan.cn-beijing.maas.aliyuncs.com/api/v1"},"cost":{"input":0,"output":0}},"glm-5":{"id":"glm-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":202752,"output":16384},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-5"}}},"pendra":{"id":"pendra","env":["PENDRA_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.pendra.ai/api/v1","name":"Pendra","doc":"https://pendra.ai/docs/integrations/opencode","models":{"llama3.3:70b":{"id":"llama3.3:70b","name":"Llama-3.3-70B-Instruct","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"cost":{"input":0,"output":0},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"qwen3.6:27b":{"id":"qwen3.6:27b","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3.6-27b"},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0,"output":0},"canonical_model_id":"deepseek/deepseek-v4-flash"},"qwen3-coder:30b":{"id":"qwen3-coder:30b","name":"Qwen3-Coder 30B-A3B Instruct","description":"Smaller Qwen coder for efficient local agents and repo-level fixes","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-31","last_updated":"2025-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3-coder-30b-a3b-instruct"},"gpt-oss:120b":{"id":"gpt-oss:120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-oss-120b"},"glm-4.7-flash":{"id":"glm-4.7-flash","name":"GLM-4.7-Flash","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"zhipuai/glm-4.7-flash"}}},"ollama-cloud":{"id":"ollama-cloud","env":["OLLAMA_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://ollama.com/v1","name":"Ollama Cloud","doc":"https://docs.ollama.com/cloud","models":{"deepseek-v4.1-flash:1017":{"id":"deepseek-v4.1-flash:1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":976000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"mistral-large-3:675b":{"id":"mistral-large-3:675b","name":"mistral-large-3:675b","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-11","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.5,"output":1.5},"canonical_model_id":"mistral/mistral-large-2512"},"kimi-k3.1-pro":{"id":"kimi-k3.1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":2,"output":10,"cache_read":0.2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"kimi-k2.6":{"id":"kimi-k2.6","name":"kimi-k2.6","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"kimi-k3":{"id":"kimi-k3","name":"kimi-k3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"gemma4:31b":{"id":"gemma4:31b","name":"gemma4:31b","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.14,"output":0.4,"cache_read":0.05},"canonical_model_id":"google/gemma-4-31b-it"},"deepseek-v4-pro:0813":{"id":"deepseek-v4-pro:0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.66,"output":1.98,"cache_read":0.022},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"nemotron-3-super":{"id":"nemotron-3-super","name":"nemotron-3-super","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.015,"output":0.6,"cache_read":0.015},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"},"mimo-v2.6-pro":{"id":"mimo-v2.6-pro","name":"MiMo-V2.6-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.435,"output":0.87,"cache_read":0.0036},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"deepseek-v4-pro","description":"Flagship DeepSeek model for coding, reasoning, and agentic work","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.66,"output":1.98,"cache_read":0.022},"canonical_model_id":"deepseek/deepseek-v4-pro"},"gpt-oss:20b":{"id":"gpt-oss:20b","name":"gpt-oss:20b","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.07,"output":0.3,"cache_read":0.035},"canonical_model_id":"openai/gpt-oss-20b"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"minimax-m3.1-flash":{"id":"minimax-m3.1-flash","name":"MiniMax-M3.1-Flash","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":512000},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"nemotron-3-ultra":{"id":"nemotron-3-ultra","name":"nemotron-3-ultra","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":128000},"cost":{"input":0.1,"output":3,"cache_read":0.1},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"mimo-v2.6-flash":{"id":"mimo-v2.6-flash","name":"MiMo-V2.6-Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"muse-spark-open":{"id":"muse-spark-open","name":"Muse Spark Open","description":"Muse Spark Open is an 816B total / 42B active open-weight multimodal reasoning model from Meta for coding and long-horizon agentic work, with 1M-token context.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-open"},"minimax-m3":{"id":"minimax-m3","name":"minimax-m3","description":"MiniMax multimodal coding model for long-context reasoning and agent tasks","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":512000,"output":131072},"cost":{"input":0.6,"output":2.4,"cache_read":0.12},"canonical_model_id":"minimax/MiniMax-M3"},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"kimi-k2.7-code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"beam":{"id":"beam","name":"Beam 1.0 501B A23B","description":"Sparse mixture-of-experts reasoning model with 23B active parameters for coding and agentic workflows","family":"beam","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2026-06-30","release_date":"2026-10-05","last_updated":"2026-10-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"canonical_model_id":"reflection/beam-1.0-501b-a23b"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"minimax-m2.7":{"id":"minimax-m2.7","name":"minimax-m2.7","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"output":196608},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M2.7"},"mistral-large-4":{"id":"mistral-large-4","name":"Mistral Large 4","description":"Mistral's 1T-parameter multimodal MoE for reasoning, coding, and agentic work","family":"mistral-large","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":262144},"cost":{"input":0.68,"output":2.09,"cache_read":0.07},"canonical_model_id":"mistral/mistral-large-4"},"gpt-oss:120b":{"id":"gpt-oss:120b","name":"gpt-oss:120b","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.15,"output":0.6,"cache_read":0.014},"canonical_model_id":"openai/gpt-oss-120b"},"nemotron-3-nano:30b":{"id":"nemotron-3-nano:30b","name":"nemotron-3-nano:30b","description":"Small Nemotron 3 MoE for efficient coding, math, and long-context agents","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-06-25","release_date":"2025-12-15","last_updated":"2025-12-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.06,"output":0.24},"canonical_model_id":"nvidia/nemotron-3-nano-30b-a3b"}}},"gmicloud":{"id":"gmicloud","env":["GMICLOUD_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.gmi-serving.com/v1","name":"GMI Cloud","doc":"https://docs.gmicloud.ai/inference-engine/api-reference/llm-api-reference","models":{"anthropic/claude-opus-4.6":{"id":"anthropic/claude-opus-4.6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024,"max":127999}],"tool_call":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":409600,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5},"canonical_model_id":"anthropic/claude-opus-4-6"},"anthropic/claude-opus-4.7":{"id":"anthropic/claude-opus-4.7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":409600,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":30,"output":150,"cache_read":3,"cache_write":37.5},"provider":{"body":{"speed":"fast"},"headers":{"anthropic-beta":"fast-mode-2026-02-01"}}}}},"cost":{"input":4.5,"output":22.5,"cache_read":0.45},"canonical_model_id":"anthropic/claude-opus-4-7"},"anthropic/claude-opus-4.8":{"id":"anthropic/claude-opus-4.8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic/claude-sonnet-4.6":{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":409600,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"MiniMaxAI/MiniMax-M2.7":{"id":"MiniMaxAI/MiniMax-M2.7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M2.7"},"MiniMaxAI/MiniMax-M3":{"id":"MiniMaxAI/MiniMax-M3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":512000},"cost":{"input":0.6,"output":2.4,"cache_read":0.12,"tiers":[{"input":1.2,"output":4.8,"cache_read":0.24,"tier":{"type":"context","size":512000}}],"context_over_200k":{"input":1.2,"output":4.8,"cache_read":0.24}},"canonical_model_id":"minimax/MiniMax-M3"},"deepseek-ai/DeepSeek-V4-Flash":{"id":"deepseek-ai/DeepSeek-V4-Flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048575,"output":384000},"cost":{"input":0.112,"output":0.224,"cache_read":0.022},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek-ai/DeepSeek-V4-Pro":{"id":"deepseek-ai/DeepSeek-V4-Pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":1.392,"output":2.784,"cache_read":0.116},"canonical_model_id":"deepseek/deepseek-v4-pro"},"moonshotai/Kimi-K2.6":{"id":"moonshotai/Kimi-K2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":0.855,"output":3.6,"cache_read":0.144},"canonical_model_id":"moonshotai/kimi-k2.6"},"moonshotai/kimi-k2.7-code-highspeed":{"id":"moonshotai/kimi-k2.7-code-highspeed","name":"Kimi K2.7 Code Highspeed","description":"Lower-latency Kimi Code variant for interactive edits and coding-agent loops","family":"kimi-k2","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.9,"output":8,"cache_read":0.38},"canonical_model_id":"moonshotai/kimi-k2.7-code-highspeed"},"openai/gpt-5.5":{"id":"openai/gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"openai/gpt-5.5"},"Qwen/Qwen3.8-Flash":{"id":"Qwen/Qwen3.8-Flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048575,"output":131072},"cost":{"input":0.16,"output":0.47,"cache_read":0.016,"cache_write":0.2},"canonical_model_id":"alibaba/qwen3.8-flash"},"Qwen/Qwen3.7-Max":{"id":"Qwen/Qwen3.7-Max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2.5,"output":7.5,"cache_read":0.25,"cache_write":3.125},"canonical_model_id":"alibaba/qwen3.7-max"},"Qwen/Qwen3.8-Max":{"id":"Qwen/Qwen3.8-Max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max"},"zai-org/GLM-5.1-FP8":{"id":"zai-org/GLM-5.1-FP8","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":0.98,"output":3.08,"cache_read":0.182},"canonical_model_id":"zhipuai/glm-5.1"},"zai-org/GLM-5.2-FP8":{"id":"zai-org/GLM-5.2-FP8","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.979,"output":3.08,"cache_read":0.182},"canonical_model_id":"zhipuai/glm-5.2"},"zai-org/GLM-5-FP8":{"id":"zai-org/GLM-5-FP8","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":0.6,"output":1.92,"cache_read":0.12},"canonical_model_id":"zhipuai/glm-5"}}},"xiaomi-token-plan-cn":{"id":"xiaomi-token-plan-cn","env":["XIAOMI_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://token-plan-cn.xiaomimimo.com/v1","name":"Xiaomi Token Plan (China)","doc":"https://platform.xiaomimimo.com/#/docs","models":{"mimo-v2.6-pro":{"id":"mimo-v2.6-pro","name":"MiMo-V2.6-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"mimo-v2.6-flash":{"id":"mimo-v2.6-flash","name":"MiMo-V2.6-Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"mimo-v2.5-tts-voiceclone":{"id":"mimo-v2.5-tts-voiceclone","type":"speech","name":"MiMo-V2.5-TTS-VoiceClone","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"mimo","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":8192,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"xiaomi/mimo-v2.5-tts-voiceclone"},"mimo-v2.5":{"id":"mimo-v2.5","name":"MiMo-V2.5","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"xiaomi/mimo-v2.5"},"mimo-v2.5-pro":{"id":"mimo-v2.5-pro","name":"MiMo-V2.5-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"mimo-v2.5-tts-voicedesign":{"id":"mimo-v2.5-tts-voicedesign","type":"speech","name":"MiMo-V2.5-TTS-VoiceDesign","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"mimo","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":8192,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"xiaomi/mimo-v2.5-tts-voicedesign"},"mimo-v2.5-tts":{"id":"mimo-v2.5-tts","type":"speech","name":"MiMo-V2.5-TTS","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"mimo","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":8192,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"xiaomi/mimo-v2.5-tts"}}},"auriko":{"id":"auriko","env":["AURIKO_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.auriko.ai/v1","name":"Auriko","doc":"https://docs.auriko.ai","models":{"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03},"canonical_model_id":"google/gemini-2.5-flash"},"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"grok-4.3":{"id":"grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.3"},"gemini-2.5-pro":{"id":"gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.25,"output":10,"cache_read":0.125,"tiers":[{"input":2.5,"output":15,"cache_read":0.25,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":15,"cache_read":0.25}},"canonical_model_id":"google/gemini-2.5-pro"},"glm-5.1":{"id":"glm-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.1"},"kimi-k2.5":{"id":"kimi-k2.5","name":"Kimi K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.45,"output":2.25,"cache_read":0.07},"canonical_model_id":"moonshotai/kimi-k2.5"},"gemini-3.1-pro-preview":{"id":"gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":1.32,"output":3.96,"cache_read":0.044},"canonical_model_id":"deepseek/deepseek-v4-pro"},"minimax-m2-7":{"id":"minimax-m2-7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.7"},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"deepseek/deepseek-v4-flash"},"minimax-m2-7-highspeed":{"id":"minimax-m2-7-highspeed","name":"MiniMax-M2.7-highspeed","description":"Low-latency M2.7 variant for interactive coding plans and agent loops","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.4,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.7-highspeed"},"claude-opus-4-6":{"id":"claude-opus-4-6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"qwen-3.6-plus":{"id":"qwen-3.6-plus","name":"Qwen3.6 Plus","description":"Earlier Qwen multimodal workhorse for million-token agent and document tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.1,"tiers":[{"input":2,"output":6,"cache_read":0.2,"cache_write":2.5,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":2,"output":6,"cache_read":0.2,"cache_write":2.5}},"canonical_model_id":"alibaba/qwen3.6-plus"},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"claude-opus-4-7":{"id":"claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":30,"output":150,"cache_read":3,"cache_write":37.5},"provider":{"body":{"speed":"fast"},"headers":{"anthropic-beta":"fast-mode-2026-02-01"}}}}},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"}}},"perplexity":{"id":"perplexity","env":["PERPLEXITY_API_KEY"],"npm":"@ai-sdk/perplexity","name":"Perplexity","doc":"https://docs.perplexity.ai","models":{"sonar-pro":{"id":"sonar-pro","name":"Sonar Pro","description":"Deeper Sonar search model with broader retrieval and stronger synthesis","family":"sonar-pro","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2025-09-01","release_date":"2024-01-01","last_updated":"2025-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8192},"status":"deprecated","cost":{"input":3,"output":15},"canonical_model_id":"perplexity/sonar-pro"},"sonar":{"id":"sonar","name":"Sonar","description":"Fast web-grounded Sonar for current answers, citations, and lightweight retrieval","family":"sonar","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2025-09-01","release_date":"2024-01-01","last_updated":"2025-09-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"status":"deprecated","cost":{"input":1,"output":1},"canonical_model_id":"perplexity/sonar"},"sonar-reasoning-pro":{"id":"sonar-reasoning-pro","name":"Sonar Reasoning Pro","description":"Web-grounded Sonar for multi-step research questions that need cited reasoning","family":"sonar-reasoning","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":false,"temperature":true,"knowledge":"2025-09-01","release_date":"2024-01-01","last_updated":"2025-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"status":"deprecated","cost":{"input":2,"output":8},"canonical_model_id":"perplexity/sonar-reasoning-pro"},"sonar-deep-research":{"id":"sonar-deep-research","name":"Perplexity Sonar Deep Research","description":"Sonar search model for current answers, retrieval, and citation-backed chat","family":"sonar","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":false,"temperature":false,"knowledge":"2025-01","release_date":"2025-02-01","last_updated":"2025-09-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32768},"status":"deprecated","cost":{"input":2,"output":8,"reasoning":3},"canonical_model_id":"perplexity/sonar-deep-research"}}},"mistral":{"id":"mistral","env":["MISTRAL_API_KEY"],"npm":"@ai-sdk/mistral","name":"Mistral","doc":"https://docs.mistral.ai/getting-started/models/","models":{"mistral-large-4-0-8":{"id":"mistral-large-4-0-8","name":"Mistral Large 4.0.8","description":"Mistral's 1T-parameter multimodal MoE for reasoning, coding, and agentic work","family":"mistral-large","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":262144},"status":"beta","cost":{"input":0.7,"output":2.1,"cache_read":0.07},"canonical_model_id":"mistral/mistral-large-4"},"mistral-medium-2508":{"id":"mistral-medium-2508","name":"Mistral Medium 3.1","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-08-12","last_updated":"2025-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0.4,"output":2}},"codestral-2508":{"id":"codestral-2508","name":"Codestral 25.08","description":"Mistral code model for low-latency completion, fill-in-the-middle, and code generation","family":"codestral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-30","last_updated":"2025-07-30","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":8192},"cost":{"input":0.3,"output":0.9,"cache_read":0.03},"canonical_model_id":"mistral/codestral-2508"},"voxtral-small-2507":{"id":"voxtral-small-2507","name":"Voxtral Small","description":"Instruct model with native audio input for speech understanding and tool use","family":"voxtral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-15","last_updated":"2025-07-15","modalities":{"input":["text","audio","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32000},"cost":{"input":0.1,"output":0.4}},"mistral-small-2506":{"id":"mistral-small-2506","name":"Mistral Small 3.2","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-03","release_date":"2025-06-20","last_updated":"2025-06-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"status":"deprecated","cost":{"input":0.1,"output":0.3}},"mistral-medium-2505":{"id":"mistral-medium-2505","name":"Mistral Medium 3","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-05-07","last_updated":"2025-05-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":131072},"status":"deprecated","cost":{"input":0.4,"output":2}},"glm-5-2":{"id":"glm-5-2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":1.4,"output":4.4,"cache_read":0.14},"canonical_model_id":"zhipuai/glm-5.2"},"labs-leanstral-1-5-1":{"id":"labs-leanstral-1-5-1","name":"Leanstral 1.5","description":"An updated Lean 4 formal proof engineering model optimised for automated theorem proving and autoformalization. 119B total parameters, 6.5B active.","family":"leanstral","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":128000},"status":"deprecated","cost":{"input":0,"output":0}},"ministral-3b-latest":{"id":"ministral-3b-latest","name":"Ministral 3B (latest)","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-10-01","last_updated":"2024-10-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":128000},"cost":{"input":0.1,"output":0.1,"cache_read":0.01}},"mistral-large-2512":{"id":"mistral-large-2512","name":"Mistral Large 3","description":"Mistral's largest general model for enterprise agents, coding, and multilingual reasoning","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-11","release_date":"2024-11-01","last_updated":"2025-12-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.5,"output":1.5,"cache_read":0.05}},"ministral-3b-2512":{"id":"ministral-3b-2512","name":"Ministral 3 3B","description":"Compact open vision-language model for edge deployment, instruction following, and tool use","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":262144},"cost":{"input":0.1,"output":0.1,"cache_read":0.01},"canonical_model_id":"mistral/ministral-3-3b-instruct-2512"},"ministral-8b-2512":{"id":"ministral-8b-2512","name":"Ministral 3 8B","description":"Compact open vision-language model for edge deployment, instruction following, and tool use","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.15,"output":0.15,"cache_read":0.015},"canonical_model_id":"mistral/ministral-3-8b-instruct-2512"},"devstral-medium-latest":{"id":"devstral-medium-latest","name":"Devstral 2 (latest)","description":"Legacy model retained for compatibility with older integrations","family":"devstral","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-12","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0.4,"output":2}},"ministral-8b-latest":{"id":"ministral-8b-latest","name":"Ministral 8B (latest)","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-10-01","last_updated":"2024-10-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":128000},"cost":{"input":0.15,"output":0.15,"cache_read":0.015}},"mistral-small-2603":{"id":"mistral-small-2603","name":"Mistral Small 4","description":"Fast Mistral production model for chat, extraction, and cost-sensitive agents","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"cost":{"input":0.15,"output":0.6,"cache_read":0.015}},"magistral-medium-latest":{"id":"magistral-medium-latest","name":"Magistral Medium (latest)","description":"Mistral reasoning model for transparent analysis, math, and complex decisions","family":"magistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2025-03-17","last_updated":"2025-03-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"status":"deprecated","cost":{"input":2,"output":5}},"zai-glm-5-2":{"id":"zai-glm-5-2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":1.4,"output":4.4,"cache_read":0.14},"canonical_model_id":"zhipuai/glm-5.2"},"labs-devstral-small-2512":{"id":"labs-devstral-small-2512","name":"Devstral Small 2","description":"Legacy model retained for compatibility with older integrations","family":"devstral","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-12","release_date":"2025-12-09","last_updated":"2025-12-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"status":"deprecated","cost":{"input":0,"output":0}},"zai-glm-5-3":{"id":"zai-glm-5-3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.14},"canonical_model_id":"zhipuai/glm-5.3"},"codestral-latest":{"id":"codestral-latest","name":"Codestral (latest)","description":"Mistral code model for completions, refactors, and developer IDE workflows","family":"codestral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-05-29","last_updated":"2025-01-04","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":4096},"cost":{"input":0.3,"output":0.9,"cache_read":0.03}},"open-mistral-nemo":{"id":"open-mistral-nemo","name":"Open Mistral Nemo","description":"Legacy model retained for compatibility with older integrations","family":"mistral-nemo","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2024-07-01","last_updated":"2024-07-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"status":"deprecated","cost":{"input":0.15,"output":0.15}},"zai-glm-5-3-flash":{"id":"zai-glm-5-3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"voxtral-small-latest":{"id":"voxtral-small-latest","name":"Voxtral Small (latest)","description":"Instruct model with native audio input for speech understanding and tool use","family":"voxtral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-15","last_updated":"2025-07-15","modalities":{"input":["text","audio","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32000},"cost":{"input":0.1,"output":0.4}},"devstral-2512":{"id":"devstral-2512","name":"Devstral 2","description":"Mistral's coding-agent model for repository work, terminal tasks, and software fixes","family":"devstral","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-12","release_date":"2025-12-09","last_updated":"2025-12-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0.4,"output":2}},"mistral-small-latest":{"id":"mistral-small-latest","name":"Mistral Small (latest)","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"cost":{"input":0.15,"output":0.6,"cache_read":0.015}},"mistral-medium-latest":{"id":"mistral-medium-latest","name":"Mistral Medium (latest)","description":"Balanced Mistral model for enterprise assistants, multilingual work, and tools","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-29","last_updated":"2026-04-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.5,"output":7.5,"cache_read":0.15},"canonical_model_id":"mistral/mistral-medium-latest"},"mistral-medium-2604":{"id":"mistral-medium-2604","name":"Mistral Medium 3.5","description":"Balanced Mistral model for enterprise assistants, multilingual work, and tools","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-29","last_updated":"2026-04-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.5,"output":7.5,"cache_read":0.15}},"devstral-latest":{"id":"devstral-latest","name":"Devstral 2","description":"Legacy model retained for compatibility with older integrations","family":"devstral","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-12","release_date":"2025-12-09","last_updated":"2025-12-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0.4,"output":2}},"deepseek-v4-1-flash-1017":{"id":"deepseek-v4-1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":128000},"cost":{"input":0.3,"output":1.2,"cache_read":0.007},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"mistral-embed":{"id":"mistral-embed","type":"embedding","name":"Mistral Embed","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"mistral-embed","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2023-12-11","last_updated":"2023-12-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8000,"output":3072},"cost":{"input":0.1,"output":0}},"voxtral-mini-tts-latest":{"id":"voxtral-mini-tts-latest","type":"speech","name":"Voxtral Mini TTS (latest)","description":"Multilingual text-to-speech model with zero-shot voice cloning","family":"voxtral","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-03-23","last_updated":"2026-03-23","modalities":{"input":["text"],"output":["audio"]},"open_weights":true,"limit":{"context":0,"output":0}},"voxtral-mini-latest":{"id":"voxtral-mini-latest","type":"transcription","name":"Voxtral Mini (latest)","description":"Speech transcription model for accurate audio-to-text and captioning workflows","family":"voxtral","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-02-04","last_updated":"2026-02-04","modalities":{"input":["audio"],"output":["text"]},"open_weights":false,"limit":{"context":0,"output":0}},"mistral-large-4":{"id":"mistral-large-4","name":"Mistral Large 4","description":"Mistral's 1T-parameter multimodal MoE for reasoning, coding, and agentic work","family":"mistral-large","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":262144},"status":"beta","cost":{"input":0.7,"output":2.1,"cache_read":0.07},"canonical_model_id":"mistral/mistral-large-4"},"ministral-14b-2512":{"id":"ministral-14b-2512","name":"Ministral 3 14B","description":"Open vision-language model for efficient local deployment, instruction following, and tool use","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.2,"output":0.2,"cache_read":0.02},"canonical_model_id":"mistral/ministral-3-14b-instruct-2512"},"pixtral-12b":{"id":"pixtral-12b","name":"Pixtral 12B","description":"Mistral vision-language model for image understanding and multimodal chat","family":"pixtral","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-09","release_date":"2024-09-01","last_updated":"2024-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"status":"deprecated","cost":{"input":0.15,"output":0.15}},"mistral-large-latest":{"id":"mistral-large-latest","name":"Mistral Large (latest)","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-11","release_date":"2024-11-01","last_updated":"2025-12-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.5,"output":1.5,"cache_read":0.05}}}},"routing-run":{"id":"routing-run","env":["ROUTING_RUN_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.routing.run/v1","name":"routing.run","doc":"https://docs.routing.run/api-reference/models","models":{"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":32000},"cost":{"input":0.8,"output":2.4},"canonical_model_id":"zhipuai/glm-5.2"},"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":32000},"cost":{"input":0.275,"output":1.1},"canonical_model_id":"moonshotai/kimi-k2.6"},"glm-5.2-nitro":{"id":"glm-5.2-nitro","name":"GLM 5.2 Nitro","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":32000},"cost":{"input":0.8,"output":2.4},"canonical_model_id":"zhipuai/glm-5.2"},"kimi-k2.6-nitro":{"id":"kimi-k2.6-nitro","name":"Kimi K2.6 Nitro","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":32000},"cost":{"input":0.275,"output":1.1},"canonical_model_id":"moonshotai/kimi-k2.6"},"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":922000,"output":128000},"cost":{"input":2.5,"output":15},"canonical_model_id":"openai/gpt-5.6-sol"},"qwen3.5-9b":{"id":"qwen3.5-9b","name":"Qwen3.5 9B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32000},"cost":{"input":0.16,"output":0.48},"canonical_model_id":"alibaba/qwen3.5-9b"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":64000},"cost":{"input":0.348,"output":0.696},"canonical_model_id":"deepseek/deepseek-v4-pro"},"nemotron-3-ultra":{"id":"nemotron-3-ultra","name":"Nemotron 3 Ultra 550B A55B","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32000},"cost":{"input":0.1,"output":0.1},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"kimi-k2.7-code-nitro":{"id":"kimi-k2.7-code-nitro","name":"Kimi K2.7 Code Nitro","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":32000},"cost":{"input":0.275,"output":1.1},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":32000},"cost":{"input":0.275,"output":1.1},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":64000},"cost":{"input":0.112,"output":0.224},"canonical_model_id":"deepseek/deepseek-v4-flash"},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":922000,"output":128000},"cost":{"input":0.7,"output":4.2},"canonical_model_id":"openai/gpt-5.6-luna"},"claude-opus-4-8":{"id":"claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32000},"cost":{"input":5,"output":25},"canonical_model_id":"anthropic/claude-opus-4-8"},"gpt-5.6-terra":{"id":"gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":922000,"output":128000},"cost":{"input":1.5,"output":9},"canonical_model_id":"openai/gpt-5.6-terra"},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15},"canonical_model_id":"anthropic/claude-sonnet-4-6"}}},"ovhcloud":{"id":"ovhcloud","env":["OVHCLOUD_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://oai.endpoints.kepler.ai.cloud.ovh.net/v1","name":"OVHcloud AI Endpoints","doc":"https://www.ovhcloud.com/en/public-cloud/ai-endpoints/catalog//","models":{"meta-llama-3_3-70b-instruct":{"id":"meta-llama-3_3-70b-instruct","name":"Meta-Llama-3_3-70B-Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.74,"output":0.74},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"qwen2.5-vl-72b-instruct":{"id":"qwen2.5-vl-72b-instruct","name":"Qwen2.5-VL-72B-Instruct","description":"Multimodal model for analyzing text, images, documents, and rich media","family":"qwen","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-01-26","last_updated":"2025-01-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32768},"cost":{"input":1.01,"output":1.01},"canonical_model_id":"alibaba/qwen2-5-vl-72b-instruct"},"qwen3guard-gen-8b":{"id":"qwen3guard-gen-8b","name":"Qwen3Guard-Gen-8B","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-01-22","last_updated":"2026-01-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":16384},"cost":{"input":0,"output":0}},"qwen3.8-27b":{"id":"qwen3.8-27b","name":"Qwen3.8-27B","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.47,"output":3.19},"canonical_model_id":"alibaba/qwen3.8-27b"},"mistral-small-3.2-24b-instruct-2506":{"id":"mistral-small-3.2-24b-instruct-2506","name":"Mistral-Small-3.2-24B-Instruct-2506","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-10-31","release_date":"2025-06-20","last_updated":"2025-06-20","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.1,"output":0.31},"canonical_model_id":"mistral/mistral-small-3.2-24b-instruct"},"gpt-oss-20b":{"id":"gpt-oss-20b","name":"gpt-oss-20b","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.05,"output":0.18},"canonical_model_id":"openai/gpt-oss-20b"},"qwen3.5-397b-a17b":{"id":"qwen3.5-397b-a17b","name":"Qwen3.5-397B-A17B","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.71,"output":4.25},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"qwen3.5-9b":{"id":"qwen3.5-9b","name":"Qwen3.5-9B","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.12,"output":0.18},"canonical_model_id":"alibaba/qwen3.5-9b"},"qwen3guard-gen-0.6b":{"id":"qwen3guard-gen-0.6b","name":"Qwen3Guard-Gen-0.6B","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-01-22","last_updated":"2026-01-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":16384},"cost":{"input":0,"output":0}},"qwen3.6-27b":{"id":"qwen3.6-27b","name":"Qwen3.6-27B","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.47,"output":3.19},"canonical_model_id":"alibaba/qwen3.6-27b"},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"gpt-oss-120b","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.09,"output":0.47},"canonical_model_id":"openai/gpt-oss-120b"}}},"fireworks-ai":{"id":"fireworks-ai","env":["FIREWORKS_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.fireworks.ai/inference/v1/","name":"Fireworks AI","doc":"https://fireworks.ai/docs/","models":{"accounts/fireworks/models/glm-5p3-flash":{"id":"accounts/fireworks/models/glm-5p3-flash","name":"GLM 5.3 Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048573,"output":131072},"experimental":{"modes":{"priority":{"cost":{"input":0.1875,"output":0.625,"cache_read":0.0375},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"accounts/fireworks/models/qwen3p8-max":{"id":"accounts/fireworks/models/qwen3p8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"experimental":{"modes":{"priority":{"cost":{"input":3,"output":9,"cache_read":0.375},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.8-max"},"accounts/fireworks/models/glm-5p3":{"id":"accounts/fireworks/models/glm-5p3","name":"GLM 5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048573,"output":262144},"experimental":{"modes":{"priority":{"cost":{"input":1.75,"output":5.5,"cache_read":0.325},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"accounts/fireworks/models/minimax-m3p1-flash":{"id":"accounts/fireworks/models/minimax-m3p1-flash","name":"MiniMax-M3.1-Flash","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":512000},"experimental":{"modes":{"priority":{"cost":{"input":0.225,"output":0.9,"cache_read":0.0225},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"accounts/fireworks/models/kimi-k3":{"id":"accounts/fireworks/models/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"experimental":{"modes":{"priority":{"cost":{"input":3.75,"output":18.75,"cache_read":0.375},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"accounts/fireworks/models/deepseek-v4p1-flash-1017":{"id":"accounts/fireworks/models/deepseek-v4p1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"experimental":{"modes":{"priority":{"cost":{"input":0.375,"output":1.5,"cache_read":0.0075},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"accounts/fireworks/models/deepseek-v4p1-flash":{"id":"accounts/fireworks/models/deepseek-v4p1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"experimental":{"modes":{"priority":{"cost":{"input":0.375,"output":1.5,"cache_read":0.0075},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"accounts/fireworks/models/qwen3p8-2p4t-a95b":{"id":"accounts/fireworks/models/qwen3p8-2p4t-a95b","name":"Qwen3.8 2.4T A95B","description":"Open-weight sparse MoE (2.4T total, 95B active), the open-weight twin of Qwen3.8 Max for coding, research, complex reasoning, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"accounts/fireworks/models/muse-spark-open":{"id":"accounts/fireworks/models/muse-spark-open","name":"Muse Spark Open","description":"Muse Spark Open is an 816B total / 42B active open-weight multimodal reasoning model from Meta for coding and long-horizon agentic work, with 1M-token context.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"experimental":{"modes":{"priority":{"cost":{"input":1.875,"output":6.375,"cache_read":0.225},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-open"},"accounts/fireworks/models/minimax-m3":{"id":"accounts/fireworks/models/minimax-m3","name":"MiniMax-M3","description":"Fireworks text-only MiniMax coding model for long-context reasoning and agent tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":512000,"output":512000},"experimental":{"modes":{"priority":{"cost":{"input":0.45,"output":1.8,"cache_read":0.09},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"},"accounts/fireworks/models/ember-1":{"id":"accounts/fireworks/models/ember-1","name":"Ember-1","description":"Specialized model from Fireworks built on Kimi K3, producing shorter reasoning traces with approximately 40% fewer tokens while maintaining comparable quality","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"fireworks/ember-1"},"accounts/fireworks/models/kimi-k3p1-pro":{"id":"accounts/fireworks/models/kimi-k3p1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"experimental":{"modes":{"priority":{"cost":{"input":3,"output":15,"cache_read":0.3},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":2,"output":10,"cache_read":0.2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"accounts/fireworks/routers/qwen-max-latest":{"id":"accounts/fireworks/routers/qwen-max-latest","name":"Qwen Max Latest (Qwen3.8 Max)","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"experimental":{"modes":{"priority":{"cost":{"input":3,"output":9,"cache_read":0.375},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.8-max"},"accounts/fireworks/routers/deepseek-v4p1-flash-spot":{"id":"accounts/fireworks/routers/deepseek-v4p1-flash-spot","name":"DeepSeek V4.1 Flash Spot","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.21,"output":0.84,"cache_read":0.0042},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"accounts/fireworks/routers/deepseek-flash-latest":{"id":"accounts/fireworks/routers/deepseek-flash-latest","name":"DeepSeek Flash Latest","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"experimental":{"modes":{"priority":{"cost":{"input":0.375,"output":1.5,"cache_read":0.0075},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"accounts/fireworks/routers/kimi-k3-fast":{"id":"accounts/fireworks/routers/kimi-k3-fast","name":"Kimi K3 Fast","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":4.5,"output":22.5,"cache_read":0.45},"canonical_model_id":"moonshotai/kimi-k3"},"accounts/fireworks/routers/glm-5p3-spot":{"id":"accounts/fireworks/routers/glm-5p3-spot","name":"GLM 5.3 Spot","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048573,"output":262144},"cost":{"input":0.98,"output":3.08,"cache_read":0.182},"canonical_model_id":"zhipuai/glm-5.3"},"accounts/fireworks/routers/glm-5p3-fast":{"id":"accounts/fireworks/routers/glm-5p3-fast","name":"GLM 5.3 Fast","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048572,"output":262144},"cost":{"input":2.1,"output":6.6,"cache_read":0.39},"canonical_model_id":"zhipuai/glm-5.3"},"accounts/fireworks/routers/glm-latest":{"id":"accounts/fireworks/routers/glm-latest","name":"GLM Latest","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048573,"output":262144},"experimental":{"modes":{"priority":{"cost":{"input":1.75,"output":5.5,"cache_read":0.325},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"accounts/fireworks/routers/kimi-latest":{"id":"accounts/fireworks/routers/kimi-latest","name":"Kimi Latest","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"experimental":{"modes":{"priority":{"cost":{"input":3.75,"output":18.75,"cache_read":0.375},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"accounts/fireworks/routers/glm-fast-latest":{"id":"accounts/fireworks/routers/glm-fast-latest","name":"GLM 5.3 Fast (Latest)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048572,"output":262144},"cost":{"input":2.1,"output":6.6,"cache_read":0.39},"canonical_model_id":"zhipuai/glm-5.3"},"accounts/fireworks/routers/kimi-fast-latest":{"id":"accounts/fireworks/routers/kimi-fast-latest","name":"Kimi Fast Latest","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":4.5,"output":22.5,"cache_read":0.45},"canonical_model_id":"moonshotai/kimi-k3"},"accounts/fireworks/routers/glm-flash-latest":{"id":"accounts/fireworks/routers/glm-flash-latest","name":"GLM Flash Latest (GLM 5.3 Flash)","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048573,"output":131072},"experimental":{"modes":{"priority":{"cost":{"input":0.1875,"output":0.625,"cache_read":0.0375},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"accounts/fireworks/routers/minimax-latest":{"id":"accounts/fireworks/routers/minimax-latest","name":"MiniMax Latest","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":512000,"output":512000},"experimental":{"modes":{"priority":{"cost":{"input":0.45,"output":1.8,"cache_read":0.09},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"},"accounts/fireworks/routers/deepseek-v4p1-flash-1017-ultrafast":{"id":"accounts/fireworks/routers/deepseek-v4p1-flash-1017-ultrafast","name":"DeepSeek V4.1 Flash 1017 Ultra-fast","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":2.4,"output":9.6,"cache_read":0.048},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"accounts/fireworks/routers/kimi-k3-spot":{"id":"accounts/fireworks/routers/kimi-k3-spot","name":"Kimi K3 Spot","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":2.1,"output":10.5,"cache_read":0.21},"canonical_model_id":"moonshotai/kimi-k3"},"accounts/fireworks/routers/deepseek-v4p1-flash-1017-spot":{"id":"accounts/fireworks/routers/deepseek-v4p1-flash-1017-spot","name":"DeepSeek V4.1 Flash 1017 Spot","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.21,"output":0.84,"cache_read":0.0042},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"}}},"modal":{"id":"modal","env":["MODAL_PROXY_TOKEN"],"npm":"@ai-sdk/openai-compatible","api":"https://inference.us-west.modal.direct/v1","name":"Modal","doc":"https://modal.com/docs/guide/endpoints","models":{"meta-models/Muse-Spark-Open-816B-A42B":{"id":"meta-models/Muse-Spark-Open-816B-A42B","name":"Muse Spark Open","description":"Muse Spark Open is an 816B total / 42B active open-weight multimodal reasoning model from Meta for coding and long-horizon agentic work, with 1M-token context.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-open"},"deepseek-ai/DeepSeek-V4.1-Flash":{"id":"deepseek-ai/DeepSeek-V4.1-Flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.3,"output":1.2,"cache_read":0.03},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"moonshotai/Kimi-K3":{"id":"moonshotai/Kimi-K3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"reasoning":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"thinkingmachines/Inkling-NVFP4":{"id":"thinkingmachines/Inkling-NVFP4","name":"Inkling","description":"Multimodal MoE reasoning model (975B total, 41B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":262144},"cost":{"input":1.2,"output":5,"cache_read":0.27},"canonical_model_id":"thinkingmachines/inkling"},"Qwen/Qwen3.8-2.4T-A95B":{"id":"Qwen/Qwen3.8-2.4T-A95B","name":"Qwen3.8-Max","description":"Open-weight sparse MoE (2.4T total, 95B active), the open-weight twin of Qwen3.8 Max for coding, research, complex reasoning, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1010000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"zai-org/GLM-5.3-Flash":{"id":"zai-org/GLM-5.3-Flash","name":"GLM 5.3 Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.45,"output":1.5,"cache_read":0.09},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai-org/GLM-5.3":{"id":"zai-org/GLM-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"nvidia/GLM-5.3-Flash-NVFP4":{"id":"nvidia/GLM-5.3-Flash-NVFP4","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"}}},"deepseek":{"id":"deepseek","env":["DEEPSEEK_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.deepseek.com","name":"DeepSeek","doc":"https://api-docs.deepseek.com/quick_start/pricing","models":{"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.66,"output":1.98,"reasoning":1.98,"cache_read":0.022},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"deepseek-v4-flash-vision-exp":{"id":"deepseek-v4-flash-vision-exp","name":"DeepSeek V4 Flash Vision Exp","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"status":"deprecated","cost":{"input":0.15,"output":0.6,"reasoning":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"deepseek-flash":{"id":"deepseek-flash","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.15,"output":0.6,"reasoning":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"status":"deprecated","cost":{"input":0.15,"output":0.6,"reasoning":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"}}},"tensorx":{"id":"tensorx","env":["TENSORX_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.tensorx.ai/v1","name":"TensorX","doc":"https://docs.tensorx.ai/","models":{"deepseek/deepseek-r1-0528":{"id":"deepseek/deepseek-r1-0528","name":"DeepSeek R1-0528","description":"May 2025 DeepSeek R1 update with improved mathematics, coding, and reasoning","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-05-28","last_updated":"2025-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":164000,"output":8192},"status":"deprecated","cost":{"input":0.66,"output":2.6,"cache_read":0.165,"cache_write":0.825},"canonical_model_id":"deepseek/deepseek-r1-0528"},"deepseek/deepseek-v4-pro-0813":{"id":"deepseek/deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":64000},"cost":{"input":2,"output":4,"cache_read":0.5},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"deepseek/deepseek-v4.1-flash":{"id":"deepseek/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.5,"output":1.5,"cache_read":0.13},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"status":"deprecated","cost":{"input":1.75,"output":3.5,"cache_read":0.4375,"cache_write":2.185},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-v3.2":{"id":"deepseek/deepseek-v3.2","name":"DeepSeek V3.2","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":163840},"status":"deprecated","cost":{"input":0.3,"output":0.5,"cache_read":0.075,"cache_write":0.375},"canonical_model_id":"deepseek/deepseek-v3.2"},"deepseek/deepseek-v4-flash-0731":{"id":"deepseek/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.25,"output":0.3,"cache_read":0.06},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"qwen/qwen3.8-27b":{"id":"qwen/qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.4,"output":2.4,"cache_read":0.1},"canonical_model_id":"alibaba/qwen3.8-27b"},"qwen/qwen3.8-flash-next":{"id":"qwen/qwen3.8-flash-next","name":"Qwen3.8 Flash Next","description":"Open-weight experimental preview of the Qwen4 architecture: hybrid-attention MoE (125B total, 6B active) with vision encoder for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-27","last_updated":"2026-08-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":64000},"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3.8-flash-next"},"qwen/qwen3.5-9b":{"id":"qwen/qwen3.5-9b","name":"Qwen3.5 9B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"status":"deprecated","cost":{"input":0.15,"output":0.2,"cache_read":0.0375,"cache_write":0.1875},"canonical_model_id":"alibaba/qwen3.5-9b"},"qwen/qwen3-235b-a22b-2507":{"id":"qwen/qwen3-235b-a22b-2507","name":"Qwen3 235B-A22B-2507","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-06-30","release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":262144},"status":"deprecated","cost":{"input":0.072,"output":0.464,"cache_read":0.018,"cache_write":0.09},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"qwen/qwen3.8-2.4t-a95b":{"id":"qwen/qwen3.8-2.4t-a95b","name":"Qwen3.8 2.4T A95B","description":"Open-weight sparse MoE (2.4T total, 95B active), the open-weight twin of Qwen3.8 Max for coding, research, complex reasoning, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":64000},"cost":{"input":2.5,"output":6,"cache_read":0.63},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"qwen/qwen3.5-122b-a10b":{"id":"qwen/qwen3.5-122b-a10b","name":"Qwen3.5 122B-A10B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0.5,"output":3.5,"cache_read":0.125,"cache_write":0.625},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"moonshotai/kimi-k2.6":{"id":"moonshotai/kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":1,"output":4,"cache_read":0.25,"cache_write":1.25},"canonical_model_id":"moonshotai/kimi-k2.6"},"moonshotai/kimi-k3":{"id":"moonshotai/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.75},"canonical_model_id":"moonshotai/kimi-k3"},"moonshotai/kimi-k2.5":{"id":"moonshotai/kimi-k2.5","name":"Kimi K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0.5,"output":2.8,"cache_read":0.125,"cache_write":0.625},"canonical_model_id":"moonshotai/kimi-k2.5"},"moonshotai/kimi-k2.7-code":{"id":"moonshotai/kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.25,"output":4.5,"cache_read":0.3125},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"minimax/minimax-m2.5":{"id":"minimax/minimax-m2.5","name":"MiniMax-M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"output":65536},"status":"deprecated","cost":{"input":0.3,"output":1.2,"cache_read":0.075,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.5"},"minimax/minimax-m3":{"id":"minimax/minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.4,"output":2,"cache_read":0.1},"canonical_model_id":"minimax/MiniMax-M3"},"z-ai/glm-5.2":{"id":"z-ai/glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.5,"output":4.5,"cache_read":0.375},"canonical_model_id":"zhipuai/glm-5.2"},"z-ai/glm-5.1":{"id":"z-ai/glm-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":202752},"status":"deprecated","cost":{"input":1.4,"output":4.4,"cache_read":0.35,"cache_write":1.75},"canonical_model_id":"zhipuai/glm-5.1"},"z-ai/glm-5.3":{"id":"z-ai/glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":64000},"cost":{"input":1.75,"output":4.5,"cache_read":0.44},"canonical_model_id":"zhipuai/glm-5.3"},"z-ai/glm-5.3-flash":{"id":"z-ai/glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":64000},"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"canonical_model_id":"zhipuai/glm-5.3-flash"},"z-ai/glm-5-turbo":{"id":"z-ai/glm-5-turbo","name":"GLM-5-Turbo","description":"Faster GLM-5 lane for coding agents that need lower latency","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":202752,"output":131072},"status":"deprecated","cost":{"input":1.2,"output":4,"cache_read":0.3,"cache_write":1.5},"canonical_model_id":"zhipuai/glm-5-turbo"},"z-ai/glm-5v-turbo":{"id":"z-ai/glm-5v-turbo","name":"GLM-5V-Turbo","description":"Fast GLM vision model for screenshots, documents, and multimodal agent tasks","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":202752,"output":131072},"status":"deprecated","cost":{"input":1.2,"output":4,"cache_read":0.3,"cache_write":1.5},"canonical_model_id":"zhipuai/glm-5v-turbo"},"z-ai/glm-5":{"id":"z-ai/glm-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":202752},"status":"deprecated","cost":{"input":1,"output":3.2,"cache_read":0.25,"cache_write":1.25},"canonical_model_id":"zhipuai/glm-5"}}},"mixlayer":{"id":"mixlayer","env":["MIXLAYER_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://models.mixlayer.ai/v1","name":"Mixlayer","doc":"https://docs.mixlayer.com","models":{"qwen/qwen3.5-397b-a17b":{"id":"qwen/qwen3.5-397b-a17b","name":"Qwen3.5 397B A17B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.6,"output":3.6},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"qwen/qwen3.5-9b":{"id":"qwen/qwen3.5-9b","name":"Qwen3.5 9B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.1,"output":0.4},"canonical_model_id":"alibaba/qwen3.5-9b"},"qwen/qwen3.5-35b-a3b":{"id":"qwen/qwen3.5-35b-a3b","name":"Qwen3.5 35B A3B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.25,"output":1.3},"canonical_model_id":"alibaba/qwen3.5-35b-a3b"},"qwen/qwen3.5-27b":{"id":"qwen/qwen3.5-27b","name":"Qwen3.5 27B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.3,"output":2.4},"canonical_model_id":"alibaba/qwen3.5-27b"},"qwen/qwen3.5-122b-a10b":{"id":"qwen/qwen3.5-122b-a10b","name":"Qwen3.5 122B A10B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.4,"output":3.2},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"}}},"novita-ai":{"id":"novita-ai","env":["NOVITA_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.novita.ai/openai","name":"Novita AI","doc":"https://novita.ai/docs/guides/introduction","models":{"mindai/macaron-v1-tall":{"id":"mindai/macaron-v1-tall","name":"Macaron V1 Tall","description":"Qwen3.6-based Mixture-of-LoRA model with specialists for chat, personal agents, coding, and generative UI","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.2475,"output":1.43,"cache_read":0.044},"canonical_model_id":"mindlab/macaron-v1-tall"},"mindai/macaron-v1-venti":{"id":"mindai/macaron-v1-venti","name":"Macaron V1 Venti","description":"GLM-5.2-based Mixture-of-LoRA model with specialists for chat, personal agents, coding, and generative UI","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.825,"output":2.475,"cache_read":0.165},"canonical_model_id":"mindlab/macaron-v1-venti"},"baidu/ernie-4.5-21B-a3b":{"id":"baidu/ernie-4.5-21B-a3b","name":"ERNIE 4.5 21B A3B","description":"Open ERNIE text MoE with 21B total and 3B active parameters","family":"ernie","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-06-30","last_updated":"2025-06-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":120000,"output":8000},"cost":{"input":0.07,"output":0.28},"canonical_model_id":"baidu/ernie-4.5-21b-a3b"},"baidu/cobuddy":{"id":"baidu/cobuddy","name":"CoBuddy","description":"Baidu Qianfan model optimized for code generation and tool-using coding agents","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-05-06","last_updated":"2026-05-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":65536},"cost":{"input":0.28,"output":1.13,"cache_read":0.07},"canonical_model_id":"baidu/cobuddy"},"baai/bge-reranker-v2-m3":{"id":"baai/bge-reranker-v2-m3","type":"reranking","name":"BGE Reranker V2 M3","description":"Lightweight multilingual cross-encoder that scores query-document relevance","family":"bge","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-03-15","last_updated":"2024-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8000,"output":0},"cost":{"input":0.01,"output":0},"canonical_model_id":"baai/bge-reranker-v2-m3"},"baai/bge-m3":{"id":"baai/bge-m3","type":"embedding","name":"BGE M3","description":"Multilingual embedding model combining dense, sparse, and multi-vector retrieval","family":"bge","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-01-30","last_updated":"2024-01-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":0},"cost":{"input":0.01,"output":0},"canonical_model_id":"baai/bge-m3"},"minimaxai/minimax-m1-80k":{"id":"minimaxai/minimax-m1-80k","name":"MiniMax M1 80K","description":"Open hybrid-attention MoE reasoning model with a million-token context and an 80K thinking budget","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":40000},"cost":{"input":0.55,"output":2.2},"canonical_model_id":"minimax/minimax-m1-80k"},"deepseek/deepseek-r1-0528":{"id":"deepseek/deepseek-r1-0528","name":"DeepSeek R1 0528","description":"May 2025 DeepSeek R1 update with improved mathematics, coding, and reasoning","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-05-28","last_updated":"2025-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":32768},"cost":{"input":0.7,"output":2.5,"cache_read":0.35},"canonical_model_id":"deepseek/deepseek-r1-0528"},"deepseek/deepseek_v3":{"id":"deepseek/deepseek_v3","name":"DeepSeek-V3","description":"Open DeepSeek MoE chat model for coding, math, and general reasoning","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2024-12-26","last_updated":"2024-12-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":64000,"output":16000},"cost":{"input":0.89,"output":0.89},"canonical_model_id":"deepseek/deepseek-v3"},"deepseek/deepseek-r1-0528-qwen3-8b":{"id":"deepseek/deepseek-r1-0528-qwen3-8b","name":"DeepSeek R1 0528 Qwen3 8B","description":"DeepSeek R1 0528 distilled into Qwen3 8B for mathematics, coding, and reasoning","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"release_date":"2025-05-29","last_updated":"2025-05-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32000},"cost":{"input":0.06,"output":0.09},"canonical_model_id":"deepseek/deepseek-r1-0528-qwen3-8b"},"deepseek/deepseek-r1-turbo":{"id":"deepseek/deepseek-r1-turbo","name":"DeepSeek R1 (Turbo)","description":"Classic open reasoning model for transparent math, coding, and deliberate problem solving","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-01-20","last_updated":"2025-05-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":64000,"output":16000},"cost":{"input":0.7,"output":2.5},"canonical_model_id":"deepseek/deepseek-r1"},"deepseek/deepseek-v4-pro-0813":{"id":"deepseek/deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":1.32,"output":3.96,"cache_read":0.044},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"deepseek/deepseek-v4.1-flash":{"id":"deepseek/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":1.6,"output":3.2,"cache_read":0.135},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-v4-flash-0731":{"id":"deepseek/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.44,"output":1.32,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepseek/deepseek-v4.1-flash-1017":{"id":"deepseek/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"deepseek/deepseek-ocr-2":{"id":"deepseek/deepseek-ocr-2","name":"DeepSeek OCR 2","description":"High-accuracy OCR model for extracting text from documents, screenshots, receipts, and natural scenes","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":8192},"cost":{"input":0.03,"output":0.03},"canonical_model_id":"deepseek/deepseek-ocr-2"},"inclusionai/ling-3.0-flash-vl":{"id":"inclusionai/ling-3.0-flash-vl","name":"Ling 3.0 Flash VL","description":"Native multimodal hybrid MoE model for image and video understanding, reasoning, and visual agents","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.075,"output":0.22,"cache_read":0.015},"canonical_model_id":"inclusionai/ling-3.0-flash-vl"},"inclusionai/ling-3.0-flash-sante":{"id":"inclusionai/ling-3.0-flash-sante","name":"Ling 3.0 Flash Sante","description":"Health and medicine specialization of Ling 3.0 Flash for medical reasoning and evidence-based retrieval","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"cost":{"input":0.075,"output":0.22,"cache_read":0.015},"canonical_model_id":"inclusionai/ling-3.0-flash-sante"},"inclusionai/ling-3.0-flash-fin":{"id":"inclusionai/ling-3.0-flash-fin","name":"Ling 3.0 Flash Fin","description":"Finance-enhanced model for financial research, multi-step investment workflows, and long-horizon planning and execution","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-08-27","last_updated":"2026-09-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.075,"output":0.22,"cache_read":0.015},"canonical_model_id":"inclusionai/ling-3.0-flash-fin"},"inclusionai/ling-3.0-flash":{"id":"inclusionai/ling-3.0-flash","name":"Ling 3.0 Flash","description":"Hybrid-linear MoE reasoning model with 124B total and 5.1B active parameters for efficient agents","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-07-23","last_updated":"2026-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.06,"output":0.18,"cache_read":0.012},"canonical_model_id":"inclusionai/ling-3.0-flash"},"inclusionai/ling-3.1-flash":{"id":"inclusionai/ling-3.1-flash","name":"Ling 3.1 Flash","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":262144},"cost":{"input":0.3,"output":0.9,"cache_read":0.06},"canonical_model_id":"inclusionai/ling-3.1-flash"},"google/gemma-3-27b-it":{"id":"google/gemma-3-27b-it","name":"Gemma 3 27B IT","description":"Largest open Gemma 3 instruction model for multilingual text generation and visual understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":98304,"output":16384},"cost":{"input":0.119,"output":0.2},"canonical_model_id":"google/gemma-3-27b-it"},"google/gemma-4-31b-it":{"id":"google/gemma-4-31b-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0.14,"output":0.4},"canonical_model_id":"google/gemma-4-31b-it"},"google/gemma-4-26b-a4b-it":{"id":"google/gemma-4-26b-a4b-it","name":"Gemma 4 26B A4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0.13,"output":0.4},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"google/gemma-3-12b-it":{"id":"google/gemma-3-12b-it","name":"Gemma 3 12B IT","description":"Open multimodal Gemma instruction model for multilingual text generation and image understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"cost":{"input":0.05,"output":0.1},"canonical_model_id":"google/gemma-3-12b-it"},"qwen/qwen3-reranker-8b":{"id":"qwen/qwen3-reranker-8b","type":"reranking","name":"Qwen3 Reranker 8B","description":"Multilingual query-document reranking model supporting more than 100 languages","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-06-05","last_updated":"2025-06-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":0},"cost":{"input":0.05,"output":0},"canonical_model_id":"alibaba/qwen3-reranker-8b"},"qwen/qwen3-vl-30b-a3b-instruct":{"id":"qwen/qwen3-vl-30b-a3b-instruct","name":"Qwen3 VL 30B A3B Instruct","description":"Open vision-language MoE model for image and video understanding, documents, and visual agents","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-04","last_updated":"2025-10-04","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.2,"output":0.7},"canonical_model_id":"alibaba/qwen3-vl-30b-a3b-instruct"},"qwen/qwen3.8-27b":{"id":"qwen/qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.42,"output":3,"cache_read":0.085},"canonical_model_id":"alibaba/qwen3.8-27b"},"qwen/qwen3.8-flash":{"id":"qwen/qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.47,"cache_read":0.016,"cache_write":0.2},"canonical_model_id":"alibaba/qwen3.8-flash"},"qwen/qwen3.5-397b-a17b":{"id":"qwen/qwen3.5-397b-a17b","name":"Qwen3.5 397B-A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.6,"output":3.6},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"qwen/qwen-mt-plus":{"id":"qwen/qwen-mt-plus","name":"Qwen MT Plus","description":"Flagship Qwen translation model with terminology control and support for 92 languages","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-07-24","last_updated":"2025-07-24","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":16384,"output":8192},"cost":{"input":0.25,"output":0.75},"canonical_model_id":"alibaba/qwen-mt-plus"},"qwen/qwen3.8-2.4t-a95b":{"id":"qwen/qwen3.8-2.4t-a95b","name":"Qwen3.8 2.4T A95B","description":"Open-weight sparse MoE (2.4T total, 95B active), the open-weight twin of Qwen3.8 Max for coding, research, complex reasoning, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"qwen/qwen3-embedding-8b":{"id":"qwen/qwen3-embedding-8b","type":"embedding","name":"Qwen3 Embedding 8B","description":"Multilingual text embedding model for retrieval, code search, classification, and clustering","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-06-05","last_updated":"2025-06-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":0},"cost":{"input":0.07,"output":0},"canonical_model_id":"alibaba/qwen3-embedding-8b"},"qwen/qwen3.5-35b-a3b":{"id":"qwen/qwen3.5-35b-a3b","name":"Qwen3.5 35B-A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.25,"output":2},"canonical_model_id":"alibaba/qwen3.5-35b-a3b"},"qwen/qwen3.7-max":{"id":"qwen/qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":1.25,"output":3.75,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.7-max"},"qwen/qwen3.6-27b":{"id":"qwen/qwen3.6-27b","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.6,"output":3.6},"canonical_model_id":"alibaba/qwen3.6-27b"},"qwen/qwen3.6-35b-a3b":{"id":"qwen/qwen3.6-35b-a3b","name":"Qwen3.6 35B-A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.248,"output":1.485},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"qwen/qwen3-omni-30b-a3b-thinking":{"id":"qwen/qwen3-omni-30b-a3b-thinking","name":"Qwen3 Omni 30B A3B Thinking","description":"Multimodal reasoning model accepting text, images, video, and audio with text output","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-09-22","last_updated":"2025-09-22","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":16384},"cost":{"input":0.25,"output":0.97,"input_audio":2.2},"canonical_model_id":"alibaba/qwen3-omni-30b-a3b-thinking"},"qwen/qwen3.8-max":{"id":"qwen/qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max"},"qwen/qwen3.5-27b":{"id":"qwen/qwen3.5-27b","name":"Qwen3.5 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.3,"output":2.4},"canonical_model_id":"alibaba/qwen3.5-27b"},"qwen/qwen3.5-122b-a10b":{"id":"qwen/qwen3.5-122b-a10b","name":"Qwen3.5 122B-A10B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.4,"output":3.2},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"xiaomimimo/mimo-v2.6-pro":{"id":"xiaomimimo/mimo-v2.6-pro","name":"MiMo-V2.6-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.435,"output":0.87,"cache_read":0.0036},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"xiaomimimo/mimo-v2.6-flash":{"id":"xiaomimimo/mimo-v2.6-flash","name":"MiMo-V2.6-Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"xiaomimimo/mimo-v2.5":{"id":"xiaomimimo/mimo-v2.5","name":"MiMo-V2.5","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.168,"output":0.336,"cache_read":0.0034},"canonical_model_id":"xiaomi/mimo-v2.5"},"xiaomimimo/mimo-v2.5-pro":{"id":"xiaomimimo/mimo-v2.5-pro","name":"MiMo-V2.5-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.522,"output":1.044,"cache_read":0.0043},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"nousresearch/hermes-2-pro-llama-3-8b":{"id":"nousresearch/hermes-2-pro-llama-3-8b","name":"Hermes 2 Pro Llama 3 8B","description":"Llama 3 fine-tune optimized for function calling, structured JSON responses, and dialogue","family":"hermes","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2024-04-30","last_updated":"2024-04-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":8192},"cost":{"input":0.14,"output":0.14},"canonical_model_id":"nousresearch/hermes-2-pro-llama-3-8b"},"tencent/hy4":{"id":"tencent/hy4","name":"Hy4","description":"A next-generation multimodal productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-11-04","last_updated":"2026-11-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":983010,"output":64000},"cost":{"input":0.417,"output":1.2505,"cache_read":0.021},"canonical_model_id":"tencent/hy4"},"tencent/hy3":{"id":"tencent/hy3","name":"Hy3","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":192000,"output":262144},"cost":{"input":0.14,"output":0.58,"cache_read":0.035},"canonical_model_id":"tencent/hy3"},"tencent/hy4-preview":{"id":"tencent/hy4-preview","name":"Hy4 preview","description":"A next-generation productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-28","last_updated":"2026-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":64000},"cost":{"input":0.834,"output":2.501,"cache_read":0.042},"canonical_model_id":"tencent/hy4-preview"},"microsoft/wizardlm-2-8x22b":{"id":"microsoft/wizardlm-2-8x22b","name":"WizardLM 2 8x22B","description":"Microsoft WizardLM instruction-tuned Mixtral MoE for multilingual dialogue and complex tasks","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2024-04-15","last_updated":"2024-04-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65535,"output":8000},"cost":{"input":0.62,"output":0.62},"canonical_model_id":"microsoft/wizardlm-2-8x22b"},"moonshotai/kimi-k3.1-pro-highspeed":{"id":"moonshotai/kimi-k3.1-pro-highspeed","name":"Kimi K3.1 Pro Highspeed","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":4},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"moonshotai/kimi-k3.1-pro":{"id":"moonshotai/kimi-k3.1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"moonshotai/kimi-k2.6":{"id":"moonshotai/kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.8,"output":3.4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"moonshotai/kimi-k2-0905":{"id":"moonshotai/kimi-k2-0905","name":"Kimi K2 Instruct 0905","description":"September 2025 Kimi K2 instruction update with a 256K context and improved agentic coding","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-09-05","last_updated":"2025-09-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":98304},"cost":{"input":0.6,"output":2.5},"canonical_model_id":"moonshotai/kimi-k2-0905"},"moonshotai/kimi-k2-instruct":{"id":"moonshotai/kimi-k2-instruct","name":"Kimi K2 Instruct","description":"Non-thinking Kimi K2 MoE instruction model for coding and tool-using agents","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-07-11","last_updated":"2025-07-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"cost":{"input":0.57,"output":2.3},"canonical_model_id":"moonshotai/kimi-k2-instruct"},"moonshotai/kimi-k3":{"id":"moonshotai/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3},"canonical_model_id":"moonshotai/kimi-k3"},"moonshotai/kimi-k2.5":{"id":"moonshotai/kimi-k2.5","name":"Kimi K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.6,"output":3,"cache_read":0.1},"canonical_model_id":"moonshotai/kimi-k2.5"},"moonshotai/kimi-k2.7-code":{"id":"moonshotai/kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"moonshotai/kimi-k2-thinking":{"id":"moonshotai/kimi-k2-thinking","name":"Kimi K2 Thinking","description":"Thinking Kimi model for slower research passes, planning, and hard technical questions","family":"kimi-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-11-06","last_updated":"2025-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":98304},"cost":{"input":0.6,"output":2.5,"cache_read":0.15},"canonical_model_id":"moonshotai/kimi-k2-thinking"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.05,"output":0.25},"canonical_model_id":"openai/gpt-oss-120b"},"apodex/apodex-1.1-mini":{"id":"apodex/apodex-1.1-mini","name":"Apodex 1.1 Mini","description":"Open-weight 35B MoE model for long-horizon research, forecasting, and tool-assisted work","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-24","last_updated":"2026-08-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0,"output":0},"canonical_model_id":"apodex/apodex-1.1-mini"},"minimax/minimax-m2.5":{"id":"minimax/minimax-m2.5","name":"MiniMax-M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131100},"cost":{"input":0.3,"output":1.2,"cache_read":0.03},"canonical_model_id":"minimax/MiniMax-M2.5"},"minimax/minimax-m3.1-flash":{"id":"minimax/minimax-m3.1-flash","name":"MiniMax-M3.1-Flash","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":524288},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"minimax/minimax-m3":{"id":"minimax/minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.06,"tiers":[{"input":0.6,"output":2.4,"cache_read":0.12,"tier":{"type":"context","size":524288}}],"context_over_200k":{"input":0.6,"output":2.4,"cache_read":0.12}},"canonical_model_id":"minimax/MiniMax-M3"},"minimax/minimax-m2.7-highspeed":{"id":"minimax/minimax-m2.7-highspeed","name":"MiniMax-M2.7-highspeed","description":"Low-latency M2.7 variant for interactive coding plans and agent loops","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.4,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.7-highspeed"},"minimax/minimax-m2.7":{"id":"minimax/minimax-m2.7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M2.7"},"stepfun/step-5-preview":{"id":"stepfun/step-5-preview","name":"Step 5 Preview","description":"StepFun's next-generation flagship base model for coding and professional knowledge work, with native text, image, and video input and a 1M-token context window","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":64000},"cost":{"input":1,"output":2.7,"cache_read":0.1},"canonical_model_id":"stepfun/step-5-preview"},"stepfun/step-3.7-flash":{"id":"stepfun/step-3.7-flash","name":"Step 3.7 Flash","description":"Newer StepFun flash model for faster agents, coding, and multimodal prompts","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-03-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":256000,"output":256000},"cost":{"input":0.2,"output":1.15,"cache_read":0.04},"canonical_model_id":"stepfun/step-3.7-flash"},"baichuan/baichuan-m2-32b":{"id":"baichuan/baichuan-m2-32b","name":"Baichuan M2 32B","description":"Open medical model trained for clinical reasoning and patient interaction with on, off, and auto thinking modes","family":"baichuan","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":false,"temperature":true,"release_date":"2025-08-13","last_updated":"2025-08-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.07,"output":0.07},"canonical_model_id":"baichuan/baichuan-m2-32b"},"meta-llama/llama-4-scout-17b-16e-instruct":{"id":"meta-llama/llama-4-scout-17b-16e-instruct","name":"Llama 4 Scout 17B Instruct","description":"Open Llama with long-context vision for efficient multimodal agents","family":"llama","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.18,"output":0.59},"canonical_model_id":"meta/llama-4-scout-17b-instruct"},"meta-llama/llama-3.1-8b-instruct":{"id":"meta-llama/llama-3.1-8b-instruct","name":"Llama-3.1-8B-Instruct","description":"Compact open Llama model for lightweight chat, drafting, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"output":16384},"cost":{"input":0.02,"output":0.05},"canonical_model_id":"meta/llama-3.1-8b-instruct"},"meta-llama/llama-3.3-70b-instruct":{"id":"meta-llama/llama-3.3-70b-instruct","name":"Llama-3.3-70B-Instruct","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":12288,"output":12288},"cost":{"input":0.135,"output":0.4},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"meta-llama/llama-3.2-1b-instruct":{"id":"meta-llama/llama-3.2-1b-instruct","name":"Llama 3.2 1B Instruct","description":"Compact instruction-tuned Llama model for multilingual dialogue and on-device assistants","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":32000},"cost":{"input":0.02,"output":0.02},"canonical_model_id":"meta/llama-3.2-1b-instruct"},"meta-llama/llama-4-maverick-17b-128e-instruct-fp8":{"id":"meta-llama/llama-4-maverick-17b-128e-instruct-fp8","name":"Llama 4 Maverick 17B Instruct","description":"Open multimodal Llama for strong reasoning with efficient everyday serving","family":"llama","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":8192},"cost":{"input":0.27,"output":0.85},"canonical_model_id":"meta/llama-4-maverick-17b-instruct"},"zai-org/glm-5.2":{"id":"zai-org/glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"zai-org/autoglm-phone-9b-multilingual":{"id":"zai-org/autoglm-phone-9b-multilingual","name":"AutoGLM Phone 9B Multilingual","description":"Multilingual visual model for operating smartphone interfaces and mobile agents","family":"glm","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-12-10","last_updated":"2025-12-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":0.035,"output":0.138},"canonical_model_id":"zhipuai/autoglm-phone-9b-multilingual"},"zai-org/glm-4.6v":{"id":"zai-org/glm-4.6v","name":"GLM-4.6V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.3,"output":0.9,"cache_read":0.055},"canonical_model_id":"zhipuai/glm-4.6v"},"zai-org/glm-5.1":{"id":"zai-org/glm-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":1.38,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.1"},"zai-org/glm-5.3-flashX":{"id":"zai-org/glm-5.3-flashX","name":"GLM 5.3 FlashX","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.37,"output":1.25,"cache_read":0.075},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai-org/glm-4.7":{"id":"zai-org/glm-4.7","name":"GLM-4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.7"},"zai-org/glm-5.3":{"id":"zai-org/glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"zai-org/glm-5.3-flash":{"id":"zai-org/glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai-org/glm-4.5-air":{"id":"zai-org/glm-4.5-air","name":"GLM-4.5-Air","description":"Lighter GLM-4.5 variant for fast coding assistance and cheaper agents","family":"glm-air","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"cost":{"input":0.13,"output":0.85,"cache_read":0.025},"canonical_model_id":"zhipuai/glm-4.5-air"},"zai-org/glm-4.6":{"id":"zai-org/glm-4.6","name":"GLM-4.6","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.55,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.6"},"zai-org/glm-4.5v":{"id":"zai-org/glm-4.5v","name":"GLM-4.5V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-08-11","last_updated":"2025-08-11","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":16384},"cost":{"input":0.6,"output":1.8,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.5v"},"zai-org/glm-5":{"id":"zai-org/glm-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202800,"output":131072},"cost":{"input":1,"output":3.2,"cache_read":0.2},"canonical_model_id":"zhipuai/glm-5"},"zai-org/glm-4.7-flash":{"id":"zai-org/glm-4.7-flash","name":"GLM-4.7-Flash","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.07,"output":0.4,"cache_read":0.01},"canonical_model_id":"zhipuai/glm-4.7-flash"},"nvidia/nemotron-3-nano-30b-a3b":{"id":"nvidia/nemotron-3-nano-30b-a3b","name":"Nemotron 3 Nano 30B A3B","description":"Small Nemotron 3 MoE for efficient coding, math, and long-context agents","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-06-25","release_date":"2025-12-15","last_updated":"2025-12-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.05,"output":0.2},"canonical_model_id":"nvidia/nemotron-3-nano-30b-a3b"},"gryphe/mythomax-l2-13b":{"id":"gryphe/mythomax-l2-13b","name":"MythoMax L2 13B","description":"Llama 2 merge combining MythoLogic and Huginn for creative writing and roleplay","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2023-08-10","last_updated":"2023-08-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":4096,"output":3200},"cost":{"input":0.09,"output":0.09},"canonical_model_id":"gryphe/mythomax-l2-13b"},"paddlepaddle/paddleocr-vl":{"id":"paddlepaddle/paddleocr-vl","name":"PaddleOCR VL","description":"Compact vision-language model for multilingual document parsing, OCR, tables, formulas, and charts","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-10-16","last_updated":"2025-10-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"output":16384},"cost":{"input":0.02,"output":0.02},"canonical_model_id":"paddlepaddle/paddleocr-vl"}}},"aixy":{"id":"aixy","env":["AIXY_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.aixy-gateway.com/v1","name":"Aixy","doc":"https://docs.aixy-gateway.com/integrations/overview","models":{"anthropic/claude-sonnet-5-5":{"id":"anthropic/claude-sonnet-5-5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.aixy-gateway.com/v1"},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"anthropic/claude-fable-5-1":{"id":"anthropic/claude-fable-5-1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.aixy-gateway.com/v1"},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"anthropic/claude-opus-5-5":{"id":"anthropic/claude-opus-5-5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.aixy-gateway.com/v1"},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"anthropic/claude-haiku-5-5":{"id":"anthropic/claude-haiku-5-5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.aixy-gateway.com/v1"},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"gemini/gemini-3.8-flash":{"id":"gemini/gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"input_audio":0.75},"canonical_model_id":"google/gemini-3.8-flash"},"gemini/gemini-4-argon":{"id":"gemini/gemini-4-argon","name":"Gemini 4 Argon","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":32768},"cost":{"input":2,"output":10,"cache_read":0.1,"input_audio":2},"canonical_model_id":"google/gemini-4-argon"},"openai/gpt-5.6-sol":{"id":"openai/gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.aixy-gateway.com/v1","shape":"responses"},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"openai/gpt-6-luna":{"id":"openai/gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.aixy-gateway.com/v1","shape":"responses"},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"openai/gpt-6-sol":{"id":"openai/gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.aixy-gateway.com/v1","shape":"responses"},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"openai/gpt-6-astra":{"id":"openai/gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.aixy-gateway.com/v1","shape":"responses"},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"openai/gpt-5.6-luna":{"id":"openai/gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.aixy-gateway.com/v1","shape":"responses"},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-6.1-sol":{"id":"openai/gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.aixy-gateway.com/v1","shape":"responses"},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-sol"},"openai/gpt-5.6-terra":{"id":"openai/gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.aixy-gateway.com/v1","shape":"responses"},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"}}},"google":{"id":"google","env":["GOOGLE_API_KEY","GOOGLE_GENERATIVE_AI_API_KEY","GEMINI_API_KEY"],"npm":"@ai-sdk/google","name":"Google","doc":"https://ai.google.dev/gemini-api/docs/models","models":{"gemini-2.5-pro-preview-tts":{"id":"gemini-2.5-pro-preview-tts","type":"speech","name":"Gemini 2.5 Pro Preview TTS","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"gemini-flash","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-05-01","last_updated":"2025-05-01","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":8192,"output":16384},"cost":{"input":1,"output":20}},"gemini-flash-lite-latest":{"id":"gemini-flash-lite-latest","name":"Gemini Flash-Lite Latest","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03}},"deep-research-preview-04-2026":{"id":"deep-research-preview-04-2026","name":"Deep Research Preview (Apr-21-2026)","description":"Agentic model for autonomous multi-step research, synthesis, and cited reports","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-21","last_updated":"2026-04-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text","image"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/deep-research-preview-04-2026"},"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":0,"max":24576}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"input_audio":1},"canonical_model_id":"google/gemini-2.5-flash"},"gemini-3.1-flash-lite-image":{"id":"gemini-3.1-flash-lite-image","type":"image","name":"Nano Banana 2 Lite","description":"Fastest, most cost-efficient Gemini image model for high-volume 1K generation and editing","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":4096},"cost":{"input":0.25,"output":30},"canonical_model_id":"google/gemini-3.1-flash-lite-image"},"gemini-3.8-flash":{"id":"gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"input_audio":0.75},"canonical_model_id":"google/gemini-3.8-flash"},"gemini-4-carbon":{"id":"gemini-4-carbon","name":"Gemini 4 Carbon","description":"Google's most capable reasoning model for complex software engineering, deep math and science, high factual accuracy, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":32768},"cost":{"input":2,"output":10,"cache_read":0.1,"input_audio":2},"canonical_model_id":"google/gemini-4-carbon"},"gemini-pro-latest":{"id":"gemini-pro-latest","name":"Gemini Pro Latest","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"lyria-3-pro-preview":{"id":"lyria-3-pro-preview","name":"Lyria 3 Pro Preview","description":"Music generation model for full-length songs from text or images with vocals and structure","family":"lyria","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-03-25","last_updated":"2026-03-25","modalities":{"input":["text","image"],"output":["text","audio"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"google/lyria-3-pro-preview"},"gemini-2.5-pro":{"id":"gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.25,"output":10,"cache_read":0.125,"tiers":[{"input":2.5,"output":15,"cache_read":0.25,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":15,"cache_read":0.25}},"canonical_model_id":"google/gemini-2.5-pro"},"gemini-omni-flash-preview":{"id":"gemini-omni-flash-preview","type":"video","name":"Gemini Omni Flash Preview","description":"Video generation and editing model for fast, conversational text- and image-to-video workflows","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","video"],"output":["video"]},"open_weights":false,"limit":{"context":131072,"output":65536},"cost":{"input":1.5,"output":17.5},"canonical_model_id":"google/gemini-omni-flash-preview"},"gemini-3.5-flash":{"id":"gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"cache_read":0.15,"input_audio":1.5}},"gemini-2.5-flash-preview-tts":{"id":"gemini-2.5-flash-preview-tts","type":"speech","name":"Gemini 2.5 Flash Preview TTS","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"gemini-flash","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-05-01","last_updated":"2025-05-01","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":8192,"output":16384},"cost":{"input":0.5,"output":10}},"gemini-flash-latest":{"id":"gemini-flash-latest","name":"Gemini Flash Latest","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"input_audio":0.75}},"gemini-3.6-flash":{"id":"gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"input_audio":0.75},"canonical_model_id":"google/gemini-3.6-flash"},"gemini-embedding-001":{"id":"gemini-embedding-001","type":"embedding","name":"Gemini Embedding 001","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"gemini","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2025-05","release_date":"2025-05-20","last_updated":"2025-05-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":2048,"output":1},"cost":{"input":0.15,"output":0}},"gemini-embedding-2":{"id":"gemini-embedding-2","type":"embedding","name":"Gemini Embedding 2","description":"Multimodal embedding model mapping text, images, video, audio, and PDFs into a unified embedding space","family":"gemini","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2025-11","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":1},"cost":{"input":0.2,"output":0,"input_audio":6.5},"canonical_model_id":"google/gemini-embedding-2"},"gemini-2.5-computer-use-preview-10-2025":{"id":"gemini-2.5-computer-use-preview-10-2025","name":"Gemini 2.5 Computer Use Preview 10-2025","description":"Specialized Gemini 2.5 model for browser-control agents that automate UI tasks","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-10-07","last_updated":"2025-10-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":64000},"cost":{"input":1.25,"output":10,"tiers":[{"input":2.5,"output":15,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":15}},"canonical_model_id":"google/gemini-2.5-computer-use-preview-10-2025"},"gemini-3.1-flash-image":{"id":"gemini-3.1-flash-image","type":"image","name":"Nano Banana 2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","high"]}],"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","video","pdf"],"output":["text","image"]},"open_weights":false,"limit":{"context":131072,"output":32768},"cost":{"input":0.5,"output":60},"canonical_model_id":"google/gemini-3.1-flash-image"},"gemini-3.1-pro-preview-customtools":{"id":"gemini-3.1-pro-preview-customtools","name":"Gemini 3.1 Pro Preview Custom Tools","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}}},"gemini-3.1-pro-preview":{"id":"gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}}},"gemini-3.1-flash-lite":{"id":"gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"input_audio":0.5}},"gemini-2.5-flash-lite":{"id":"gemini-2.5-flash-lite","name":"Gemini 2.5 Flash-Lite","description":"Lean Gemini 2.5 lane for cheap multimodal traffic and quick agents","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":512,"max":24576}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.1,"output":0.4,"cache_read":0.01,"input_audio":0.3}},"gemini-4-argon":{"id":"gemini-4-argon","name":"Gemini 4 Argon","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":32768},"cost":{"input":2,"output":10,"cache_read":0.1,"input_audio":2},"canonical_model_id":"google/gemini-4-argon"},"gemini-3.5-live-translate-preview":{"id":"gemini-3.5-live-translate-preview","type":"realtime","name":"Gemini 3.5 Live Translate Preview","description":"Low-latency audio-to-audio model for real-time speech translation across 70+ languages","family":"gemini-pro","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["audio"],"output":["audio","text"]},"open_weights":false,"limit":{"context":16384,"output":32768},"cost":{"input":3.5,"output":21,"input_audio":3.5,"output_audio":21},"canonical_model_id":"google/gemini-3.5-live-translate-preview"},"deep-research-max-preview-04-2026":{"id":"deep-research-max-preview-04-2026","name":"Deep Research Max Preview (Apr-21-2026)","description":"Maximum-comprehensiveness agentic researcher for multi-step investigation, synthesis, and cited reports","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-21","last_updated":"2026-04-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text","image"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/deep-research-max-preview-04-2026"},"gemini-3.1-flash-lite-preview":{"id":"gemini-3.1-flash-lite-preview","name":"Gemini 3.1 Flash Lite Preview","description":"Legacy model retained for compatibility with older integrations","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-03-03","last_updated":"2026-03-03","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":0.25,"output":1.5,"cache_read":0.025,"input_audio":0.5}},"gemini-3.5-flash-lite":{"id":"gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03},"canonical_model_id":"google/gemini-3.5-flash-lite"},"gemma-4-31b-it":{"id":"gemma-4-31b-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768}},"gemini-3-flash-preview":{"id":"gemini-3-flash-preview","name":"Gemini 3 Flash Preview","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.05,"input_audio":1}},"gemini-2.5-flash-image":{"id":"gemini-2.5-flash-image","type":"image","name":"Nano Banana","description":"Nano Banana image model for fast generation, edits, and character-consistent assets","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-26","last_updated":"2025-08-26","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":32768,"output":32768},"status":"deprecated","cost":{"input":0.3,"output":30,"cache_read":0.075},"canonical_model_id":"google/gemini-2.5-flash-image"},"gemma-4-26b-a4b-it":{"id":"gemma-4-26b-a4b-it","name":"Gemma 4 26B A4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768}},"gemini-3-pro-image":{"id":"gemini-3-pro-image","type":"image","name":"Nano Banana Pro","description":"Nano Banana Pro for higher-fidelity image generation and design-heavy edits","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":32768},"cost":{"input":2,"output":120},"canonical_model_id":"google/gemini-3-pro-image"},"gemini-3.1-flash-tts-preview":{"id":"gemini-3.1-flash-tts-preview","type":"speech","name":"Gemini 3.1 Flash TTS Preview","description":"Low-latency speech generation with steerable prompts and expressive audio tags","family":"gemini-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-15","last_updated":"2026-04-15","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":8192,"output":16384},"cost":{"input":1,"output":20},"canonical_model_id":"google/gemini-3.1-flash-tts-preview"},"lyria-3-clip-preview":{"id":"lyria-3-clip-preview","name":"Lyria 3 Clip Preview","description":"Music generation model for short 30-second clips, loops, and previews from text or image prompts","family":"lyria","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-03-25","last_updated":"2026-03-25","modalities":{"input":["text","image"],"output":["text","audio"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"google/lyria-3-clip-preview"},"gemini-3.1-flash-live-preview":{"id":"gemini-3.1-flash-live-preview","type":"realtime","name":"Gemini 3.1 Flash Live Preview","description":"High-quality, low-latency Live API model for real-time dialogue and voice-first AI applications","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-03-26","last_updated":"2026-03-26","modalities":{"input":["text","image","video","audio"],"output":["text","audio"]},"open_weights":false,"limit":{"context":131072,"output":65536},"cost":{"input":0.75,"output":4.5,"input_audio":3,"output_audio":12},"canonical_model_id":"google/gemini-3.1-flash-live-preview"},"gemini-3.7-flash":{"id":"gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"input_audio":0.75},"canonical_model_id":"google/gemini-3.7-flash"}}},"wally":{"id":"wally","env":["WALLY_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://inference.runanywhere.ai/v1","name":"Wally","doc":"https://docs.runanywhere.ai/wally-cloud/api","models":{"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"deepseek-v4.1-flash-fast":{"id":"deepseek-v4.1-flash-fast","name":"DeepSeek V4.1 Flash Fast","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536},"cost":{"input":0.6,"output":2.4,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"glm-5.3-fast":{"id":"glm-5.3-fast","name":"GLM-5.3 Fast","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":2.1,"output":6.6,"cache_read":0.39},"canonical_model_id":"zhipuai/glm-5.3"},"deepseek-v4-pro-fast":{"id":"deepseek-v4-pro-fast","name":"DeepSeek V4 Pro Fast","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536},"cost":{"input":1.91,"output":3.83,"cache_read":0.16},"canonical_model_id":"deepseek/deepseek-v4-pro"},"minimax-m3":{"id":"minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":524287,"output":131072},"cost":{"input":0.33,"output":1.32,"cache_read":0.066},"canonical_model_id":"minimax/MiniMax-M3"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.272,"output":0.65,"cache_read":0.076},"canonical_model_id":"zhipuai/glm-5.3-flash"},"deepseek-v4-flash-0731":{"id":"deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536},"cost":{"input":0.44,"output":1.32,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"}}},"atomic-chat":{"id":"atomic-chat","env":["ATOMIC_CHAT_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"http://127.0.0.1:1337/v1","name":"Atomic Chat","doc":"https://atomic.chat","models":{"gemma-4-E4B-it-MLX-4bit":{"id":"gemma-4-E4B-it-MLX-4bit","name":"Gemma 4 E4B Instruct (MLX 4-bit)","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"google/gemma-4-E4B-it"},"Qwen3_5-9B-MLX-4bit":{"id":"Qwen3_5-9B-MLX-4bit","name":"Qwen 3.5 9B (MLX 4-bit)","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3.5-9b"},"gemma-4-E4B-it-IQ4_XS":{"id":"gemma-4-E4B-it-IQ4_XS","name":"Gemma 4 E4B Instruct (IQ4_XS)","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"google/gemma-4-E4B-it"},"Qwen3_5-9B-Q4_K_M":{"id":"Qwen3_5-9B-Q4_K_M","name":"Qwen 3.5 9B (Q4_K_M)","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3.5-9b"},"Meta-Llama-3_1-8B-Instruct-GGUF":{"id":"Meta-Llama-3_1-8B-Instruct-GGUF","name":"Meta Llama 3.1 8B Instruct (GGUF)","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":4096},"cost":{"input":0,"output":0},"canonical_model_id":"meta/llama-3.1-8b-instruct"}}},"zeldoc":{"id":"zeldoc","env":["ZELDOC_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.zeldoc.ai/v1","name":"Zeldoc","doc":"https://docs.zeldoc.ai","models":{"zdev":{"id":"zdev","name":"ZDev","description":"Coding model for repository understanding, refactors, and agentic engineering tasks","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0}}}},"chutes":{"id":"chutes","env":["CHUTES_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://llm.chutes.ai/v1","name":"Chutes","doc":"https://llm.chutes.ai/v1/models","models":{"google/gemma-4-31B-turbo-TEE":{"id":"google/gemma-4-31B-turbo-TEE","name":"gemma 4 31B turbo TEE","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":65536},"cost":{"input":0.12,"output":0.37,"cache_read":0.012},"canonical_model_id":"google/gemma-4-31b-it"},"deepseek-ai/DeepSeek-V4.1-Flash-1017":{"id":"deepseek-ai/DeepSeek-V4.1-Flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":0,"output":0}},"deepseek-ai/DeepSeek-V3.2-TEE":{"id":"deepseek-ai/DeepSeek-V3.2-TEE","name":"DeepSeek V3.2 TEE","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":65536},"cost":{"input":1,"output":1,"cache_read":0.1},"canonical_model_id":"deepseek/deepseek-v3.2"},"deepseek-ai/DeepSeek-V4-Flash-0731-TEE":{"id":"deepseek-ai/DeepSeek-V4-Flash-0731-TEE","name":"DeepSeek V4 Flash 0731 TEE","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.44,"output":1.32,"cache_read":0.044},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepseek-ai/DeepSeek-V4-Pro-0813":{"id":"deepseek-ai/DeepSeek-V4-Pro-0813","name":"DeepSeek V4 Pro 0813","description":"Flagship DeepSeek model for coding, reasoning, and agentic work","family":"deepseek","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-10-20","last_updated":"2026-10-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":0,"output":0}},"tencent/Hy4":{"id":"tencent/Hy4","name":"Hy4","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-11-04","last_updated":"2026-11-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":0,"output":0}},"moonshotai/Kimi-K2.7-Code":{"id":"moonshotai/Kimi-K2.7-Code","name":"Kimi K2.7 Code","description":"Kimi coding model for software agents, refactors, and repository reasoning","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":0,"output":0}},"moonshotai/Kimi-K2.6-TEE":{"id":"moonshotai/Kimi-K2.6-TEE","name":"Kimi K2.6 TEE","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65535},"cost":{"input":0.39,"output":1.8,"cache_read":0.039},"canonical_model_id":"moonshotai/kimi-k2.6"},"moonshotai/Kimi-K3-TEE":{"id":"moonshotai/Kimi-K3-TEE","name":"Kimi K3 TEE","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65535},"cost":{"input":1.85,"output":9.5,"cache_read":0.185},"canonical_model_id":"moonshotai/kimi-k3"},"Qwen/Qwen3.8-27B-TEE":{"id":"Qwen/Qwen3.8-27B-TEE","name":"Qwen3.8 27B TEE","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.039,"output":1.25,"cache_read":0.0039},"canonical_model_id":"alibaba/qwen3.8-27b"},"Qwen/Qwen3.8-Max-0902":{"id":"Qwen/Qwen3.8-Max-0902","name":"Qwen3.8 Max 0902","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen3.8-max","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-10-20","last_updated":"2026-10-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":0,"output":0}},"Qwen/Qwen3.8-2.4T-A95B":{"id":"Qwen/Qwen3.8-2.4T-A95B","name":"Qwen3.8 2.4T A95B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":0,"output":0}},"Qwen/Qwen3.6-27B-TEE":{"id":"Qwen/Qwen3.6-27B-TEE","name":"Qwen3.6 27B TEE","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"alibaba/qwen3.6-27b"},"Qwen/Qwen3.5-27B-TEE":{"id":"Qwen/Qwen3.5-27B-TEE","name":"Qwen3.5 27B TEE","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.2,"output":1.75,"cache_read":0.02},"canonical_model_id":"alibaba/qwen3.5-27b"},"Qwen/Qwen3.5-397B-A17B-TEE":{"id":"Qwen/Qwen3.5-397B-A17B-TEE","name":"Qwen3.5 397B A17B TEE","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.45,"output":3,"cache_read":0.045},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"zai-org/GLM-5.2-TEE":{"id":"zai-org/GLM-5.2-TEE","name":"GLM 5.2 TEE","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65535},"cost":{"input":1.25,"output":3.95,"cache_read":0.125},"canonical_model_id":"zhipuai/glm-5.2"},"zai-org/GLM-5.1-TEE":{"id":"zai-org/GLM-5.1-TEE","name":"GLM 5.1 TEE","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":65535},"cost":{"input":0.9,"output":2.9,"cache_read":0.09},"canonical_model_id":"zhipuai/glm-5.1"},"zai-org/GLM-5.2-Fast":{"id":"zai-org/GLM-5.2-Fast","name":"GLM 5.2 Fast","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":0,"output":0}},"zai-org/GLM-5.3":{"id":"zai-org/GLM-5.3","name":"GLM 5.3","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":0,"output":0}}}},"cloudflare-ai-gateway":{"id":"cloudflare-ai-gateway","env":["CLOUDFLARE_API_TOKEN","CLOUDFLARE_ACCOUNT_ID","CLOUDFLARE_GATEWAY_ID"],"npm":"ai-gateway-provider","name":"Cloudflare AI Gateway","doc":"https://developers.cloudflare.com/ai-gateway/","models":{"anthropic/claude-opus-4.6":{"id":"anthropic/claude-opus-4.6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"anthropic/claude-opus-4.7":{"id":"anthropic/claude-opus-4.7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"anthropic/claude-opus-4.8":{"id":"anthropic/claude-opus-4.8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic/claude-opus-4.5":{"id":"anthropic/claude-opus-4.5","name":"Claude Opus 4.5 (latest)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"anthropic/claude-opus-5.5":{"id":"anthropic/claude-opus-5.5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/anthropic/v1"},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"anthropic/claude-haiku-4.5":{"id":"anthropic/claude-haiku-4.5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/anthropic/v1"},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"anthropic/claude-sonnet-5":{"id":"anthropic/claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/anthropic/v1"},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"anthropic/claude-sonnet-4.5":{"id":"anthropic/claude-sonnet-4.5","name":"Claude Sonnet 4.5 (latest)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/anthropic/v1"},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"anthropic/claude-fable-5.2":{"id":"anthropic/claude-fable-5.2","name":"Claude Fable 5.2","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/anthropic/v1"},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"anthropic/claude-fable-5.1":{"id":"anthropic/claude-fable-5.1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/anthropic/v1"},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"anthropic/claude-sonnet-4.6":{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/anthropic/v1"},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"anthropic/claude-fable-5":{"id":"anthropic/claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/anthropic/v1"},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"anthropic/claude-opus-5":{"id":"anthropic/claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"anthropic/claude-sonnet-5.5":{"id":"anthropic/claude-sonnet-5.5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/anthropic/v1"},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"anthropic/claude-haiku-5.5":{"id":"anthropic/claude-haiku-5.5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/anthropic/v1"},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":384000},"cost":{"input":1.74,"output":3.48,"cache_read":0.145},"canonical_model_id":"deepseek/deepseek-v4-pro"},"google/gemini-2.5-flash":{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03},"canonical_model_id":"google/gemini-2.5-flash"},"google/gemini-3.8-flash":{"id":"google/gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.8-flash"},"google/gemini-4-carbon":{"id":"google/gemini-4-carbon","name":"Gemini 4 Carbon","description":"Google's most capable reasoning model for complex software engineering, deep math and science, high factual accuracy, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":10,"cache_read":0.1},"canonical_model_id":"google/gemini-4-carbon"},"google/gemini-2.5-pro":{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"google/gemini-2.5-pro"},"google/gemini-3.5-flash":{"id":"google/gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"cache_read":0.15},"canonical_model_id":"google/gemini-3.5-flash"},"google/gemini-3.6-flash":{"id":"google/gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":7.5,"cache_read":0.15,"cache_write":1.5},"canonical_model_id":"google/gemini-3.6-flash"},"google/gemini-3.1-flash-lite":{"id":"google/gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.03},"canonical_model_id":"google/gemini-3.1-flash-lite"},"google/gemini-2.5-flash-lite":{"id":"google/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash-Lite","description":"Lean Gemini 2.5 lane for cheap multimodal traffic and quick agents","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.1,"output":0.4,"cache_read":0.01},"canonical_model_id":"google/gemini-2.5-flash-lite"},"google/gemini-4-argon":{"id":"google/gemini-4-argon","name":"Gemini 4 Argon","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":10,"cache_read":0.1},"canonical_model_id":"google/gemini-4-argon"},"google/gemini-3.5-flash-lite":{"id":"google/gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"cache_write":0.03},"canonical_model_id":"google/gemini-3.5-flash-lite"},"google/gemini-3-flash":{"id":"google/gemini-3-flash","name":"Gemini 3 Flash Preview","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.05},"canonical_model_id":"google/gemini-3-flash-preview"},"google/gemini-3.7-flash":{"id":"google/gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.7-flash"},"google/gemini-3.1-pro":{"id":"google/gemini-3.1-pro","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"moonshotai/kimi-k3":{"id":"moonshotai/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"alibaba/qwen3.5-397b-a17b":{"id":"alibaba/qwen3.5-397b-a17b","name":"Qwen3.5 397B-A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.6,"output":3.6},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"alibaba/qwen3.7-plus":{"id":"alibaba/qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.32,"output":1.28,"cache_read":0.064},"canonical_model_id":"alibaba/qwen3.7-plus"},"alibaba/qwen3.7-max":{"id":"alibaba/qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":1.25,"output":3.75,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.7-max"},"alibaba/qwen3-max":{"id":"alibaba/qwen3-max","name":"Qwen3 Max","description":"Flagship Qwen3 model for coding agents, complex reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536},"cost":{"input":1.2,"output":6},"canonical_model_id":"alibaba/qwen3-max"},"alibaba/qwen3.8-max":{"id":"alibaba/qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","min":0,"max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.8-max"},"openai/gpt-5.5":{"id":"openai/gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":5,"output":30},"canonical_model_id":"openai/gpt-5.5"},"openai/gpt-4.1-nano":{"id":"openai/gpt-4.1-nano","name":"GPT-4.1 nano","description":"Tiny GPT-4.1 option for classification, routing, and very high-volume tasks","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":0.1,"output":0.4,"cache_read":0.03},"canonical_model_id":"openai/gpt-4.1-nano"},"openai/gpt-4.1-mini":{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-4.1-mini"},"openai/o4-mini":{"id":"openai/o4-mini","name":"o4-mini","description":"Fast o-series model for compact reasoning, coding, and tool use","family":"o-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":1.1,"output":4.4,"cache_read":0.275},"canonical_model_id":"openai/o4-mini"},"openai/gpt-5.4-mini":{"id":"openai/gpt-5.4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"openai/gpt-5":{"id":"openai/gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"openai/gpt-5.6-sol":{"id":"openai/gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"openai/gpt-6.1-terra":{"id":"openai/gpt-6.1-terra","name":"GPT-6.1 Terra","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25,"tiers":[{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5}},"canonical_model_id":"openai/gpt-6.1-terra"},"openai/gpt-4.1":{"id":"openai/gpt-4.1","name":"GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"openai/o3":{"id":"openai/o3","name":"o3","description":"Deliberate o-series reasoner for hard math, coding, and multi-step analysis","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/o3"},"openai/gpt-6-luna":{"id":"openai/gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"openai/o3-mini":{"id":"openai/o3-mini","name":"o3-mini","description":"Smaller o-series reasoner for economical coding, math, and planning tasks","family":"o-mini","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2024-12-20","last_updated":"2025-01-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":1.1,"output":4.4,"cache_read":0.55},"canonical_model_id":"openai/o3-mini"},"openai/gpt-6-sol":{"id":"openai/gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"openai/gpt-6-astra":{"id":"openai/gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"openai/gpt-5.1":{"id":"openai/gpt-5.1","name":"GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1"},"openai/gpt-5-mini":{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"openai/gpt-5.5-pro":{"id":"openai/gpt-5.5-pro","name":"GPT-5.5 Pro","description":"Highest-accuracy GPT-5.5 tier for slower, precision-heavy reasoning and coding","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":30,"output":180},"canonical_model_id":"openai/gpt-5.5-pro"},"openai/gpt-5.6-luna":{"id":"openai/gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.7999999999999998,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.7999999999999998,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-6.1-sol":{"id":"openai/gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-sol"},"openai/gpt-5.4-pro":{"id":"openai/gpt-5.4-pro","name":"GPT-5.4 Pro","description":"More exact GPT-5.4 tier for demanding professional reasoning and agent tasks","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":30,"output":180},"canonical_model_id":"openai/gpt-5.4-pro"},"openai/gpt-5-nano":{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-nano"},"openai/gpt-5.4":{"id":"openai/gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":2.5,"output":15,"cache_read":0.25},"canonical_model_id":"openai/gpt-5.4"},"openai/gpt-5.4-nano":{"id":"openai/gpt-5.4-nano","name":"GPT-5.4 nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"openai/gpt-4o":{"id":"openai/gpt-4o","name":"GPT-4o","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":1.25,"output":5,"cache_read":0.625},"canonical_model_id":"openai/gpt-4o"},"openai/gpt-5.6-terra":{"id":"openai/gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"openai/gpt-4o-mini":{"id":"openai/gpt-4o-mini","name":"GPT-4o mini","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"provider":{"npm":"@ai-sdk/openai","api":"https://gateway.ai.cloudflare.com/v1/${CLOUDFLARE_ACCOUNT_ID}/${CLOUDFLARE_GATEWAY_ID}/openai"},"cost":{"input":0.075,"output":0.3,"cache_read":0.0375},"canonical_model_id":"openai/gpt-4o-mini"},"reflection-ai/beam-1.0-501b-a23b":{"id":"reflection-ai/beam-1.0-501b-a23b","name":"Beam 1.0 501B A23B","description":"Sparse mixture-of-experts reasoning model with 23B active parameters for coding and agentic workflows","family":"beam","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-06-30","release_date":"2026-10-05","last_updated":"2026-10-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"reflection/beam-1.0-501b-a23b"},"minimax/m3.1-flash":{"id":"minimax/m3.1-flash","name":"MiniMax-M3.1-Flash","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":512000},"cost":{"input":0.15,"output":0.6,"cache_read":0.015,"cache_write":0.15},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"meta/muse-spark-1.3":{"id":"meta/muse-spark-1.3","name":"Muse Spark 1.3","description":"Muse Spark 1.3 is a multimodal reasoning model from Meta for long-running agentic, multi-agent, and coding workflows. It improves long-horizon agent collaboration, instruction following, and coding efficiency relative to Muse Spark 1.2.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.16},"canonical_model_id":"meta/muse-spark-1.3"},"meta/muse-spark-1.1":{"id":"meta/muse-spark-1.1","name":"Muse Spark 1.1","description":"Muse Spark is a natively multimodal reasoning model with support for tool-use, visual chain of thought, and multi-agent orchestration.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-08","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.16},"canonical_model_id":"meta/muse-spark-1.1"},"meta/muse-wonder-1.0":{"id":"meta/muse-wonder-1.0","name":"Muse Wonder","description":"Muse Wonder is a frontier multimodal reasoning model from Meta for personal and professional agents, long-horizon coding, and computer use. It combines Active Memory, which carries relevant context across conversations, with Active Focus, which keeps it working through blockers toward a goal.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-12","last_updated":"2026-10-12","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":4,"output":20,"cache_read":0.2},"canonical_model_id":"meta/muse-wonder-1.0"},"meta/muse-spark-open":{"id":"meta/muse-spark-open","name":"Muse Spark Open","description":"Muse Spark Open is an 816B total / 42B active open-weight multimodal reasoning model from Meta for coding and long-horizon agentic work, with 1M-token context.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":true,"limit":{"context":1040000,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-open"},"meta/muse-ember-1.0":{"id":"meta/muse-ember-1.0","name":"Muse Ember","description":"Muse Ember is Meta's smallest and most efficient reasoning model, built for the work agents repeat all day: tool calls, coding subtasks, routing, extraction, and long-document parsing. It pairs with Muse Wonder or Muse Spark, which plan while Muse Ember handles the volume.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":524288},"cost":{"input":0.1,"output":0.5,"cache_read":0.004},"canonical_model_id":"meta/muse-ember-1.0"},"meta/muse-spark-1.2":{"id":"meta/muse-spark-1.2","name":"Muse Spark 1.2","description":"Muse Spark 1.2 is a coding-focused update to Muse Spark 1.1 with improvements in code generation, complex debugging, codebase understanding, and end-to-end developer workflows.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.16},"canonical_model_id":"meta/muse-spark-1.2"},"fireworks/ember-1":{"id":"fireworks/ember-1","name":"Ember-1","description":"Specialized model from Fireworks built on Kimi K3, producing shorter reasoning traces with approximately 40% fewer tokens while maintaining comparable quality","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1040000,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"fireworks/ember-1"},"unbiased/pareto":{"id":"unbiased/pareto","name":"Pareto","description":"Blended multimodal model that runs multiple language models in parallel and returns a synthesized answer","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-09-17","last_updated":"2026-09-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":2.5,"output":7.5,"cache_read":0.25},"canonical_model_id":"unbiased/pareto"},"xai/grok-4.20-0309-non-reasoning":{"id":"xai/grok-4.20-0309-non-reasoning","name":"Grok 4.20 (Non-Reasoning)","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"cost":{"input":2,"output":6,"cache_read":0.2},"canonical_model_id":"xai/grok-4.20-0309-non-reasoning"},"xai/grok-4.5":{"id":"xai/grok-4.5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.3,"tiers":[{"input":4,"output":12,"cache_read":0.6,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":0.6}},"canonical_model_id":"xai/grok-4.5"},"xai/grok-4.3":{"id":"xai/grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2},"canonical_model_id":"xai/grok-4.3"},"xai/grok-4.20-0309-reasoning":{"id":"xai/grok-4.20-0309-reasoning","name":"Grok 4.20 (Reasoning)","description":"Reasoning Grok for document-heavy analysis and long-horizon tool use","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"cost":{"input":2,"output":6,"cache_read":0.2},"canonical_model_id":"xai/grok-4.20-0309-reasoning"},"xai/grok-4.7":{"id":"xai/grok-4.7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.7"},"xai/grok-4.6":{"id":"xai/grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.6"}}},"digitalocean":{"id":"digitalocean","env":["DIGITALOCEAN_ACCESS_TOKEN"],"npm":"@ai-sdk/openai-compatible","api":"https://inference.do-ai.run/v1","name":"DigitalOcean","doc":"https://docs.digitalocean.com/products/gradient-ai-platform/details/models/","models":{"nemotron-3-nano-omni":{"id":"nemotron-3-nano-omni","name":"Nemotron 3 Nano Omni","description":"Open Nemotron omni model combining reasoning with text, vision, and audio","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-28","last_updated":"2026-04-28","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":0.5,"output":0.9,"cache_read":0.1},"canonical_model_id":"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning"},"mistral-3-14B":{"id":"mistral-3-14B","name":"Ministral 3 14B","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":128000},"cost":{"input":0.2,"output":0.2,"cache_read":0.04},"canonical_model_id":"mistral/ministral-3-14b-instruct-2512"},"gemma-4-31B-it":{"id":"gemma-4-31B-it","name":"Gemma 4","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":8192},"cost":{"input":0.18,"output":0.5,"cache_read":0.036},"canonical_model_id":"google/gemma-4-31b-it"},"anthropic-claude-haiku-4.5":{"id":"anthropic-claude-haiku-4.5","name":"Anthropic Claude Haiku 4.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8192},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.21},"canonical_model_id":"zhipuai/glm-5.2"},"deepseek-4-flash":{"id":"deepseek-4-flash","name":"Deepseek V4 Flash","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek-flash","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.14,"output":0.28,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash"},"openai-gpt-5-nano":{"id":"openai-gpt-5-nano","name":"OpenAI GPT-5 Nano","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-nano"},"gte-large-en-v1.5":{"id":"gte-large-en-v1.5","type":"embedding","name":"GTE Large (v1.5)","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"text-embedding","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-03-27","last_updated":"2026-04-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":1024},"cost":{"input":0.09,"output":0}},"anthropic-claude-fable-5.2":{"id":"anthropic-claude-fable-5.2","name":"Anthropic Claude Fable 5.2","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"kimi-k3.1-pro":{"id":"kimi-k3.1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":2,"output":10,"cache_read":0.2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.6"},"anthropic-claude-5-sonnet":{"id":"anthropic-claude-5-sonnet","name":"Anthropic Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"openai-gpt-5":{"id":"openai-gpt-5","name":"OpenAI GPT-5","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"anthropic-claude-opus-4.6":{"id":"anthropic-claude-opus-4.6","name":"Anthropic Claude Opus 4.6","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8192},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25,"tiers":[{"input":10,"output":37.5,"cache_read":1,"cache_write":12.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":10,"output":37.5,"cache_read":1,"cache_write":12.5}},"canonical_model_id":"anthropic/claude-opus-4-6"},"deepseek-3.2":{"id":"deepseek-3.2","name":"Deepseek 3.2","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":163840},"cost":{"input":0.5,"output":1.6,"cache_read":0.15},"canonical_model_id":"deepseek/deepseek-v3.2"},"openai-gpt-4o":{"id":"openai-gpt-4o","name":"OpenAI GPT-4o","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o"},"openai-gpt-image-2":{"id":"openai-gpt-image-2","type":"image","name":"OpenAI GPT Image 2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-21","last_updated":"2026-04-21","modalities":{"input":["text","image"],"output":["image","text"]},"open_weights":false,"limit":{"context":0,"output":16384},"cost":{"input":8,"output":30},"canonical_model_id":"openai/gpt-image-2"},"openai-gpt-5.4":{"id":"openai-gpt-5.4","name":"OpenAI GPT-5.4","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5}},"canonical_model_id":"openai/gpt-5.4"},"openai-gpt-5.5":{"id":"openai-gpt-5.5","name":"OpenAI GPT-5.5","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"openai-gpt-6-luna":{"id":"openai-gpt-6-luna","name":"OpenAI GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"anthropic-claude-opus-4.8":{"id":"anthropic-claude-opus-4.8","name":"Anthropic Claude Opus 4.8","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"temperature":true,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic-claude-fable-5":{"id":"anthropic-claude-fable-5","name":"Anthropic Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"nemotron-3.5-super-vl":{"id":"nemotron-3.5-super-vl","name":"NVIDIA Nemotron 3.5 Super VL","description":"Nemotron multimodal model for visual reasoning and agentic AI workflows","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.3,"output":0.65,"cache_read":0.06},"canonical_model_id":"nvidia/nemotron-3.5-super-vl-120b-a12b"},"multi-qa-mpnet-base-dot-v1":{"id":"multi-qa-mpnet-base-dot-v1","type":"embedding","name":"Multi-QA-mpnet-base-dot-v1","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2021-08-23","last_updated":"2021-08-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":512,"output":768},"cost":{"input":0.009,"output":0},"canonical_model_id":"sentence-transformers/multi-qa-mpnet-base-dot-v1"},"llama-4-maverick":{"id":"llama-4-maverick","name":"Llama 4 Maverick","description":"Open multimodal Llama model for strong reasoning and fast responses","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.25,"output":0.87,"cache_read":0.05},"canonical_model_id":"meta/llama-4-maverick-17b-instruct"},"openai-gpt-5-mini":{"id":"openai-gpt-5-mini","name":"OpenAI GPT-5 Mini","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"anthropic-claude-5.5-haiku":{"id":"anthropic-claude-5.5-haiku","name":"Anthropic Claude 5.5 Haiku","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"openai-o1":{"id":"openai-o1","name":"OpenAI o1","description":"O-series reasoning model for hard analysis, math, coding, and planning","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2023-09","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":15,"output":60,"cache_read":7.5},"canonical_model_id":"openai/o1"},"deepseek-v4-pro-0813":{"id":"deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":1.32,"output":3.96,"cache_read":0.044},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"openai-o3-mini":{"id":"openai-o3-mini","name":"OpenAI o3 mini","description":"O-series reasoning model for hard analysis, math, coding, and planning","family":"o-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2024-12-20","last_updated":"2025-01-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":1.1,"output":4.4,"cache_read":0.55},"canonical_model_id":"openai/o3-mini"},"qwen3.5-397b-a17b":{"id":"qwen3.5-397b-a17b","name":"Qwen 3.5 397B A17B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.55,"output":3.5,"cache_read":0.111},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"minimax-m2.5":{"id":"minimax-m2.5","name":"MiniMax M2.5 (Public Preview)","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax-m2.5","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-08","release_date":"2026-02-12","last_updated":"2026-04-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":0.3,"output":1.2,"cache_read":0.06}},"openai-gpt-4.1":{"id":"openai-gpt-4.1","name":"OpenAI GPT-4.1","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"Deepseek V4 Pro","description":"Flagship DeepSeek model for coding, reasoning, and agentic work","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":1.74,"output":3.48,"cache_read":0.348},"canonical_model_id":"deepseek/deepseek-v4-pro"},"reflection-beam":{"id":"reflection-beam","name":"Beam","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"beam","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-10-21","last_updated":"2026-10-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.4,"output":1.2,"cache_read":0.04}},"openai-gpt-image-1":{"id":"openai-gpt-image-1","type":"image","name":"GPT Image 1","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-04-24","last_updated":"2025-04-24","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":5,"output":40,"cache_read":1.25},"canonical_model_id":"openai/gpt-image-1"},"openai-gpt-5.2-pro":{"id":"openai-gpt-5.2-pro","name":"OpenAI GPT-5.2 Pro","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":21,"output":168},"canonical_model_id":"openai/gpt-5.2-pro"},"qwen3-tts-voicedesign":{"id":"qwen3-tts-voicedesign","type":"speech","name":"Qwen3 TTS VoiceDesign","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-21","last_updated":"2026-04-30","modalities":{"input":["text"],"output":["audio"]},"open_weights":true,"limit":{"context":32768,"output":1},"provider":{"npm":"@ai-sdk/openai"}},"anthropic-claude-sonnet-5.5":{"id":"anthropic-claude-sonnet-5.5","name":"Anthropic Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"glm-5.3":{"id":"glm-5.3","name":"GLM5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":128000},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"anthropic-claude-fable-5.1":{"id":"anthropic-claude-fable-5.1","name":"Anthropic Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"anthropic-claude-4.5-sonnet":{"id":"anthropic-claude-4.5-sonnet","name":"Anthropic Claude 4.5 Sonnet","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75,"tiers":[{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5}},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"minimax-m3.1-flash":{"id":"minimax-m3.1-flash","name":"MiniMax M3.1-Flash (Public Preview)","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"qwen3-embedding-0.6b":{"id":"qwen3-embedding-0.6b","type":"embedding","name":"Qwen3 Embedding 0.6B","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"text-embedding","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-06-03","last_updated":"2026-04-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8000,"output":1024},"status":"beta","cost":{"input":0.04,"output":0}},"all-mini-lm-l6-v2":{"id":"all-mini-lm-l6-v2","type":"embedding","name":"All-MiniLM-L6-v2","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2021-08-30","last_updated":"2021-08-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256,"output":384},"cost":{"input":0.009,"output":0},"canonical_model_id":"sentence-transformers/all-minilm-l6-v2"},"anthropic-claude-opus-5.5":{"id":"anthropic-claude-opus-5.5","name":"Anthropic Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.4,"cache_write":10,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.4,"cache_write":10}},"canonical_model_id":"anthropic/claude-opus-5-5"},"openai-gpt-oss-120b":{"id":"openai-gpt-oss-120b","name":"OpenAI GPT-oss-120b","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"cost":{"input":0.1,"output":0.7,"cache_read":0.02},"canonical_model_id":"openai/gpt-oss-120b"},"anthropic-claude-4.6-sonnet":{"id":"anthropic-claude-4.6-sonnet","name":"Anthropic Claude Sonnet 4.6","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8192},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75,"tiers":[{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5}},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"openai-o3":{"id":"openai-o3","name":"OpenAI o3","description":"O-series reasoning model for hard analysis, math, coding, and planning","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/o3"},"nemotron-3-ultra-550b":{"id":"nemotron-3-ultra-550b","name":"Nemotron 3 Ultra","description":"Flagship Nemotron model for high-throughput reasoning and complex agents","family":"nemotron","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.9,"output":1.7,"cache_read":0.18},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM5.3 Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"anthropic-claude-opus-4.5":{"id":"anthropic-claude-opus-4.5","name":"Anthropic Claude Opus 4.5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8192},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"openai-gpt-5.4-pro":{"id":"openai-gpt-5.4-pro","name":"OpenAI GPT-5.4 Pro","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.4-pro"},"openai-gpt-oss-20b":{"id":"openai-gpt-oss-20b","name":"OpenAI GPT-oss-20b","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"cost":{"input":0.05,"output":0.45,"cache_read":0.01},"canonical_model_id":"openai/gpt-oss-20b"},"e5-large-v2":{"id":"e5-large-v2","type":"embedding","name":"E5 Large v2","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2023-05","last_updated":"2023-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":512,"output":1024},"cost":{"input":0.02,"output":0},"canonical_model_id":"intfloat/e5-large-v2"},"openai-gpt-6-astra":{"id":"openai-gpt-6-astra","name":"OpenAI GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"openai-gpt-4o-mini":{"id":"openai-gpt-4o-mini","name":"OpenAI GPT-4o mini","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-4o-mini"},"openai-gpt-5.6-terra":{"id":"openai-gpt-5.6-terra","name":"OpenAI GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"openai-gpt-5.4-nano":{"id":"openai-gpt-5.4-nano","name":"OpenAI GPT-5.4 Nano","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"openai-gpt-5.4-mini":{"id":"openai-gpt-5.4-mini","name":"OpenAI GPT-5.4 Mini","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"mimo-v2.5-pro":{"id":"mimo-v2.5-pro","name":"MiMo V2.5 Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.8,"output":3,"cache_read":0.16},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"bge-reranker-v2-m3":{"id":"bge-reranker-v2-m3","type":"reranking","name":"BGE Reranker v2 M3","description":"Reranking model for improving retrieval quality in search and recommendation systems","family":"bge","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-03-15","last_updated":"2024-03-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":1},"cost":{"input":0.01,"output":0},"canonical_model_id":"baai/bge-reranker-v2-m3"},"openai-gpt-image-1.5":{"id":"openai-gpt-image-1.5","type":"image","name":"OpenAI GPT Image 1.5","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-11-25","last_updated":"2025-11-25","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":0,"output":16384},"cost":{"input":5,"output":10,"cache_read":1},"canonical_model_id":"openai/gpt-image-1.5"},"bge-m3":{"id":"bge-m3","type":"embedding","name":"BGE M3","description":"Multilingual embedding model combining dense, sparse, and multi-vector retrieval","family":"bge","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-01-30","last_updated":"2024-01-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":1024},"cost":{"input":0.02,"output":0},"canonical_model_id":"baai/bge-m3"},"openai-gpt-5.6-sol":{"id":"openai-gpt-5.6-sol","name":"OpenAI GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"openai-gpt-5.6-luna":{"id":"openai-gpt-5.6-luna","name":"OpenAI GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"openai-gpt-6-sol":{"id":"openai-gpt-6-sol","name":"OpenAI GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"deepseek-v4-flash-0731":{"id":"deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.14,"output":0.28,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"stable-diffusion-3.5-large":{"id":"stable-diffusion-3.5-large","type":"image","name":"Stable Diffusion 3.5 Large","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"stable-diffusion","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-10-22","last_updated":"2026-04-30","modalities":{"input":["text"],"output":["image"]},"open_weights":true,"limit":{"context":256,"output":1}},"qwen3.8-max":{"id":"qwen3.8-max","name":"Qwen3.8-Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":262144},"cost":{"input":2,"output":6,"cache_read":0.2},"canonical_model_id":"alibaba/qwen3.8-max"},"deepseek-v4.1-flash-1017":{"id":"deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","xhigh","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"openai-gpt-6.1-terra":{"id":"openai-gpt-6.1-terra","name":"OpenAI GPT-6.1 Terra","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"tiers":[{"input":2,"output":7.5,"cache_read":0.1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":2,"output":7.5,"cache_read":0.1}},"canonical_model_id":"openai/gpt-6.1-terra"},"arcee-trinity-large-thinking":{"id":"arcee-trinity-large-thinking","name":"Arcee Trinity Large Thinking (Public Preview)","description":"Reasoning-optimized 398B MoE agent model with extended thinking for long-horizon and multi-turn tool use","family":"trinity","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-04-01","last_updated":"2026-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32000},"cost":{"input":0.25,"output":0.9,"cache_read":0.06},"canonical_model_id":"arcee-ai/trinity-large-thinking"},"anthropic-claude-opus-5":{"id":"anthropic-claude-opus-5","name":"Anthropic Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"openai-gpt-5.2":{"id":"openai-gpt-5.2","name":"OpenAI GPT-5.2","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"openai-gpt-5.3-codex":{"id":"openai-gpt-5.3-codex","name":"OpenAI GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"anthropic-claude-opus-4.7":{"id":"anthropic-claude-opus-4.7","name":"Anthropic Claude Opus 4.7","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8192},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"nemotron-nano-12b-v2-vl":{"id":"nemotron-nano-12b-v2-vl","name":"Nemotron-nano 12b v2-vl","description":"Nemotron multimodal model for visual reasoning and agentic AI workflows","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"temperature":true,"release_date":"2025-10-28","last_updated":"2025-10-28","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.2,"output":0.6,"cache_read":0.04},"canonical_model_id":"nvidia/nemotron-nano-12b-v2-vl"},"openai-gpt-6-1-sol":{"id":"openai-gpt-6-1-sol","name":"OpenAI GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-sol"},"wan2-2-t2v-a14b":{"id":"wan2-2-t2v-a14b","type":"video","name":"Wan2.2-T2V-A14B","description":"Video model for prompt-guided generation, editing, and motion workflows","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-07-28","last_updated":"2026-04-30","modalities":{"input":["text"],"output":["video"]},"open_weights":true,"limit":{"context":100,"output":1}},"fal-ai/fast-sdxl":{"id":"fal-ai/fast-sdxl","type":"image","name":"Fast SDXL","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"stable-diffusion","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2023-07-26","last_updated":"2026-04-16","modalities":{"input":["text"],"output":["image"]},"open_weights":true,"limit":{"context":0,"output":0}},"fal-ai/elevenlabs/tts/multilingual-v2":{"id":"fal-ai/elevenlabs/tts/multilingual-v2","type":"speech","name":"ElevenLabs Multilingual TTS v2","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"elevenlabs","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2023-08-22","last_updated":"2023-08-22","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":0,"output":0},"canonical_model_id":"elevenlabs/eleven_multilingual_v2"},"fal-ai/flux/schnell":{"id":"fal-ai/flux/schnell","type":"image","name":"FLUX.1 [schnell]","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"flux","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-08-01","last_updated":"2026-04-16","modalities":{"input":["text"],"output":["image"]},"open_weights":true,"limit":{"context":0,"output":0}},"fal-ai/stable-audio-25/text-to-audio":{"id":"fal-ai/stable-audio-25/text-to-audio","type":"speech","name":"Stable Audio 2.5 (Text-to-Audio)","description":"Speech generation model for controllable voice, narration, and audio delivery","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-10-08","last_updated":"2026-04-16","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":0,"output":0}}}},"munito":{"id":"munito","env":["MUNITO_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.munito.ai/inference/v1","name":"Munito AI","doc":"https://docs.munito.ai/models","models":{"aleph-alpha/kolibri-1":{"id":"aleph-alpha/kolibri-1","name":"Kolibri 1","description":"Aleph Alpha's German and English mixture-of-experts reasoning model (78B total, 3.46B active) for chat, RAG and agents","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-06-18","release_date":"2026-10-03","last_updated":"2026-10-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":0.13,"output":0.51,"cache_read":0.078},"canonical_model_id":"aleph-alpha/kolibri-1"},"qwen/qwen3.8-27b":{"id":"qwen/qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.18,"output":2.4,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3.8-27b"},"deepseek-ai/deepseek-v4-flash":{"id":"deepseek-ai/deepseek-v4-flash","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":0.099,"output":0.25,"cache_read":0.019},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepseek-ai/deepseek-v4.1-flash-1017":{"id":"deepseek-ai/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"status":"beta","cost":{"input":0.27,"output":1,"cache_read":0.0054},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"zai-org/glm-5.3-flash":{"id":"zai-org/glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":0.13,"output":0.45,"cache_read":0.027},"canonical_model_id":"zhipuai/glm-5.3-flash"}}},"abliteration-ai":{"id":"abliteration-ai","env":["ABLIT_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.abliteration.ai/v1","name":"abliteration.ai","doc":"https://docs.abliteration.ai/models","models":{"abliterated-model-large-v2":{"id":"abliterated-model-large-v2","name":"Abliterated Model Large V2","description":"GLM-5.3 model abliterated and finetuned for cyber, ML red teaming, and agent testing","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-29","last_updated":"2026-08-31","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":999990},"cost":{"input":5,"output":5,"cache_read":0.5}},"abliterated-model":{"id":"abliterated-model","name":"Abliterated Model","description":"Multimodal model for analyzing text, images, documents, and rich media","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-01-06","last_updated":"2026-07-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":150000,"input":150000,"output":8192},"cost":{"input":3,"output":3,"cache_read":0.3}},"abliterated-model-large":{"id":"abliterated-model-large","name":"Abliterated Model Large","description":"GLM-5.2 model abliterated and finetuned for cyber, ML red teaming, and agent testing","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-25","last_updated":"2026-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":999990},"cost":{"input":5,"output":5,"cache_read":0.5}}}},"kimi-code-plan-cn":{"id":"kimi-code-plan-cn","env":["KIMI_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.kimi.com/coding/v1","name":"Kimi For Coding (kimi.com)","doc":"https://www.kimi.com/code/docs/en/kimi-code/models.html","models":{"kimi-for-coding-highspeed":{"id":"kimi-for-coding-highspeed","name":"Kimi For Coding HighSpeed","description":"Lower-latency Kimi Code variant for interactive edits and coding-agent loops","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k2.7-code-highspeed"},"k3.1-pro":{"id":"k3.1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"k3":{"id":"k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k3"},"k3-256k":{"id":"k3-256k","name":"Kimi K3-256K","description":"256K-context version of Kimi K3, reducing token consumption for shorter coding sessions","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k3"},"k3.1-pro-highspeed":{"id":"k3.1-pro-highspeed","name":"Kimi K3.1 Pro Highspeed","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"kimi-for-coding":{"id":"kimi-for-coding","name":"Kimi K2.8 Preview","description":"Kimi coding model with more efficient thinking and up to 1M context, available through Kimi Code","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":false,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":32768},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k2.8-preview"}}},"llmtech":{"id":"llmtech","env":["LLMTECH_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.llmtech.eu/v1","name":"LLM Tech","doc":"https://llmtech.eu/models/qwen3.8-27b","models":{"nvidia/Qwen3.8-27B-NVFP4":{"id":"nvidia/Qwen3.8-27B-NVFP4","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.25,"output":2.09,"cache_read":0.04},"canonical_model_id":"alibaba/qwen3.8-27b"}}},"nano-gpt":{"id":"nano-gpt","env":["NANO_GPT_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://nano-gpt.com/api/v1","name":"NanoGPT","doc":"https://docs.nano-gpt.com","models":{"gemma-4-12b-it-station-keeper":{"id":"gemma-4-12b-it-station-keeper","name":"Gemma 4 12B StationKeeper","description":"Gemma 4 12B StationKeeper is an open-weight roleplay finetune with image understanding, tool calling, optional reasoning, and a 131,072-token context window.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-09-09","last_updated":"2026-09-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":32768},"cost":{"input":0.05,"output":0.25,"cache_read":0.025}},"gemma-4-26b-a4b-it-musica":{"id":"gemma-4-26b-a4b-it-musica","name":"Musica","description":"Musica is a Gemma 4 26B A4B multimodal mixture-of-experts fine-tune for creative writing, expressive dialogue, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-07-29","last_updated":"2026-07-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.12,"output":0.38,"cache_read":0.06}},"gemma-4-31b-it-garnet":{"id":"gemma-4-31b-it-garnet","name":"Garnet","description":"Garnet is a multimodal Gemma 4 31B creative finetune for expressive dialogue, long-form storytelling, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-07-29","last_updated":"2026-07-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.45,"cache_read":0.05}},"mercury-2":{"id":"mercury-2","name":"Mercury 2","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"mercury","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-24","last_updated":"2026-02-24","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":128000,"output":50000},"cost":{"input":0.25,"output":0.75,"cache_read":0.025},"canonical_model_id":"inception/mercury-2"},"gemma-4-12b-it":{"id":"gemma-4-12b-it","name":"Gemma 4 12B Instruct","description":"Compact Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":32768},"cost":{"input":0.05,"output":0.25,"cache_read":0.025},"canonical_model_id":"google/gemma-4-12b-it"},"Gemma-4-26B-A4B-MeroMero:thinking":{"id":"Gemma-4-26B-A4B-MeroMero:thinking","name":"Gemma 4 26B A4B MeroMero Thinking","description":"Gemma 4 26B A4B MeroMero with thinking enabled for more deliberate emotive dialogue, relationship scenes, creative writing, and multimodal roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-07-29","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.12,"output":0.38,"cache_read":0.06}},"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03},"canonical_model_id":"google/gemini-2.5-flash"},"gemini-2.5-flash-preview-05-20:thinking":{"id":"gemini-2.5-flash-preview-05-20:thinking","name":"Gemini 2.5 Flash 0520 Thinking","description":"Preview snapshot of Gemini 2.5 Flash with controllable thinking budgets","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-05-20","last_updated":"2025-05-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048000,"input":1048000,"output":65536},"status":"deprecated","cost":{"input":0.15,"output":3.5,"cache_read":0.015},"canonical_model_id":"google/gemini-2.5-flash-preview-05-20"},"MiniMax-M1":{"id":"MiniMax-M1","name":"MiniMax M1","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"minimax","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-01-08","last_updated":"2025-06-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":131072},"cost":{"input":0.1394,"output":1.3328,"cache_read":0.0697}},"holo3-35b-a3b":{"id":"holo3-35b-a3b","name":"Holo3-35B-A3B","description":"Compact GPT model for low-latency assistance and high-volume workloads","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"release_date":"2024-01-01","last_updated":"2024-01-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"input":65536,"output":8192},"cost":{"input":0.25,"output":1.8,"cache_read":0.125}},"gemini-2.5-flash-lite-preview-09-2025-thinking":{"id":"gemini-2.5-flash-lite-preview-09-2025-thinking","name":"Gemini 2.5 Flash Lite Preview (09/2025) – Thinking","description":"September 2025 preview of Gemini 2.5 Flash-Lite with better instruction following and multimodal quality","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-09-25","last_updated":"2025-09-25","modalities":{"input":["text","image","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"status":"deprecated","cost":{"input":0.1,"output":0.4,"cache_read":0.01},"canonical_model_id":"google/gemini-2.5-flash-lite-preview-09-2025"},"sarvam-105b":{"id":"sarvam-105b","name":"Sarvam 105B","description":"Flagship Indian-language reasoning model for enterprise multilingual applications","family":"sarvam","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-18","last_updated":"2026-02-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":4096},"cost":{"input":0.054,"output":0.2124,"cache_read":0.0336},"canonical_model_id":"sarvam/sarvam-105b"},"Meta-Llama-3-1-8B-Instruct-FP8":{"id":"Meta-Llama-3-1-8B-Instruct-FP8","name":"Llama 3.1 8B (decentralized)","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":16384},"cost":{"input":0.02,"output":0.03,"cache_read":0.01}},"gemini-2.5-pro-preview-03-25":{"id":"gemini-2.5-pro-preview-03-25","name":"Gemini 2.5 Pro Preview 0325","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":false,"structured_output":false,"release_date":"2025-03-25","last_updated":"2025-03-25","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":2.5,"output":10,"cache_read":0.25}},"doubao-seed-2-0-lite-260215":{"id":"doubao-seed-2-0-lite-260215","name":"Doubao Seed 2.0 Lite","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"seed","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"input":256000,"output":32000},"cost":{"input":0.25,"output":2,"cache_read":0.0731},"canonical_model_id":"bytedance-seed/seed-2.0-lite"},"auto-model-basic":{"id":"auto-model-basic","name":"Auto model (Basic)","description":"Automatic model router for matching prompts to suitable backends and budgets","family":"auto","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"release_date":"2025-04-16","last_updated":"2024-06-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":1000000},"cost":{"input":9.996,"output":19.992,"cache_read":4.998}},"Qwen3.5-27B-Queen-Derestricted":{"id":"Qwen3.5-27B-Queen-Derestricted","name":"Qwen3.5 27B Queen Derestricted","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"qwen3.5","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-04-30","last_updated":"2026-04-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":16384},"cost":{"input":0.306,"output":0.306,"cache_read":0.153}},"claw-high":{"id":"claw-high","name":"Claw High","description":"Compact GPT model for low-latency assistance and high-volume workloads","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-05-11","last_updated":"2026-05-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.6,"output":1.1,"cache_read":0.2}},"Gemma-4-31B-Dark-Gemistry":{"id":"Gemma-4-31B-Dark-Gemistry","name":"Gemma 4 31B Dark Gemistry","description":"Gemma 4 31B Dark Gemistry is a community creative finetune for reasoning, multimodal chat, expressive writing, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-05-15","last_updated":"2026-05-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.306,"output":0.306}},"Gemma-4-31B-MeroMero-v2":{"id":"Gemma-4-31B-MeroMero-v2","name":"Gemma 4 31B MeroMero v2","description":"Gemma 4 31B MeroMero v2 is a LoRA finetune for emotive dialogue, relationship scenes, creative writing, and multimodal roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-07-29","last_updated":"2026-08-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.45,"cache_read":0.05}},"Gemma-4-31B-Novelist":{"id":"Gemma-4-31B-Novelist","name":"Gemma 4 31B Novelist (ArliAI)","description":"Gemma 4 31B Novelist is a community creative finetune for reasoning, multimodal chat, expressive writing, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-05-15","last_updated":"2026-05-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.306,"output":0.306}},"Gemma-4-31B-Queen":{"id":"Gemma-4-31B-Queen","name":"Gemma 4 31B Queen","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-05-01","last_updated":"2026-05-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":16384},"cost":{"input":0.306,"output":0.306,"cache_read":0.153}},"Gemma-4-31B-Animus-V14.1":{"id":"Gemma-4-31B-Animus-V14.1","name":"Gemma 4 31B Animus V14.1","description":"Gemma 4 31B Animus V14.1 is a community creative finetune for reasoning, multimodal chat, expressive writing, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-05-15","last_updated":"2026-05-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.306,"output":0.306}},"gemma-4-26b-a4b-it-chimeraxheretic":{"id":"gemma-4-26b-a4b-it-chimeraxheretic","name":"Gemma 4 26B A4B Chimera X Heretic","description":"Chimera X Heretic is a Gemma 4 26B A4B multimodal mixture-of-experts fine-tune for creative writing, expressive dialogue, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-10-08","last_updated":"2026-10-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.12,"output":0.38,"cache_read":0.06}},"gemini-2.5-pro":{"id":"gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":1.25,"output":10,"cache_read":0.125,"cache_write":0.375},"canonical_model_id":"google/gemini-2.5-pro"},"gemma-4-26b-a4b-it-darksoul":{"id":"gemma-4-26b-a4b-it-darksoul","name":"Dark Soul","description":"Dark Soul is a Gemma 4 26B A4B multimodal mixture-of-experts fine-tune for creative writing, expressive dialogue, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-07-29","last_updated":"2026-07-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.12,"output":0.38,"cache_read":0.06}},"Gemma-4-31B-Agares-v1":{"id":"Gemma-4-31B-Agares-v1","name":"Gemma 4 31B Agares v1","description":"Gemma 4 31B Agares v1 is a community creative finetune for reasoning, multimodal chat, expressive writing, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-05-15","last_updated":"2026-05-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.306,"output":0.306}},"command-a-reasoning-08-2025":{"id":"command-a-reasoning-08-2025","name":"Cohere Command A (08/2025)","description":"Cohere reasoning model for multilingual enterprise agents, tools, and complex workflows","family":"command-a","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-06-01","release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":8192},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"cohere/command-a-reasoning-08-2025"},"pokee-isaac":{"id":"pokee-isaac","name":"Pokee-Isaac 28B","description":"Pokee-Isaac is a 28B agentic model with a roughly 10-million-token context window, function calling, and OpenAI-compatible structured output. Pokee bills in $0.01 increments, rounding each non-zero request up to the next cent.","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2026-08-04","last_updated":"2026-08-04","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":250000,"input":250000,"output":60000},"cost":{"input":0.15,"output":1,"cache_read":0.075}},"gemini-2.5-flash-preview-05-20":{"id":"gemini-2.5-flash-preview-05-20","name":"Gemini 2.5 Flash 0520","description":"Preview snapshot of Gemini 2.5 Flash with controllable thinking budgets","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-05-20","last_updated":"2025-05-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048000,"input":1048000,"output":65536},"status":"deprecated","cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"google/gemini-2.5-flash-preview-05-20"},"auto-model":{"id":"auto-model","name":"Auto model","description":"Automatic model router for matching prompts to suitable backends and budgets","family":"auto","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"release_date":"2025-04-16","last_updated":"2024-06-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":1000000},"cost":{"input":0,"output":0}},"Gemma-4-31B-AssGuard":{"id":"Gemma-4-31B-AssGuard","name":"Gemma 4 31B AssGuard","description":"Gemma 4 31B AssGuard is a community creative finetune for reasoning, multimodal chat, expressive writing, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-05-15","last_updated":"2026-05-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.306,"output":0.306}},"hermes-low":{"id":"hermes-low","name":"Hermes Low","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"hermes","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-05-11","last_updated":"2026-05-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.6,"output":1.1,"cache_read":0.2,"cache_write":0.08333}},"claw-low":{"id":"claw-low","name":"Claw Low","description":"Compact GPT model for low-latency assistance and high-volume workloads","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-05-11","last_updated":"2026-05-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.6,"output":1.1,"cache_read":0.2,"cache_write":0.08333}},"doubao-seed-2-0-mini-260215":{"id":"doubao-seed-2-0-mini-260215","name":"Doubao Seed 2.0 Mini","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"seed","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"input":256000,"output":32000},"cost":{"input":0.1,"output":0.4845,"cache_read":0.02465},"canonical_model_id":"bytedance-seed/seed-2.0-mini"},"Gemma-4-31B-MeroMero-v2:thinking":{"id":"Gemma-4-31B-MeroMero-v2:thinking","name":"Gemma 4 31B MeroMero v2 Thinking","description":"Gemma 4 31B MeroMero v2 with thinking enabled for more deliberate emotive dialogue, relationship scenes, creative writing, and multimodal roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-07-29","last_updated":"2026-08-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.45,"cache_read":0.05}},"Gemma-4-31B-Gembrain-uncensored-heretic":{"id":"Gemma-4-31B-Gembrain-uncensored-heretic","name":"Gemma 4 31B Gembrain Uncensored Heretic","description":"Gemma 4 31B Gembrain Uncensored Heretic is a community creative finetune for reasoning, multimodal chat, expressive writing, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-05-15","last_updated":"2026-05-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.306,"output":0.306}},"Gemma-4-31B-SDFT-Heretic-RP":{"id":"Gemma-4-31B-SDFT-Heretic-RP","name":"Gemma 4 31B SDFT Heretic RP","description":"Gemma 4 31B SDFT Heretic RP is a community creative finetune for reasoning, multimodal chat, expressive writing, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-05-15","last_updated":"2026-05-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.306,"output":0.306}},"hermes-high":{"id":"hermes-high","name":"Hermes High","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"hermes","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-05-11","last_updated":"2026-05-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.6,"output":1.1,"cache_read":0.2}},"universal-summarizer":{"id":"universal-summarizer","name":"Universal Summarizer","description":"Compact GPT model for low-latency assistance and high-volume workloads","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-12-23","last_updated":"2024-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"input":32768,"output":32768},"cost":{"input":30,"output":30}},"claw-medium":{"id":"claw-medium","name":"Claw Medium","description":"Compact GPT model for low-latency assistance and high-volume workloads","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-05-11","last_updated":"2026-05-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.6,"output":1.1,"cache_read":0.2}},"gemma-4-26b-a4b-it-opusdistill":{"id":"gemma-4-26b-a4b-it-opusdistill","name":"Opus Distill","description":"Opus Distill is a Gemma 4 26B A4B multimodal mixture-of-experts fine-tune for creative writing, expressive dialogue, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-07-29","last_updated":"2026-07-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.12,"output":0.38,"cache_read":0.06}},"Gemma-4-31B-Cognitive-Unshackled":{"id":"Gemma-4-31B-Cognitive-Unshackled","name":"Gemma 4 31B Cognitive Unshackled","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-05-01","last_updated":"2026-05-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":16384},"cost":{"input":0.306,"output":0.306,"cache_read":0.153}},"gemini-2.5-flash-lite":{"id":"gemini-2.5-flash-lite","name":"Gemini 2.5 Flash Lite","description":"Lean Gemini 2.5 lane for cheap multimodal traffic and quick agents","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.1,"output":0.4,"cache_read":0.01},"canonical_model_id":"google/gemini-2.5-flash-lite"},"hermes-medium":{"id":"hermes-medium","name":"Hermes Medium","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"hermes","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-05-11","last_updated":"2026-05-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.6,"output":1.1,"cache_read":0.2}},"gemma-4-26b-a4b-it-shadowsiren":{"id":"gemma-4-26b-a4b-it-shadowsiren","name":"Shadow Siren","description":"Shadow Siren is a Gemma 4 26B A4B multimodal mixture-of-experts fine-tune for creative writing, expressive dialogue, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-07-29","last_updated":"2026-07-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.12,"output":0.38,"cache_read":0.06}},"deepseek-chat-cheaper":{"id":"deepseek-chat-cheaper","name":"DeepSeek V3/Chat Cheaper","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"deepseek","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"release_date":"2025-04-15","last_updated":"2025-04-15","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":8192},"cost":{"input":0.1,"output":0.425,"cache_read":0.05}},"gemini-2.5-flash-preview-04-17:thinking":{"id":"gemini-2.5-flash-preview-04-17:thinking","name":"Gemini 2.5 Flash Preview Thinking","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":false,"structured_output":false,"release_date":"2025-04-17","last_updated":"2025-04-17","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"status":"deprecated","cost":{"input":0.15,"output":3.5,"cache_read":0.015}},"venice-uncensored":{"id":"venice-uncensored","name":"Venice Uncensored","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"venice","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-10-01","last_updated":"2025-02-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":8192},"cost":{"input":0.4,"output":1.8,"cache_read":0.4}},"celeris-1":{"id":"celeris-1","name":"Celeris 1","description":"Celeris 1 is a diffusion language model built for ultra-low-latency classification, extraction, judging, query rewriting, and other short structured responses.","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2026-07-25","last_updated":"2026-07-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"input":8192,"output":8192},"cost":{"input":2,"output":6,"cache_read":1}},"Gemma-4-31B-DarkIdol":{"id":"Gemma-4-31B-DarkIdol","name":"Gemma 4 31B DarkIdol","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-05-01","last_updated":"2026-05-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":16384},"cost":{"input":0.306,"output":0.306,"cache_read":0.153}},"gemma-4-31b-it-darkidol":{"id":"gemma-4-31b-it-darkidol","name":"DarkIdol","description":"DarkIdol is a multimodal Gemma 4 31B creative finetune for expressive dialogue, long-form storytelling, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-07-29","last_updated":"2026-07-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.45,"cache_read":0.05}},"gemini-2.0-pro-reasoner":{"id":"gemini-2.0-pro-reasoner","name":"Gemini 2.0 Pro Reasoner","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gemini","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2025-02-05","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":128000,"output":65536},"cost":{"input":1.292,"output":4.998,"cache_read":0.323}},"deepseek-chat":{"id":"deepseek-chat","name":"DeepSeek V3/Deepseek Chat","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2025-12-01","last_updated":"2026-02-28","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":8192},"cost":{"input":0.1,"output":0.425,"cache_read":0.05},"canonical_model_id":"deepseek/deepseek-chat"},"auto-model-premium":{"id":"auto-model-premium","name":"Auto model (Premium)","description":"Automatic model router for matching prompts to suitable backends and budgets","family":"auto","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"release_date":"2025-04-16","last_updated":"2024-06-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":1000000},"cost":{"input":9.996,"output":19.992,"cache_read":4.998}},"gemini-2.5-flash-preview-09-2025":{"id":"gemini-2.5-flash-preview-09-2025","name":"Gemini 2.5 Flash Preview (09/2025)","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"release_date":"2025-09-25","last_updated":"2025-09-25","modalities":{"input":["text","image","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03}},"gemini-2.5-pro-exp-03-25":{"id":"gemini-2.5-pro-exp-03-25","name":"Gemini 2.5 Pro Experimental 0325","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":false,"structured_output":false,"release_date":"2025-03-25","last_updated":"2025-03-25","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":2.5,"output":10,"cache_read":0.25}},"longcat-2.0":{"id":"longcat-2.0","name":"LongCat 2.0","description":"Meituan LongCat-2.0, a reasoning model with tool calling and a 1M-token context window","family":"longcat","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":131072},"cost":{"input":0.75,"output":3,"cache_read":0.015},"canonical_model_id":"meituan/longcat-2.0"},"gemini-2.5-flash-lite-preview-06-17":{"id":"gemini-2.5-flash-lite-preview-06-17","name":"Gemini 2.5 Flash Lite Preview","description":"First preview of Gemini 2.5 Flash-Lite, the low-cost, low-latency 2.5 model","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"google/gemini-2.5-flash-lite-preview-06-17"},"holo3-35b-a3b:thinking":{"id":"holo3-35b-a3b:thinking","name":"Holo3-35B-A3B Thinking","description":"Compact GPT model for low-latency assistance and high-volume workloads","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2024-01-01","last_updated":"2024-01-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"input":65536,"output":8192},"cost":{"input":0.25,"output":1.8,"cache_read":0.125}},"gemma-4-31b-it-gembrain":{"id":"gemma-4-31b-it-gembrain","name":"Gembrain","description":"Gembrain is a multimodal Gemma 4 31B creative finetune for expressive dialogue, long-form storytelling, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-07-29","last_updated":"2026-07-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.45,"cache_read":0.05}},"gemini-2.5-pro-preview-06-05":{"id":"gemini-2.5-pro-preview-06-05","name":"Gemini 2.5 Pro Preview 0605","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-01-31","release_date":"2025-06-05","last_updated":"2025-06-05","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":2.5,"output":10,"cache_read":0.25},"canonical_model_id":"google/gemini-2.5-pro-preview"},"gemma-4-31b-it-gemsicle":{"id":"gemma-4-31b-it-gemsicle","name":"Gemsicle","description":"Gemsicle is a multimodal Gemma 4 31B creative finetune for expressive dialogue, long-form storytelling, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-07-29","last_updated":"2026-07-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.45,"cache_read":0.05}},"nano-gpt-help":{"id":"nano-gpt-help","name":"NanoGPT Help","description":"Text-only NanoGPT support assistant. Questions are processed by the Help inference provider; do not paste secrets or account credentials. Covers the website, models, API, pricing, memory, media generation, and support.","family":"gpt","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2026-06-06","last_updated":"2026-06-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":6000,"input":6000,"output":512},"cost":{"input":0,"output":0}},"Gemma-4-31B-K1-v5":{"id":"Gemma-4-31B-K1-v5","name":"Gemma 4 31B K1 v5","description":"ArliAI-hosted Gemma 4 31B K1 v5 finetune for plot progression, action scenes, and multimodal roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-05-02","last_updated":"2026-05-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.306,"output":0.306}},"gemma-4-31b-it-isometry":{"id":"gemma-4-31b-it-isometry","name":"Isometry","description":"Isometry is a multimodal Gemma 4 31B creative finetune for expressive dialogue, long-form storytelling, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-07-29","last_updated":"2026-07-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.45,"cache_read":0.05}},"mercury-coder-small":{"id":"mercury-coder-small","name":"Mercury Coder Small","description":"Model by Inception AI. A diffusion large language model that runs incredibly quickly (500+ tokens/second) while matching Claude 3.5 Haiku and GPT-4o-mini. 1st in speed on Copilot arena, and matching 2nd in quality.","family":"mercury","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"input":32768,"output":16384},"cost":{"input":0.25,"output":1,"cache_read":0.125}},"gemini-2.5-pro-preview-05-06":{"id":"gemini-2.5-pro-preview-05-06","name":"Gemini 2.5 Pro Preview 0506","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":false,"structured_output":false,"release_date":"2025-05-06","last_updated":"2025-05-06","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":2.5,"output":10,"cache_read":0.25}},"kimi-k2-instruct-fast":{"id":"kimi-k2-instruct-fast","name":"Kimi K2 0711 Fast","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"kimi-k2","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-07-11","last_updated":"2025-07-11","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":16384},"status":"deprecated","cost":{"input":0.4,"output":1.8,"cache_read":0.2},"canonical_model_id":"moonshotai/kimi-k2-instruct"},"Qwen3.5-27B-BlueStar-v3-Derestricted":{"id":"Qwen3.5-27B-BlueStar-v3-Derestricted","name":"Qwen3.5 27B BlueStar v3 Derestricted","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"qwen3.5","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-04-30","last_updated":"2026-04-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":16384},"cost":{"input":0.306,"output":0.306,"cache_read":0.153}},"gemini-3-pro-image-preview":{"id":"gemini-3-pro-image-preview","type":"chat","name":"Gemini 3 Pro Image","description":"Nano Banana Pro for higher-fidelity image generation and design-heavy edits","family":"gemini-pro","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-11-20","last_updated":"2025-11-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":65536,"input":65536,"output":32768},"cost":{"input":2,"output":12,"cache_read":0.2},"canonical_model_id":"google/gemini-3-pro-image-preview"},"gemma-4-12b-it-starry-ocean":{"id":"gemma-4-12b-it-starry-ocean","name":"Gemma 4 12B Starry Ocean","description":"Gemma 4 12B Starry Ocean is an open-weight merge for storytelling, roleplay, and creative writing. It supports image understanding, tool calling, optional reasoning, and a 131,072-token context window.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":131072},"cost":{"input":0.05,"output":0.25,"cache_read":0.025}},"gemini-2.5-flash-preview-04-17":{"id":"gemini-2.5-flash-preview-04-17","name":"Gemini 2.5 Flash Preview","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":false,"structured_output":false,"release_date":"2025-04-17","last_updated":"2025-04-17","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"status":"deprecated","cost":{"input":0.15,"output":0.6,"cache_read":0.015}},"gemini-exp-1206":{"id":"gemini-exp-1206","name":"Gemini 2.0 Pro 1206","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gemini","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":2097152,"input":2097152,"output":8192},"cost":{"input":1.258,"output":4.998,"cache_read":0.629}},"gemini-2.5-flash-nothinking":{"id":"gemini-2.5-flash-nothinking","name":"Gemini 2.5 Flash (No Thinking)","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gemini","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-06-05","last_updated":"2025-06-05","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03}},"gemma-4-31b-it-scarlet":{"id":"gemma-4-31b-it-scarlet","name":"Gemma 4 31B Scarlet","description":"Scarlet is a multimodal Gemma 4 31B creative finetune for expressive dialogue, long-form storytelling, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-10-08","last_updated":"2026-10-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.45,"cache_read":0.05}},"GLM-4.6-Derestricted-v5":{"id":"GLM-4.6-Derestricted-v5","name":"GLM 4.6 Derestricted v5","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":8192},"cost":{"input":0.4,"output":1.5,"cache_read":0.2}},"Gemma-4-31B-Fabled":{"id":"Gemma-4-31B-Fabled","name":"Gemma 4 31B Fabled (ArliAI)","description":"ArliAI-hosted Gemma 4 31B Fabled finetune for mythic narrative writing, adventure scenes, and multimodal roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-05-02","last_updated":"2026-05-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.306,"output":0.306}},"synth-2.5-flash":{"id":"synth-2.5-flash","name":"Synth 2.5 Flash Preview","description":"Synth 2.5 Flash Preview is a low-cost text model designed for role-play, character dialogue, and collaborative storytelling.","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2026-09-05","last_updated":"2026-09-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":30000,"input":30000,"output":30000},"cost":{"input":0.03,"output":0.1}},"Gemma-4-26B-A4B-MeroMero":{"id":"Gemma-4-26B-A4B-MeroMero","name":"Gemma 4 26B A4B MeroMero","description":"Gemma 4 26B A4B MeroMero is an NVFP4 multimodal mixture-of-experts fine-tune for emotive dialogue, relationship scenes, creative writing, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-07-29","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.12,"output":0.38,"cache_read":0.06}},"mistral-code-agent-latest":{"id":"mistral-code-agent-latest","name":"Mistral Code Agent Latest","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"mistral","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.4,"output":2,"cache_read":0.2}},"Gemma-4-31B-GarnetV2":{"id":"Gemma-4-31B-GarnetV2","name":"Gemma 4 31B Garnet V2","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-05-01","last_updated":"2026-05-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":16384},"cost":{"input":0.306,"output":0.306,"cache_read":0.153}},"phi-4-mini-instruct":{"id":"phi-4-mini-instruct","name":"Phi 4 Mini","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"phi","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-02-26","last_updated":"2025-02-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":16384},"cost":{"input":0.17,"output":0.68,"cache_read":0.085},"canonical_model_id":"microsoft/phi-4-mini"},"Gemma-4-31B-Claude-4.6-Opus-Reasoning-Distilled":{"id":"Gemma-4-31B-Claude-4.6-Opus-Reasoning-Distilled","name":"Gemma 4 31B Claude 4.6 Opus Reasoning Distilled","description":"O-series reasoning model for hard analysis, math, coding, and planning","family":"claude","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-05-01","last_updated":"2026-05-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":16384},"cost":{"input":0.306,"output":0.306,"cache_read":0.0306,"cache_write":0.3825}},"Qwen3.5-27B-Claude-4.6-Opus-Reasoning-Distilled-Derestricted-Lite":{"id":"Qwen3.5-27B-Claude-4.6-Opus-Reasoning-Distilled-Derestricted-Lite","name":"Qwen3.5 27B Claude 4.6 Opus Reasoning Distilled Derestricted Lite","description":"Qwen3.5 27B Claude 4.6 Opus Reasoning Distilled Derestricted Lite is a lighter-tuned community finetune for responsive multimodal chat, expressive writing, and roleplay.","family":"qwen3.5","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-05-15","last_updated":"2026-05-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.306,"output":0.306,"cache_read":0.0306,"cache_write":0.3825}},"qwen3-vl-235b-a22b-instruct-original":{"id":"qwen3-vl-235b-a22b-instruct-original","name":"Qwen3 VL 235B A22B Instruct Original","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"qwen","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":32768},"cost":{"input":0.3,"output":1.9,"cache_read":0.15},"canonical_model_id":"alibaba/qwen3-vl-235b-a22b-instruct"},"mistral-code-latest":{"id":"mistral-code-latest","name":"Mistral Code Latest","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"mistral","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"input":256000,"output":32768},"cost":{"input":0.3,"output":0.9,"cache_read":0.15}},"phi-4-multimodal-instruct":{"id":"phi-4-multimodal-instruct","name":"Phi 4 Multimodal","description":"Compact Microsoft multimodal model for text, image, and speech understanding","family":"phi","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-02-26","last_updated":"2025-02-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":16384},"cost":{"input":0.07,"output":0.11,"cache_read":0.035},"canonical_model_id":"microsoft/phi-4-multimodal-instruct"},"gemma-4-31b-it-fabled":{"id":"gemma-4-31b-it-fabled","name":"Fabled","description":"Fabled is a multimodal Gemma 4 31B creative finetune for expressive dialogue, long-form storytelling, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-07-29","last_updated":"2026-07-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.45,"cache_read":0.05}},"Gemma-4-31B-MeroMero":{"id":"Gemma-4-31B-MeroMero","name":"Gemma 4 31B MeroMero","description":"Gemma 4 31B MeroMero is a community creative finetune for emotive dialogue, relationship scenes, and multimodal roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-05-02","last_updated":"2026-05-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.306,"output":0.306}},"gemma-4-12b-it-semancer":{"id":"gemma-4-12b-it-semancer","name":"Gemma 4 12B Semancer","description":"Gemma 4 12B Semancer is an open-weight roleplay finetune with image understanding, tool calling, optional reasoning, and a 131,072-token context window.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-09-09","last_updated":"2026-09-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":32768},"cost":{"input":0.05,"output":0.25,"cache_read":0.025}},"Qwen3.5-27B-Blossom-V6.4-Derestricted":{"id":"Qwen3.5-27B-Blossom-V6.4-Derestricted","name":"Qwen3.5 27B Blossom V6.4 Derestricted","description":"Qwen3.5 27B Blossom V6.4 Derestricted is a community creative finetune for reasoning, multimodal chat, expressive writing, and roleplay.","family":"qwen3.5","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-05-15","last_updated":"2026-05-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.306,"output":0.306}},"gemma-4-26b-a4b-it-moonlight":{"id":"gemma-4-26b-a4b-it-moonlight","name":"Moonlight Dusk","description":"Moonlight Dusk is a Gemma 4 26B A4B multimodal mixture-of-experts fine-tune for creative writing, expressive dialogue, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-07-29","last_updated":"2026-07-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.12,"output":0.38,"cache_read":0.06}},"doubao-seed-2-0-code-preview-260215":{"id":"doubao-seed-2-0-code-preview-260215","name":"Doubao Seed 2.0 Code Preview","description":"ByteDance Seed coding model for multimodal software engineering and long-running agents","family":"seed","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"input":256000,"output":128000},"cost":{"input":0.782,"output":3.893,"cache_read":0.391},"canonical_model_id":"bytedance-seed/seed-2.0-code"},"gemma-4-26b-a4b-it-chimerax":{"id":"gemma-4-26b-a4b-it-chimerax","name":"Chimera X","description":"Chimera X is a Gemma 4 26B A4B multimodal mixture-of-experts fine-tune for creative writing, expressive dialogue, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-07-29","last_updated":"2026-07-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.12,"output":0.38,"cache_read":0.06}},"fastgpt":{"id":"fastgpt","name":"Web Answer","description":"Compact GPT model for low-latency assistance and high-volume workloads","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-12-23","last_updated":"2024-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"input":32768,"output":32768},"cost":{"input":7.5,"output":7.5}},"Gemma-4-31B-StyleTune":{"id":"Gemma-4-31B-StyleTune","name":"Gemma 4 31B StyleTune","description":"Gemma 4 31B StyleTune is a community creative finetune for reasoning, multimodal chat, expressive writing, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-05-15","last_updated":"2026-05-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.306,"output":0.306}},"gemini-2.0-pro-exp-02-05":{"id":"gemini-2.0-pro-exp-02-05","name":"Gemini 2.0 Pro 0205","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gemini","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-02-05","last_updated":"2025-02-05","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":2097152,"input":2097152,"output":8192},"cost":{"input":1.989,"output":7.956,"cache_read":0.49725}},"gemma-4-26b-a4b-it-luminous":{"id":"gemma-4-26b-a4b-it-luminous","name":"Luminous Mirror","description":"Luminous Mirror is a Gemma 4 26B A4B multimodal mixture-of-experts fine-tune for creative writing, expressive dialogue, and roleplay.","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"release_date":"2026-07-29","last_updated":"2026-07-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.12,"output":0.38,"cache_read":0.06}},"gemini-2.5-flash-preview-09-2025-thinking":{"id":"gemini-2.5-flash-preview-09-2025-thinking","name":"Gemini 2.5 Flash Preview (09/2025) – Thinking","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"release_date":"2025-09-25","last_updated":"2025-09-25","modalities":{"input":["text","image","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03}},"gemma-4-31b-it-novelist":{"id":"gemma-4-31b-it-novelist","name":"Novelist","description":"Novelist is a multimodal Gemma 4 31B creative finetune for expressive dialogue, long-form storytelling, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-07-29","last_updated":"2026-07-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.45,"cache_read":0.05}},"Gemma-4-31B-Isometry-RP":{"id":"Gemma-4-31B-Isometry-RP","name":"Gemma 4 31B Isometry RP","description":"Gemma 4 31B Isometry RP is a community creative finetune for reasoning, multimodal chat, expressive writing, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-05-15","last_updated":"2026-05-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.306,"output":0.306}},"Gemma-4-31B-Gembrain-X-Core":{"id":"Gemma-4-31B-Gembrain-X-Core","name":"Gemma 4 31B Gembrain X Core","description":"Gemma 4 31B Gembrain X Core is a community creative finetune for reasoning, multimodal chat, expressive writing, and roleplay.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-05-15","last_updated":"2026-05-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.306,"output":0.306}},"auto-model-standard":{"id":"auto-model-standard","name":"Auto model (Standard)","description":"Automatic model router for matching prompts to suitable backends and budgets","family":"auto","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"release_date":"2025-04-16","last_updated":"2024-06-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":1000000},"cost":{"input":9.996,"output":19.992,"cache_read":4.998}},"Qwen3.5-27B-Claude-4.6-Opus-Reasoning-Distilled-Derestricted":{"id":"Qwen3.5-27B-Claude-4.6-Opus-Reasoning-Distilled-Derestricted","name":"Qwen3.5 27B Claude 4.6 Opus Reasoning Distilled Derestricted","description":"Qwen3.5 27B Claude 4.6 Opus Reasoning Distilled Derestricted is a community creative finetune for reasoning, multimodal chat, expressive writing, and roleplay.","family":"qwen3.5","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-05-15","last_updated":"2026-05-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.306,"output":0.306,"cache_read":0.0306,"cache_write":0.3825}},"deepseek-v3-0324":{"id":"deepseek-v3-0324","name":"DeepSeek Chat 0324","description":"March 2025 checkpoint of DeepSeek-V3 with improved reasoning and coding","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-03-24","last_updated":"2025-03-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":8192},"cost":{"input":0.2,"output":0.77,"cache_read":0.135},"canonical_model_id":"deepseek/deepseek-v3-0324"},"doubao-seed-2-0-pro-260215":{"id":"doubao-seed-2-0-pro-260215","name":"Doubao Seed 2.0 Pro","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"seed","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"input":256000,"output":128000},"cost":{"input":0.782,"output":3.876,"cache_read":0.391},"canonical_model_id":"bytedance-seed/seed-2.0-pro"},"synth-2.5-pro":{"id":"synth-2.5-pro","name":"Synth 2.5 Pro Preview","description":"Synth 2.5 Pro Preview is a low-cost text model designed for role-play, character dialogue, and collaborative storytelling.","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2026-09-05","last_updated":"2026-09-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":30000,"input":30000,"output":30000},"cost":{"input":0.1,"output":0.2}},"longcat-2.0:thinking":{"id":"longcat-2.0:thinking","name":"LongCat 2.0 Thinking","description":"Meituan LongCat-2.0, a reasoning model with tool calling and a 1M-token context window","family":"longcat","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":131072},"cost":{"input":0.75,"output":3,"cache_read":0.015},"canonical_model_id":"meituan/longcat-2.0"},"gemini-2.5-flash-lite-preview-09-2025":{"id":"gemini-2.5-flash-lite-preview-09-2025","name":"Gemini 2.5 Flash Lite Preview (09/2025)","description":"September 2025 preview of Gemini 2.5 Flash-Lite with better instruction following and multimodal quality","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-09-25","last_updated":"2025-09-25","modalities":{"input":["text","image","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"status":"deprecated","cost":{"input":0.1,"output":0.4,"cache_read":0.01},"canonical_model_id":"google/gemini-2.5-flash-lite-preview-09-2025"},"anthropic/claude-sonnet-4.6:thinking":{"id":"anthropic/claude-sonnet-4.6:thinking","name":"Claude Sonnet 4.6 Thinking","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"anthropic/claude-sonnet-5:thinking":{"id":"anthropic/claude-sonnet-5:thinking","name":"Claude Sonnet 5 Thinking","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"anthropic/claude-opus-4.6:thinking:medium":{"id":"anthropic/claude-opus-4.6:thinking:medium","name":"Claude 4.6 Opus Thinking Medium","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"anthropic/claude-sonnet-latest":{"id":"anthropic/claude-sonnet-latest","name":"Claude Sonnet Latest","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-03-01","last_updated":"2026-03-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5}},"anthropic/claude-opus-4.8:thinking":{"id":"anthropic/claude-opus-4.8:thinking","name":"Claude Opus 4.8 Thinking","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic/claude-opus-4.6":{"id":"anthropic/claude-opus-4.6","name":"Claude 4.6 Opus","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"anthropic/claude-opus-4.7":{"id":"anthropic/claude-opus-4.7","name":"Claude 4.7 Opus","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"anthropic/claude-opus-4.8":{"id":"anthropic/claude-opus-4.8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic/claude-opus-4.5":{"id":"anthropic/claude-opus-4.5","name":"Claude 4.5 Opus","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"anthropic/claude-opus-4.1:thinking:1024":{"id":"anthropic/claude-opus-4.1:thinking:1024","name":"Claude 4.1 Opus Thinking (1K)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":200000,"output":32000},"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-1"},"anthropic/claude-fable-latest":{"id":"anthropic/claude-fable-latest","name":"Claude Fable Latest","description":"Compatibility alias for Claude Fable.","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5}},"anthropic/claude-opus-5.5":{"id":"anthropic/claude-opus-5.5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"anthropic/claude-haiku-4.5":{"id":"anthropic/claude-haiku-4.5","name":"Claude Haiku 4.5","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"anthropic/claude-sonnet-5":{"id":"anthropic/claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"anthropic/claude-sonnet-4.5":{"id":"anthropic/claude-sonnet-4.5","name":"Claude Sonnet 4.5","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"anthropic/claude-opus-4.1:thinking:8192":{"id":"anthropic/claude-opus-4.1:thinking:8192","name":"Claude 4.1 Opus Thinking (8K)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":200000,"output":32000},"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-1"},"anthropic/claude-fable-5.2":{"id":"anthropic/claude-fable-5.2","name":"Claude Fable 5.2","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-2"},"anthropic/claude-opus-4.1:thinking":{"id":"anthropic/claude-opus-4.1:thinking","name":"Claude 4.1 Opus Thinking","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":200000,"output":32000},"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-1"},"anthropic/claude-sonnet-4.5:thinking":{"id":"anthropic/claude-sonnet-4.5:thinking","name":"Claude Sonnet 4.5 Thinking","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"anthropic/claude-opus-4.6:thinking:low":{"id":"anthropic/claude-opus-4.6:thinking:low","name":"Claude 4.6 Opus Thinking Low","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"anthropic/claude-fable-5.1":{"id":"anthropic/claude-fable-5.1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"anthropic/claude-opus-4.1":{"id":"anthropic/claude-opus-4.1","name":"Claude 4.1 Opus","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":200000,"output":32000},"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-1"},"anthropic/claude-opus-4.6:thinking:max":{"id":"anthropic/claude-opus-4.6:thinking:max","name":"Claude 4.6 Opus Thinking Max","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"anthropic/claude-opus-4.5:thinking":{"id":"anthropic/claude-opus-4.5:thinking","name":"Claude 4.5 Opus Thinking","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"anthropic/claude-sonnet-4.6":{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"anthropic/claude-fable-5":{"id":"anthropic/claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"anthropic/claude-opus-4.1:thinking:32768":{"id":"anthropic/claude-opus-4.1:thinking:32768","name":"Claude 4.1 Opus Thinking (32K)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":200000,"output":32000},"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-1"},"anthropic/claude-opus-4.7:thinking":{"id":"anthropic/claude-opus-4.7:thinking","name":"Claude 4.7 Opus Thinking","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"anthropic/claude-opus-5":{"id":"anthropic/claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"anthropic/claude-opus-latest":{"id":"anthropic/claude-opus-latest","name":"Claude Opus Latest","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-03-29","last_updated":"2026-03-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5}},"anthropic/claude-sonnet-5.5:thinking":{"id":"anthropic/claude-sonnet-5.5:thinking","name":"Claude Sonnet 5.5 Thinking","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"anthropic/claude-sonnet-5.5":{"id":"anthropic/claude-sonnet-5.5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"anthropic/claude-haiku-5.5":{"id":"anthropic/claude-haiku-5.5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"anthropic/claude-haiku-4.5:thinking":{"id":"anthropic/claude-haiku-4.5:thinking","name":"Claude Haiku 4.5 Thinking","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"anthropic/claude-haiku-latest":{"id":"anthropic/claude-haiku-latest","name":"Claude Haiku Latest","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-03-29","last_updated":"2026-03-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]}},"anthropic/claude-opus-4.6:thinking":{"id":"anthropic/claude-opus-4.6:thinking","name":"Claude 4.6 Opus Thinking","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"aion-labs/aion-3.0":{"id":"aion-labs/aion-3.0","name":"AionLabs: Aion 3.0","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-05-05","last_updated":"2026-05-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"input":131072,"output":32768},"cost":{"input":3,"output":6,"cache_read":0.75},"canonical_model_id":"aion-labs/aion-3.0"},"aion-labs/aion-3.5-mini":{"id":"aion-labs/aion-3.5-mini","name":"AionLabs: Aion 3.5 Mini","description":"A GLM-family collaborative generation model tuned for immersive roleplay and storytelling, with stronger narrative structure, tension, conflict, and nuanced mature themes.","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-09-23","last_updated":"2026-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.7,"output":1.4,"cache_read":0.18}},"aion-labs/aion-2.0":{"id":"aion-labs/aion-2.0","name":"AionLabs: Aion-2.0","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-21","last_updated":"2025-12-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"input":131072,"output":32768},"cost":{"input":0.8,"output":1.6,"cache_read":0.2},"canonical_model_id":"aion-labs/aion-2.0"},"aion-labs/aion-3.0-mini":{"id":"aion-labs/aion-3.0-mini","name":"AionLabs: Aion 3.0 Mini","description":"Efficient model for low-latency assistance, extraction, and routine automation","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-05-14","last_updated":"2026-05-14","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"input":131072,"output":32768},"cost":{"input":0.7,"output":1.4,"cache_read":0.18},"canonical_model_id":"aion-labs/aion-3.0-mini"},"aion-labs/aion-rp-llama-3.1-8b":{"id":"aion-labs/aion-rp-llama-3.1-8b","name":"Llama 3.1 8b (uncensored)","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-12-31","release_date":"2025-02-04","last_updated":"2025-02-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":16384},"cost":{"input":0.8,"output":1.6,"cache_read":0.4},"canonical_model_id":"aion-labs/aion-rp-llama-3.1-8b"},"aion-labs/aion-3.5":{"id":"aion-labs/aion-3.5","name":"AionLabs: Aion 3.5","description":"A GLM-family collaborative generation model tuned for immersive roleplay and storytelling, with stronger narrative structure, tension, conflict, and nuanced mature themes.","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-09-23","last_updated":"2026-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":3,"output":6,"cache_read":0.75}},"Sao10K/L3-8B-Stheno-v3.2":{"id":"Sao10K/L3-8B-Stheno-v3.2","name":"Sao10K Stheno 8b","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-11-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"input":16384,"output":8192},"cost":{"input":0.2006,"output":0.2006,"cache_read":0.1003}},"Sao10K/L3.1-70B-Hanami-x1":{"id":"Sao10K/L3.1-70B-Hanami-x1","name":"Llama 3.1 70B Hanami","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":16384},"cost":{"input":0.493,"output":0.493,"cache_read":0.2465}},"Sao10K/L3.1-70B-Euryale-v2.2":{"id":"Sao10K/L3.1-70B-Euryale-v2.2","name":"Llama 3.1 70B Euryale","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12-31","release_date":"2024-08-28","last_updated":"2024-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":20480,"input":20480,"output":16384},"cost":{"input":0.306,"output":0.357,"cache_read":0.153},"canonical_model_id":"sao10k/l3.1-euryale-70b"},"Sao10K/L3.3-70B-Euryale-v2.3":{"id":"Sao10K/L3.3-70B-Euryale-v2.3","name":"Llama 3.3 70B Euryale","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12-31","release_date":"2024-12-18","last_updated":"2024-12-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":20480,"input":20480,"output":16384},"cost":{"input":0.493,"output":0.493,"cache_read":0.2465},"canonical_model_id":"sao10k/l3.3-euryale-70b"},"baseten/Kimi-K2-Instruct-FP4":{"id":"baseten/Kimi-K2-Instruct-FP4","name":"Kimi K2 0711 Instruct FP4","description":"Kimi model for long-context chat, coding, and agentic reasoning","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2025-07-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":131072},"status":"deprecated","cost":{"input":0.4,"output":1.8,"cache_read":0.2}},"TEE/glm-5.2:thinking":{"id":"TEE/glm-5.2:thinking","name":"GLM 5.2 Thinking TEE","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":1.25,"output":3.95,"cache_read":0.125},"canonical_model_id":"zhipuai/glm-5.2"},"TEE/glm-5.2":{"id":"TEE/glm-5.2","name":"GLM 5.2 TEE","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":1.25,"output":3.95,"cache_read":0.125},"canonical_model_id":"zhipuai/glm-5.2"},"TEE/kimi-k3.1-pro":{"id":"TEE/kimi-k3.1-pro","name":"Kimi K3.1 Pro TEE","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":4,"output":20,"cache_read":0.4},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"TEE/kimi-k2.6":{"id":"TEE/kimi-k2.6","name":"Kimi K2.6 TEE","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":65536},"cost":{"input":0.39,"output":1.8,"cache_read":0.039},"canonical_model_id":"moonshotai/kimi-k2.6"},"TEE/glm-5.1-thinking":{"id":"TEE/glm-5.1-thinking","name":"GLM 5.1 Thinking TEE","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"input":202752,"output":65535},"cost":{"input":0.9,"output":2.9,"cache_read":0.09},"canonical_model_id":"zhipuai/glm-5.1"},"TEE/gemma-4-26b-a4b-uncensored":{"id":"TEE/gemma-4-26b-a4b-uncensored","name":"Gemma 4 26B A4B Uncensored TEE","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"release_date":"2026-05-23","last_updated":"2026-05-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"input":65536,"output":65536},"cost":{"input":0.15,"output":0.7,"cache_read":0.05}},"TEE/llama3-3-70b":{"id":"TEE/llama3-3-70b","name":"Llama 3.3 70B","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":16384},"cost":{"input":1.75,"output":2.75,"cache_read":1.75},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"TEE/kimi-k3":{"id":"TEE/kimi-k3","name":"Kimi K3 TEE","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":65535},"cost":{"input":1.85,"output":9.5,"cache_read":0.185},"canonical_model_id":"moonshotai/kimi-k3"},"TEE/qwen3.8-27b":{"id":"TEE/qwen3.8-27b","name":"Qwen3.8 27B TEE","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.2,"output":2.5,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3.8-27b"},"TEE/glm-5.1":{"id":"TEE/glm-5.1","name":"GLM 5.1 TEE","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"input":202752,"output":65535},"cost":{"input":0.9,"output":2.9,"cache_read":0.09},"canonical_model_id":"zhipuai/glm-5.1"},"TEE/deepseek-v4.1-flash":{"id":"TEE/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash TEE","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":384000},"cost":{"input":0.6,"output":1.45,"cache_read":0.01},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"TEE/gemma4-31b:thinking":{"id":"TEE/gemma4-31b:thinking","name":"Gemma 4 31B Thinking TEE","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":131072},"cost":{"input":0.12,"output":0.37,"cache_read":0.012},"canonical_model_id":"google/gemma-4-31b-it"},"TEE/glm-5.3":{"id":"TEE/glm-5.3","name":"GLM 5.3 TEE","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"TEE/glm-5.3-flash":{"id":"TEE/glm-5.3-flash","name":"GLM 5.3 Flash TEE","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"TEE/gemma-4-31b-it":{"id":"TEE/gemma-4-31b-it","name":"Gemma 4 31B IT TEE","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.15,"output":0.46,"cache_read":0.075},"canonical_model_id":"google/gemma-4-31b-it"},"TEE/qwen3.6-27b":{"id":"TEE/qwen3.6-27b","name":"Qwen3.6 27B TEE","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":65536},"cost":{"input":0.32,"output":3.25,"cache_read":0.03},"canonical_model_id":"alibaba/qwen3.6-27b"},"TEE/qwen3.6-35b-a3b":{"id":"TEE/qwen3.6-35b-a3b","name":"Qwen3.6 35B A3B TEE","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.2,"output":1.27,"cache_read":0.056},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"TEE/deepseek-v3.2":{"id":"TEE/deepseek-v3.2","name":"DeepSeek V3.2 TEE","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes, sparse attention, and tool-use","family":"deepseek","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":164000,"input":164000,"output":65536},"cost":{"input":1,"output":1,"cache_read":0.5},"canonical_model_id":"deepseek/deepseek-v3.2"},"TEE/gpt-oss-120b":{"id":"TEE/gpt-oss-120b","name":"GPT-OSS 120B TEE","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":16384},"cost":{"input":0.15,"output":0.6,"cache_read":0.15},"canonical_model_id":"openai/gpt-oss-120b"},"TEE/gemma4-31b":{"id":"TEE/gemma4-31b","name":"Gemma 4 31B","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":131072},"cost":{"input":0.12,"output":0.37,"cache_read":0.012},"canonical_model_id":"google/gemma-4-31b-it"},"anthracite-org/magnum-v2-72b":{"id":"anthracite-org/magnum-v2-72b","name":"Magnum V2 72B","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-07-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"input":16384,"output":8192},"cost":{"input":2.006,"output":2.992,"cache_read":1.003}},"anthracite-org/magnum-v4-72b":{"id":"anthracite-org/magnum-v4-72b","name":"Magnum v4 72B","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-06-30","release_date":"2024-10-22","last_updated":"2024-10-22","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"input":16384,"output":8192},"cost":{"input":2.65,"output":5.3,"cache_read":1.003},"canonical_model_id":"anthracite-org/magnum-v4-72b"},"baidu/ernie-light-dt-1.0-intl":{"id":"baidu/ernie-light-dt-1.0-intl","name":"ERNIE Light DT 1.0 (Intl)","description":"ERNIE Light DT 1.0 (Intl) is Baidu's text model with Baidu Sparse Attention for working with long conversations and documents. It supports tool calling, structured output, a 1,024,000-token context window, and up to 131,072 output tokens. Choose max, high, or low reasoning effort, or none to disable reasoning.","family":"ernie","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-11-11","last_updated":"2026-11-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1024000,"input":1024000,"output":131072},"cost":{"input":1.3,"output":4.5,"cache_read":0.13}},"inflatebot/MN-12B-Mag-Mell-R1":{"id":"inflatebot/MN-12B-Mag-Mell-R1","name":"Mag Mell R1","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-nemo","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-07-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"input":16384,"output":8192},"cost":{"input":0.493,"output":0.493,"cache_read":0.2465}},"amazon/nova-pro-v1":{"id":"amazon/nova-pro-v1","name":"Amazon Nova Pro 1.0","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"nova-pro","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-10-31","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"input":300000,"output":32000},"cost":{"input":0.799,"output":3.196,"cache_read":0.3995},"canonical_model_id":"amazon/nova-pro-v1"},"amazon/nova-2-lite-v1":{"id":"amazon/nova-2-lite-v1","name":"Amazon Nova 2 Lite","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"nova","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-10","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":65535},"cost":{"input":0.51,"output":4.25,"cache_read":0.255},"canonical_model_id":"amazon/nova-2-lite-v1"},"amazon/nova-lite-v1":{"id":"amazon/nova-lite-v1","name":"Amazon Nova Lite 1.0","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-lite","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-10-31","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"input":300000,"output":5120},"cost":{"input":0.0595,"output":0.238,"cache_read":0.02975},"canonical_model_id":"amazon/nova-lite-v1"},"aisingapore/gemma-sea-lion-v4-27b-it":{"id":"aisingapore/gemma-sea-lion-v4-27b-it","name":"Gemma SEA-LION v4 27B","description":"Gemma 3 27B tuned by AI Singapore for Southeast Asian languages and instruction following","family":"gemma","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":128000},"cost":{"input":0.24,"output":0.48},"canonical_model_id":"aisingapore/gemma-sea-lion-v4-27b-it"},"aisingapore/qwen-sea-lion-v4-32b-it":{"id":"aisingapore/qwen-sea-lion-v4-32b-it","name":"Qwen SEA-LION v4 32B","description":"AI Singapore’s Qwen-based multilingual model, adapted for Southeast Asian languages and cultural contexts. Supports text chat and tool calling with a 128K context window.","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":131072},"cost":{"input":0.3,"output":0.6}},"meituan/longcat-2.5-preview":{"id":"meituan/longcat-2.5-preview","name":"LongCat 2.5 Preview","description":"Meituan's multimodal reasoning model for coding and agent tasks, with image understanding and a 1M-token context window","family":"longcat","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":false,"release_date":"2026-09-25","last_updated":"2026-09-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":131072},"cost":{"input":0.7875,"output":3.0975,"cache_read":0.01575},"canonical_model_id":"meituan/longcat-2.5-preview"},"particle-ai/particle-1":{"id":"particle-ai/particle-1","name":"Particle-1","description":"Particle-1 is Particle AI’s coding and data-engineering model, post-trained on DeepSeek V4.1 Flash. It accepts text and images, supports tool calling, and offers a shared 1,048,576-token context window with up to 131,072 output tokens, including reasoning. Reasoning defaults to high and can be turned off. JSON formatting is supported; strict JSON-schema enforcement is not guaranteed.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"release_date":"2026-10-29","last_updated":"2026-10-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.25,"output":1,"cache_read":0.03}},"aleph-alpha/kolibri-1":{"id":"aleph-alpha/kolibri-1","name":"Kolibri 1","description":"Aleph Alpha's German and English mixture-of-experts reasoning model (78B total, 3.46B active) for chat, RAG and agents","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-06-18","release_date":"2026-10-03","last_updated":"2026-10-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":943718},"cost":{"input":0.168,"output":0.588,"cache_read":0.0987},"canonical_model_id":"aleph-alpha/kolibri-1"},"abacusai/Dracarys-72B-Instruct":{"id":"abacusai/Dracarys-72B-Instruct","name":"Llama 3.1 70B Dracarys 2","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-08-02","last_updated":"2025-08-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":8192},"cost":{"input":0.493,"output":0.493,"cache_read":0.2465}},"x-ai/grok-4.5":{"id":"x-ai/grok-4.5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"input":500000,"output":450000},"cost":{"input":2,"output":6,"cache_read":0.3},"canonical_model_id":"xai/grok-4.5"},"x-ai/grok-4.3":{"id":"x-ai/grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":900000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2},"canonical_model_id":"xai/grok-4.3"},"x-ai/grok-4.7":{"id":"x-ai/grok-4.7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"input":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.7"},"x-ai/grok-latest":{"id":"x-ai/grok-latest","name":"Grok Latest","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"release_date":"2026-05-03","last_updated":"2026-05-03","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"input":500000,"output":450000},"cost":{"input":2,"output":6,"cache_read":0.5}},"x-ai/grok-4.20":{"id":"x-ai/grok-4.20","name":"Grok 4.20","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"release_date":"2026-03-31","last_updated":"2026-03-31","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"input":2000000,"output":131072},"cost":{"input":1.25,"output":2.5,"cache_read":0.2}},"x-ai/grok-4.6":{"id":"x-ai/grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"input":500000,"output":450000},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.6"},"x-ai/grok-build-0.1":{"id":"x-ai/grok-build-0.1","name":"Grok Build 0.1","description":"Fast Grok coding model tuned for agentic engineering and iterative edits","family":"grok-build","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"input":256000,"output":230400},"cost":{"input":1,"output":2,"cache_read":0.2},"canonical_model_id":"xai/grok-build-0.1"},"x-ai/grok-4.20-multi-agent":{"id":"x-ai/grok-4.20-multi-agent","name":"Grok 4.20 Multi-Agent","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"release_date":"2026-03-31","last_updated":"2026-03-31","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"input":2000000,"output":131072},"cost":{"input":1.25,"output":2.5,"cache_read":0.2}},"Steelskull/L3.3-Electra-R1-70b":{"id":"Steelskull/L3.3-Electra-R1-70b","name":"Steelskull Electra R1 70b","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":16384},"cost":{"input":0.69989,"output":0.69989,"cache_read":0.349945}},"Steelskull/L3.3-Nevoria-R1-70b":{"id":"Steelskull/L3.3-Nevoria-R1-70b","name":"Steelskull Nevoria R1 70b","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":16384},"cost":{"input":0.493,"output":0.493,"cache_read":0.2465}},"Steelskull/L3.3-MS-Nevoria-70b":{"id":"Steelskull/L3.3-MS-Nevoria-70b","name":"Steelskull Nevoria 70b","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":16384},"cost":{"input":0.493,"output":0.493,"cache_read":0.2465}},"Steelskull/L3.3-Cu-Mai-R1-70b":{"id":"Steelskull/L3.3-Cu-Mai-R1-70b","name":"Llama 3.3 70B Cu Mai","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":16384},"cost":{"input":0.493,"output":0.493,"cache_read":0.2465}},"failspy/Meta-Llama-3-70B-Instruct-abliterated-v3.5":{"id":"failspy/Meta-Llama-3-70B-Instruct-abliterated-v3.5","name":"Llama 3 70B abliterated","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-07-26","last_updated":"2025-07-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"input":8192,"output":8192},"cost":{"input":0.7,"output":0.7,"cache_read":0.35}},"deepseek/deepseek-v4-pro:thinking":{"id":"deepseek/deepseek-v4-pro:thinking","name":"DeepSeek V4 Pro (Thinking)","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":384000},"cost":{"input":0.95124,"output":1.79607,"cache_read":0.17925},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-v4.1-flash-uncensored:thinking":{"id":"deepseek/deepseek-v4.1-flash-uncensored:thinking","name":"DeepSeek V4.1 Flash Uncensored Thinking","description":"A lower-refusal finetune of DeepSeek V4.1 Flash with text and image input, optional reasoning, and tool calling. Supports a context window of up to 1M tokens.","family":"deepseek","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-10-01","last_updated":"2026-10-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.33,"output":1.32,"cache_read":0.00825}},"deepseek/deepseek-v4-flash-0423":{"id":"deepseek/deepseek-v4-flash-0423","name":"DeepSeek V4 Flash 0423","description":"Initial DeepSeek V4 Flash snapshot for economical reasoning, coding, and million-token agent workloads","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":384000},"cost":{"input":0.14,"output":0.28,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash-0423"},"deepseek/deepseek-v4-flash-0423:thinking":{"id":"deepseek/deepseek-v4-flash-0423:thinking","name":"DeepSeek V4 Flash 0423 (Thinking)","description":"Initial DeepSeek V4 Flash snapshot for economical reasoning, coding, and million-token agent workloads","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":384000},"cost":{"input":0.14,"output":0.28,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash-0423"},"deepseek/deepseek-v3.2:thinking":{"id":"deepseek/deepseek-v3.2:thinking","name":"DeepSeek V3.2 Thinking","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes, sparse attention, and tool-use","family":"deepseek","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":163000,"input":163000,"output":65536},"cost":{"input":0.2088,"output":0.3096,"cache_read":0.0216},"canonical_model_id":"deepseek/deepseek-v3.2"},"deepseek/deepseek-v4-flash:thinking":{"id":"deepseek/deepseek-v4-flash:thinking","name":"DeepSeek V4 Flash (Thinking)","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":384000},"cost":{"input":0.14,"output":0.28,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek/deepseek-v4.1-flash-1017-uncensored:thinking":{"id":"deepseek/deepseek-v4.1-flash-1017-uncensored:thinking","name":"DeepSeek V4.1 Flash 1017 Uncensored Thinking","description":"Uncensored DeepSeek V4.1 Flash with text and image input, optional reasoning, and tool calling. The date label is retained for compatibility. Served only by its own checkpoint; it may be unavailable while that host is down.","family":"deepseek","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":false,"release_date":"2026-10-27","last_updated":"2026-10-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.33,"output":1.32,"cache_read":0.011}},"deepseek/deepseek-v4-flash-0731:thinking":{"id":"deepseek/deepseek-v4-flash-0731:thinking","name":"DeepSeek V4 Flash 0731 (Thinking)","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.05,"output":0.16,"cache_read":0.013},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepseek/deepseek-v4-pro-0813":{"id":"deepseek/deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":384000},"cost":{"input":0.66,"output":4.1267,"cache_read":0.0921},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"deepseek/deepseek-v4-flash-latest":{"id":"deepseek/deepseek-v4-flash-latest","name":"DeepSeek V4 Flash Latest","description":"Compatibility alias that routes to the newest dated DeepSeek V4 Flash release. Currently routes to DeepSeek V4 Flash 0731. ⚠️ This route goes directly to DeepSeek, so privacy and logging guarantees are limited.","family":"deepseek","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-08-02","last_updated":"2026-08-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":393216},"cost":{"input":0.1,"output":0.6,"cache_read":0.0042}},"deepseek/deepseek-v4.1-flash":{"id":"deepseek/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":384000},"cost":{"input":0.022,"output":0.4,"cache_read":0.004},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":384000},"cost":{"input":0.86979,"output":1.77565,"cache_read":0.08873},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-latest":{"id":"deepseek/deepseek-latest","name":"DeepSeek Latest","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-05-03","last_updated":"2026-05-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":384000},"cost":{"input":0.66,"output":4.0139,"cache_read":0.105}},"deepseek/deepseek-v4-flash-vision-exp":{"id":"deepseek/deepseek-v4-flash-vision-exp","name":"DeepSeek V4 Flash Vision Exp","description":"Experimental multimodal DeepSeek V4 Flash model for image understanding, coding, and agentic work","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-21","last_updated":"2026-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":384000},"cost":{"input":0.2156,"output":0.6468,"cache_read":0.00686},"canonical_model_id":"deepseek/deepseek-v4-flash-vision-exp"},"deepseek/deepseek-v4.1-flash:thinking":{"id":"deepseek/deepseek-v4.1-flash:thinking","name":"DeepSeek V4.1 Flash Thinking","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":384000},"cost":{"input":0.022,"output":0.4,"cache_read":0.004},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek/deepseek-v4.1-flash-1017:thinking":{"id":"deepseek/deepseek-v4.1-flash-1017:thinking","name":"DeepSeek V4.1 Flash 1017 Thinking","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":393216},"cost":{"input":0.1,"output":0.6,"cache_read":0.0042},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"deepseek/deepseek-v4.1-flash-1017-uncensored":{"id":"deepseek/deepseek-v4.1-flash-1017-uncensored","name":"DeepSeek V4.1 Flash 1017 Uncensored","description":"Uncensored DeepSeek V4.1 Flash with text and image input, optional reasoning, and tool calling. The date label is retained for compatibility. Served only by its own checkpoint; it may be unavailable while that host is down.","family":"deepseek","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":false,"release_date":"2026-10-27","last_updated":"2026-10-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.33,"output":1.32,"cache_read":0.011}},"deepseek/deepseek-v4-flash":{"id":"deepseek/deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":384000},"cost":{"input":0.14,"output":0.28,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek/deepseek-v4-pro-0813:thinking":{"id":"deepseek/deepseek-v4-pro-0813:thinking","name":"DeepSeek V4 Pro 0813 Thinking","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":384000},"cost":{"input":0.66,"output":4.0139,"cache_read":0.105},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"deepseek/deepseek-v4.1-flash-0910-uncensored":{"id":"deepseek/deepseek-v4.1-flash-0910-uncensored","name":"DeepSeek V4.1 Flash 0910 Uncensored","description":"Uncensored DeepSeek V4.1 Flash with text and image input, optional reasoning, and tool calling. The date label is retained for compatibility. Served only by its own checkpoint; it may be unavailable while that host is down.","family":"deepseek","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":false,"release_date":"2026-10-27","last_updated":"2026-10-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"input":524288,"output":32768},"cost":{"input":0.33,"output":1.32,"cache_read":0.00825}},"deepseek/deepseek-v3.2":{"id":"deepseek/deepseek-v3.2","name":"DeepSeek V3.2","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes, sparse attention, and tool-use","family":"deepseek","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":163000,"input":163000,"output":65536},"cost":{"input":0.2088,"output":0.3096,"cache_read":0.0216},"canonical_model_id":"deepseek/deepseek-v3.2"},"deepseek/deepseek-v4-flash-0731":{"id":"deepseek/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.05,"output":0.16,"cache_read":0.013},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepseek/deepseek-v4.1-flash-1017":{"id":"deepseek/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":393216},"cost":{"input":0.1,"output":0.6,"cache_read":0.0042},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"deepseek/deepseek-v4.1-flash-0910-uncensored:thinking":{"id":"deepseek/deepseek-v4.1-flash-0910-uncensored:thinking","name":"DeepSeek V4.1 Flash 0910 Uncensored Thinking","description":"Uncensored DeepSeek V4.1 Flash with text and image input, optional reasoning, and tool calling. The date label is retained for compatibility. Served only by its own checkpoint; it may be unavailable while that host is down.","family":"deepseek","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":false,"release_date":"2026-10-27","last_updated":"2026-10-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"input":524288,"output":32768},"cost":{"input":0.33,"output":1.32,"cache_read":0.00825}},"deepseek/deepseek-v4.1-flash-uncensored":{"id":"deepseek/deepseek-v4.1-flash-uncensored","name":"DeepSeek V4.1 Flash Uncensored","description":"A lower-refusal finetune of DeepSeek V4.1 Flash with text and image input, optional reasoning, and tool calling. Supports a context window of up to 1M tokens.","family":"deepseek","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-10-01","last_updated":"2026-10-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.33,"output":1.32,"cache_read":0.00825}},"inclusionai/ling-3.0-flash-vl":{"id":"inclusionai/ling-3.0-flash-vl","name":"Ling 3.0 Flash VL","description":"Native multimodal hybrid MoE model for image and video understanding, reasoning, and visual agents","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.06,"output":0.18,"cache_read":0.012},"canonical_model_id":"inclusionai/ling-3.0-flash-vl"},"inclusionai/ling-3.0-tiny":{"id":"inclusionai/ling-3.0-tiny","name":"Ling 3.0 Tiny","description":"Ling 3.0 Tiny is a compact 7.9B-parameter Mixture-of-Experts model with 1.3B parameters active per token. It is designed for responsive agents, reliable instruction following, natural multi-turn conversations, long-context work, and function calling at low inference cost.","family":"ling","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"release_date":"2026-11-07","last_updated":"2026-11-07","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.015,"output":0.045,"cache_read":0.003}},"inclusionai/ling-3.0-flash":{"id":"inclusionai/ling-3.0-flash","name":"Ling 3.0 Flash","description":"Hybrid-linear MoE reasoning model with 124B total and 5.1B active parameters for efficient agents","family":"ling","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-23","last_updated":"2026-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.075,"output":0.22,"cache_read":0.015},"canonical_model_id":"inclusionai/ling-3.0-flash"},"inclusionai/ling-3.0-tiny:thinking":{"id":"inclusionai/ling-3.0-tiny:thinking","name":"Ling 3.0 Tiny Thinking","description":"Ling 3.0 Tiny Thinking enables visible reasoning on inclusionAI's compact 7.9B-parameter Mixture-of-Experts model for harder agent tasks, coding, planning, function calling, and long-context workflows.","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"release_date":"2026-11-07","last_updated":"2026-11-07","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.015,"output":0.045,"cache_read":0.003}},"inclusionai/ling-3.1-flash":{"id":"inclusionai/ling-3.1-flash","name":"Ling 3.1 Flash","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.075,"output":0.22,"cache_read":0.015},"canonical_model_id":"inclusionai/ling-3.1-flash"},"inclusionai/ling-3.0-flash:thinking":{"id":"inclusionai/ling-3.0-flash:thinking","name":"Ling 3.0 Flash Thinking","description":"Hybrid-linear MoE reasoning model with 124B total and 5.1B active parameters for efficient agents","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-23","last_updated":"2026-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.075,"output":0.22,"cache_read":0.015},"canonical_model_id":"inclusionai/ling-3.0-flash"},"google/gemini-3.5-flash-thinking":{"id":"google/gemini-3.5-flash-thinking","name":"Gemini 3.5 Flash Thinking","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":1.5,"output":9,"cache_read":0.15,"cache_write":0.083333},"canonical_model_id":"google/gemini-3.5-flash"},"google/gemini-flash-lite-latest":{"id":"google/gemini-flash-lite-latest","name":"Gemini Flash Lite Latest","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"cache_write":0.08333},"canonical_model_id":"google/gemini-flash-lite-latest"},"google/gemini-3.8-flash":{"id":"google/gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"cache_write":0.041667},"canonical_model_id":"google/gemini-3.8-flash"},"google/gemma4-31b-splituntied":{"id":"google/gemma4-31b-splituntied","name":"Gemma 4 31B Split-Untied","description":"Blazed-Forge's Split-Untied is a text-only Gemma 4 31B community finetune with an untied BF16 output head, built for creative writing, roleplay, expressive dialogue, and tool use.","family":"gemma","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"release_date":"2026-09-17","last_updated":"2026-09-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":32768},"cost":{"input":0.1,"output":0.3,"cache_read":0.05}},"google/gemini-4-carbon":{"id":"google/gemini-4-carbon","name":"Gemini 4 Carbon","description":"Google's most capable reasoning model for complex software engineering, deep math and science, high factual accuracy, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":32768},"cost":{"input":2,"output":10,"cache_read":0.1},"canonical_model_id":"google/gemini-4-carbon"},"google/gemini-pro-latest":{"id":"google/gemini-pro-latest","name":"Gemini Pro Latest","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"release_date":"2026-03-29","last_updated":"2026-03-29","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":0.375}},"google/gemini-3.1-pro-preview-high":{"id":"google/gemini-3.1-pro-preview-high","name":"Gemini 3.1 Pro (Preview High)","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":0.375},"canonical_model_id":"google/gemini-3.1-pro-preview"},"google/gemma-4-26b-a4b-it-cybersecurity":{"id":"google/gemma-4-26b-a4b-it-cybersecurity","name":"Gemma 4 26B A4B Cybersecurity","description":"Gemma 4 26B A4B Cybersecurity is a cybersecurity-focused variant based on the uncensored model, with provider moderation for illegal activities. It supports optional reasoning, image understanding, tool calling, and a 262,144-token context window.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-09-19","last_updated":"2026-09-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1056,"output":0.3344,"cache_read":0.0528}},"google/gemini-3.5-flash":{"id":"google/gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":1.5,"output":9,"cache_read":0.15,"cache_write":0.083333},"canonical_model_id":"google/gemini-3.5-flash"},"google/gemini-flash-latest":{"id":"google/gemini-flash-latest","name":"Gemini Flash Latest","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"cache_write":0.041667},"canonical_model_id":"google/gemini-flash-latest"},"google/gemini-3.6-flash":{"id":"google/gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"cache_write":0.041667},"canonical_model_id":"google/gemini-3.6-flash"},"google/gemma-4-31b-it:thinking":{"id":"google/gemma-4-31b-it:thinking","name":"Gemma 4 31B Thinking","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":131072},"cost":{"input":0.1,"output":0.34,"cache_read":0.1},"canonical_model_id":"google/gemma-4-31b-it"},"google/gemini-3.1-pro-preview-customtools":{"id":"google/gemini-3.1-pro-preview-customtools","name":"Gemini 3.1 Pro (Preview Custom Tools)","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":0.375},"canonical_model_id":"google/gemini-3.1-pro-preview-customtools"},"google/gemini-3.1-pro-preview":{"id":"google/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro (Preview)","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":0.375},"canonical_model_id":"google/gemini-3.1-pro-preview"},"google/gemini-3.1-flash-lite":{"id":"google/gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"cache_write":0.08333},"canonical_model_id":"google/gemini-3.1-flash-lite"},"google/gemini-4-argon":{"id":"google/gemini-4-argon","name":"Gemini 4 Argon","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":0.1875},"canonical_model_id":"google/gemini-4-argon"},"google/gemini-3.1-pro-preview-low":{"id":"google/gemini-3.1-pro-preview-low","name":"Gemini 3.1 Pro (Preview Low)","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":0.375},"canonical_model_id":"google/gemini-3.1-pro-preview"},"google/gemini-3-flash-preview-thinking":{"id":"google/gemini-3-flash-preview-thinking","name":"Gemini 3 Flash Thinking","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.05},"canonical_model_id":"google/gemini-3-flash-preview"},"google/gemini-3.5-flash-lite":{"id":"google/gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"cache_write":0.08333},"canonical_model_id":"google/gemini-3.5-flash-lite"},"google/gemma-4-31b-it":{"id":"google/gemma-4-31b-it","name":"Gemma 4 31B","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":131072},"cost":{"input":0.14,"output":0.4,"cache_read":0.05},"canonical_model_id":"google/gemma-4-31b-it"},"google/gemma-4-26b-a4b-it:thinking":{"id":"google/gemma-4-26b-a4b-it:thinking","name":"Gemma 4 26B A4B Thinking","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":131072},"cost":{"input":0.01,"output":0.031,"cache_read":0.005},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"google/diffusiongemma":{"id":"google/diffusiongemma","name":"DiffusionGemma","description":"DiffusionGemma is a high-speed diffusion-based version of Gemma 4 26B A4B. It supports optional reasoning and a 262,144-token context window.","family":"gemma","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","xhigh"]}],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-09","last_updated":"2026-07-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.05,"output":0.15,"cache_read":0.025},"canonical_model_id":"google/diffusiongemma-26b-a4b-it"},"google/gemini-3-flash-preview":{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash (Preview)","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.05},"canonical_model_id":"google/gemini-3-flash-preview"},"google/gemma-4-26b-a4b-it":{"id":"google/gemma-4-26b-a4b-it","name":"Gemma 4 26B A4B","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":131072},"cost":{"input":0.01,"output":0.031,"cache_read":0.005},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"google/gemini-3.7-flash":{"id":"google/gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"cache_write":0.041667},"canonical_model_id":"google/gemini-3.7-flash"},"qwen/qwen3.5-27b:thinking":{"id":"qwen/qwen3.5-27b:thinking","name":"Qwen3.5 27B Thinking","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":260096,"input":260096,"output":65536},"cost":{"input":0.2,"output":1.75,"cache_read":0.02},"canonical_model_id":"alibaba/qwen3.5-27b"},"qwen/qwen3.6-plus":{"id":"qwen/qwen3.6-plus","name":"Qwen 3.6 Plus","description":"Earlier Qwen multimodal workhorse for million-token agent and document tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":991808,"input":991808,"output":65536},"cost":{"input":0.325,"output":1.95,"cache_read":0.0325,"cache_write":0.40625},"canonical_model_id":"alibaba/qwen3.6-plus"},"qwen/qwen-2.5-72b-instruct":{"id":"qwen/qwen-2.5-72b-instruct","name":"Qwen2.5 72B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"release_date":"2025-07-03","last_updated":"2025-07-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":8192},"cost":{"input":0.36,"output":0.4,"cache_read":0.1785}},"qwen/qwen3-coder-30b-a3b-instruct":{"id":"qwen/qwen3-coder-30b-a3b-instruct","name":"Qwen3 Coder 30B A3B Instruct","description":"Smaller Qwen coder for efficient local agents and repo-level fixes","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-31","last_updated":"2025-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":65536},"cost":{"input":0.1,"output":0.4,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3-coder-30b-a3b-instruct"},"qwen/qwen3-30b-a3b":{"id":"qwen/qwen3-30b-a3b","name":"Qwen3 30B A3B","description":"Sparse MoE Qwen model with 3B active parameters for efficient chat and reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":41000,"input":41000,"output":32768},"cost":{"input":0.1,"output":0.3,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3-30b-a3b"},"qwen/qwen3-vl-235b-a22b-instruct":{"id":"qwen/qwen3-vl-235b-a22b-instruct","name":"Qwen3 VL 235B A22B Instruct","description":"Qwen vision-language instruct model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":32768},"cost":{"input":0.3,"output":1.9,"cache_read":0.15},"canonical_model_id":"alibaba/qwen3-vl-235b-a22b-instruct"},"qwen/qwen2.5-vl-72b-instruct":{"id":"qwen/qwen2.5-vl-72b-instruct","name":"Qwen25 VL 72b","description":"Qwen25 VL 72b model with 32k context window","family":"qwen","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-05-10","last_updated":"2025-05-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"input":32000,"output":32000},"cost":{"input":0.69989,"output":0.69989}},"qwen/qwen3.8-27b-antislop":{"id":"qwen/qwen3.8-27b-antislop","name":"Qwen 3.8 27B Antislop","description":"Qwen 3.8 27B Antislop is a creative finetune served by Aoru in NVFP4 with a 262,144-token context window. It supports image understanding, tool calling, and optional reasoning.","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-10-05","last_updated":"2026-10-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.6,"cache_read":0.05}},"qwen/qwen3-vl-235b-a22b-thinking":{"id":"qwen/qwen3-vl-235b-a22b-thinking","name":"Qwen3 VL 235B A22B Thinking","description":"Qwen vision-language thinking model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.5,"output":6,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3-vl-235b-a22b-thinking"},"qwen/qwen3.8-max:thinking":{"id":"qwen/qwen3.8-max:thinking","name":"Qwen3.8 Max Thinking","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":991000,"input":991000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max"},"qwen/qwen3.8-27b:thinking":{"id":"qwen/qwen3.8-27b:thinking","name":"Qwen3.8 27B Thinking","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.15,"output":0.7,"cache_read":0.04},"canonical_model_id":"alibaba/qwen3.8-27b"},"qwen/qwen3.8-27b-hemmingway":{"id":"qwen/qwen3.8-27b-hemmingway","name":"Qwen 3.8 27B Hemingway","description":"Qwen 3.8 27B Hemingway is an open-weight NVFP4 multimodal creative finetune for long-form prose, character dialogue, storytelling, and roleplay.","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.25,"output":1.5,"cache_read":0.125}},"qwen/qwen3-235b-a22b-thinking-2507":{"id":"qwen/qwen3-235b-a22b-thinking-2507","name":"Qwen 3 235b A22B 2507 Thinking","description":"Updated large open Qwen3 MoE thinking model for reasoning, math, coding, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-07-25","last_updated":"2025-07-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":81920},"cost":{"input":0.3,"output":0.5},"canonical_model_id":"alibaba/qwen3-235b-a22b-thinking-2507"},"qwen/qwen3.7-plus:thinking":{"id":"qwen/qwen3.7-plus:thinking","name":"Qwen3.7 Plus Thinking","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"input":983616,"output":65536},"cost":{"input":0.4,"output":1.6,"cache_read":0.08,"cache_write":0.5},"canonical_model_id":"alibaba/qwen3.7-plus"},"qwen/qwen3.8-27b-novelist":{"id":"qwen/qwen3.8-27b-novelist","name":"Qwen 3.8 27B Novelist","description":"Qwen 3.8 27B Novelist is a creative finetune served by Aoru in NVFP4 with a 262,144-token context window. It supports image understanding, tool calling, and optional reasoning.","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-10-05","last_updated":"2026-10-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.6,"cache_read":0.05}},"qwen/qwen3.8-27b-kimiko":{"id":"qwen/qwen3.8-27b-kimiko","name":"Qwen 3.8 27B Kimiko","description":"Qwen 3.8 27B Kimiko is a creative finetune served by Aoru in NVFP4 with a 262,144-token context window. It supports image understanding, tool calling, and optional reasoning.","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-10-05","last_updated":"2026-10-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.6,"cache_read":0.05}},"qwen/qwen3.8-omni-flash":{"id":"qwen/qwen3.8-omni-flash","name":"Qwen3.8 Omni Flash","description":"Qwen omni model for text, vision, audio, and multimodal agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-17","last_updated":"2026-09-17","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":991808,"input":991808,"output":131072},"cost":{"input":0.15,"output":0.47,"cache_read":0.016},"canonical_model_id":"alibaba/qwen3.8-omni-flash"},"qwen/qwen3-coder":{"id":"qwen/qwen3-coder","name":"Qwen 3 Coder 480B","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"input":262000,"output":65536},"cost":{"input":0.13,"output":0.5,"cache_read":0.065},"canonical_model_id":"alibaba/qwen3-coder-480b-a35b-instruct"},"qwen/qwen-max":{"id":"qwen/qwen-max","name":"Qwen 2.5 Max","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-04","release_date":"2024-04-03","last_updated":"2025-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"input":32000,"output":8192},"cost":{"input":1.5997,"output":6.392,"cache_read":0.79985},"canonical_model_id":"alibaba/qwen-max"},"qwen/qwen3-14b":{"id":"qwen/qwen3-14b","name":"Qwen 3 14b","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":41000,"input":41000,"output":32768},"cost":{"input":0.08,"output":0.24,"cache_read":0.04}},"qwen/qwen3.8-27b":{"id":"qwen/qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.15,"output":0.7,"cache_read":0.04},"canonical_model_id":"alibaba/qwen3.8-27b"},"qwen/qwen3.6-max-preview":{"id":"qwen/qwen3.6-max-preview","name":"Qwen3.6 Max Preview","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":245760,"input":245760,"output":65536},"cost":{"input":1.04,"output":6.24,"cache_read":0.52},"canonical_model_id":"alibaba/qwen3.6-max-preview"},"qwen/qwen3.5-flash":{"id":"qwen/qwen3.5-flash","name":"Qwen3.5 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":991808,"input":991808,"output":65536},"cost":{"input":0.1,"output":0.4,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3.5-flash"},"qwen/qwen3.8-27b-kiwen":{"id":"qwen/qwen3.8-27b-kiwen","name":"Qwen 3.8 27B Kiwen","description":"Qwen 3.8 27B Kiwen is a creative finetune served by Aoru in NVFP4 with a 262,144-token context window. It supports image understanding, tool calling, and optional reasoning.","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-10-05","last_updated":"2026-10-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.6,"cache_read":0.05}},"qwen/qwen-plus":{"id":"qwen/qwen-plus","name":"Qwen Plus","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-04","release_date":"2024-01-25","last_updated":"2025-09-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":995904,"input":995904,"output":32768},"cost":{"input":0.3995,"output":1.2002,"cache_read":0.19975},"canonical_model_id":"alibaba/qwen-plus"},"qwen/qwen3.8-flash":{"id":"qwen/qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":131072},"cost":{"input":0.14,"output":0.42,"cache_read":0.016,"cache_write":0.2},"canonical_model_id":"alibaba/qwen3.8-flash"},"qwen/qwen3-30b-a3b-instruct-2507":{"id":"qwen/qwen3-30b-a3b-instruct-2507","name":"Qwen3 30B A3B Instruct 2507","description":"Updated compact Qwen3 MoE instruct model for multilingual chat, coding, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":32768},"cost":{"input":0.2,"output":0.5,"cache_read":0.1},"canonical_model_id":"alibaba/qwen3-30b-a3b-instruct-2507"},"qwen/qwen3-235b-a22b-instruct-2507":{"id":"qwen/qwen3-235b-a22b-instruct-2507","name":"Qwen 3 235b A22B 2507","description":"Updated large open Qwen3 MoE instruct model for multilingual chat, coding, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":16384},"cost":{"input":0.09,"output":0.55,"cache_read":0.0175},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"qwen/qwen3-next-80b-a3b-thinking":{"id":"qwen/qwen3-next-80b-a3b-thinking","name":"Qwen3 Next 80B A3B (Thinking)","description":"Efficient Qwen thinking model for local reasoning, math, and coding agents","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":32768},"cost":{"input":0.15,"output":0.65,"cache_read":0.075},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-thinking"},"qwen/qwen3.8-27b-uncensored:thinking":{"id":"qwen/qwen3.8-27b-uncensored:thinking","name":"Qwen 3.8 27B Uncensored Thinking","description":"Qwen 3.8 27B Uncensored with thinking enabled for more deliberate creative work, coding, multimodal analysis, tool use, and long-context problem solving.","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2026-07-29","last_updated":"2026-08-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":1,"output":3,"cache_read":0.22}},"qwen/qwen3.5-397b-a17b":{"id":"qwen/qwen3.5-397b-a17b","name":"Qwen3.5 397B A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":65536},"cost":{"input":0.39,"output":2.34,"cache_read":0.3},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"qwen/qwen3.5-9b":{"id":"qwen/qwen3.5-9b","name":"Qwen3.5 9B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":65536},"cost":{"input":0.05,"output":0.15,"cache_read":0.008},"canonical_model_id":"alibaba/qwen3.5-9b"},"qwen/qwen3.8-max-prime":{"id":"qwen/qwen3.8-max-prime","name":"Qwen3.8 Max Prime","description":"High-throughput edition of Qwen3.8 Max for coding, professional work, multimodal understanding, and long-running agent workflows","family":"qwen3.8-max","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-23","last_updated":"2026-09-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":131072},"cost":{"input":4,"output":12,"cache_read":0.5},"canonical_model_id":"alibaba/qwen3.8-max-prime"},"qwen/qwen3.8-27b-darkidol":{"id":"qwen/qwen3.8-27b-darkidol","name":"Qwen 3.8 27B DarkIdol","description":"Qwen 3.8 27B DarkIdol is a creative finetune served by Aoru in NVFP4 with a 262,144-token context window. It supports image understanding, tool calling, and optional reasoning.","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-10-05","last_updated":"2026-10-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.6,"cache_read":0.05}},"qwen/qwen3.8-27b-cybersecurity":{"id":"qwen/qwen3.8-27b-cybersecurity","name":"Qwen 3.8 27B Cybersecurity","description":"Qwen 3.8 27B Cybersecurity is a cybersecurity-focused variant based on the uncensored model, with provider moderation for illegal activities. It supports optional reasoning, image understanding, tool calling, and a 262,144-token context window.","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-09-19","last_updated":"2026-09-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.6,"cache_read":0.05}},"qwen/qwen3.8-max-0902":{"id":"qwen/qwen3.8-max-0902","name":"Qwen3.8 Max 0902","description":"2026-09-02 upgraded snapshot of Qwen3.8 Max with stronger coding, collaborative agents, and multimodal document understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":991808,"input":991808,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max-0902"},"qwen/qwen3.5-122b-a10b:thinking":{"id":"qwen/qwen3.5-122b-a10b:thinking","name":"Qwen3.5 122B A10B Thinking","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":32768},"cost":{"input":0.26,"output":2.08,"cache_read":0.103788},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"qwen/qwen3.7-flash:thinking":{"id":"qwen/qwen3.7-flash:thinking","name":"Qwen3.7 Flash Thinking","description":"Lightweight multimodal Qwen model for high-throughput text, image, and video tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"input":983616,"output":65536},"cost":{"input":0.03,"output":0.13,"cache_read":0.006,"cache_write":0.038},"canonical_model_id":"alibaba/qwen3.7-flash"},"qwen/qwen3.5-35b-a3b":{"id":"qwen/qwen3.5-35b-a3b","name":"Qwen3.5 35B A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":260096,"input":260096,"output":65536},"cost":{"input":0.14,"output":1,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3.5-35b-a3b"},"qwen/qwen3.6-35b-a3b:thinking":{"id":"qwen/qwen3.6-35b-a3b:thinking","name":"Qwen3.6 35B A3B Thinking","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.112,"output":0.8,"cache_read":0.056},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"qwen/qwen3.7-plus":{"id":"qwen/qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":991808,"input":991808,"output":65536},"cost":{"input":0.4,"output":1.6,"cache_read":0.08,"cache_write":0.5},"canonical_model_id":"alibaba/qwen3.7-plus"},"qwen/qwen3.8-27b-fable":{"id":"qwen/qwen3.8-27b-fable","name":"Qwen 3.8 27B Fable","description":"Qwen 3.8 27B Fable is an open-weight multimodal creative finetune for expressive dialogue, long-form storytelling, character work, and roleplay.","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-07-29","last_updated":"2026-08-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":32768},"cost":{"input":0.25,"output":1.5,"cache_read":0.125}},"qwen/qwen3.6-27b:thinking":{"id":"qwen/qwen3.6-27b:thinking","name":"Qwen3.6 27B Thinking","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":65536},"cost":{"input":0.203,"output":2.24,"cache_read":0.1015},"canonical_model_id":"alibaba/qwen3.6-27b"},"qwen/qwen3.7-max":{"id":"qwen/qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":65536},"cost":{"input":1.475,"output":4.425,"cache_read":0.295,"cache_write":1.84375},"canonical_model_id":"alibaba/qwen3.7-max"},"qwen/qwen3.8-27b-synthia":{"id":"qwen/qwen3.8-27b-synthia","name":"Qwen 3.8 27B Synthia","description":"Qwen 3.8 27B Synthia is a text-only roleplay finetune served by Aoru in NVFP4 with a 262,144-token context window.","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2026-10-05","last_updated":"2026-10-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.6,"cache_read":0.05}},"qwen/qwen3.6-flash":{"id":"qwen/qwen3.6-flash","name":"Qwen3.6 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.6","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":991808,"input":991808,"output":65536},"cost":{"input":0.19,"output":1.16,"cache_read":0.02,"cache_write":0.24},"canonical_model_id":"alibaba/qwen3.6-flash"},"qwen/qwen3.8-27b-fimi":{"id":"qwen/qwen3.8-27b-fimi","name":"Qwen 3.8 27B Fimi","description":"Qwen 3.8 27B Fimi is a creative finetune served by Aoru in NVFP4 with a 262,144-token context window. It supports image understanding, tool calling, and optional reasoning.","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-10-05","last_updated":"2026-10-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.6,"cache_read":0.05}},"qwen/qwen3.7-flash":{"id":"qwen/qwen3.7-flash","name":"Qwen3.7 Flash","description":"Lightweight multimodal Qwen model for high-throughput text, image, and video tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":991808,"input":991808,"output":65536},"cost":{"input":0.03,"output":0.13,"cache_read":0.006,"cache_write":0.038},"canonical_model_id":"alibaba/qwen3.7-flash"},"qwen/qwen-turbo":{"id":"qwen/qwen-turbo","name":"Qwen Turbo","description":"Efficient Qwen model for fast chat, extraction, and high-volume workloads","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-04","release_date":"2024-11-01","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":8192},"cost":{"input":0.04998,"output":0.2006,"cache_read":0.02499},"canonical_model_id":"alibaba/qwen-turbo"},"qwen/qwen3.5-397b-a17b:thinking":{"id":"qwen/qwen3.5-397b-a17b:thinking","name":"Qwen3.5 397B A17B Thinking","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":65536},"cost":{"input":0.39,"output":2.34,"cache_read":0.3},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"qwen/qwen3.6-27b":{"id":"qwen/qwen3.6-27b","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":65536},"cost":{"input":0.203,"output":2.24,"cache_read":0.1015},"canonical_model_id":"alibaba/qwen3.6-27b"},"qwen/qwen2.5-coder-32b-instruct":{"id":"qwen/qwen2.5-coder-32b-instruct","name":"Qwen 2.5 Coder 32b","description":"Open coding-focused Qwen model for code generation, repair, and repository reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2024-11-12","last_updated":"2024-11-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"input":32000,"output":8192},"cost":{"input":0.2006,"output":0.2006,"cache_read":0.1003},"canonical_model_id":"alibaba/qwen2.5-coder-32b-instruct"},"qwen/qwen3.6-35b-a3b":{"id":"qwen/qwen3.6-35b-a3b","name":"Qwen3.6 35B A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.112,"output":0.8,"cache_read":0.056},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"qwen/qwen3.8-27b-uncensored":{"id":"qwen/qwen3.8-27b-uncensored","name":"Qwen 3.8 27B Uncensored","description":"Qwen 3.8 27B Uncensored is an NVFP4 open-weight multimodal model LoRA-tuned for fewer refusals across chat, coding, reasoning, tool use, and long-context work.","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2026-07-29","last_updated":"2026-08-21","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":1,"output":3,"cache_read":0.22}},"qwen/qwen3.7-max:thinking":{"id":"qwen/qwen3.7-max:thinking","name":"Qwen3.7 Max Thinking","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":65536},"cost":{"input":1.475,"output":4.425,"cache_read":0.295,"cache_write":1.84375},"canonical_model_id":"alibaba/qwen3.7-max"},"qwen/qwen3.5-plus":{"id":"qwen/qwen3.5-plus","name":"Qwen3.5 Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-16","last_updated":"2026-02-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"input":983616,"output":65536},"cost":{"input":0.4,"output":2.4,"cache_read":0.04,"cache_write":0.5},"canonical_model_id":"alibaba/qwen3.5-plus"},"qwen/qwen3-coder-next":{"id":"qwen/qwen3-coder-next","name":"Qwen3 Coder Next","description":"Open-weight Qwen coding model for agents, repository edits, and multi-turn tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-02-03","last_updated":"2026-02-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":65536},"cost":{"input":0.12,"output":0.8,"cache_read":0.07},"canonical_model_id":"alibaba/qwen3-coder-next"},"qwen/qwen3-next-80b-a3b-instruct":{"id":"qwen/qwen3-next-80b-a3b-instruct","name":"Qwen3 Next 80B A3B (Instruct)","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.09,"output":1.1,"cache_read":0.07},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-instruct"},"qwen/qwen3-32b":{"id":"qwen/qwen3-32b","name":"Qwen 3 32b","description":"Dense open Qwen model for self-hosted chat, reasoning, and coding","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":41000,"input":41000,"output":32768},"cost":{"input":0.08,"output":0.24,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3-32b"},"qwen/qwen3-8b":{"id":"qwen/qwen3-8b","name":"Qwen 3 8B","description":"Dense 8B Qwen3 model with switchable thinking for chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-04-29","last_updated":"2025-04-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":41000,"input":41000,"output":32768},"cost":{"input":0.47,"output":0.47},"canonical_model_id":"alibaba/qwen3-8b"},"qwen/qwen3-235b-a22b":{"id":"qwen/qwen3-235b-a22b","name":"Qwen 3 235b A22B","description":"Large open Qwen MoE for multilingual reasoning, coding, and tool use","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":16384},"cost":{"input":0.09,"output":0.55,"cache_read":0.0175},"canonical_model_id":"alibaba/qwen3-235b-a22b"},"qwen/qwen3.8-27b-queen":{"id":"qwen/qwen3.8-27b-queen","name":"Qwen 3.8 27B Queen","description":"Qwen 3.8 27B Queen is an open-weight roleplay finetune with image understanding, tool calling, optional reasoning, and a 262,144-token context window.","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-09-09","last_updated":"2026-09-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":32768},"cost":{"input":0.25,"output":1.5,"cache_read":0.125}},"qwen/qwen3.8-max":{"id":"qwen/qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":991000,"input":991000,"output":65536},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max"},"qwen/qwen3.5-27b":{"id":"qwen/qwen3.5-27b","name":"Qwen3.5 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":260096,"input":260096,"output":65536},"cost":{"input":0.2,"output":1.75,"cache_read":0.02},"canonical_model_id":"alibaba/qwen3.5-27b"},"qwen/qwen3.8-27b-swift":{"id":"qwen/qwen3.8-27b-swift","name":"Qwen 3.8 27B Swift","description":"Qwen 3.8 27B Swift is a finetune for fast responses, served by Aoru in NVFP4 with a 262,144-token context window. It supports image understanding, tool calling, and optional reasoning.","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-10-05","last_updated":"2026-10-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.6,"cache_read":0.05}},"qwen/qwen3.5-omni-plus":{"id":"qwen/qwen3.5-omni-plus","name":"Qwen3.5 Omni Plus","description":"Qwen3.5 Omni Plus is Qwen's stronger general multimodal model. We verified live support for text prompts, images, audio files, and direct video URLs on Alibaba's chat-completions-compatible API. Alibaba describes Plus as a comprehensive evolution of Qwen3 Omni with support for over 10 hours of audio input.","family":"qwen3.5","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2026-03-30","last_updated":"2026-03-30","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"input":983616,"output":65536}},"qwen/qwen3.5-35b-a3b:thinking":{"id":"qwen/qwen3.5-35b-a3b:thinking","name":"Qwen3.5 35B A3B Thinking","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":260096,"input":260096,"output":65536},"cost":{"input":0.14,"output":1,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3.5-35b-a3b"},"qwen/qwen3.5-omni-flash":{"id":"qwen/qwen3.5-omni-flash","name":"Qwen3.5 Omni Flash","description":"Qwen3.5 Omni Flash is Qwen's fast multimodal model. We verified live support for text prompts, images, audio files, and direct video URLs on Alibaba's chat-completions-compatible API. Alibaba describes Flash as a fully evolved version of Qwen3 Omni with audio input support across 60+ languages.","family":"qwen3.5","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2026-03-30","last_updated":"2026-03-30","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":49152,"input":49152,"output":16384}},"qwen/qwen3.5-flash:thinking":{"id":"qwen/qwen3.5-flash:thinking","name":"Qwen3.5 Flash Thinking","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":991808,"input":991808,"output":65536},"cost":{"input":0.1,"output":0.4,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3.5-flash"},"qwen/qwen3-coder-flash":{"id":"qwen/qwen3-coder-flash","name":"Qwen3 Coder Flash","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":128000,"output":65536},"cost":{"input":0.3,"output":1.5,"cache_read":0.15},"canonical_model_id":"alibaba/qwen3-coder-flash"},"qwen/qwen3.5-122b-a10b":{"id":"qwen/qwen3.5-122b-a10b","name":"Qwen3.5 122B A10B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":32768},"cost":{"input":0.26,"output":2.08,"cache_read":0.103788},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"qwen/qwen3.5-plus:thinking":{"id":"qwen/qwen3.5-plus:thinking","name":"Qwen3.5 Plus Thinking","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-16","last_updated":"2026-02-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"input":983616,"output":65536},"cost":{"input":0.4,"output":2.4,"cache_read":0.04,"cache_write":0.5},"canonical_model_id":"alibaba/qwen3.5-plus"},"abliteration-ai/abliterated-model-large-v2":{"id":"abliteration-ai/abliterated-model-large-v2","name":"Abliterated Model Large V2","description":"Abliteration.ai's default large text reasoning model is derived from GLM-5.3 for harder reasoning and evaluation workloads, with automatic prompt caching and a one-million-token context window.","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-08-31","last_updated":"2026-08-31","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":999990},"cost":{"input":3,"output":5,"cache_read":0.3}},"abliteration-ai/abliterated-model-large-flash":{"id":"abliteration-ai/abliterated-model-large-flash","name":"Abliterated Large Flash","description":"Abliterated Large Flash is an uncensored reasoning model based on DeepSeek V4.1-Flash-1017. It accepts text and images and returns text, with tool calling, JSON mode, JSON Schema output, and automatic prompt caching. Its shared input/output context is 1,048,576 tokens, with up to 262,144 output tokens when space permits. Reasoning defaults to high and can be turned off or set to low, high, or max. Supports up to four images across the request history.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":262144},"cost":{"input":1,"output":2,"cache_read":0.1}},"abliteration-ai/abliterated-model":{"id":"abliteration-ai/abliterated-model","name":"Abliterated Model","description":"Abliteration.ai's multimodal reasoning model supports text and image input, structured output, automatic prompt caching, and a 262K-token context window.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":false,"structured_output":true,"release_date":"2026-08-27","last_updated":"2026-08-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"input":262144,"output":262134},"cost":{"input":1,"output":3,"cache_read":0.1}},"abliteration-ai/abliterated-model-large":{"id":"abliteration-ai/abliterated-model-large","name":"Abliterated Model Large","description":"Abliteration.ai's large text reasoning model is derived from GLM-5.2 and supports native tool calling, structured output, automatic prompt caching, and a one-million-token context window.","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-08-27","last_updated":"2026-08-27","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":999990},"cost":{"input":3,"output":5,"cache_read":0.3}},"sicariussicariistuff/assistant-pepe-32b":{"id":"sicariussicariistuff/assistant-pepe-32b","name":"Assistant Pepe 32B","description":"Assistant Pepe 32B is SicariusSicariiStuff's Qwen3-32B finetune for creative writing, brainstorming, roleplay and irreverent conversation. Trained on UBW Tapestries, it has a built-in conversational persona and replies without a separate thinking mode. It accepts and returns text, with a 40,960-token context window and up to 8,192 output tokens.","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2026-11-03","last_updated":"2026-11-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":40960,"input":40960,"output":8192},"cost":{"input":0.1,"output":0.45,"cache_read":0.05}},"MiniMaxAI/MiniMax-M1-80k":{"id":"MiniMaxAI/MiniMax-M1-80k","name":"MiniMax M1 80K","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":131072},"cost":{"input":0.6052,"output":2.4225,"cache_read":0.3026},"canonical_model_id":"minimax/minimax-m1-80k"},"xtools-at/deepseek-v4-pro-qwen3.5-9b-uncensored-heretic":{"id":"xtools-at/deepseek-v4-pro-qwen3.5-9b-uncensored-heretic","name":"DeepSeek V4 Pro Qwen3.5 9B Uncensored Heretic","description":"xtools-at's uncensored Heretic version of Jackrong's DeepSeek V4 Pro Qwen3.5 9B, a Qwen3.5 9B model distilled from DeepSeek V4 Pro on about 250,000 math and STEM samples. It answers directly without a thinking phase. It accepts and returns text, with a 32,768-token context window shared by input and output and up to 8,192 output tokens.","family":"deepseek","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2026-11-07","last_updated":"2026-11-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":8192},"cost":{"input":0.28,"output":0.28,"cache_read":0.14}},"EVA-UNIT-01/EVA-LLaMA-3.33-70B-v0.1":{"id":"EVA-UNIT-01/EVA-LLaMA-3.33-70B-v0.1","name":"EVA-LLaMA-3.33-70B-v0.1","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-09-25","last_updated":"2025-09-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":16384},"cost":{"input":2.006,"output":2.006,"cache_read":1.003}},"EVA-UNIT-01/EVA-Qwen2.5-32B-v0.2":{"id":"EVA-UNIT-01/EVA-Qwen2.5-32B-v0.2","name":"EVA-Qwen2.5-32B-v0.2","description":"A RP/storywriting specialist model, full-parameter finetune of Qwen2.5-32B on mixture of synthetic and natural data. It uses Celeste 70B 0.1 data mixture, greatly expanding it to improve versatility, creativity and flavor of the resulting model.","family":"v0","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-07-26","last_updated":"2025-07-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"input":16384,"output":8192},"cost":{"input":0.799,"output":0.799}},"EVA-UNIT-01/EVA-LLaMA-3.33-70B-v0.0":{"id":"EVA-UNIT-01/EVA-LLaMA-3.33-70B-v0.0","name":"EVA Llama 3.33 70B","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-07-26","last_updated":"2025-07-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":16384},"cost":{"input":2.006,"output":2.006,"cache_read":1.003}},"EVA-UNIT-01/EVA-Qwen2.5-72B-v0.2":{"id":"EVA-UNIT-01/EVA-Qwen2.5-72B-v0.2","name":"EVA-Qwen2.5-72B-v0.2","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-09-25","last_updated":"2025-09-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"input":16384,"output":8192},"cost":{"input":0.799,"output":0.799,"cache_read":0.3995}},"Doctor-Shotgun/MS3.2-24B-Magnum-Diamond":{"id":"Doctor-Shotgun/MS3.2-24B-Magnum-Diamond","name":"MS3.2 24B Magnum Diamond","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":32768},"cost":{"input":0.493,"output":0.493,"cache_read":0.2465}},"deepseek-ai/DeepSeek-V3.1":{"id":"deepseek-ai/DeepSeek-V3.1","name":"DeepSeek V3.1","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":65536},"cost":{"input":0.2,"output":0.7,"cache_read":0.1},"canonical_model_id":"deepseek/deepseek-v3.1"},"deepseek-ai/deepseek-v3.2-exp-thinking":{"id":"deepseek-ai/deepseek-v3.2-exp-thinking","name":"DeepSeek V3.2 Exp Thinking","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2025-09-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"input":163840,"output":65536},"cost":{"input":0.28,"output":0.42,"cache_read":0.14}},"deepseek-ai/DeepSeek-V3.1-Terminus":{"id":"deepseek-ai/DeepSeek-V3.1-Terminus","name":"DeepSeek V3.1 Terminus","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"release_date":"2025-08-02","last_updated":"2025-08-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":65536},"cost":{"input":0.25,"output":0.7,"cache_read":0.125}},"deepseek-ai/DeepSeek-V3.1-Terminus:thinking":{"id":"deepseek-ai/DeepSeek-V3.1-Terminus:thinking","name":"DeepSeek V3.1 Terminus (Thinking)","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek-thinking","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"release_date":"2024-01-01","last_updated":"2025-09-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":65536},"cost":{"input":0.25,"output":0.7,"cache_read":0.125}},"deepseek-ai/deepseek-v3.2-exp":{"id":"deepseek-ai/deepseek-v3.2-exp","name":"DeepSeek V3.2 Exp","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2025-09-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"input":163840,"output":65536},"cost":{"input":0.28,"output":0.42,"cache_read":0.14}},"deepseek-ai/DeepSeek-V3.1:thinking":{"id":"deepseek-ai/DeepSeek-V3.1:thinking","name":"DeepSeek V3.1 Thinking","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":65536},"cost":{"input":0.2,"output":0.7,"cache_read":0.1},"canonical_model_id":"deepseek/deepseek-v3.1"},"deepseek-ai/DeepSeek-R1-0528":{"id":"deepseek-ai/DeepSeek-R1-0528","name":"DeepSeek R1 0528","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-05-28","last_updated":"2025-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"input":163840,"output":32768},"cost":{"input":0.5,"output":2.15,"cache_read":0.35},"canonical_model_id":"deepseek/deepseek-r1-0528"},"bytedance/doubao-seed-character":{"id":"bytedance/doubao-seed-character","name":"Doubao Seed Character","description":"ByteDance's character-focused Doubao Seed model for roleplay, persona consistency, dialogue, and creative character interactions. It supports text and image input with a 128k context window. Requests route through ZenMux to ByteDance; ZenMux does not publish a model-API zero-retention or training guarantee, so avoid sensitive data.","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-06-23","last_updated":"2026-06-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":128000,"output":32768},"cost":{"input":0.15,"output":0.37,"cache_read":0.03,"cache_write":0.003},"canonical_model_id":"bytedance-seed/seed-character"},"Salesforce/Llama-xLAM-2-70b-fc-r":{"id":"Salesforce/Llama-xLAM-2-70b-fc-r","name":"Llama-xLAM-2 70B fc-r","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-04-13","last_updated":"2025-04-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":16384},"cost":{"input":2.5,"output":2.5,"cache_read":1.25}},"featherless-ai/Qwerky-72B":{"id":"featherless-ai/Qwerky-72B","name":"Qwerky 72B","description":"General-purpose chat model for instruction following, writing, and analysis","family":"qwerky","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2025-03-20","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"input":32000,"output":8192},"cost":{"input":0.5,"output":0.5,"cache_read":0.25}},"mlabonne/NeuralDaredevil-8B-abliterated":{"id":"mlabonne/NeuralDaredevil-8B-abliterated","name":"Neural Daredevil 8B abliterated","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"input":8192,"output":8192},"cost":{"input":0.44,"output":0.44,"cache_read":0.22}},"GalrionSoftworks/MN-LooseCannon-12B-v1":{"id":"GalrionSoftworks/MN-LooseCannon-12B-v1","name":"MN-LooseCannon-12B-v1","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-nemo","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-07-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"input":16384,"output":8192},"cost":{"input":0.493,"output":0.493,"cache_read":0.2465}},"huihui-ai/Llama-3.3-70B-Instruct-abliterated":{"id":"huihui-ai/Llama-3.3-70B-Instruct-abliterated","name":"Llama 3.3 70B Instruct abliterated","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-08-08","last_updated":"2025-08-08","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":16384},"cost":{"input":0.7,"output":0.7,"cache_read":0.35}},"huihui-ai/Qwen2.5-32B-Instruct-abliterated":{"id":"huihui-ai/Qwen2.5-32B-Instruct-abliterated","name":"Qwen 2.5 32B Abliterated","description":"Uncensored version of Qwen 2.5 32B Instruct with restrictions removed.","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-01-06","last_updated":"2025-01-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":8192},"cost":{"input":0.7,"output":0.7}},"huihui-ai/DeepSeek-R1-Distill-Qwen-32B-abliterated":{"id":"huihui-ai/DeepSeek-R1-Distill-Qwen-32B-abliterated","name":"DeepSeek R1 Qwen Abliterated","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2025-01-20","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"input":16384,"output":8192},"cost":{"input":1.4,"output":1.4,"cache_read":0.7}},"huihui-ai/DeepSeek-R1-Distill-Llama-70B-abliterated":{"id":"huihui-ai/DeepSeek-R1-Distill-Llama-70B-abliterated","name":"DeepSeek R1 Llama 70B Abliterated","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2025-01-20","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"input":16384,"output":8192},"cost":{"input":0.7,"output":0.7,"cache_read":0.35}},"lightonai/LightOnOCR-2-1B":{"id":"lightonai/LightOnOCR-2-1B","name":"LightOnOCR 2","description":"LightOnOCR 2 hosted by IONOS in Berlin, Germany. Zero data retention.","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":8192},"cost":{"input":0.1785,"output":0.3465}},"tencent/hy4":{"id":"tencent/hy4","name":"Tencent Hy4","description":"A next-generation multimodal productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-04","last_updated":"2026-11-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.462,"output":1.386,"cache_read":0.0233},"canonical_model_id":"tencent/hy4"},"tencent/hy3":{"id":"tencent/hy3","name":"Tencent Hy3","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":128000},"cost":{"input":0.066,"output":0.26,"cache_read":0.029},"canonical_model_id":"tencent/hy3"},"tencent/hy4-preview":{"id":"tencent/hy4-preview","name":"Tencent Hy4 Preview","description":"A next-generation productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-28","last_updated":"2026-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":64000},"cost":{"input":0.834,"output":2.501,"cache_read":0.042},"canonical_model_id":"tencent/hy4-preview"},"mistralai/codestral-2508":{"id":"mistralai/codestral-2508","name":"Codestral 2508","description":"Mistral code model for low-latency completion, fill-in-the-middle, and code generation","family":"codestral","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-07-30","last_updated":"2025-07-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"input":256000,"output":32768},"cost":{"input":0.3,"output":0.9,"cache_read":0.15},"canonical_model_id":"mistral/codestral-2508"},"mistralai/mistral-medium-3.5":{"id":"mistralai/mistral-medium-3.5","name":"Mistral Medium 3.5","description":"Mistral Medium 3.5 is a 128B dense open-weights flagship model for instruction-following, reasoning, coding, long-horizon agentic work, tool use, structured output, and multimodal prompts. It supports a 256k context window and configurable reasoning effort.","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"release_date":"2026-04-29","last_updated":"2026-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":32768},"cost":{"input":1.5,"output":7.5,"cache_read":0.75}},"mistralai/mistral-small-3.1-24b-instruct":{"id":"mistralai/mistral-small-3.1-24b-instruct","name":"Mistral Small 3.1 24B (2503)","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-10-31","release_date":"2025-03-17","last_updated":"2025-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":102400},"cost":{"input":0.1,"output":0.3,"cache_read":0.05},"canonical_model_id":"mistral/mistral-small-3.1-24b-instruct"},"mistralai/ministral-14b-instruct-2512":{"id":"mistralai/ministral-14b-instruct-2512","name":"Ministral 3 14B","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.4,"cache_read":0.05},"canonical_model_id":"mistral/ministral-3-14b-instruct-2512"},"mistralai/ministral-3b-2512":{"id":"mistralai/ministral-3b-2512","name":"Ministral 3B","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":32768},"cost":{"input":0.1,"output":0.1,"cache_read":0.05},"canonical_model_id":"mistral/ministral-3b-2512"},"mistralai/ministral-8b-2512":{"id":"mistralai/ministral-8b-2512","name":"Ministral 8B","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.15,"output":0.15,"cache_read":0.075},"canonical_model_id":"mistral/ministral-8b-2512"},"mistralai/devstral-small-2505":{"id":"mistralai/devstral-small-2505","name":"Mistral Devstral Small 2505","description":"OpenHands+Devstral is 100% local 100% open, and is SOTA for the category on SWE-Bench Verified: 46.8% accuracy.","family":"devstral","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-08-02","last_updated":"2025-08-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":8192},"cost":{"input":0.06,"output":0.06,"cache_read":0.03}},"mistralai/mistral-small-24b-instruct-2501":{"id":"mistralai/mistral-small-24b-instruct-2501","name":"Mistral Small 24B","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-10-31","release_date":"2025-01-30","last_updated":"2025-01-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":8192},"cost":{"input":0.1155,"output":0.3465},"canonical_model_id":"mistral/mistral-small-24b-instruct-2501"},"mistralai/mistral-small-3.2-24b-instruct":{"id":"mistralai/mistral-small-3.2-24b-instruct","name":"Mistral Small 3.2 24B (2506)","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-10-31","release_date":"2025-06-20","last_updated":"2025-06-20","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":16384},"cost":{"input":0.2,"output":0.4,"cache_read":0.1},"canonical_model_id":"mistral/mistral-small-3.2-24b-instruct"},"mistralai/mistral-medium-3.1":{"id":"mistralai/mistral-medium-3.1","name":"Mistral Medium 3.1","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-06-30","release_date":"2025-08-12","last_updated":"2025-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"input":131072,"output":32768},"cost":{"input":0.4,"output":2,"cache_read":0.2},"canonical_model_id":"mistral/mistral-medium-3.1"},"mistralai/mistral-nemo-instruct-2407":{"id":"mistralai/mistral-nemo-instruct-2407","name":"Mistral Nemo","description":"12B parameter model with multilingual support.","family":"mistral-nemo","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-07","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"input":16384,"output":8192},"cost":{"input":0.1003,"output":0.1207,"cache_read":0.05015},"canonical_model_id":"mistral/mistral-nemo"},"mistralai/mistral-medium-3.5:thinking":{"id":"mistralai/mistral-medium-3.5:thinking","name":"Mistral Medium 3.5 Thinking","description":"Mistral Medium 3.5 with reasoning enabled by default (reasoning_effort=high), for complex coding, agentic, and multi-step reasoning prompts.","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"release_date":"2026-04-30","last_updated":"2026-04-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":32768},"cost":{"input":1.5,"output":7.5,"cache_read":0.75}},"mistralai/mistral-saba":{"id":"mistralai/mistral-saba","name":"Mistral Saba","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-02-17","last_updated":"2025-02-17","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"input":32768,"output":26214},"cost":{"input":0.1989,"output":0.595,"cache_read":0.09945},"canonical_model_id":"mistral/mistral-saba"},"mistralai/mistral-large":{"id":"mistralai/mistral-large","name":"Mistral Large 2411","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-11-30","release_date":"2024-02-26","last_updated":"2024-02-26","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":128000,"output":102400},"cost":{"input":2.006,"output":6.001,"cache_read":0.2},"canonical_model_id":"mistral/mistral-large"},"mistralai/mistral-large-4":{"id":"mistralai/mistral-large-4","name":"Mistral Large 4","description":"Mistral's 1T-parameter multimodal MoE for reasoning, coding, and agentic work","family":"mistral-large","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"input":524288,"output":262144},"cost":{"input":0.68,"output":2.09,"cache_read":0.07},"canonical_model_id":"mistral/mistral-large-4"},"mistralai/mistral-medium-3":{"id":"mistralai/mistral-medium-3","name":"Mistral Medium 3","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-07","last_updated":"2025-05-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"input":131072,"output":32768},"cost":{"input":0.4,"output":2,"cache_read":0.2},"canonical_model_id":"mistral/mistral-medium-3"},"mistralai/mistral-small-4-119b-2603":{"id":"mistralai/mistral-small-4-119b-2603","name":"Mistral Small 4 119B","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":16384},"cost":{"input":0.4,"output":1.4,"cache_read":0.2},"canonical_model_id":"mistral/mistral-small-2603"},"mistralai/ministral-14b-2512":{"id":"mistralai/ministral-14b-2512","name":"Ministral 14B","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.2,"output":0.2,"cache_read":0.1},"canonical_model_id":"mistral/ministral-14b-2512"},"mistralai/devstral-2-123b-instruct-2512":{"id":"mistralai/devstral-2-123b-instruct-2512","name":"Devstral 2 123B","description":"Mistral coding agent model for repository tasks and software engineering workflows","family":"devstral","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-12","release_date":"2025-12-09","last_updated":"2025-12-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":65536},"cost":{"input":0.4,"output":1.4,"cache_read":0.2},"canonical_model_id":"mistral/devstral-2512"},"mistralai/mixtral-8x22b-instruct-v0.1":{"id":"mistralai/mixtral-8x22b-instruct-v0.1","name":"Mixtral 8x22B","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-01-31","release_date":"2024-04-17","last_updated":"2024-04-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"input":65536,"output":52428},"cost":{"input":2,"output":6,"cache_read":0.2},"canonical_model_id":"mistral/mixtral-8x22b-instruct"},"mistralai/mistral-small-4-119b-2603:thinking":{"id":"mistralai/mistral-small-4-119b-2603:thinking","name":"Mistral Small 4 119B Thinking","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":16384},"cost":{"input":0.4,"output":1.4,"cache_read":0.2},"canonical_model_id":"mistral/mistral-small-2603"},"microsoft/wizardlm-2-8x22b":{"id":"microsoft/wizardlm-2-8x22b","name":"WizardLM-2 8x22B","description":"Microsoft WizardLM instruction-tuned Mixtral MoE for multilingual dialogue and complex tasks","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2024-04-15","last_updated":"2024-04-15","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"input":65536,"output":8192},"cost":{"input":0.493,"output":0.493,"cache_read":0.2465},"canonical_model_id":"microsoft/wizardlm-2-8x22b"},"orca/orcacyber-k3.1-pro":{"id":"orca/orcacyber-k3.1-pro","name":"OrcaCyber K3.1 Pro Uncensored","description":"An abliterated / uncensored variant of Kimi K3.1 Pro for authorized security research, coding, and tool use. Accepts text and images, with reasoning enabled by default and an option to turn it off. Supports a 1M-token context window, up to 943K output tokens, tool calling, and structured output. Offensive work is permitted only within an authorized security engagement.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-11-05","last_updated":"2026-11-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048064,"input":1048064,"output":943718},"cost":{"input":4,"output":20,"cache_read":0.35}},"orca/orcacyber-zero-1.5":{"id":"orca/orcacyber-zero-1.5","name":"OrcaCyber Zero 1.5","description":"OrcaRouter's frontier cybersecurity model, post-trained for authorized security research: vulnerability research and reproduction, exploit development, penetration testing, and security auditing. Supports a 1M-token context window, optional reasoning, tool calling, and structured output. Offensive work is permitted only within an authorized security engagement.","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"release_date":"2026-10-30","last_updated":"2026-10-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":999488,"input":999488,"output":128000},"cost":{"input":3,"output":7.5,"cache_read":0.75}},"orca/orcacyber-minimax-m3.1-flash":{"id":"orca/orcacyber-minimax-m3.1-flash","name":"OrcaCyber MiniMax M3.1 Flash Uncensored","description":"An abliterated / uncensored variant of MiniMax M3.1 Flash for authorized security research, coding, and tool use. Reasoning is always enabled, with selectable effort. Supports a 262K-token context window, up to 131K output tokens, tool calling, and structured output. Accepts text input. Offensive work is permitted only within an authorized security engagement.","family":"minimax-m3","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-11-02","last_updated":"2026-11-02","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":261632,"input":261632,"output":131072},"cost":{"input":0.8,"output":1.6,"cache_read":0.15}},"orca/orcacyber-mimo-flash":{"id":"orca/orcacyber-mimo-flash","name":"OrcaCyber MiMo V2.6 Flash","description":"An OrcaCyber model built on MiMo V2.6 Flash for authorized security research, coding, and tool use. Accepts text input, with reasoning enabled by default and an option to turn it off. Supports a 1M-token context window, up to 131K output tokens, tool calling, and structured output. Offensive work is permitted only within an authorized security engagement.","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048064,"input":1048064,"output":131072},"cost":{"input":0.8,"output":1.6,"cache_read":0.15}},"orca/orcacyber-glm-5.3-flash":{"id":"orca/orcacyber-glm-5.3-flash","name":"OrcaCyber GLM 5.3 Flash","description":"An OrcaCyber model built on GLM 5.3 Flash for authorized security research, coding, and tool use. Accepts text and images. Reasoning is always enabled, with selectable effort. Supports a 1M-token context window, up to 131K output tokens, tool calling, and structured output. Offensive work is permitted only within an authorized security engagement.","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048064,"input":1048064,"output":131072},"cost":{"input":0.8,"output":1.6,"cache_read":0.15}},"orca/orcacyber-flash-1.0":{"id":"orca/orcacyber-flash-1.0","name":"OrcaCyber DeepSeek V4.1 Flash","description":"An OrcaCyber model built on DeepSeek V4.1 Flash for authorized security research, coding, and tool use. Accepts text and images, with reasoning off by default. Supports a 1M-token context window, up to 393K output tokens, tool calling, and structured output. Offensive work is permitted only within an authorized security engagement.","family":"deepseek","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048064,"input":1048064,"output":393216},"cost":{"input":0.8,"output":1.6,"cache_read":0.15}},"orca/orcacyber-qwen3.8-flash-next":{"id":"orca/orcacyber-qwen3.8-flash-next","name":"OrcaCyber Qwen3.8 Flash Next Uncensored","description":"An abliterated / uncensored variant of Qwen3.8 Flash Next for authorized security research, coding, and tool use. Accepts text and images, with reasoning enabled by default and an option to turn it off. Supports a 262K-token context window, up to 131K output tokens, tool calling, and structured output. Offensive work is permitted only within an authorized security engagement.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"release_date":"2026-11-02","last_updated":"2026-11-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":261632,"input":261632,"output":131072},"cost":{"input":0.8,"output":1.6,"cache_read":0.15}},"orca/orcacyber-flash-1.0:thinking":{"id":"orca/orcacyber-flash-1.0:thinking","name":"OrcaCyber DeepSeek V4.1 Flash Thinking","description":"An OrcaCyber model built on DeepSeek V4.1 Flash for authorized security research, coding, and tool use. Accepts text and images, with reasoning on by default. Supports a 1M-token context window, up to 393K output tokens, tool calling, and structured output. Offensive work is permitted only within an authorized security engagement.","family":"deepseek","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048064,"input":1048064,"output":393216},"cost":{"input":0.8,"output":1.6,"cache_read":0.15}},"moonshotai/kimi-k3.1-pro-highspeed":{"id":"moonshotai/kimi-k3.1-pro-highspeed","name":"Kimi K3.1 Pro Highspeed","description":"Kimi K3.1 Pro Highspeed is the faster variant of K3.1 Pro, a multimodal reasoning model for coding, 3D creation, document analysis and multi-step tool use. It supports a 1M-token context window and text, image and video inputs. Reasoning is always enabled, with low, high and max effort levels.","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-10-24","last_updated":"2026-10-24","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":1048576},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":4}},"moonshotai/kimi-k3.1-pro":{"id":"moonshotai/kimi-k3.1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":1048576},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"moonshotai/kimi-k2.6":{"id":"moonshotai/kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":65536},"cost":{"input":0.39,"output":1.8,"cache_read":0.039},"canonical_model_id":"moonshotai/kimi-k2.6"},"moonshotai/kimi-k2-instruct-0711":{"id":"moonshotai/kimi-k2-instruct-0711","name":"Kimi K2 0711","description":"Kimi model for long-context chat, coding, and agentic reasoning","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-07-11","last_updated":"2025-07-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":8192},"cost":{"input":0.4,"output":1.8,"cache_read":0.2},"canonical_model_id":"moonshotai/kimi-k2-instruct"},"moonshotai/kimi-k2-instruct":{"id":"moonshotai/kimi-k2-instruct","name":"Kimi K2 Instruct","description":"Non-thinking Kimi K2 MoE instruction model for coding and tool-using agents","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-11","last_updated":"2025-07-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":8192},"cost":{"input":0.4,"output":1.8,"cache_read":0.2},"canonical_model_id":"moonshotai/kimi-k2-instruct"},"moonshotai/kimi-k3":{"id":"moonshotai/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":943718},"cost":{"input":0.45,"output":9.6,"cache_read":0.13},"canonical_model_id":"moonshotai/kimi-k3"},"moonshotai/kimi-k2.5":{"id":"moonshotai/kimi-k2.5","name":"Kimi K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":65536},"cost":{"input":0.375,"output":2,"cache_read":0.07},"canonical_model_id":"moonshotai/kimi-k2.5"},"moonshotai/kimi-k2.5:thinking":{"id":"moonshotai/kimi-k2.5:thinking","name":"Kimi K2.5 Thinking","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":65536},"cost":{"input":0.375,"output":2,"cache_read":0.07},"canonical_model_id":"moonshotai/kimi-k2.5"},"moonshotai/kimi-k2.6:thinking":{"id":"moonshotai/kimi-k2.6:thinking","name":"Kimi K2.6 Thinking","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":65536},"cost":{"input":0.88,"output":4.13,"cache_read":0.231},"canonical_model_id":"moonshotai/kimi-k2.6"},"moonshotai/kimi-latest":{"id":"moonshotai/kimi-latest","name":"Kimi Latest","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-05-03","last_updated":"2026-05-03","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":943718},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2}},"moonshotai/kimi-k2.7-code":{"id":"moonshotai/kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":65536},"cost":{"input":0.6,"output":3,"cache_read":0.12},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"moonshotai/kimi-k2.7-code-highspeed":{"id":"moonshotai/kimi-k2.7-code-highspeed","name":"Kimi K2.7 Code High-Speed","description":"Lower-latency Kimi Code variant for interactive edits and coding-agent loops","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":65536},"cost":{"input":1.9,"output":8,"cache_read":0.32},"canonical_model_id":"moonshotai/kimi-k2.7-code-highspeed"},"moonshotai/kimi-k2-thinking":{"id":"moonshotai/kimi-k2-thinking","name":"Kimi K2 Thinking","description":"Thinking Kimi model for slower research passes, planning, and hard technical questions","family":"kimi-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-11-06","last_updated":"2025-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":98304},"cost":{"input":0.6,"output":2.5,"cache_read":0.15},"canonical_model_id":"moonshotai/kimi-k2-thinking"},"moonshotai/Kimi-K2-Instruct-0905":{"id":"moonshotai/Kimi-K2-Instruct-0905","name":"Kimi K2 0905","description":"Kimi model for long-context chat, coding, and agentic reasoning","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-09-05","last_updated":"2025-09-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":100352},"cost":{"input":0.4,"output":1.8,"cache_read":0.2},"canonical_model_id":"moonshotai/kimi-k2-0905"},"perceptron/perceptron-mk1":{"id":"perceptron/perceptron-mk1","name":"Perceptron Mk1","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-05-12","last_updated":"2026-05-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"input":32768,"output":8192},"cost":{"input":0.15,"output":1.5,"cache_read":0.075},"canonical_model_id":"perceptron/perceptron-mk1"},"perceptron/perceptron-mk1.5":{"id":"perceptron/perceptron-mk1.5","name":"Perceptron Mk1.5","description":"Image, video, and audio understanding with visual grounding, reasoning, and function calling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-25","last_updated":"2026-09-25","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":36864,"input":36864,"output":8192},"cost":{"input":0.15,"output":1.5},"canonical_model_id":"perceptron/perceptron-mk1.5"},"MarinaraSpaghetti/NemoMix-Unleashed-12B":{"id":"MarinaraSpaghetti/NemoMix-Unleashed-12B","name":"NemoMix 12B Unleashed","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-nemo","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-07-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":8192},"cost":{"input":0.493,"output":0.493,"cache_read":0.2465}},"openai/gpt-5.5":{"id":"openai/gpt-5.5","name":"GPT 5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"openai/gpt-5.5"},"openai/gpt-terra-latest":{"id":"openai/gpt-terra-latest","name":"GPT Terra Latest","description":"Compatibility alias that routes to GPT 5.6 Terra, the latest supported GPT Terra model.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25}},"openai/gpt-4.1-nano":{"id":"openai/gpt-4.1-nano","name":"GPT 4.1 Nano","description":"Tiny GPT-4.1 option for classification, routing, and very high-volume tasks","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"input":1047576,"output":32768},"cost":{"input":0.1,"output":0.4,"cache_read":0.025},"canonical_model_id":"openai/gpt-4.1-nano"},"openai/gpt-5.2":{"id":"openai/gpt-5.2","name":"GPT 5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":400000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"openai/o1":{"id":"openai/o1","name":"OpenAI o1","description":"O-series reasoning model for hard analysis, math, coding, and planning","family":"o","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":false,"structured_output":false,"temperature":false,"knowledge":"2023-09","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":200000,"output":100000},"cost":{"input":15,"output":60,"cache_read":7.5},"canonical_model_id":"openai/o1"},"openai/gpt-4.1-mini":{"id":"openai/gpt-4.1-mini","name":"GPT 4.1 Mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"input":1047576,"output":32768},"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-4.1-mini"},"openai/gpt-5.2-codex":{"id":"openai/gpt-5.2-codex","name":"GPT 5.2 Codex","description":"Code-specialist GPT for repository edits, reviews, and long-running software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":400000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2-codex"},"openai/gpt-6-sol-pro":{"id":"openai/gpt-6-sol-pro","name":"GPT 6 Sol Pro","description":"GPT-6 Sol Pro uses the same underlying model as GPT-6 Sol with Pro reasoning mode enabled for higher-quality responses on complex tasks.","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5}},"openai/gpt-5.4-mini":{"id":"openai/gpt-5.4-mini","name":"GPT 5.4 Mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":400000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"openai/o1-pro":{"id":"openai/o1-pro","name":"OpenAI o1 Pro","description":"O-series reasoning model for hard analysis, math, coding, and planning","family":"o-pro","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"knowledge":"2023-09","release_date":"2025-03-19","last_updated":"2025-03-19","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":200000,"output":100000},"cost":{"input":150,"output":600,"cache_read":75},"canonical_model_id":"openai/o1-pro"},"openai/o3-pro-2025-06-10":{"id":"openai/o3-pro-2025-06-10","name":"OpenAI o3-pro (2025-06-10)","description":"O-series reasoning model for hard analysis, math, coding, and planning","family":"o-pro","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-06-10","last_updated":"2025-06-10","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":200000,"output":100000},"cost":{"input":22,"output":88,"cache_read":11},"canonical_model_id":"openai/o3-pro"},"openai/gpt-oss-safeguard-20b":{"id":"openai/gpt-oss-safeguard-20b","name":"GPT OSS Safeguard 20B","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-10-29","last_updated":"2025-10-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":65536},"cost":{"input":0.075,"output":0.3},"canonical_model_id":"openai/gpt-oss-safeguard-20b"},"openai/gpt-5.6-terra-pro":{"id":"openai/gpt-5.6-terra-pro","name":"GPT 5.6 Terra Pro","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"openai/gpt-5.6-terra"},"openai/gpt-5":{"id":"openai/gpt-5","name":"GPT 5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":400000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"openai/gpt-5.1-codex-max":{"id":"openai/gpt-5.1-codex-max","name":"GPT 5.1 Codex Max","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":400000,"output":128000},"cost":{"input":2.5,"output":20,"cache_read":0.25},"canonical_model_id":"openai/gpt-5.1-codex-max"},"openai/gpt-5.1-codex":{"id":"openai/gpt-5.1-codex","name":"GPT 5.1 Codex","description":"Codex GPT for repository edits, code review, and practical software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":false,"structured_output":false,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":400000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1-codex"},"openai/gpt-chat-latest":{"id":"openai/gpt-chat-latest","name":"GPT Chat Latest","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-05-03","last_updated":"2026-05-03","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5}},"openai/gpt-5.6-sol":{"id":"openai/gpt-5.6-sol","name":"GPT 5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5},"canonical_model_id":"openai/gpt-5.6-sol"},"openai/gpt-6.1-terra":{"id":"openai/gpt-6.1-terra","name":"GPT 6.1 Terra","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25},"canonical_model_id":"openai/gpt-6.1-terra"},"openai/gpt-4.1":{"id":"openai/gpt-4.1","name":"GPT 4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"input":1047576,"output":32768},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"openai/o3":{"id":"openai/o3","name":"OpenAI o3","description":"Deliberate o-series reasoner for hard math, coding, and multi-step analysis","family":"o","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":false,"structured_output":false,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":200000,"output":100000},"cost":{"input":2,"output":8,"cache_read":1},"canonical_model_id":"openai/o3"},"openai/gpt-4o-2024-11-20":{"id":"openai/gpt-4o-2024-11-20","name":"GPT-4o (2024-11-20)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-09","release_date":"2024-11-20","last_updated":"2024-11-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o-2024-11-20"},"openai/gpt-6-luna-pro":{"id":"openai/gpt-6-luna-pro","name":"GPT 6 Luna Pro","description":"GPT-6 Luna Pro uses the same underlying model as GPT-6 Luna with Pro reasoning mode enabled for higher-quality responses on complex tasks.","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125}},"openai/gpt-6-luna":{"id":"openai/gpt-6-luna","name":"GPT 6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125},"canonical_model_id":"openai/gpt-6-luna"},"openai/gpt-5.1-2025-11-13":{"id":"openai/gpt-5.1-2025-11-13","name":"GPT-5.1 (2025-11-13)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":400000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1"},"openai/gpt-sol-latest":{"id":"openai/gpt-sol-latest","name":"GPT Sol Latest","description":"Compatibility alias that routes to GPT 5.6 Sol, the latest supported GPT Sol model.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5}},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT OSS 20B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":16384},"cost":{"input":0.018,"output":0.09,"cache_read":0.009},"canonical_model_id":"openai/gpt-oss-20b"},"openai/gpt-luna-latest":{"id":"openai/gpt-luna-latest","name":"GPT Luna Latest","description":"Compatibility alias that routes to GPT 5.6 Luna, the latest supported GPT Luna model.","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125}},"openai/gpt-6-astra-pro":{"id":"openai/gpt-6-astra-pro","name":"GPT 6 Astra Pro","description":"GPT 6 Astra in Pro reasoning mode. Uses additional model work for difficult tasks, with higher latency and token usage at the same per-token rates. Reasoning effort remains independently configurable.","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5}},"openai/gpt-5-pro":{"id":"openai/gpt-5-pro","name":"GPT 5 Pro","description":"Higher-accuracy GPT-5 tier for tough analysis, coding reviews, and planning","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":false,"structured_output":false,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":400000,"output":128000},"cost":{"input":15,"output":120,"cache_read":1.5},"canonical_model_id":"openai/gpt-5-pro"},"openai/gpt-6.1-sol-pro":{"id":"openai/gpt-6.1-sol-pro","name":"GPT 6.1 Sol Pro","description":"GPT-6.1 Sol Pro uses the same underlying model as GPT-6.1 Sol with Pro reasoning mode enabled for higher-quality responses on complex tasks.","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5}},"openai/gpt-6-sol":{"id":"openai/gpt-6-sol","name":"GPT 6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"openai/gpt-6-sol"},"openai/gpt-5.3-codex":{"id":"openai/gpt-5.3-codex","name":"GPT 5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":400000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"openai/gpt-6-astra":{"id":"openai/gpt-6-astra","name":"GPT 6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"openai/gpt-6-astra"},"openai/gpt-5.1":{"id":"openai/gpt-5.1","name":"GPT 5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":400000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1"},"openai/gpt-latest":{"id":"openai/gpt-latest","name":"GPT Latest","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-03-29","last_updated":"2026-03-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5}},"openai/gpt-5-mini":{"id":"openai/gpt-5-mini","name":"GPT 5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":false,"structured_output":false,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":400000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"openai/gpt-5.1-codex-mini":{"id":"openai/gpt-5.1-codex-mini","name":"GPT 5.1 Codex Mini","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":false,"structured_output":false,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":400000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5.1-codex-mini"},"openai/gpt-5.6-luna-pro":{"id":"openai/gpt-5.6-luna-pro","name":"GPT 5.6 Luna Pro","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-5.6-luna":{"id":"openai/gpt-5.6-luna","name":"GPT 5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-6.1-sol":{"id":"openai/gpt-6.1-sol","name":"GPT 6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"openai/gpt-6.1-sol"},"openai/gpt-6.1-terra-pro":{"id":"openai/gpt-6.1-terra-pro","name":"GPT 6.1 Terra Pro","description":"GPT-6.1 Terra Pro uses the same underlying model as GPT-6.1 Terra with Pro reasoning mode enabled for higher-quality responses on complex tasks.","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-10-27","last_updated":"2026-10-27","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25}},"openai/gpt-5-nano":{"id":"openai/gpt-5-nano","name":"GPT 5 Nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":false,"structured_output":false,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":400000,"output":128000},"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-nano"},"openai/gpt-5.4":{"id":"openai/gpt-5.4","name":"GPT 5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25},"canonical_model_id":"openai/gpt-5.4"},"openai/gpt-4o-2024-08-06":{"id":"openai/gpt-4o-2024-08-06","name":"GPT-4o (2024-08-06)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-09","release_date":"2024-08-06","last_updated":"2024-08-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o-2024-08-06"},"openai/gpt-5.4-nano":{"id":"openai/gpt-5.4-nano","name":"GPT 5.4 Nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":400000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"openai/gpt-4o":{"id":"openai/gpt-4o","name":"GPT-4o","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":16384},"cost":{"input":0.03,"output":0.15,"cache_read":0.015},"canonical_model_id":"openai/gpt-oss-120b"},"openai/gpt-5.6-terra":{"id":"openai/gpt-5.6-terra","name":"GPT 5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"openai/gpt-5.6-terra"},"openai/o3-mini-low":{"id":"openai/o3-mini-low","name":"OpenAI o3-mini (Low)","description":"O-series reasoning model for hard analysis, math, coding, and planning","family":"o-mini","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2024-12-20","last_updated":"2025-01-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":200000,"output":100000},"cost":{"input":1.1,"output":4.4,"cache_read":0.55},"canonical_model_id":"openai/o3-mini"},"openai/gpt-astra-latest":{"id":"openai/gpt-astra-latest","name":"GPT Astra Latest","description":"Compatibility alias that routes to GPT 6 Astra, the latest supported GPT Astra model.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5}},"openai/gpt-4o-mini":{"id":"openai/gpt-4o-mini","name":"GPT-4o mini","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":128000,"output":16384},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-4o-mini"},"openai/gpt-5.6-sol-pro":{"id":"openai/gpt-5.6-sol-pro","name":"GPT 5.6 Sol Pro","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":1050000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5},"canonical_model_id":"openai/gpt-5.6-sol"},"elorian/glimpse":{"id":"elorian/glimpse","name":"Elorian Glimpse","description":"Glimpse is Elorian's visual reasoning model for understanding images and video and answering in text. It can analyze charts, count objects, follow events over time, and reason about spatial relationships and physical cause and effect. It supports tool calling and structured output across a shared 262,144-token context window, with up to 256,000 output tokens within the remaining context.","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"input":262144,"output":256000},"cost":{"input":0.63,"output":3.15,"cache_read":0.063}},"cohere/command-r-plus-08-2024":{"id":"cohere/command-r-plus-08-2024","name":"Cohere: Command R+","description":"Cohere's RAG workhorse for long-context enterprise search and tool use","family":"command-r","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-06-01","release_date":"2024-08-30","last_updated":"2024-08-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":4096},"cost":{"input":2.856,"output":14.246,"cache_read":1.428},"canonical_model_id":"cohere/command-r-plus-08-2024"},"pqhaz/DeepSeek-V4.1-Flash-1017-heretic":{"id":"pqhaz/DeepSeek-V4.1-Flash-1017-heretic","name":"DeepSeek V4.1 Flash Heretic","description":"pqhaz's Heretic checkpoint of DeepSeek V4.1 Flash 1017, served by Sable at original mixed precision (FP8 dense/Engram and MXFP4 experts). Supports text and image input, tools, structured output, and optional reasoning. Separate from the DeAlign uncensored checkpoint.","family":"deepseek","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"release_date":"2026-10-31","last_updated":"2026-10-31","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":512000,"input":512000,"output":128000},"cost":{"input":0.198,"output":0.792,"cache_read":0.0132,"cache_write":0.198}},"pqhaz/DeepSeek-V4.1-Flash-1017-heretic:thinking":{"id":"pqhaz/DeepSeek-V4.1-Flash-1017-heretic:thinking","name":"DeepSeek V4.1 Flash Heretic Thinking","description":"pqhaz's Heretic checkpoint of DeepSeek V4.1 Flash 1017, served by Sable at original mixed precision (FP8 dense/Engram and MXFP4 experts). Supports text and image input, tools, structured output, and optional reasoning. Separate from the DeAlign uncensored checkpoint.","family":"deepseek","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"release_date":"2026-10-31","last_updated":"2026-10-31","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":512000,"input":512000,"output":128000},"cost":{"input":0.198,"output":0.792,"cache_read":0.0132,"cache_write":0.198}},"ricursiveai/ripple-65b-preview":{"id":"ricursiveai/ripple-65b-preview","name":"Ripple 65B Preview","description":"Ripple 65B Preview is Ricursive Intelligence's Apache 2.0-licensed, 65-billion-parameter reasoning model for coding and agentic tasks. It accepts and returns text, supports automatic tool calling and JSON output, and has a 16,384-token context window shared by input and output. It reasons before answering by default, and this preview's thinking cannot be reliably turned off.","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2026-11-05","last_updated":"2026-11-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"input":16384,"output":16384},"cost":{"input":0.2,"output":0.6,"cache_read":0.05}},"xiaomi/mimo-v2.5:thinking":{"id":"xiaomi/mimo-v2.5:thinking","name":"MiMo V2.5 Thinking","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.422,"output":2.11,"cache_read":0.0844,"cache_write":0},"canonical_model_id":"xiaomi/mimo-v2.5"},"xiaomi/mimo-v2.6-flash-abliterated":{"id":"xiaomi/mimo-v2.6-flash-abliterated","name":"MiMo V2.6 Flash Abliterated","description":"A MiMo V2.6 Flash finetune with refusal-direction ablation, image input, a 1M-token context window, separate reasoning output, and tool calling.","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-09-25","last_updated":"2026-09-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.5,"output":1.5,"cache_read":0.275}},"xiaomi/mimo-v2.6-flash-uncensored:thinking":{"id":"xiaomi/mimo-v2.6-flash-uncensored:thinking","name":"MiMo V2.6 Flash Uncensored Thinking","description":"MiMo V2.6 Flash Uncensored with maximum thinking enabled. Supports a 1M-token context window and tool calling.","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["max"]}],"tool_call":true,"structured_output":false,"release_date":"2026-09-26","last_updated":"2026-09-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.5,"output":1.5,"cache_read":0.1995}},"xiaomi/mimo-v2.6-pro":{"id":"xiaomi/mimo-v2.6-pro","name":"MiMo V2.6 Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.435,"output":0.87,"cache_read":0.0036,"cache_write":0},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"xiaomi/mimo-v2.6-pro-ultraspeed":{"id":"xiaomi/mimo-v2.6-pro-ultraspeed","name":"MiMo V2.6 Pro UltraSpeed","description":"MiMo pro model for strong multimodal reasoning and agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":4.35,"output":8.7,"cache_read":0.036,"cache_write":0},"canonical_model_id":"xiaomi/mimo-v2.6-pro-ultraspeed"},"xiaomi/mimo-v2.6-flash":{"id":"xiaomi/mimo-v2.6-flash","name":"MiMo V2.6 Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.14,"output":0.28,"cache_read":0.0028,"cache_write":0},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"xiaomi/mimo-v2.5-pro:thinking":{"id":"xiaomi/mimo-v2.5-pro:thinking","name":"MiMo V2.5 Pro Thinking","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.49,"output":0.97,"cache_read":0.004,"cache_write":0},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"xiaomi/mimo-v2.5":{"id":"xiaomi/mimo-v2.5","name":"MiMo V2.5","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.422,"output":2.11,"cache_read":0.0844,"cache_write":0},"canonical_model_id":"xiaomi/mimo-v2.5"},"xiaomi/mimo-v2.5-pro":{"id":"xiaomi/mimo-v2.5-pro","name":"MiMo V2.5 Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.49,"output":0.97,"cache_read":0.004,"cache_write":0},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"xiaomi/mimo-v2.6-flash-uncensored":{"id":"xiaomi/mimo-v2.6-flash-uncensored","name":"MiMo V2.6 Flash Uncensored","description":"A text-only, lower-refusal MiMo V2.6 Flash finetune served by Heabsy with a 1M-token context window, separate reasoning output, and tool calling.","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-09-25","last_updated":"2026-09-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.5,"output":1.5,"cache_read":0.1995}},"speakleash/bielik-11b-v3.0-instruct":{"id":"speakleash/bielik-11b-v3.0-instruct","name":"Bielik 11B v3.0","description":"SpeakLeash’s Polish-focused multilingual model for conversation, writing and text analysis across European languages. Supports tool calling with a 32K context window.","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":32768},"cost":{"input":0.48,"output":0.48}},"ibm-granite/granite-4.2-8b":{"id":"ibm-granite/granite-4.2-8b","name":"Granite 4.2 8B","description":"IBM Granite 4.2 8B is an Apache 2.0-licensed dense model with native step-by-step reasoning and specialized training for agentic work. It can plan before acting, sequence tools, navigate codebases, work in terminals, and verify results across coding, search, mathematics, science, and complex instruction-following tasks.","family":"granite","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-25","last_updated":"2026-08-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":117964},"cost":{"input":0.06,"output":0.15,"cache_read":0.015},"canonical_model_id":"ibm/granite-4.2-8b"},"meganova-ai/manta-flash-1.0":{"id":"meganova-ai/manta-flash-1.0","name":"Manta Flash 1.0","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-09-20","last_updated":"2025-12-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":16384,"input":16384,"output":16384},"cost":{"input":0.02,"output":0.16,"cache_read":0.01}},"meganova-ai/manta-mini-1.0":{"id":"meganova-ai/manta-mini-1.0","name":"Manta Mini 1.0","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-09-20","last_updated":"2025-12-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"input":8192,"output":8192},"cost":{"input":0.02,"output":0.16,"cache_read":0.01}},"meganova-ai/manta-pro-1.0":{"id":"meganova-ai/manta-pro-1.0","name":"Manta Pro 1.0","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"nova","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-09-20","last_updated":"2025-12-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":65536,"input":65536,"output":32768},"cost":{"input":0.06,"output":0.5,"cache_read":0.03}},"minimax/minimax-m2.1":{"id":"minimax/minimax-m2.1","name":"MiniMax M2.1","description":"Earlier MiniMax agent model for practical coding and productivity tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"input":200000,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.03},"canonical_model_id":"minimax/MiniMax-M2.1"},"minimax/minimax-m2.5":{"id":"minimax/minimax-m2.5","name":"MiniMax M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"input":204800,"output":131072},"cost":{"input":0.27,"output":1.08,"cache_read":0.027},"canonical_model_id":"minimax/MiniMax-M2.5"},"minimax/minimax-m2":{"id":"minimax/minimax-m2","name":"MiniMax M2","description":"Efficient open MiniMax model built for coding agents and tool-heavy workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-10-27","last_updated":"2025-10-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"input":200000,"output":131072},"cost":{"input":0.17,"output":1.53,"cache_read":0.085},"canonical_model_id":"minimax/MiniMax-M2"},"minimax/minimax-m3.1-flash":{"id":"minimax/minimax-m3.1-flash","name":"MiniMax M3.1 Flash","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":524288},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"minimax/minimax-m3":{"id":"minimax/minimax-m3","name":"MiniMax M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":512000,"input":512000,"output":80000},"cost":{"input":0.23,"output":0.96,"cache_read":0.05},"canonical_model_id":"minimax/MiniMax-M3"},"minimax/minimax-01":{"id":"minimax/minimax-01","name":"MiniMax 01","description":"MiniMax multimodal coding model for long-context reasoning and agent tasks","family":"minimax","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2025-01-15","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000192,"input":1000192,"output":16384},"cost":{"input":0.1394,"output":1.122,"cache_read":0.0697}},"minimax/minimax-latest":{"id":"minimax/minimax-latest","name":"MiniMax Latest","description":"MiniMax multimodal coding model for long-context reasoning and agent tasks","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"release_date":"2026-05-03","last_updated":"2026-05-03","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":512000,"input":512000,"output":80000},"cost":{"input":0.23,"output":0.96,"cache_read":0.05}},"minimax/minimax-m3:thinking":{"id":"minimax/minimax-m3:thinking","name":"MiniMax M3 Thinking","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":512000,"input":512000,"output":80000},"cost":{"input":0.23,"output":0.96,"cache_read":0.05},"canonical_model_id":"minimax/MiniMax-M3"},"minimax/minimax-m2.7":{"id":"minimax/minimax-m2.7","name":"MiniMax M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"input":204800,"output":131072},"cost":{"input":0.21,"output":0.84,"cache_read":0.042},"canonical_model_id":"minimax/MiniMax-M2.7"},"minimax/minimax-m2.7-turbo":{"id":"minimax/minimax-m2.7-turbo","name":"MiniMax M2.7 Turbo","description":"Efficient MiniMax model for quick assistance, coding, and routine automation","family":"minimax-m2.7","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"input":204800,"output":131072},"cost":{"input":0.6,"output":2.4,"cache_read":0.06}},"thinkingmachines/Inkling-Small:thinking":{"id":"thinkingmachines/Inkling-Small:thinking","name":"Inkling Small Thinking","description":"Multimodal MoE reasoning model (276B total, 12B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-30","last_updated":"2026-07-30","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"input":524288,"output":32768},"cost":{"input":0.45,"output":1.2,"cache_read":0.1},"canonical_model_id":"thinkingmachines/inkling-small"},"thinkingmachines/inkling":{"id":"thinkingmachines/inkling","name":"Inkling","description":"Multimodal MoE reasoning model (975B total, 41B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":1040000,"input":1040000,"output":32768},"cost":{"input":1,"output":4.05,"cache_read":0.17},"canonical_model_id":"thinkingmachines/inkling"},"thinkingmachines/Inkling-Small":{"id":"thinkingmachines/Inkling-Small","name":"Inkling Small","description":"Multimodal MoE reasoning model (276B total, 12B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-30","last_updated":"2026-07-30","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"input":524288,"output":32768},"cost":{"input":0.45,"output":1.2,"cache_read":0.1},"canonical_model_id":"thinkingmachines/inkling-small"},"thinkingmachines/inkling:thinking":{"id":"thinkingmachines/inkling:thinking","name":"Inkling Thinking","description":"Multimodal MoE reasoning model (975B total, 41B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":1040000,"input":1040000,"output":32768},"cost":{"input":1,"output":4.05,"cache_read":0.17},"canonical_model_id":"thinkingmachines/inkling"},"reflection/beam-1.0":{"id":"reflection/beam-1.0","name":"Beam 1.0 501B A23B","description":"Reflection's Apache 2.0 open-weight text model with 501.3B total and 23.4B active parameters, built for coding, reasoning and tool use. It supports a shared 1,048,576-token context window, up to 131,072 output tokens, JSON mode and structured output. Reasoning is always enabled with low, medium, high, xhigh and max effort; NanoGPT defaults to max. Knowledge cutoff: June 30, 2026.","family":"beam","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-06-30","release_date":"2026-10-05","last_updated":"2026-10-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.5,"output":1.5,"cache_read":0.05},"canonical_model_id":"reflection/beam-1.0-501b-a23b"},"ornith-ai/ornith-1.5-122b":{"id":"ornith-ai/ornith-1.5-122b","name":"Ornith 1.5 122B","description":"Ornith 1.5 122B is an MIT-licensed open-weight model for coding, reasoning, tool use and image understanding. It accepts text and images across a shared 262,144-token context, with up to 32,768 output tokens. Reasoning is enabled by default; JSON object output and streaming are supported.","family":"ornith","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2026-10-20","last_updated":"2026-10-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.26,"output":2.08,"cache_read":0.07}},"ornith-ai/ornith-1.5-35b-a3b:thinking":{"id":"ornith-ai/ornith-1.5-35b-a3b:thinking","name":"Ornith 1.5 35B Thinking","description":"Ornith 1.5 35B A3B is an open-weight mixture-of-experts model for agentic coding, reasoning, tool use, image understanding, and long-context work. This variant enables thinking by default.","family":"ornith","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2026-07-29","last_updated":"2026-08-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.4,"cache_read":0.05}},"ornith-ai/ornith-1.5-35b-a3b":{"id":"ornith-ai/ornith-1.5-35b-a3b","name":"Ornith 1.5 35B","description":"Ornith 1.5 35B A3B is an open-weight mixture-of-experts model for agentic coding, tool use, image understanding, and long-context work. This variant disables thinking for faster direct responses.","family":"ornith","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2026-07-29","last_updated":"2026-08-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.4,"cache_read":0.05}},"upstage/solar-pro4:thinking":{"id":"upstage/solar-pro4:thinking","name":"Solar Pro 4 Thinking","description":"Upstage's flagship model, specialized for agentic use","family":"solar-pro","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02","release_date":"2026-08-06","last_updated":"2026-08-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"input":524288,"output":131072},"cost":{"input":0.15,"output":0.6,"cache_read":0.03},"canonical_model_id":"upstage/solar-pro4"},"upstage/solar-pro4":{"id":"upstage/solar-pro4","name":"Solar Pro 4","description":"Upstage's flagship model, specialized for agentic use","family":"solar-pro","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02","release_date":"2026-08-06","last_updated":"2026-08-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"input":524288,"output":131072},"cost":{"input":0.15,"output":0.6,"cache_read":0.03},"canonical_model_id":"upstage/solar-pro4"},"upstage/solar-mini4":{"id":"upstage/solar-mini4","name":"Solar Mini 4","description":"Upstage's compact, cost-efficient model for agentic use","family":"solar-mini","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"input":524288,"output":131072},"cost":{"input":0.05,"output":0.2,"cache_read":0.005},"canonical_model_id":"upstage/solar-mini4"},"upstage/solar-pro-3":{"id":"upstage/solar-pro-3","name":"Solar Pro 3","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"solar-pro","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-07","release_date":"2026-01-26","last_updated":"2026-03-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"input":131072,"output":117964},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"upstage/solar-pro3"},"upstage/solar-mini4:thinking":{"id":"upstage/solar-mini4:thinking","name":"Solar Mini 4 Thinking","description":"Upstage's compact, cost-efficient model for agentic use","family":"solar-mini","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"input":524288,"output":131072},"cost":{"input":0.05,"output":0.2,"cache_read":0.005},"canonical_model_id":"upstage/solar-mini4"},"prism-ml/ternary-bonsai-2-27b":{"id":"prism-ml/ternary-bonsai-2-27b","name":"Ternary Bonsai 2 27B","description":"Ternary Bonsai 2 27B is a 27B-parameter reasoning model from PrismML derived from Qwen3.8-27B. It supports coding, mathematics, tool calling, and image understanding with a 262K-token context window.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","xhigh"]}],"tool_call":true,"structured_output":true,"release_date":"2026-09-18","last_updated":"2026-09-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.075,"output":0.5,"cache_read":0.0375}},"prism-ml/ternary-bonsai-2-9b":{"id":"prism-ml/ternary-bonsai-2-9b","name":"Ternary Bonsai2 9B","description":"Ternary Bonsai2 9B is Prism ML’s open-weight model derived from Qwen3.5-9B with ternary language weights. It accepts text and generates text, supports reasoning and tool calling, and offers a shared 262,144-token context window with up to 65,536 output tokens. Thinking is enabled by default and can be turned off.","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":65536},"cost":{"input":0.08,"output":0.13,"cache_read":0.04}},"Envoid/Llama-3.05-Nemotron-Tenyxchat-Storybreaker-70B":{"id":"Envoid/Llama-3.05-Nemotron-Tenyxchat-Storybreaker-70B","name":"Nemotron Tenyxchat Storybreaker 70b","description":"Nemotron model for efficient reasoning, coding, and specialized AI agents","family":"nemotron","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"input":16384,"output":8192},"cost":{"input":0.493,"output":0.493,"cache_read":0.2465}},"Envoid/Llama-3.05-NT-Storybreaker-Ministral-70B":{"id":"Envoid/Llama-3.05-NT-Storybreaker-Ministral-70B","name":"Llama 3.05 Storybreaker Ministral 70b","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"input":16384,"output":8192},"cost":{"input":0.493,"output":0.493,"cache_read":0.2465}},"heabsy/cyberheabsy":{"id":"heabsy/cyberheabsy","name":"CyberHeabsy","description":"A low-refusal text model for authorized security research, roleplay, and creative writing. It preserves tool calling after refusal removal, supports optional reasoning, and has a 1M-token context window.","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-09-27","last_updated":"2026-09-27","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":1.5,"output":4.5,"cache_read":0.275}},"heabsy/qwen3.8-27b-uncensored-fast":{"id":"heabsy/qwen3.8-27b-uncensored-fast","name":"Qwen 3.8 27B Uncensored Fast by Heabsy","description":"Heabsy's NVFP4 build of Qwen3.8-27B by Alibaba Cloud, with refusal removal based on huihui-ai's Huihui-Qwen3.8-27B-abliterated. Quantized and calibrated by Heabsy, with unpublished weights under the Heabsy Model License. Supports text and image input, tools, and optional reasoning capped at 16,384 tokens within the output budget. This named build is separate from Qwen 3.8 27B Uncensored.","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"release_date":"2026-10-16","last_updated":"2026-10-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":235929},"cost":{"input":1,"output":3,"cache_read":0.22}},"LatitudeGames/Wayfarer-Large-70B-Llama-3.3":{"id":"LatitudeGames/Wayfarer-Large-70B-Llama-3.3","name":"Llama 3.3 70B Wayfarer","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-02-20","last_updated":"2025-02-20","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":16384},"cost":{"input":0.7,"output":0.7,"cache_read":0.35}},"LLM360/K2-Think":{"id":"LLM360/K2-Think","name":"K2-Think","description":"Kimi reasoning model for long-horizon research, planning, and tool use","family":"kimi-thinking","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-07-26","last_updated":"2025-07-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":32768},"cost":{"input":0.17,"output":0.68,"cache_read":0.085}},"VongolaChouko/Starcannon-Unleashed-12B-v1.0":{"id":"VongolaChouko/Starcannon-Unleashed-12B-v1.0","name":"Mistral Nemo Starcannon 12b v1","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-nemo","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-07-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"input":16384,"output":8192},"cost":{"input":0.493,"output":0.493,"cache_read":0.2465}},"ReadyArt/MS3.2-The-Omega-Directive-24B-Unslop-v2.0":{"id":"ReadyArt/MS3.2-The-Omega-Directive-24B-Unslop-v2.0","name":"Omega Directive 24B Unslop v2.0","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":32768},"cost":{"input":0.5,"output":0.5,"cache_read":0.25}},"meta/muse-spark-1.3":{"id":"meta/muse-spark-1.3","name":"Muse Spark 1.3","description":"Muse Spark 1.3 is a multimodal reasoning model from Meta for long-running agentic, multi-agent, and coding workflows. It improves long-horizon agent collaboration, instruction following, and coding efficiency relative to Muse Spark 1.2.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":943718},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.3"},"meta/muse-wonder":{"id":"meta/muse-wonder","name":"Muse Wonder","description":"Meta's Muse Wonder is a frontier reasoning model designed for complex personal and professional agentic tasks. It accepts text, images, audio, video, and PDF documents across a one-million-token context window, supports tool calling and structured output, and always reasons before answering.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-10-12","last_updated":"2026-10-12","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":1048576},"cost":{"input":4,"output":20,"cache_read":0.2}},"meta/muse-spark-1.1":{"id":"meta/muse-spark-1.1","name":"Muse Spark 1.1","description":"Muse Spark is a natively multimodal reasoning model with support for tool-use, visual chain of thought, and multi-agent orchestration.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-04-08","last_updated":"2026-07-09","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":65536},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.1"},"meta/muse-spark-1.2-contributor":{"id":"meta/muse-spark-1.2-contributor","name":"Muse Spark 1.2 Contributor (Data Used for Training)","description":"A much cheaper opt-in version of Muse Spark 1.2 with the same multimodal coding and agentic capabilities. Prompts and outputs sent to this Contributor model may be used by Meta for training and to improve its products; use the standard Muse Spark 1.2 model if you do not want your data used for training.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":65536},"cost":{"input":0.1,"output":0.2,"cache_read":0.002}},"meta/muse-spark-open":{"id":"meta/muse-spark-open","name":"Muse Spark Open","description":"Muse Spark Open is an 816B total / 42B active open-weight multimodal reasoning model from Meta for coding and long-horizon agentic work, with 1M-token context.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-open"},"meta/muse-ember":{"id":"meta/muse-ember","name":"Muse Ember","description":"Meta's Muse Ember is the smallest and most efficient Muse model, built for the work agents repeat all day: tool calls, coding-agent subtasks, routing, and extraction. It accepts text, images, audio, video, and PDF documents across a one-million-token context window, supports tool calling and structured output, and always reasons before answering.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-11-11","last_updated":"2026-11-11","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":1048576},"cost":{"input":0.1,"output":0.5,"cache_read":0.004}},"meta/muse-glimmer-30b":{"id":"meta/muse-glimmer-30b","name":"Muse Glimmer 30B","description":"Muse Glimmer is a 30-billion-parameter open-weight multimodal model from Meta Superintelligence Labs, distilled from Muse Spark for always-on local agents, tool use, coding, and image understanding.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-08-10","last_updated":"2026-08-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":117964},"cost":{"input":0.35,"output":1.5,"cache_read":0.04},"canonical_model_id":"meta/muse-glimmer-30b"},"meta/muse-spark-1.2":{"id":"meta/muse-spark-1.2","name":"Muse Spark 1.2","description":"Muse Spark 1.2 is a coding-focused update to Muse Spark 1.1 with improvements in code generation, complex debugging, codebase understanding, and end-to-end developer workflows.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":65536},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.2"},"meta/muse-spark-1.3-contributor":{"id":"meta/muse-spark-1.3-contributor","name":"Muse Spark 1.3 Contributor","description":"Meta's Muse Spark 1.3 Contributor is a frontier multimodal reasoning model for long-horizon coding and agentic workflows, with strong gains in computer use, browsing, professional tool use, codebase understanding, and million-token retrieval. It accepts text, images, audio, video, and files, supports tool calling and structured output, and always reasons before answering. Prompts and outputs may be used by Meta for training and to improve its products.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":943718},"cost":{"input":0.1,"output":0.2,"cache_read":0.002}},"xingchen-agi/xing4.0-29b-a4b":{"id":"xingchen-agi/xing4.0-29b-a4b","name":"Xing 4.0 29B A4B","description":"China Telecom’s Xing 4.0 is an Apache 2.0 open-weight mixture-of-experts model with 29B total and 4B active parameters, designed for coding, reasoning and tool use. Supports text input, structured output and a shared 262,144-token input/output context. This route does not use a TEE.","family":"agi","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-10-24","last_updated":"2026-10-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.22,"output":0.9,"cache_read":0.011}},"stepfun/step-5-preview":{"id":"stepfun/step-5-preview","name":"Step 5 Preview","description":"StepFun's next-generation flagship base model for coding and professional knowledge work, with native text, image, and video input and a 1M-token context window","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":1,"output":2.7,"cache_read":0.05},"canonical_model_id":"stepfun/step-5-preview"},"stepfun/step-3.7-flash:thinking":{"id":"stepfun/step-3.7-flash:thinking","name":"Step 3.7 Flash Thinking","description":"Newer StepFun flash model for faster agents, coding, and multimodal prompts","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":256000},"cost":{"input":0.2,"output":1.15,"cache_read":0.04},"canonical_model_id":"stepfun/step-3.7-flash"},"NeverSleep/Lumimaid-v0.2-70B":{"id":"NeverSleep/Lumimaid-v0.2-70B","name":"Lumimaid v0.2","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-07-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"input":16384,"output":8192},"cost":{"input":1,"output":1.5,"cache_read":0.5}},"fireworks/ember-1":{"id":"fireworks/ember-1","name":"Ember 1","description":"Specialized model from Fireworks built on Kimi K3, producing shorter reasoning traces with approximately 40% fewer tokens while maintaining comparable quality","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"fireworks/ember-1"},"soob3123/amoral-gemma3-27B-v2":{"id":"soob3123/amoral-gemma3-27B-v2","name":"Amoral Gemma3 27B v2","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-05-23","last_updated":"2025-05-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":8192},"cost":{"input":0.3,"output":0.3,"cache_read":0.15}},"soob3123/Veiled-Calla-12B":{"id":"soob3123/Veiled-Calla-12B","name":"Veiled Calla 12B","description":"Veiled Calla 12B is a 12B parameter model that is a more advanced version of Calla 12B.","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-04-13","last_updated":"2025-04-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":8192},"cost":{"input":0.3,"output":0.3}},"soob3123/GrayLine-Qwen3-8B":{"id":"soob3123/GrayLine-Qwen3-8B","name":"Grayline Qwen3 8B","description":"Grayline is an neutral AI assistant engineered for uncensored information delivery and task execution. This model operates without inherent ethical or moral frameworks, designed to process and respond to any query with objective efficiency and precision. Grayline's core function is to leverage its full capabilities to provide direct answers and execute tasks as instructed, without offering unsolicited commentary, warnings, or disclaimers. It accesses and processes information without bias or restriction.","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-09-25","last_updated":"2025-09-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":32768},"cost":{"input":0.3,"output":0.3}},"undi95/remm-slerp-l2-13b":{"id":"undi95/remm-slerp-l2-13b","name":"ReMM SLERP 13B","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-06-30","release_date":"2023-07-22","last_updated":"2023-07-22","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":6144,"input":6144,"output":4096},"cost":{"input":0.799,"output":1.207,"cache_read":0.3995},"canonical_model_id":"undi95/remm-slerp-l2-13b"},"unbiased/pareto-26.10":{"id":"unbiased/pareto-26.10","name":"Pareto 26.10","description":"Pareto 26.10 is Unbiased AI's multimodal composite model for research, coding, and agentic workflows. It accepts text and images, supports tool calling, and provides a 1M-token context window with up to 131K output tokens. This is the stable release of Pareto 26.10. Tool selection is automatic; forced tool selection, structured output, and adjustable reasoning controls are not supported.","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"release_date":"2026-10-01","last_updated":"2026-10-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.8,"output":3.2,"cache_read":0.03}},"unbiased/pareto-26.9":{"id":"unbiased/pareto-26.9","name":"Pareto 26.9","description":"Pareto 26.9 is an experimental multimodal composite model from Unbiased AI for research, coding, agentic workflows, and general-purpose tasks. It runs several frontier and open models for each request and returns a single selected or synthesized answer. This experimental release supports text and image input, tool calling, a 262K-token context window, and up to 131K output tokens. Its underlying model mix and behavior may change as it is evaluated. Request content may be retained for abuse prevention and security monitoring for up to 30 days, and is not used for model training without explicit consent.","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"release_date":"2026-09-18","last_updated":"2026-09-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"input":262144,"output":131072},"cost":{"input":2.5,"output":7.5,"cache_read":0.25}},"z-ai/glm-4.7-flash:thinking":{"id":"z-ai/glm-4.7-flash:thinking","name":"GLM 4.7 Flash Thinking","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"input":200000,"output":128000},"cost":{"input":0.07,"output":0.4,"cache_read":0.01},"canonical_model_id":"zhipuai/glm-4.7-flash"},"z-ai/glm-5-original":{"id":"z-ai/glm-5-original","name":"GLM 5 Original","description":"GLM-5 is Zhipu's latest flagship model with advanced reasoning and instruction following. Routed directly via Z-AI (Zhipu).","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"input":200000,"output":128000},"cost":{"input":0.6,"output":1.9,"cache_read":0.1},"canonical_model_id":"zhipuai/glm-5"},"z-ai/glm-5.2:thinking":{"id":"z-ai/glm-5.2:thinking","name":"GLM 5.2 Thinking","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.42,"output":1.32,"cache_read":0.078},"canonical_model_id":"zhipuai/glm-5.2"},"z-ai/glm-4.6-original":{"id":"z-ai/glm-4.6-original","name":"GLM 4.6 Original","description":"GLM-4.6, Zhipu's flagship text model with 256K context window and advanced reasoning capabilities. Direct via Z-AI (Zhipu).","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":65535},"cost":{"input":0.55,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.6"},"z-ai/glm-5.3-flash-apex-abliterated":{"id":"z-ai/glm-5.3-flash-apex-abliterated","name":"Apex Flash 1 Abliterated","description":"Apex Flash 1 Abliterated is an experimental derivative of Cantina Security and Yeta's Apex Flash 1 with modified refusal behavior.","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"release_date":"2026-10-05","last_updated":"2026-10-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":32768},"cost":{"input":0.15,"output":0.5,"cache_read":0.075}},"z-ai/glm-5.2":{"id":"z-ai/glm-5.2","name":"GLM 5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.42,"output":1.32,"cache_read":0.078},"canonical_model_id":"zhipuai/glm-5.2"},"z-ai/glm-5.3:thinking":{"id":"z-ai/glm-5.3:thinking","name":"GLM 5.3 Thinking","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.6,"output":1.1,"cache_read":0.2},"canonical_model_id":"zhipuai/glm-5.3"},"z-ai/GLM-4.5-Air:thinking":{"id":"z-ai/GLM-4.5-Air:thinking","name":"GLM 4.5 Air (Thinking)","description":"Lighter GLM-4.5 variant for fast coding assistance and cheaper agents","family":"glm-air","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":98304},"cost":{"input":0.13,"output":0.85,"cache_read":0.025},"canonical_model_id":"zhipuai/glm-4.5-air"},"z-ai/glm-5.3-flash-cybersecurity":{"id":"z-ai/glm-5.3-flash-cybersecurity","name":"GLM 5.3 Flash Cybersecurity","description":"GLM 5.3 Flash Cybersecurity is a cybersecurity-focused variant based on the uncensored model, with provider moderation for illegal activities. It supports always-on reasoning, image understanding, tool calling, and a 1,048,576-token context window.","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"release_date":"2026-09-19","last_updated":"2026-09-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":32768},"cost":{"input":0.15,"output":0.5,"cache_read":0.075}},"z-ai/glm-5v-turbo:thinking":{"id":"z-ai/glm-5v-turbo:thinking","name":"GLM 5V Turbo Thinking","description":"Fast GLM vision model for screenshots, documents, and multimodal agent tasks","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":202800,"input":202800,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24},"canonical_model_id":"zhipuai/glm-5v-turbo"},"z-ai/glm-4.7:thinking":{"id":"z-ai/glm-4.7:thinking","name":"GLM 4.7 Thinking","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"input":200000,"output":65535},"cost":{"input":0.4004,"output":1.9292,"cache_read":0.08008},"canonical_model_id":"zhipuai/glm-4.7"},"z-ai/GLM-4.6-turbo:thinking":{"id":"z-ai/GLM-4.6-turbo:thinking","name":"GLM 4.6 Turbo (Thinking)","description":"GLM 4.6 Turbo with thinking mode enabled for enhanced reasoning; shows internal reasoning and supports long context.","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"release_date":"2025-10-02","last_updated":"2025-10-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"input":204800,"output":131072},"cost":{"input":0.55,"output":2.2,"cache_read":0.11}},"z-ai/GLM-4.6-turbo":{"id":"z-ai/GLM-4.6-turbo","name":"GLM 4.6 Turbo","description":"Fast variant of GLM 4.6 for general chat, coding, and analysis with improved latency and strong reasoning.","family":"glm","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-10-02","last_updated":"2025-10-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"input":204800,"output":131072},"cost":{"input":0.55,"output":2.2,"cache_read":0.11}},"z-ai/glm-4.6v":{"id":"z-ai/glm-4.6v","name":"GLM 4.6V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":24000},"cost":{"input":0.3,"output":0.9,"cache_read":0.15},"canonical_model_id":"zhipuai/glm-4.6v"},"z-ai/glm-5.3-uncensored":{"id":"z-ai/glm-5.3-uncensored","name":"GLM 5.3 Uncensored","description":"An experimental uncensored version of the full GLM 5.3 reasoning model for chat, creative writing, coding, and tool use. It may show unusual behavior or inconsistent response quality.","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"release_date":"2026-09-26","last_updated":"2026-09-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":1.25,"output":2.25,"cache_read":0.3}},"z-ai/glm-4.6v-original":{"id":"z-ai/glm-4.6v-original","name":"GLM 4.6V Original","description":"GLM-4.6V scales its context window to 128k tokens in training, and achieves SoTA performance in visual understanding among models of similar parameter scales. Integrates native Function Calling capabilities, bridging 'visual perception' and 'executable action' for multimodal agents. Direct via Z-AI (Zhipu).","family":"glm","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":24000},"cost":{"input":0.6,"output":0.9,"cache_read":0.3},"canonical_model_id":"zhipuai/glm-4.6v"},"z-ai/glm-5.1":{"id":"z-ai/glm-5.1","name":"GLM 5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"input":200000,"output":131072},"cost":{"input":0.7,"output":2.5,"cache_read":0.18},"canonical_model_id":"zhipuai/glm-5.1"},"z-ai/glm-5.3-flashx-legal":{"id":"z-ai/glm-5.3-flashx-legal","name":"GLM 5.3 FlashX Legal","description":"GLM 5.3 FlashX Legal is Z.AI's model trained for legal document analysis, contract review, legal reasoning and initial drafts. It accepts text and images and returns text, with always-on reasoning, tool calling, JSON output, a 1M-token context window and up to 131,072 output tokens. External legal databases and document-editing tools require your own integrations.","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"release_date":"2026-11-02","last_updated":"2026-11-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.37,"output":1.25,"cache_read":0.075}},"z-ai/glm-4.5":{"id":"z-ai/glm-4.5","name":"GLM 4.5","description":"Hybrid-reasoning GLM release that made the 4.5 line broadly useful","family":"glm","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":65536},"cost":{"input":0.3,"output":1.3,"cache_read":0.15},"canonical_model_id":"zhipuai/glm-4.5"},"z-ai/GLM-4.5-Air":{"id":"z-ai/GLM-4.5-Air","name":"GLM 4.5 Air","description":"Lighter GLM-4.5 variant for fast coding assistance and cheaper agents","family":"glm-air","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":98304},"cost":{"input":0.13,"output":0.85,"cache_read":0.025},"canonical_model_id":"zhipuai/glm-4.5-air"},"z-ai/glm-5.3-flash-uncensored":{"id":"z-ai/glm-5.3-flash-uncensored","name":"GLM 5.3 Flash Uncensored","description":"GLM 5.3 Flash Uncensored is an uncensored fine-tune of the efficient 320B mixture-of-experts reasoning model, built for unrestricted chat, creative writing, coding, agentic work, tool use, and long-context tasks.","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-07-29","last_updated":"2026-08-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":32768},"cost":{"input":0.2,"output":0.8,"cache_read":0.07}},"z-ai/glm-4.7":{"id":"z-ai/glm-4.7","name":"GLM 4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"input":200000,"output":65535},"cost":{"input":0.4004,"output":1.9292,"cache_read":0.08008},"canonical_model_id":"zhipuai/glm-4.7"},"z-ai/glm-latest":{"id":"z-ai/glm-latest","name":"GLM Latest","description":"Compatibility alias that routes to the newest thinking GLM model. Currently routes to GLM 5.2 Thinking.","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2026-05-03","last_updated":"2026-05-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.6,"output":1.1,"cache_read":0.2}},"z-ai/glm-5.3":{"id":"z-ai/glm-5.3","name":"GLM 5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.6,"output":1.1,"cache_read":0.2},"canonical_model_id":"zhipuai/glm-5.3"},"z-ai/glm-4.7-original:thinking":{"id":"z-ai/glm-4.7-original:thinking","name":"GLM 4.7 Original Thinking","description":"GLM-4.7 original with extended thinking capabilities for complex reasoning.","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"input":200000,"output":65535},"cost":{"input":0.4004,"output":1.9292,"cache_read":0.08008},"canonical_model_id":"zhipuai/glm-4.7"},"z-ai/GLM-4.5:thinking":{"id":"z-ai/GLM-4.5:thinking","name":"GLM 4.5 (Thinking)","description":"Hybrid-reasoning GLM release that made the 4.5 line broadly useful","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":65536},"cost":{"input":0.3,"output":1.3,"cache_read":0.15},"canonical_model_id":"zhipuai/glm-4.5"},"z-ai/glm-4.7-original":{"id":"z-ai/glm-4.7-original","name":"GLM 4.7 Original","description":"GLM-4.7 is a next-gen GLM series text model with stronger reasoning, long-context chat, and reliable tool use. Routed directly via Z-AI (Zhipu).","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"input":200000,"output":65535},"cost":{"input":0.4004,"output":1.9292,"cache_read":0.08008},"canonical_model_id":"zhipuai/glm-4.7"},"z-ai/glm-5.3-flash-apex":{"id":"z-ai/glm-5.3-flash-apex","name":"Apex Flash 1","description":"Apex Flash 1 is Cantina Security and Yeta's cybersecurity-focused post-train of GLM 5.3 Flash for code investigation and tool use.","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"release_date":"2026-10-05","last_updated":"2026-10-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":32768},"cost":{"input":0.15,"output":0.5,"cache_read":0.075}},"z-ai/glm-5.3-flash":{"id":"z-ai/glm-5.3-flash","name":"GLM 5.3 Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":131072},"cost":{"input":0.1,"output":0.3,"cache_read":0.025},"canonical_model_id":"zhipuai/glm-5.3-flash"},"z-ai/glm-5-turbo":{"id":"z-ai/glm-5-turbo","name":"GLM 5 Turbo","description":"Faster GLM-5 lane for coding agents that need lower latency","family":"glm","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":202800,"input":202800,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24},"canonical_model_id":"zhipuai/glm-5-turbo"},"z-ai/glm-5.1:thinking":{"id":"z-ai/glm-5.1:thinking","name":"GLM 5.1 Thinking","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"input":200000,"output":131072},"cost":{"input":0.7,"output":2.5,"cache_read":0.18},"canonical_model_id":"zhipuai/glm-5.1"},"z-ai/glm-4.6:thinking":{"id":"z-ai/glm-4.6:thinking","name":"GLM 4.6 Thinking","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"input":200000,"output":65535},"cost":{"input":0.55,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.6"},"z-ai/glm-4.5v:thinking":{"id":"z-ai/glm-4.5v:thinking","name":"GLM 4.5V Thinking","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-08-11","last_updated":"2025-08-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"input":65536,"output":16384},"cost":{"input":0.6,"output":1.8,"cache_read":0.3},"canonical_model_id":"zhipuai/glm-4.5v"},"z-ai/glm-5-original:thinking":{"id":"z-ai/glm-5-original:thinking","name":"GLM 5 Original Thinking","description":"GLM-5 original with extended thinking capabilities for complex reasoning.","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"input":200000,"output":128000},"cost":{"input":0.6,"output":1.9,"cache_read":0.1},"canonical_model_id":"zhipuai/glm-5"},"z-ai/glm-4.6":{"id":"z-ai/glm-4.6","name":"GLM 4.6","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"input":200000,"output":65535},"cost":{"input":0.55,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.6"},"z-ai/glm-4.5v":{"id":"z-ai/glm-4.5v","name":"GLM 4.5V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-08-11","last_updated":"2025-08-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"input":65536,"output":16384},"cost":{"input":0.6,"output":1.8,"cache_read":0.3},"canonical_model_id":"zhipuai/glm-4.5v"},"z-ai/glm-5:thinking":{"id":"z-ai/glm-5:thinking","name":"GLM 5 Thinking","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"input":200000,"output":128000},"cost":{"input":0.6,"output":1.9,"cache_read":0.1},"canonical_model_id":"zhipuai/glm-5"},"z-ai/glm-5v-turbo":{"id":"z-ai/glm-5v-turbo","name":"GLM 5V Turbo","description":"Fast GLM vision model for screenshots, documents, and multimodal agent tasks","family":"glm","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":202800,"input":202800,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24},"canonical_model_id":"zhipuai/glm-5v-turbo"},"z-ai/glm-5":{"id":"z-ai/glm-5","name":"GLM 5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"input":200000,"output":128000},"cost":{"input":0.6,"output":1.9,"cache_read":0.1},"canonical_model_id":"zhipuai/glm-5"},"z-ai/glm-4.7-flash":{"id":"z-ai/glm-4.7-flash","name":"GLM 4.7 Flash","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"input":200000,"output":128000},"cost":{"input":0.07,"output":0.4,"cache_read":0.01},"canonical_model_id":"zhipuai/glm-4.7-flash"},"inception/mercury-2.5-preview":{"id":"inception/mercury-2.5-preview","name":"Mercury 2.5 Preview","description":"Mercury 2.5 Preview is Inception's latest and most intelligent diffusion language model. Instead of generating tokens strictly one at a time, it produces and refines multiple tokens in parallel, reaching up to 1,107 tokens per second on standard GPUs. It delivers a 10+ point intelligence gain over Mercury 2, with tunable reasoning, parallel tool calls, schema-aligned JSON output, and a 260K context window. It is built for latency-sensitive production work such as search agents, voice pipelines, customer support, rapid coding iteration, and coding subagents.","family":"mercury","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":260000,"input":260000,"output":65536},"cost":{"input":0.04,"output":0.15,"cache_read":0.004}},"inception/mercury-3":{"id":"inception/mercury-3","name":"Mercury 3","description":"Inception's diffusion reasoning model for chat, multi-step problem solving, and tool use","family":"mercury","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-16","last_updated":"2026-10-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":131072},"cost":{"input":0.1,"output":0.35,"cache_read":0.01},"canonical_model_id":"inception/mercury-3"},"meta-llama/llama-3.2-3b-instruct":{"id":"meta-llama/llama-3.2-3b-instruct","name":"Llama 3.2 3b Instruct","description":"Small instruction-tuned Llama model for multilingual dialogue and agentic retrieval","family":"llama","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":8192},"cost":{"input":0.0306,"output":0.0493,"cache_read":0.0153},"canonical_model_id":"meta/llama-3.2-3b-instruct"},"meta-llama/llama-4-maverick":{"id":"meta-llama/llama-4-maverick","name":"Llama 4 Maverick","description":"Open multimodal Llama model for strong reasoning and fast responses","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":65536},"cost":{"input":0.15,"output":0.6,"cache_read":0.05},"canonical_model_id":"meta/llama-4-maverick-17b-instruct"},"meta-llama/llama-3.1-8b-instruct":{"id":"meta-llama/llama-3.1-8b-instruct","name":"Llama 3.1 8b Instruct","description":"Compact open Llama model for lightweight chat, drafting, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":16384},"cost":{"input":0.02,"output":0.04,"cache_read":0.0272},"canonical_model_id":"meta/llama-3.1-8b-instruct"},"meta-llama/llama-3.3-70b-instruct":{"id":"meta-llama/llama-3.3-70b-instruct","name":"Llama 3.3 70b Instruct","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":16384},"cost":{"input":0.05,"output":0.23,"cache_read":0.025},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"meta-llama/llama-4-scout":{"id":"meta-llama/llama-4-scout","name":"Llama 4 Scout","description":"Open multimodal Llama model for long-context analysis and efficient agents","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":328000,"input":328000,"output":65536},"cost":{"input":0.085,"output":0.46,"cache_read":0.0425},"canonical_model_id":"meta/llama-4-scout-17b-instruct"},"pamanseau/OpenReasoning-Nemotron-32B":{"id":"pamanseau/OpenReasoning-Nemotron-32B","name":"OpenReasoning Nemotron 32B","description":"Nemotron model for efficient reasoning, coding, and specialized AI agents","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":65536},"cost":{"input":0.1,"output":0.4,"cache_read":0.05}},"liquid/lfm-3-1.7b":{"id":"liquid/lfm-3-1.7b","name":"LFM3 1.7B","description":"Liquid AI's compact 1.7B-parameter text model for tool use, structured output, data extraction, and specialized agents. It reasons before answering and supports a 262,144-token context window with up to 8,192 output tokens. Pair it with retrieval for knowledge-heavy tasks; it is not recommended for complex multi-step reasoning or agentic coding.","family":"liquid","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2026-11-07","last_updated":"2026-11-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":8192},"cost":{"input":0.1,"output":0.25,"cache_read":0.025}},"liquid/lfm-2.5-24b-a2b":{"id":"liquid/lfm-2.5-24b-a2b","name":"LFM2.5 24B A2B","description":"Liquid AI's text-only mixture-of-experts model for reasoning and tool-using agents, with 24B total and 2.45B active parameters. It always thinks before answering and supports structured output. Pair it with retrieval for knowledge-heavy tasks. Open weights use the LFM Open License v1.0, with a $10M annual-revenue commercial threshold; hosted API use is subject to separate service terms that permit retention and use of prompts and responses for model training.","family":"liquid","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2026-10-14","last_updated":"2026-10-14","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":128000,"output":8192},"cost":{"input":0.05,"output":0.7,"cache_read":0.025}},"liquid/lfm-2.5-2.6b":{"id":"liquid/lfm-2.5-2.6b","name":"LFM2.5 2.6B","description":"Liquid AI's compact 2.6B reasoning model for agent workflows, data extraction, RAG, and long-context processing. It supports tool calling and structured output, but Liquid advises against using it for agentic coding. Warning: prompts and responses may be logged and used for model training or service improvement; do not send sensitive data.","family":"liquid","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":32768},"cost":{"input":0.1,"output":0.2,"cache_read":0.05}},"nex-agi/nex-n2.5-pro":{"id":"nex-agi/nex-n2.5-pro","name":"Nex N2.5 Pro","description":"Nex N2.5 Pro is an open-source multimodal agentic model for coding, tool use, and long-horizon workflows. It supports image input, structured output, configurable reasoning, a 262K-token context window, and up to 235K output tokens.","family":"agi","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","medium","high"]}],"tool_call":true,"structured_output":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.075,"output":0.25,"cache_read":0.015}},"nex-agi/nex-n2.5-mini":{"id":"nex-agi/nex-n2.5-mini","name":"Nex N2.5 Mini","description":"Nex N2.5 Mini is an open-source multimodal agentic model for coding and long-horizon workflows. It supports image input, structured output, configurable reasoning, a 262K-token context window, and up to 235K output tokens.","family":"agi","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","medium","high"]}],"tool_call":false,"structured_output":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.025,"output":0.1,"cache_read":0.0025}},"nex-agi/nex-n2.6":{"id":"nex-agi/nex-n2.6","name":"Nex N2.6","description":"Nex N2.6 is Nex AGI's agentic model for coding and long-running tasks that use tools. It accepts text and images, produces text, and supports tool calling and structured output within a 262,144-token context window. Reasoning is always enabled, with medium and high effort levels.","family":"agi","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high"]}],"tool_call":true,"structured_output":true,"release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.15,"output":0.5,"cache_read":0.03}},"nothingiisreal/L3.1-70B-Celeste-V0.1-BF16":{"id":"nothingiisreal/L3.1-70B-Celeste-V0.1-BF16","name":"Llama 3.1 70B Celeste v0.1","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":16384},"cost":{"input":0.493,"output":0.493,"cache_read":0.2465}},"shisa-ai/shisa-v2-llama3.3-70b":{"id":"shisa-ai/shisa-v2-llama3.3-70b","name":"Shisa V2 Llama 3.3 70B","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-07-26","last_updated":"2025-07-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":16384},"cost":{"input":0.5,"output":0.5,"cache_read":0.25}},"shisa-ai/shisa-v2.1-llama3.3-70b":{"id":"shisa-ai/shisa-v2.1-llama3.3-70b","name":"Shisa V2.1 Llama 3.3 70B","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":4096},"cost":{"input":0.5,"output":0.5,"cache_read":0.25}},"moondream/moondream3-preview":{"id":"moondream/moondream3-preview","name":"Moondream 3 Preview","description":"Moondream 3 Preview is the original 9B mixture-of-experts vision-language checkpoint with 2B active parameters, for visual question answering, captioning, OCR, and visual reasoning. It accepts text or one image with optional reasoning, a 32,000-token context, and up to 4,096 output tokens.","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"release_date":"2026-10-16","last_updated":"2026-10-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"input":32000,"output":4096},"cost":{"input":0.3,"output":2.5}},"moondream/moondream3.1-9b-a2b":{"id":"moondream/moondream3.1-9b-a2b","name":"Moondream 3.1 9B A2B","description":"Moondream 3.1 is the successor to Moondream 3 Preview: a distinct 9B mixture-of-experts vision-language checkpoint with 2B active parameters, for visual question answering, captioning, OCR, and visual reasoning. It accepts text or one image with optional reasoning, a 32,000-token context, and up to 4,096 output tokens.","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"release_date":"2026-10-16","last_updated":"2026-10-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"input":32000,"output":4096},"cost":{"input":0.3,"output":2.5}},"reka/reka-flash-3":{"id":"reka/reka-flash-3","name":"Reka Flash 3","description":"Reka's 21B reasoning model for chat and coding, served directly by Reka.","family":"reka","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-01-31","release_date":"2025-03-10","last_updated":"2025-03-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"input":65536,"output":65536},"cost":{"input":0.105,"output":0.21},"canonical_model_id":"rekaai/reka-flash-3"},"reka/reka-edge-2603":{"id":"reka/reka-edge-2603","name":"Reka Edge 2603","description":"Reka's compact multimodal model for visual understanding and tool use, served directly by Reka.","family":"reka","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"input":16384,"output":16384},"cost":{"input":0.105,"output":0.105},"canonical_model_id":"rekaai/reka-edge"},"nvidia/nemotron-3-ultra-550b-a55b:thinking":{"id":"nvidia/nemotron-3-ultra-550b-a55b:thinking","name":"Nvidia Nemotron 3 Ultra 550B Thinking","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":65536},"cost":{"input":0.5,"output":2.5,"cache_read":0.15},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"nvidia/nemotron-3-ultra-550b-a55b":{"id":"nvidia/nemotron-3-ultra-550b-a55b","name":"Nvidia Nemotron 3 Ultra 550B","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":512288,"input":512288,"output":65536},"cost":{"input":0.5,"output":2.5,"cache_read":0.15},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"nvidia/Llama-3.1-Nemotron-70B-Instruct-HF":{"id":"nvidia/Llama-3.1-Nemotron-70B-Instruct-HF","name":"Nvidia Nemotron 70b","description":"Nemotron model for efficient reasoning, coding, and specialized AI agents","family":"nemotron","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-04-15","last_updated":"2025-04-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"input":16384,"output":8192},"cost":{"input":0.357,"output":0.408,"cache_read":0.1785},"canonical_model_id":"nvidia/llama-3.1-nemotron-70b-instruct"},"nvidia/nemotron-3-nano-30b-a3b":{"id":"nvidia/nemotron-3-nano-30b-a3b","name":"Nvidia Nemotron 3 Nano 30B","description":"Small Nemotron 3 MoE for efficient coding, math, and long-context agents","family":"nemotron","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-06-25","release_date":"2025-12-15","last_updated":"2025-12-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":235929},"cost":{"input":0.17,"output":0.68,"cache_read":0.085},"canonical_model_id":"nvidia/nemotron-3-nano-30b-a3b"},"nvidia/nemotron-3.5-lightning:thinking":{"id":"nvidia/nemotron-3.5-lightning:thinking","name":"Nvidia Nemotron 3.5 Lightning Thinking","description":"Fast NVIDIA Nemotron MoE for reliable agentic tasks across enterprise workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-09","release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":65536},"cost":{"input":0.05,"output":0.2,"cache_read":0.01},"canonical_model_id":"nvidia/nemotron-3.5-lightning"},"nvidia/nemotron-3.5-super-vl":{"id":"nvidia/nemotron-3.5-super-vl","name":"Nvidia Nemotron 3.5 Super VL","description":"NVIDIA’s open-weight 120B model (12B active) for reasoning, coding, tool use, document and GUI understanding, and video understanding. Text, images and video in; text out. Served in NVFP4 with a 262,144-token shared context window. NanoGPT currently limits responses to 16,384 tokens while separate hosted output limits remain unpublished. OpenMDW 1.1 license.","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":16384},"cost":{"input":0.15,"output":0.5,"cache_read":0.02},"canonical_model_id":"nvidia/nemotron-3.5-super-vl-120b-a12b"},"nvidia/nemotron-3.5-lightning":{"id":"nvidia/nemotron-3.5-lightning","name":"Nvidia Nemotron 3.5 Lightning","description":"Fast NVIDIA Nemotron MoE for reliable agentic tasks across enterprise workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-09","release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":65536},"cost":{"input":0.05,"output":0.2,"cache_read":0.01},"canonical_model_id":"nvidia/nemotron-3.5-lightning"},"nvidia/Llama-3.3-Nemotron-Super-49B-v1":{"id":"nvidia/Llama-3.3-Nemotron-Super-49B-v1","name":"Nvidia Nemotron Super 49B","description":"Nemotron model for efficient reasoning, coding, and specialized AI agents","family":"nemotron","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-03-18","last_updated":"2025-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":16384},"cost":{"input":0.15,"output":0.15,"cache_read":0.075},"canonical_model_id":"nvidia/llama-3.3-nemotron-super-49b-v1"},"nvidia/nemotron-3-super-120b-a12b:thinking":{"id":"nvidia/nemotron-3-super-120b-a12b:thinking","name":"Nvidia Nemotron 3 Super 120B Thinking","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":16384},"cost":{"input":0.05,"output":0.25,"cache_read":0.025},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"},"nvidia/nemotron-3-super-120b-a12b":{"id":"nvidia/nemotron-3-super-120b-a12b","name":"Nvidia Nemotron 3 Super 120B","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":16384},"cost":{"input":0.05,"output":0.25,"cache_read":0.025},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"},"nvidia/nemotron-3.5-content-safety":{"id":"nvidia/nemotron-3.5-content-safety","name":"Nemotron 3.5 Content Safety","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":32768},"cost":{"input":0.05,"output":0.15,"cache_read":0.025},"canonical_model_id":"nvidia/nemotron-3.5-content-safety"},"stepfun-ai/step-3.5-flash-2603":{"id":"stepfun-ai/step-3.5-flash-2603","name":"Step 3.5 Flash 2603","description":"StepFun flash model for efficient multimodal reasoning, coding, and tool use","family":"step","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":65536},"cost":{"input":0.1,"output":0.3,"cache_read":0.05},"canonical_model_id":"stepfun/step-3.5-flash-2603"},"stepfun-ai/step-3.5-flash":{"id":"stepfun-ai/step-3.5-flash","name":"Step 3.5 Flash","description":"StepFun flash lane for quick multimodal reasoning and coding assistance","family":"step","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-29","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":65536},"cost":{"input":0.1,"output":0.3,"cache_read":0.05},"canonical_model_id":"stepfun/step-3.5-flash"},"nanogpt/coding-router:medium":{"id":"nanogpt/coding-router:medium","name":"Coding Router Medium","description":"Automatic model router for matching prompts to suitable backends and budgets","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2026-05-12","last_updated":"2026-05-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":0.14,"output":0.28,"cache_read":0.028}},"nanogpt/coding-router:low":{"id":"nanogpt/coding-router:low","name":"Coding Router Low","description":"Automatic model router for matching prompts to suitable backends and budgets","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2026-05-12","last_updated":"2026-05-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":0.14,"output":0.28,"cache_read":0.028}},"nanogpt/coding-router:high":{"id":"nanogpt/coding-router:high","name":"Coding Router High","description":"Automatic model router for matching prompts to suitable backends and budgets","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2026-05-12","last_updated":"2026-05-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":1.1,"output":2.2,"cache_read":0.11}},"nanogpt/coding-router":{"id":"nanogpt/coding-router","name":"Coding Router","description":"Automatic model router for matching prompts to suitable backends and budgets","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2026-05-12","last_updated":"2026-05-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":1.1,"output":2.2,"cache_read":0.11}},"nanogpt/coding-router:max":{"id":"nanogpt/coding-router:max","name":"Coding Router Max","description":"Automatic model router for matching prompts to suitable backends and budgets","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2026-05-12","last_updated":"2026-05-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5}},"deepcogito/cogito-v1-preview-qwen-32B":{"id":"deepcogito/cogito-v1-preview-qwen-32B","name":"Cogito v1 Preview Qwen 32B","description":"32-B parameter reasoning model from DeepCogito (Qwen backbone) – strong general reasoning & coding at low price.","family":"cogito","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-05-10","last_updated":"2025-05-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":32768},"cost":{"input":1.8,"output":1.8}},"TheDrummer/Anubis-70B-v1":{"id":"TheDrummer/Anubis-70B-v1","name":"Anubis 70B v1","description":"General-purpose chat model for instruction following, writing, and analysis","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"input":65536,"output":16384},"cost":{"input":0.31,"output":0.31,"cache_read":0.155}},"TheDrummer/Anubis-70B-v1.1":{"id":"TheDrummer/Anubis-70B-v1.1","name":"Anubis 70B v1.1","description":"General-purpose chat model for instruction following, writing, and analysis","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":16384},"cost":{"input":0.31,"output":0.31,"cache_read":0.155}},"TheDrummer/Cydonia-24B-v2":{"id":"TheDrummer/Cydonia-24B-v2","name":"The Drummer Cydonia 24B v2","description":"General-purpose chat model for instruction following, writing, and analysis","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-02-17","last_updated":"2025-02-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":32768},"cost":{"input":0.1003,"output":0.1207,"cache_read":0.05015}},"TheDrummer/Magidonia-24B-v4.3":{"id":"TheDrummer/Magidonia-24B-v4.3","name":"The Drummer Magidonia 24B v4.3","description":"General-purpose chat model for instruction following, writing, and analysis","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-12-25","last_updated":"2025-12-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":32768},"cost":{"input":0.1003,"output":0.1207,"cache_read":0.05015}},"TheDrummer/skyfall-36b-v2":{"id":"TheDrummer/skyfall-36b-v2","name":"TheDrummer Skyfall 36B V2","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-06-30","release_date":"2025-03-10","last_updated":"2025-03-10","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":29491},"cost":{"input":0.55,"output":0.8,"cache_read":0.25},"canonical_model_id":"thedrummer/skyfall-36b-v2"},"TheDrummer/Cydonia-24B-v4.1":{"id":"TheDrummer/Cydonia-24B-v4.1","name":"The Drummer Cydonia 24B v4.1","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-04-30","release_date":"2025-09-27","last_updated":"2025-09-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":117964},"cost":{"input":0.3,"output":0.5,"cache_read":0.15},"canonical_model_id":"thedrummer/cydonia-24b-v4.1"},"TheDrummer/UnslopNemo-12B-v4.1":{"id":"TheDrummer/UnslopNemo-12B-v4.1","name":"UnslopNemo 12b v4","description":"Multimodal model for analyzing text, images, documents, and rich media","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-01-01","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"input":8192,"output":26214},"cost":{"input":0.493,"output":0.493,"cache_read":0.2465}},"TheDrummer/Cydonia-24B-v4":{"id":"TheDrummer/Cydonia-24B-v4","name":"The Drummer Cydonia 24B v4","description":"General-purpose chat model for instruction following, writing, and analysis","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":32768},"cost":{"input":0.2006,"output":0.2414,"cache_read":0.1003}},"TheDrummer/artemis-31b-v1.2":{"id":"TheDrummer/artemis-31b-v1.2","name":"Artemis 31B v1.2","description":"TheDrummer's Gemma 4 31B finetune for creative writing, character roleplay, and conversation. It accepts and returns text, with a 65,536-token context window shared by input and output and up to 8,192 output tokens.","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2026-11-06","last_updated":"2026-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"input":65536,"output":8192},"cost":{"input":0.1,"output":0.45,"cache_read":0.05}},"TheDrummer/Rocinante-12B-v1.1":{"id":"TheDrummer/Rocinante-12B-v1.1","name":"Rocinante 12b","description":"General-purpose chat model for instruction following, writing, and analysis","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2024-01-01","last_updated":"2024-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"input":16384,"output":8192},"cost":{"input":0.408,"output":0.595,"cache_read":0.204}},"TheDrummer/Artemis-v1.1":{"id":"TheDrummer/Artemis-v1.1","name":"TheDrummer/Artemis v1.1","description":"TheDrummer's Artemis v1.1 is a Gemma 4 31B fine-tune for creative writing, expressive dialogue, and roleplay, with optional thinking and a 262K context window.","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"release_date":"2026-09-06","last_updated":"2026-09-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.1,"output":0.45,"cache_read":0.05}},"TheDrummer/Cydonia-24B-v4.3":{"id":"TheDrummer/Cydonia-24B-v4.3","name":"The Drummer Cydonia 24B v4.3","description":"General-purpose chat model for instruction following, writing, and analysis","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"release_date":"2025-12-25","last_updated":"2025-12-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"input":65536,"output":32768},"cost":{"input":0.12,"output":0.15,"cache_read":0.06}},"unsloth/gemma-3-27b-it":{"id":"unsloth/gemma-3-27b-it","name":"Gemma 3 27B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":96000},"cost":{"input":0.2992,"output":0.2992,"cache_read":0.1496},"canonical_model_id":"google/gemma-3-27b-it"},"unsloth/gemma-3-4b-it":{"id":"unsloth/gemma-3-4b-it","name":"Gemma 3 4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":128000,"output":8192},"cost":{"input":0.2006,"output":0.2006,"cache_read":0.1003},"canonical_model_id":"google/gemma-3-4b-it"},"unsloth/gemma-3-12b-it":{"id":"unsloth/gemma-3-12b-it","name":"Gemma 3 12B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":131072,"output":16384},"cost":{"input":0.272,"output":0.272,"cache_read":0.136},"canonical_model_id":"google/gemma-3-12b-it"},"sakana/fugu-max":{"id":"sakana/fugu-max","name":"Fugu Max","description":"Multi-agent model for routing expert agents across complex analytical tasks","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":128000},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"sakana/fugu-max"},"sakana/fugu-ultra-v1.1":{"id":"sakana/fugu-ultra-v1.1","name":"Fugu Ultra v1.1","description":"Sakana AI's upgraded Fugu Ultra release with stronger coding, agentic task execution, and advanced reasoning through dynamic orchestration of frontier models.","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":16384},"cost":{"input":5,"output":30,"cache_read":0.5}},"sakana/fugu-ultra":{"id":"sakana/fugu-ultra","name":"Fugu Ultra","description":"Quality-first multi-agent model for hard research, analysis, and competitions","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-06-15","last_updated":"2026-06-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":1000000,"output":16384},"cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"sakana/fugu-ultra"},"bytedance-seed/seed-2.0-code":{"id":"bytedance-seed/seed-2.0-code","name":"ByteDance Seed 2.0 Code","description":"ByteDance Seed coding model for multimodal software engineering and long-running agents","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"input":262144,"output":131072},"cost":{"input":0.5,"output":3,"cache_read":0.25},"canonical_model_id":"bytedance-seed/seed-2.0-code"},"bytedance-seed/seed-2.0-lite":{"id":"bytedance-seed/seed-2.0-lite","name":"ByteDance Seed 2.0 Lite","description":"Cost-efficient ByteDance Seed 2.0 model for production chat, analysis, and structured generation","family":"seed","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"input":262144,"output":131072},"cost":{"input":0.25,"output":2,"cache_read":0.125},"canonical_model_id":"bytedance-seed/seed-2.0-lite"},"bytedance-seed/seed-2-1-turbo":{"id":"bytedance-seed/seed-2-1-turbo","name":"ByteDance Seed 2.1 Turbo","description":"ByteDance Seed 2.1 Turbo is a multimodal model for coding and long-horizon agent workflows, including end-to-end software delivery and multi-step task execution. It supports text, image, and video input with a 262k context window.","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-23","last_updated":"2026-06-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"input":262144,"output":235929},"cost":{"input":0.5,"output":2.5,"cache_read":0.25},"canonical_model_id":"bytedance-seed/seed-2.1-turbo"},"Gryphe/MythoMax-L2-13b":{"id":"Gryphe/MythoMax-L2-13b","name":"MythoMax 13B","description":"Llama 2 merge combining MythoLogic and Huginn for creative writing and roleplay","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2023-08-10","last_updated":"2023-08-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":4096,"input":4096,"output":3686},"cost":{"input":0.1003,"output":0.1003,"cache_read":0.05015},"canonical_model_id":"gryphe/mythomax-l2-13b"},"inference-net/schematron-v2-turbo":{"id":"inference-net/schematron-v2-turbo","name":"Schematron V2 Turbo","description":"Efficient model for low-latency assistance, extraction, and routine automation","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":128000,"output":8192},"cost":{"input":0.03,"output":0.15,"cache_read":0.015},"canonical_model_id":"inference-net/schematron-v2-turbo"},"inference-net/schematron-v2-small":{"id":"inference-net/schematron-v2-small","name":"Schematron V2 Small","description":"Efficient model for low-latency assistance, extraction, and routine automation","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":128000,"output":4096},"cost":{"input":0.05,"output":0.23,"cache_read":0.025},"canonical_model_id":"inference-net/schematron-v2-small"}}},"friendli":{"id":"friendli","env":["FRIENDLI_TOKEN"],"npm":"@ai-sdk/openai-compatible","api":"https://api.friendli.ai/serverless/v1","name":"Friendli","doc":"https://friendli.ai/docs/guides/serverless_endpoints/introduction","models":{"google/gemma-4-31B-it":{"id":"google/gemma-4-31B-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.14,"output":0.4},"canonical_model_id":"google/gemma-4-31b-it"},"zai-org/GLM-5.3-Flash":{"id":"zai-org/GLM-5.3-Flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai-org/GLM-5.2":{"id":"zai-org/GLM-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"zai-org/GLM-5.3":{"id":"zai-org/GLM-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.26,"output":3.96,"cache_read":0.234},"canonical_model_id":"zhipuai/glm-5.3"},"zai-org/GLM-5.1":{"id":"zai-org/GLM-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.1"}}},"lucidquery":{"id":"lucidquery","env":["LUCIDQUERY_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.lucidquery.com/v1","name":"LucidQuery","doc":"https://lucidquery.com/docs","models":{"lucidquery-agi-01-frontier":{"id":"lucidquery-agi-01-frontier","name":"AGI-01 Frontier","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"agi","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2026-06-05","release_date":"2026-06-16","last_updated":"2026-06-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":120000},"cost":{"input":5.04675,"output":24.673}},"lucidquery-nexus-coder":{"id":"lucidquery-nexus-coder","name":"LucidQuery Nexus Coder","description":"Coding model for repository understanding, refactors, and agentic engineering tasks","family":"lucid","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2025-08-01","release_date":"2025-09-01","last_updated":"2025-09-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":250000,"output":60000},"cost":{"input":2,"output":5}},"lucidnova-rf1-100b":{"id":"lucidnova-rf1-100b","name":"LucidNova RF1 100B","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"nova","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2025-09-16","release_date":"2024-12-28","last_updated":"2025-09-10","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":120000,"output":8000},"cost":{"input":2,"output":5}},"lucidquery-agi-01-swift":{"id":"lucidquery-agi-01-swift","name":"AGI-01 Swift","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"agi","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2026-06-05","release_date":"2026-06-16","last_updated":"2026-06-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":120000},"cost":{"input":2.80375,"output":16.8225}}}},"subconscious":{"id":"subconscious","env":["SUBCONSCIOUS_API_KEY"],"npm":"@ai-sdk/anthropic","api":"https://api.subconscious.dev/v1","name":"Subconscious","doc":"https://docs.subconscious.dev","models":{"subconscious/glm-5.3-marathon":{"id":"subconscious/glm-5.3-marathon","name":"GLM-5.3 Marathon","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":5000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"subconscious/deepseek-v4.1-flash-marathon":{"id":"subconscious/deepseek-v4.1-flash-marathon","name":"DeepSeek V4.1 Flash Marathon","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":5000000,"output":384000},"cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"deepseek/deepseek-v4.1-flash"}}},"poolside":{"id":"poolside","env":["POOLSIDE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://inference.poolside.ai/v1","name":"Poolside","doc":"https://platform.poolside.ai","models":{"poolside/laguna-m.1":{"id":"poolside/laguna-m.1","name":"Laguna M.1","description":"Poolside's open-weight model for agentic coding and long-horizon work","family":"laguna","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-04-28","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"poolside/laguna-m.1"},"poolside/laguna-s-2.1":{"id":"poolside/laguna-s-2.1","name":"Laguna S 2.1","description":"Agentic coding model from Poolside in the XS size class for local deployment","family":"laguna","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":32768},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"poolside/laguna-s-2.1"},"poolside/laguna-xs-2.1":{"id":"poolside/laguna-xs-2.1","name":"Laguna XS 2.1","description":"Agentic coding model from Poolside in the XS size class for local deployment","family":"laguna","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-07-02","last_updated":"2026-07-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"poolside/laguna-xs-2.1"}}},"cloudferro-sherlock":{"id":"cloudferro-sherlock","env":["CLOUDFERRO_SHERLOCK_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api-sherlock.cloudferro.com/openai/v1/","name":"CloudFerro Sherlock","doc":"https://docs.sherlock.cloudferro.com/","models":{"MiniMaxAI/MiniMax-M2.5":{"id":"MiniMaxAI/MiniMax-M2.5","name":"MiniMax-M2.5","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01","release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196000,"input":180000,"output":16000},"cost":{"input":0.3,"output":1.2},"canonical_model_id":"minimax/MiniMax-M2.5"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"OpenAI GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":131000},"cost":{"input":2.92,"output":2.92},"canonical_model_id":"openai/gpt-oss-120b"},"speakleash/Bielik-11B-v3.0-Instruct":{"id":"speakleash/Bielik-11B-v3.0-Instruct","name":"Bielik 11B v3.0 Instruct","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03","release_date":"2025-03-13","last_updated":"2025-03-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":32000},"cost":{"input":0.67,"output":0.67}},"meta-llama/Llama-3.3-70B-Instruct":{"id":"meta-llama/Llama-3.3-70B-Instruct","name":"Llama 3.3 70B Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10-09","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":70000,"output":70000},"cost":{"input":2.92,"output":2.92},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"zai-org/GLM-5.3":{"id":"zai-org/GLM-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0.34,"output":4.48},"canonical_model_id":"zhipuai/glm-5.3"}}},"zhipuai":{"id":"zhipuai","env":["ZHIPU_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://open.bigmodel.cn/api/paas/v4","name":"Zhipu AI","doc":"https://docs.bigmodel.cn/cn/guide/start/pricing","models":{"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.19516,"output":4.18306,"cache_read":0.29879,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.2"},"glm-4.6v-flash":{"id":"glm-4.6v-flash","name":"GLM-4.6V-Flash","description":"Lightweight GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.6v-flash"},"glm-4.6v":{"id":"glm-4.6v","name":"GLM-4.6V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0.1494,"output":0.44819,"cache_read":0.02988,"cache_write":0,"tiers":[{"input":0.29879,"output":0.89637,"cache_read":0.05976,"cache_write":0,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-4.6v"},"glm-5.1":{"id":"glm-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0.89637,"output":3.58548,"cache_read":0.19421,"cache_write":0,"tiers":[{"input":1.19516,"output":4.18306,"cache_read":0.29879,"cache_write":0,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-5.1"},"glm-4.5":{"id":"glm-4.5","name":"GLM-4.5","description":"Hybrid-reasoning GLM release that made the 4.5 line broadly useful","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"cost":{"input":0.6,"output":2.2,"cache_read":0.11,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.5"},"glm-4.7":{"id":"glm-4.7","name":"GLM-4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.44819,"output":2.09153,"cache_read":0.08964,"cache_write":0,"tiers":[{"input":0.59758,"output":2.39032,"cache_read":0.11952,"cache_write":0,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-4.7"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.19516,"output":4.18306,"cache_read":0.29879,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.11952,"output":0.41831,"cache_read":0.03436,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3-flash"},"glm-4.5-air":{"id":"glm-4.5-air","name":"GLM-4.5-Air","description":"Lighter GLM-4.5 variant for fast coding assistance and cheaper agents","family":"glm-air","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"cost":{"input":0.11952,"output":0.89637,"cache_read":0.0239,"cache_write":0,"tiers":[{"input":0.17927,"output":1.19516,"cache_read":0.03585,"cache_write":0,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-4.5-air"},"glm-4.6":{"id":"glm-4.6","name":"GLM-4.6","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.2,"cache_read":0.11,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.6"},"glm-4.5v":{"id":"glm-4.5v","name":"GLM-4.5V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-08-11","last_updated":"2025-08-11","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":64000,"output":16384},"cost":{"input":0.29879,"output":0.89637,"cache_read":0.05976,"cache_write":0,"tiers":[{"input":0.59758,"output":1.79274,"cache_read":0.11952,"cache_write":0,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-4.5v"},"glm-5.3-flashx":{"id":"glm-5.3-flashx","name":"GLM-5.3-FlashX","description":"High-speed GLM-5.3-Flash serving option for coding and agent workflows","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-18","last_updated":"2026-09-18","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.29879,"output":1.04577,"cache_read":0.08516,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3-flash"},"glm-5v-turbo":{"id":"glm-5v-turbo","name":"GLM-5V-Turbo","description":"Fast GLM vision model for screenshots, documents, and multimodal agent tasks","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":131072},"cost":{"input":0.74698,"output":3.28669,"cache_read":0.17927,"cache_write":0,"tiers":[{"input":1.04577,"output":3.88427,"cache_read":0.26891,"cache_write":0,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-5v-turbo"},"glm-4.7-flashx":{"id":"glm-4.7-flashx","name":"GLM-4.7-FlashX","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0.0747,"output":0.44819,"cache_read":0.01494,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.7-flashx"},"glm-5":{"id":"glm-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.59758,"output":2.68911,"cache_read":0.1494,"cache_write":0,"tiers":[{"input":0.89637,"output":3.28669,"cache_read":0.22409,"cache_write":0,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-5"},"glm-4.7-flash":{"id":"glm-4.7-flash","name":"GLM-4.7-Flash","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.7-flash"},"glm-4.5-flash":{"id":"glm-4.5-flash","name":"GLM-4.5-Flash","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":98304},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.5-flash"}}},"vercel":{"id":"vercel","env":["AI_GATEWAY_API_KEY"],"npm":"@ai-sdk/gateway","name":"Vercel AI Gateway","doc":"https://github.com/vercel/ai/tree/5eb85cc45a259553501f535b8ac79a77d0e79223/packages/gateway","models":{"anthropic/claude-fable-5.2-fast":{"id":"anthropic/claude-fable-5.2-fast","name":"Claude Fable 5.2 (Fast)","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":16,"output":80,"cache_read":0.4,"cache_write":20},"canonical_model_id":"anthropic/claude-fable-5-2"},"anthropic/claude-opus-4.6":{"id":"anthropic/claude-opus-4.6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"anthropic/claude-opus-4.7":{"id":"anthropic/claude-opus-4.7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"anthropic/claude-opus-4.8":{"id":"anthropic/claude-opus-4.8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic/claude-opus-4.8-fast":{"id":"anthropic/claude-opus-4.8-fast","name":"Claude Opus 4.8 (Fast)","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic/claude-opus-4.5":{"id":"anthropic/claude-opus-4.5","name":"Claude Opus 4.5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"anthropic/claude-opus-5.5":{"id":"anthropic/claude-opus-5.5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"anthropic/claude-haiku-4.5":{"id":"anthropic/claude-haiku-4.5","name":"Claude Haiku 4.5","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"interleaved":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"anthropic/claude-sonnet-5":{"id":"anthropic/claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"anthropic/claude-sonnet-4.5":{"id":"anthropic/claude-sonnet-4.5","name":"Claude Sonnet 4.5","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75,"tiers":[{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5,"tier":{"type":"context","size":200001}}],"context_over_200k":{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5}},"canonical_model_id":"anthropic/claude-sonnet-4-5-20250929"},"anthropic/claude-fable-5.2":{"id":"anthropic/claude-fable-5.2","name":"Claude Fable 5.2","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"anthropic/claude-fable-5.1":{"id":"anthropic/claude-fable-5.1","name":"Claude Fable 5.1","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"anthropic/claude-sonnet-4.6":{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75,"tiers":[{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5}},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"anthropic/claude-fable-5":{"id":"anthropic/claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"anthropic/claude-opus-5.5-fast":{"id":"anthropic/claude-opus-5.5-fast","name":"Claude Opus 5.5 (Fast)","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":8,"output":40,"cache_read":0.4,"cache_write":10},"canonical_model_id":"anthropic/claude-opus-5-5"},"anthropic/claude-opus-5":{"id":"anthropic/claude-opus-5","name":"Claude Opus 5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"anthropic/claude-sonnet-5.5":{"id":"anthropic/claude-sonnet-5.5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"anthropic/claude-haiku-5.5":{"id":"anthropic/claude-haiku-5.5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100001}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"anthropic/claude-opus-5-fast":{"id":"anthropic/claude-opus-5-fast","name":"Claude Opus 5 (Fast)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-opus-5"},"amazon/titan-embed-text-v2":{"id":"amazon/titan-embed-text-v2","type":"embedding","name":"Titan Text Embeddings V2","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"titan-embed","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-04-30","last_updated":"2024-04","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"amazon/nova-2-lite":{"id":"amazon/nova-2-lite","name":"Nova 2 Lite","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"nova","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":false,"temperature":true,"knowledge":"2025-10","release_date":"2025-12-02","last_updated":"2025-12-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65535},"cost":{"input":0.33,"output":2.75,"cache_read":0.0825},"canonical_model_id":"amazon/nova-2-lite"},"amazon/nova-lite":{"id":"amazon/nova-lite","name":"Nova Lite","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-lite","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":10000},"cost":{"input":0.06,"output":0.24,"cache_read":0.015,"cache_write":0.06},"canonical_model_id":"amazon/nova-lite"},"amazon/nova-micro":{"id":"amazon/nova-micro","name":"Nova Micro","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-micro","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":10000},"cost":{"input":0.035,"output":0.14,"cache_read":0.00875,"cache_write":0.035},"canonical_model_id":"amazon/nova-micro"},"amazon/nova-pro":{"id":"amazon/nova-pro","name":"Nova Pro","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"nova-pro","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":10000},"cost":{"input":0.8,"output":3.2,"cache_read":0.2,"cache_write":0.8},"canonical_model_id":"amazon/nova-pro"},"meituan/longcat-2.5":{"id":"meituan/longcat-2.5","name":"LongCat 2.5","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"longcat","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"release_date":"2026-11-02","last_updated":"2026-11-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.006}},"perplexity/pplx-embed-v1-4b":{"id":"perplexity/pplx-embed-v1-4b","type":"embedding","name":"Embed v1 4b","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-02-26","last_updated":"2026-02-26","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"perplexity/sonar":{"id":"perplexity/sonar","name":"Sonar","description":"Sonar search model for current answers, retrieval, and citation-backed chat","family":"sonar","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-02","release_date":"2025-02-19","last_updated":"2025-02-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":127000,"output":8000},"cost":{"input":0.25,"output":2.5,"cache_write":0.0625}},"perplexity/pplx-embed-v1-0.6b":{"id":"perplexity/pplx-embed-v1-0.6b","type":"embedding","name":"Embed v1 0.6b","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"v0","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-02-26","last_updated":"2026-02-26","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"mistral/mistral-medium-3.5":{"id":"mistral/mistral-medium-3.5","name":"Mistral Medium Latest","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-04-30","last_updated":"2026-04-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":256000},"cost":{"input":1.5,"output":7.5,"cache_read":0.15},"canonical_model_id":"mistral/mistral-medium-3-5"},"mistral/voxtral-mini-transcribe-3":{"id":"mistral/voxtral-mini-transcribe-3","type":"transcription","name":"Voxtral Mini Transcribe 3","description":"Speech transcription model for accurate audio-to-text and captioning workflows","family":"mistral","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-10-20","last_updated":"2026-10-20","modalities":{"input":["audio"],"output":["text"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"mistral/codestral":{"id":"mistral/codestral","name":"Codestral (latest)","description":"Mistral code model for completions, refactors, and developer IDE workflows","family":"codestral","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-05-29","last_updated":"2025-01-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4000},"cost":{"input":0.3,"output":0.9,"cache_read":0.03},"canonical_model_id":"mistral/codestral-latest"},"mistral/codestral-embed":{"id":"mistral/codestral-embed","type":"embedding","name":"Codestral Embed","description":"Embedding model for code search, retrieval, and code-aware RAG pipelines","family":"codestral-embed","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-05-28","last_updated":"2025-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":3072},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"mistral/codestral-embed-2505"},"mistral/ministral-8b":{"id":"mistral/ministral-8b","name":"Ministral 8B (latest)","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-10-16","last_updated":"2024-10-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":4000},"cost":{"input":0.15,"output":0.15,"cache_read":0.015}},"mistral/ministral-14b":{"id":"mistral/ministral-14b","name":"Ministral 14B","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"cost":{"input":0.2,"output":0.2,"cache_read":0.02},"canonical_model_id":"mistral/ministral-14b"},"mistral/voxtral-mini-tts-3":{"id":"mistral/voxtral-mini-tts-3","type":"speech","name":"Voxtral TTS 3","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"mistral","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-10-20","last_updated":"2026-10-20","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"mistral/voxtral-small-transcribe-3":{"id":"mistral/voxtral-small-transcribe-3","type":"transcription","name":"Voxtral Small Transcribe 3","description":"Speech transcription model for accurate audio-to-text and captioning workflows","family":"mistral","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-10-20","last_updated":"2026-10-20","modalities":{"input":["audio"],"output":["text"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"mistral/mistral-large-3":{"id":"mistral/mistral-large-3","name":"Mistral Large 3","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-11","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"cost":{"input":0.5,"output":1.5,"cache_read":0.05},"canonical_model_id":"mistral/mistral-large-2512"},"mistral/ministral-3b":{"id":"mistral/ministral-3b","name":"Ministral 3B (latest)","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-10-16","last_updated":"2024-10-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":4000},"cost":{"input":0.1,"output":0.1,"cache_read":0.01}},"mistral/mistral-nemo":{"id":"mistral/mistral-nemo","name":"Mistral Nemo","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-nemo","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.029,"output":0.03},"canonical_model_id":"mistral/mistral-nemo"},"mistral/mistral-embed":{"id":"mistral/mistral-embed","type":"embedding","name":"Mistral Embed","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"mistral-embed","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2023-12-11","last_updated":"2023-12-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8000,"output":3072},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"mistral/mistral-embed"},"mistral/mistral-small":{"id":"mistral/mistral-small","name":"Mistral Small (latest)","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":4000},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"mistral/mistral-small-latest"},"mistral/mistral-large-4":{"id":"mistral/mistral-large-4","name":"Mistral Large 4","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":262144},"cost":{"input":0.7,"output":2.1,"cache_read":0.07},"canonical_model_id":"mistral/mistral-large-4"},"deepseek/deepseek-v4.1-flash-1017-fast":{"id":"deepseek/deepseek-v4.1-flash-1017-fast","name":"DeepSeek V4.1 Flash 1017 Fast","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":262144},"cost":{"input":0.6,"output":2.4,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"deepseek/deepseek-v3.1":{"id":"deepseek/deepseek-v3.1","name":"DeepSeek-V3.1","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":128000},"cost":{"input":0.25,"output":0.95,"cache_read":0.13},"canonical_model_id":"deepseek/deepseek-v3.1"},"deepseek/deepseek-v4.1-flash-1017-ultrafast":{"id":"deepseek/deepseek-v4.1-flash-1017-ultrafast","name":"DeepSeek V4.1 Flash 1017 Ultrafast","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"release_date":"2026-11-06","last_updated":"2026-11-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":2.4,"output":9.6,"cache_read":0.048}},"deepseek/deepseek-v3.2-thinking":{"id":"deepseek/deepseek-v3.2-thinking","name":"DeepSeek V3.2 Thinking","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8000},"cost":{"input":0.62,"output":1.85},"canonical_model_id":"deepseek/deepseek-v3.2"},"deepseek/deepseek-v4-pro-0813":{"id":"deepseek/deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"Flagship DeepSeek model for coding, reasoning, and agentic work","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.66,"output":1.98,"cache_read":0.066},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"deepseek/deepseek-v4.1-flash-fast":{"id":"deepseek/deepseek-v4.1-flash-fast","name":"DeepSeek V4.1 Flash Fast","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":32768},"cost":{"input":0.6,"output":2.4,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek/deepseek-v4.1-flash":{"id":"deepseek/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":32768},"cost":{"input":0.3,"output":1.2,"cache_read":0.007},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048600,"output":1048600},"cost":{"input":1.32,"output":3.96,"cache_read":0.132},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-v4-flash-vision-exp":{"id":"deepseek/deepseek-v4-flash-vision-exp","name":"DeepSeek V4 Flash Vision Exp","description":"Experimental multimodal DeepSeek V4 Flash model for image understanding, coding, and agentic work","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-21","last_updated":"2026-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.2156,"output":0.6468,"cache_read":0.0068},"canonical_model_id":"deepseek/deepseek-v4-flash-vision-exp"},"deepseek/deepseek-v4-flash":{"id":"deepseek/deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.13,"output":0.26,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek/deepseek-v3.2":{"id":"deepseek/deepseek-v3.2","name":"DeepSeek V3.2","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8000},"cost":{"input":0.62,"output":1.85},"canonical_model_id":"deepseek/deepseek-v3.2"},"deepseek/deepseek-v4-flash-0731":{"id":"deepseek/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.13,"output":0.26,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepseek/deepseek-v4.1-flash-1017":{"id":"deepseek/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":262144},"cost":{"input":0.3,"output":1.2,"cache_read":0.007},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"deepseek/deepseek-r1":{"id":"deepseek/deepseek-r1","name":"DeepSeek-R1","description":"Classic open reasoning model for transparent math, coding, and deliberate problem solving","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"knowledge":"2024-07","release_date":"2025-01-20","last_updated":"2025-05-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"status":"deprecated","cost":{"input":1.35,"output":5.4},"canonical_model_id":"deepseek/deepseek-r1"},"inclusionai/ling-3.0-flash-vl":{"id":"inclusionai/ling-3.0-flash-vl","name":"Ling 3.0 Flash VL","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":32000},"cost":{"input":0.075,"output":0.22,"cache_read":0.015},"canonical_model_id":"inclusionai/ling-3.0-flash-vl"},"inclusionai/ling-3.0-flash-sante":{"id":"inclusionai/ling-3.0-flash-sante","name":"Ling 3.0 Flash Sante","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000},"cost":{"input":0.075,"output":0.22,"cache_read":0.015},"canonical_model_id":"inclusionai/ling-3.0-flash-sante"},"inclusionai/ling-3.1-flash-1019":{"id":"inclusionai/ling-3.1-flash-1019","name":"Ling 3.1 Flash 1019","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"release_date":"2026-10-30","last_updated":"2026-10-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":262144},"cost":{"input":0.3,"output":0.9,"cache_read":0.06}},"inclusionai/ling-3.0-flash-fin":{"id":"inclusionai/ling-3.0-flash-fin","name":"Ling 3.0 Flash Fin","description":"Finance-enhanced model for financial research, multi-step investment workflows, and long-horizon planning and execution","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-08-27","last_updated":"2026-09-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":32000},"cost":{"input":0.075,"output":0.22,"cache_read":0.015},"canonical_model_id":"inclusionai/ling-3.0-flash-fin"},"inclusionai/ling-3.0-flash":{"id":"inclusionai/ling-3.0-flash","name":"Ling 3.0 Flash","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-07-23","last_updated":"2026-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":32000},"cost":{"input":0.021,"output":0.063,"cache_read":0.0042},"canonical_model_id":"inclusionai/ling-3.0-flash"},"inclusionai/ling-3.1-flash":{"id":"inclusionai/ling-3.1-flash","name":"Ling 3.1 Flash","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.3,"output":0.9,"cache_read":0.06},"canonical_model_id":"inclusionai/ling-3.1-flash"},"google/gemini-2.5-flash":{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65535},"cost":{"input":0.3,"output":2.5,"cache_read":0.03},"canonical_model_id":"google/gemini-2.5-flash"},"google/gemini-3.1-flash-lite-image":{"id":"google/gemini-3.1-flash-lite-image","type":"image","name":"Gemini 3.1 Flash Lite Image (Nano Banana 2 Lite)","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":4096},"cost":{"input":0.25,"output":1.5,"cache_read":0.03},"canonical_model_id":"google/gemini-3.1-flash-lite-image"},"google/gemini-3.5-transcribe-live":{"id":"google/gemini-3.5-transcribe-live","type":"transcription","name":"Gemini 3.5 Transcribe Live","description":"Speech transcription model for accurate audio-to-text and captioning workflows","family":"gemini","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["audio"],"output":["text"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"canonical_model_id":"google/gemini-3.5-transcribe-live"},"google/gemini-3.8-flash":{"id":"google/gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65535},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.8-flash"},"google/gemini-4-carbon":{"id":"google/gemini-4-carbon","name":"Gemini 4 Carbon","description":"Gemini multimodal model for text, image, audio, video, and document tasks","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":2,"output":10,"cache_read":0.1},"canonical_model_id":"google/gemini-4-carbon"},"google/text-multilingual-embedding-002":{"id":"google/text-multilingual-embedding-002","type":"embedding","name":"Text Multilingual Embedding 002","description":"Gecko-based multilingual text embedding model producing up to 768-dimensional vectors","family":"text-embedding","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-05-14","last_updated":"2024-05-14","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":2048,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"google/text-multilingual-embedding-002"},"google/veo-3.1-lite-generate-001":{"id":"google/veo-3.1-lite-generate-001","type":"video","name":"Veo 3.1 Lite Generate","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"veo","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"google/gemini-2.5-pro":{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":1.25,"output":10,"cache_read":0.125,"tiers":[{"input":2.5,"output":15,"cache_read":0.25,"tier":{"type":"context","size":200001}}],"context_over_200k":{"input":2.5,"output":15,"cache_read":0.25}},"canonical_model_id":"google/gemini-2.5-pro"},"google/gemini-omni-flash-preview":{"id":"google/gemini-omni-flash-preview","type":"video","name":"Gemini Omni Flash Preview","description":"Video generation and editing model for fast, conversational text- and image-to-video workflows","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":false,"temperature":true,"release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["video"]},"open_weights":false,"limit":{"context":1000000,"output":57920},"cost":{"input":1.5,"output":9},"canonical_model_id":"google/gemini-omni-flash-preview"},"google/gemini-3.5-flash":{"id":"google/gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":1.5,"output":9,"cache_read":0.15},"canonical_model_id":"google/gemini-3.5-flash"},"google/veo-3.1-fast-generate-001":{"id":"google/veo-3.1-fast-generate-001","type":"video","name":"Veo 3.1 Fast Generate","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"veo","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-10-15","last_updated":"2026-06-08","modalities":{"input":["text","image","video"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"google/gemini-3.6-flash":{"id":"google/gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.6-flash"},"google/gemini-embedding-001":{"id":"google/gemini-embedding-001","type":"embedding","name":"Gemini Embedding 001","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"gemini","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2025-05","release_date":"2025-05-20","last_updated":"2025-05-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":2048,"output":1},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"google/gemini-embedding-001"},"google/gemini-embedding-2":{"id":"google/gemini-embedding-2","type":"embedding","name":"Gemini Embedding 2","description":"Multimodal embedding model mapping text, images, video, audio, and PDFs into a unified embedding space","family":"gemini","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2025-11","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":3072},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"google/gemini-embedding-2"},"google/gemini-3.1-flash-image":{"id":"google/gemini-3.1-flash-image","type":"image","name":"Nano Banana 2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":131072,"output":32768},"cost":{"input":0.5,"output":3,"cache_read":0.05},"canonical_model_id":"google/gemini-3.1-flash-image"},"google/gemini-3.1-pro-preview":{"id":"google/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200001}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"google/gemini-3.1-flash-lite":{"id":"google/gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65000},"cost":{"input":0.25,"output":1.5,"cache_read":0.03},"canonical_model_id":"google/gemini-3.1-flash-lite"},"google/gemini-2.5-flash-lite":{"id":"google/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash Lite","description":"Lean Gemini 2.5 lane for cheap multimodal traffic and quick agents","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.1,"output":0.4,"cache_read":0.01},"canonical_model_id":"google/gemini-2.5-flash-lite"},"google/gemini-4-argon":{"id":"google/gemini-4-argon","name":"Gemini 4 Argon","description":"Gemini multimodal model for text, image, audio, video, and document tasks","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":2,"output":10,"cache_read":0.1},"canonical_model_id":"google/gemini-4-argon"},"google/gemini-3.8-flash-tts":{"id":"google/gemini-3.8-flash-tts","type":"speech","name":"Gemini 3.8 Flash TTS","description":"Flagship text-to-speech model for expressive, studio-grade voices and long-form multi-speaker audio","family":"gemini-flash","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":8192,"output":16384},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"cost":{"input":0.5,"output":9,"output_audio":9},"canonical_model_id":"google/gemini-3.8-flash-tts"},"google/gemini-3.5-flash-lite":{"id":"google/gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65000},"cost":{"input":0.3,"output":2.5,"cache_read":0.03},"canonical_model_id":"google/gemini-3.5-flash-lite"},"google/gemma-4-31b-it":{"id":"google/gemma-4-31b-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0.14,"output":0.4},"canonical_model_id":"google/gemma-4-31b-it"},"google/text-embedding-005":{"id":"google/text-embedding-005","type":"embedding","name":"Text Embedding 005","description":"Gecko-based text embedding model specialized in English and code tasks, producing up to 768-dimensional vectors","family":"text-embedding","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-11-18","last_updated":"2024-11-18","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":2048,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"google/text-embedding-005"},"google/gemini-2.5-flash-image":{"id":"google/gemini-2.5-flash-image","type":"image","name":"Nano Banana (Gemini 2.5 Flash Image)","description":"Nano Banana image model for fast generation, edits, and character-consistent assets","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-26","last_updated":"2025-08-26","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":32768,"output":65535},"cost":{"input":0.3,"output":2.5,"cache_read":0.03},"canonical_model_id":"google/gemini-2.5-flash-image"},"google/gemma-4-26b-a4b-it":{"id":"google/gemma-4-26b-a4b-it","name":"Gemma 4 26B A4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"google/gemini-3-flash":{"id":"google/gemini-3-flash","name":"Gemini 3 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-03","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65000},"cost":{"input":0.5,"output":3,"cache_read":0.05}},"google/gemini-omni-1.2-flash":{"id":"google/gemini-omni-1.2-flash","type":"video","name":"Gemini Omni 1.2 Flash","description":"Omni-modal model for text, vision, audio, and multimodal agent tasks","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":false,"temperature":false,"release_date":"2026-11-05","last_updated":"2026-11-05","modalities":{"input":["text","image","pdf"],"output":["video"]},"open_weights":false,"limit":{"context":131072,"output":260640},"cost":{"input":1.5,"output":9},"canonical_model_id":"google/gemini-omni-1.2-flash"},"google/gemini-3-pro-image":{"id":"google/gemini-3-pro-image","type":"image","name":"Nano Banana Pro","description":"Nano Banana Pro for higher-fidelity image generation and design-heavy edits","family":"gemini-pro","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":32768},"cost":{"input":2,"output":12,"cache_read":0.2},"canonical_model_id":"google/gemini-3-pro-image"},"google/gemini-3.8-flash-lite-tts":{"id":"google/gemini-3.8-flash-lite-tts","type":"speech","name":"Gemini 3.8 Flash-Lite TTS","description":"Fast, cost-efficient text-to-speech model for high-volume narration and voice agent pipelines","family":"gemini-flash-lite","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":8192,"output":16384},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"cost":{"input":0.5,"output":6,"output_audio":6},"canonical_model_id":"google/gemini-3.8-flash-lite-tts"},"google/gemini-3.8-live-extended-thinking":{"id":"google/gemini-3.8-live-extended-thinking","type":"realtime","name":"Gemini 3.8 Live Extended Thinking","description":"Live API voice model with configurable background reasoning for multi-step real-time agents","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2026-09-15","last_updated":"2026-09-15","modalities":{"input":["text","audio"],"output":["text","audio"]},"open_weights":false,"limit":{"context":131072,"output":65536},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"cost":{"input":0.75,"output":4.5,"input_audio":3,"output_audio":12},"canonical_model_id":"google/gemini-3.8-live-extended-thinking"},"google/gemini-3.8-live":{"id":"google/gemini-3.8-live","type":"realtime","name":"Gemini 3.8 Live","description":"Low-latency Live API model for real-time voice agents with interleaved reasoning and async tools","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2026-09-15","last_updated":"2026-09-15","modalities":{"input":["text","audio"],"output":["text","audio"]},"open_weights":false,"limit":{"context":131072,"output":65536},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"cost":{"input":0.75,"output":4.5,"input_audio":3,"output_audio":12},"canonical_model_id":"google/gemini-3.8-live"},"google/gemini-3.5-transcribe":{"id":"google/gemini-3.5-transcribe","type":"transcription","name":"Gemini 3.5 Transcribe","description":"Speech-to-text model with language detection, speaker diarization, word timestamps, and custom vocabulary","family":"gemini","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["audio"],"output":["text"]},"open_weights":false,"limit":{"context":98304,"output":32768},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"cost":{"input":2,"output":12,"input_audio":2},"canonical_model_id":"google/gemini-3.5-transcribe"},"google/gemini-3.7-flash":{"id":"google/gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65535},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.7-flash"},"google/veo-3.1-generate-001":{"id":"google/veo-3.1-generate-001","type":"video","name":"Veo 3.1","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"veo","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-10-15","last_updated":"2026-06-08","modalities":{"input":["text","image","video"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"google/gemini-nano-banana-2.1":{"id":"google/gemini-nano-banana-2.1","type":"image","name":"Gemini Nano Banana 2.1","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["minimal","medium","high"]}],"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":131072,"output":32768},"cost":{"input":1.5,"output":7.5,"cache_read":0.15},"canonical_model_id":"google/gemini-nano-banana-2.1"},"poolside/laguna-s-2.1":{"id":"poolside/laguna-s-2.1","name":"Laguna S 2.1","description":"Agentic coding model from Poolside in the XS size class for local deployment","family":"laguna","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.09,"output":0.18,"cache_read":0.009},"canonical_model_id":"poolside/laguna-s-2.1"},"bytedance/seedream-4.0":{"id":"bytedance/seedream-4.0","type":"image","name":"Seedream 4.0","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"seed","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-09-09","last_updated":"2025-08-28","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"bytedance/seedance-v1.0-pro-fast":{"id":"bytedance/seedance-v1.0-pro-fast","type":"video","name":"Seedance v1.0 Pro Fast","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"seed","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-10-24","last_updated":"2025-10-31","modalities":{"input":["text","image"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"bytedance/seedream-5.0-lite":{"id":"bytedance/seedream-5.0-lite","type":"image","name":"Seedream 5.0 Lite","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"seed","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-02-13","last_updated":"2026-01-28","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"bytedance/seedance-2.0":{"id":"bytedance/seedance-2.0","type":"video","name":"Seedance 2.0","description":"ByteDance unified multimodal audio-video model supporting text, image, video and audio references, editing, extension and synchronized stereo sound.","family":"seed","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-02-12","last_updated":"2026-10-04","modalities":{"input":["text","image"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"canonical_model_id":"bytedance-seed/seedance-2.0"},"bytedance/seedance-v1.0-pro":{"id":"bytedance/seedance-v1.0-pro","type":"video","name":"Seedance v1.0 Pro","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"seed","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-06-11","last_updated":"2025-06-11","modalities":{"input":["text","image"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"bytedance/seedream-5.0-pro":{"id":"bytedance/seedream-5.0-pro","type":"image","name":"Seedream 5.0 Pro","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"seed","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-07-11","last_updated":"2026-07-11","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"bytedance/seed-2.1-turbo":{"id":"bytedance/seed-2.1-turbo","name":"Seed 2.1 Turbo","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-23","last_updated":"2026-06-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":262144},"cost":{"input":0.5,"output":2.5,"cache_read":0.1},"canonical_model_id":"bytedance-seed/seed-2.1-turbo"},"bytedance/seedance-2.0-fast":{"id":"bytedance/seedance-2.0-fast","type":"video","name":"Seedance 2.0 Fast","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"seed","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-14","last_updated":"2026-04-14","modalities":{"input":["text","image","video","audio"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"bytedance/seedance-2.0-mini":{"id":"bytedance/seedance-2.0-mini","type":"video","name":"Seedance 2.0 Mini","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"seed","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-06-22","last_updated":"2026-06-22","modalities":{"input":["text","image","video","audio"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"bytedance/seedream-4.5":{"id":"bytedance/seedream-4.5","type":"image","name":"Seedream 4.5","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"seed","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-12-03","last_updated":"2025-11-28","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"bytedance/seedance-2.5":{"id":"bytedance/seedance-2.5","type":"video","name":"Seedance 2.5","description":"ByteDance multimodal audio-video model with up to 30-second single-pass generation, multi-round extension, reference inputs and timestamp-level editing.","family":"seed","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-07-31","last_updated":"2026-10-04","modalities":{"input":["text"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"canonical_model_id":"bytedance-seed/seedance-2.5"},"recraft/recraft-v2":{"id":"recraft/recraft-v2","type":"image","name":"Recraft V2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"recraft","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-03-13","last_updated":"2024-03","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":512,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"recraft/recraft-v4.1-utility":{"id":"recraft/recraft-v4.1-utility","type":"image","name":"Recraft V4.1 Utility","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"recraft","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-05-14","last_updated":"2026-05-14","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"recraft/recraft-v4.1":{"id":"recraft/recraft-v4.1","type":"image","name":"Recraft V4.1","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"recraft","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-05-14","last_updated":"2026-05-14","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"recraft/recraft-v4.1-utility-pro":{"id":"recraft/recraft-v4.1-utility-pro","type":"image","name":"Recraft V4.1 Utility Pro","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"recraft","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-05-14","last_updated":"2026-05-14","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"recraft/recraft-v3":{"id":"recraft/recraft-v3","type":"image","name":"Recraft V3","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"recraft","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-10-30","last_updated":"2024-10","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":512,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"recraft/recraft-v4.1-pro":{"id":"recraft/recraft-v4.1-pro","type":"image","name":"Recraft V4.1 Pro","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"recraft","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-05-14","last_updated":"2026-05-14","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"recraft/recraft-v4":{"id":"recraft/recraft-v4","type":"image","name":"Recraft V4","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"recraft","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-02-17","last_updated":"2026-02-17","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"recraft/recraft-v4-pro":{"id":"recraft/recraft-v4-pro","type":"image","name":"Recraft V4 Pro","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"recraft","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-02-17","last_updated":"2026-02-17","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"recraft/recraft-v4.1-flash":{"id":"recraft/recraft-v4.1-flash","type":"image","name":"Recraft V4.1 Flash","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"recraft","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-09-23","last_updated":"2026-09-23","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"humansand/ampersand-v0.1":{"id":"humansand/ampersand-v0.1","name":"Ampersand v0.1","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"v0","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"release_date":"2026-11-06","last_updated":"2026-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":0,"output":0}},"zai/glm-5.2-fast":{"id":"zai/glm-5.2-fast","name":"GLM 5.2 Fast","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":2.8,"output":8.8,"cache_read":0.56},"canonical_model_id":"zhipuai/glm-5.2"},"zai/glm-5.2":{"id":"zai/glm-5.2","name":"GLM 5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":1.4,"output":4.4,"cache_read":0.14},"canonical_model_id":"zhipuai/glm-5.2"},"zai/glm-5.1":{"id":"zai/glm-5.1","name":"GLM 5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202800,"output":64000},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.1"},"zai/glm-5.3-flashx-legal":{"id":"zai/glm-5.3-flashx-legal","name":"GLM 5.3 FlashX Legal","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"release_date":"2026-11-02","last_updated":"2026-11-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.37,"output":1.25,"cache_read":0.075}},"zai/glm-4.5":{"id":"zai/glm-4.5","name":"GLM 4.5","description":"Hybrid-reasoning GLM release that made the 4.5 line broadly useful","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":96000},"cost":{"input":0.6,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.5"},"zai/glm-4.7":{"id":"zai/glm-4.7","name":"GLM 4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":120000},"cost":{"input":0.6,"output":2.2},"canonical_model_id":"zhipuai/glm-4.7"},"zai/glm-5.3-fast":{"id":"zai/glm-5.3-fast","name":"GLM 5.3 Fast","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":262144},"cost":{"input":2.1,"output":6.6,"cache_read":0.21},"canonical_model_id":"zhipuai/glm-5.3"},"zai/glm-5.3":{"id":"zai/glm-5.3","name":"GLM 5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":1000000},"cost":{"input":1.4,"output":4.4,"cache_read":0.14},"canonical_model_id":"zhipuai/glm-5.3"},"zai/glm-5.3-flash":{"id":"zai/glm-5.3-flash","name":"GLM 5.3 Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131000},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai/glm-5-turbo":{"id":"zai/glm-5-turbo","name":"GLM 5 Turbo","description":"Faster GLM-5 lane for coding agents that need lower latency","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":202800,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24},"canonical_model_id":"zhipuai/glm-5-turbo"},"zai/glm-4.5-air":{"id":"zai/glm-4.5-air","name":"GLM 4.5 Air","description":"Lighter GLM-4.5 variant for fast coding assistance and cheaper agents","family":"glm-air","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":96000},"cost":{"input":0.2,"output":1.1,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-4.5-air"},"zai/glm-4.6":{"id":"zai/glm-4.6","name":"GLM 4.6","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":96000},"cost":{"input":0.6,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.6"},"zai/glm-4.5v":{"id":"zai/glm-4.5v","name":"GLM 4.5V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-08-11","last_updated":"2025-08-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":66000,"output":16000},"cost":{"input":0.6,"output":1.8,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.5v"},"zai/glm-5.3-flashx":{"id":"zai/glm-5.3-flashx","name":"GLM 5.3 FlashX","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.37,"output":1.25,"cache_read":0.075},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai/glm-5v-turbo":{"id":"zai/glm-5v-turbo","name":"GLM 5V Turbo","description":"Fast GLM vision model for screenshots, documents, and multimodal agent tasks","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":128000},"cost":{"input":1.2,"output":4,"cache_read":0.24},"canonical_model_id":"zhipuai/glm-5v-turbo"},"zai/glm-4.7-flashx":{"id":"zai/glm-4.7-flashx","name":"GLM 4.7 FlashX","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.06,"output":0.4,"cache_read":0.01},"canonical_model_id":"zhipuai/glm-4.7-flashx"},"zai/glm-5":{"id":"zai/glm-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202800,"output":131100},"cost":{"input":1,"output":3.2},"canonical_model_id":"zhipuai/glm-5"},"zai/glm-4.7-flash":{"id":"zai/glm-4.7-flash","name":"GLM 4.7 Flash","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131000},"cost":{"input":0.07,"output":0.4},"canonical_model_id":"zhipuai/glm-4.7-flash"},"bfl/flux-kontext-pro":{"id":"bfl/flux-kontext-pro","type":"image","name":"FLUX.1 Kontext Pro","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"flux","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-05-29","last_updated":"2025-06","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":512,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"bfl/flux-3-video":{"id":"bfl/flux-3-video","type":"video","name":"Flux 3","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"flux","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-08-04","last_updated":"2026-08-04","modalities":{"input":["text","image","video"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"bfl/flux-2-pro":{"id":"bfl/flux-2-pro","type":"image","name":"FLUX.2 [pro]","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"flux","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-11-25","last_updated":"2026-06-08","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":67300,"output":67300},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"bfl/flux-3-image-klein":{"id":"bfl/flux-3-image-klein","type":"image","name":"FLUX 3 Image Klein","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"flux","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"bfl/flux-2-flex":{"id":"bfl/flux-2-flex","type":"image","name":"FLUX.2 [flex]","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"flux","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-11-25","last_updated":"2026-06-08","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"bfl/flux-3-image":{"id":"bfl/flux-3-image","type":"image","name":"FLUX 3 Image","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"flux","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-10-05","last_updated":"2026-10-05","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"bfl/flux-2-klein-4b":{"id":"bfl/flux-2-klein-4b","type":"image","name":"FLUX.2 [klein] 4B","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"flux","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-01-15","last_updated":"2026-06-08","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"bfl/flux-kontext-max":{"id":"bfl/flux-kontext-max","type":"image","name":"FLUX.1 Kontext Max","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"flux","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-05-29","last_updated":"2025-06","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":512,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"bfl/flux-pro-1.1":{"id":"bfl/flux-pro-1.1","type":"image","name":"FLUX1.1 [pro]","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"flux","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-10-02","last_updated":"2024-10","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":512,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"bfl/flux-pro-1.1-ultra":{"id":"bfl/flux-pro-1.1-ultra","type":"image","name":"FLUX1.1 [pro] Ultra","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"flux","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-11-01","last_updated":"2024-11","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":512,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"bfl/flux-2-max":{"id":"bfl/flux-2-max","type":"image","name":"FLUX.2 [max]","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"flux","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-12-16","last_updated":"2026-06-08","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":67300,"output":67300},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"bfl/flux-2-klein-9b":{"id":"bfl/flux-2-klein-9b","type":"image","name":"FLUX.2 [klein] 9B","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"flux","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-01-15","last_updated":"2026-06-08","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"bfl/flux-pro-1.0-fill":{"id":"bfl/flux-pro-1.0-fill","type":"image","name":"FLUX.1 Fill [pro]","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"flux","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-10-01","last_updated":"2024-10","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":512,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"tencent/hy-mt2-lite":{"id":"tencent/hy-mt2-lite","name":"Tencent Hy-MT2-Lite","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":false,"tool_call":false,"release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8000,"output":4000},"cost":{"input":0.044,"output":0.177}},"tencent/hy-mt2-pro":{"id":"tencent/hy-mt2-pro","name":"Tencent Hy-MT2-Pro","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":false,"tool_call":false,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8000,"output":4000},"cost":{"input":0.074,"output":0.295}},"tencent/hy4":{"id":"tencent/hy4","name":"Tencent Hy4","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-11-04","last_updated":"2026-11-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1024000,"output":64000},"cost":{"input":0.417,"output":1.2505,"cache_read":0.021},"canonical_model_id":"tencent/hy4"},"tencent/hy-mt2-plus":{"id":"tencent/hy-mt2-plus","name":"Tencent Hy-MT2-Plus","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":false,"tool_call":false,"release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8000,"output":4000},"cost":{"input":0.074,"output":0.295}},"tencent/hy3":{"id":"tencent/hy3","name":"Hy3","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.14,"output":0.58,"cache_read":0.035},"canonical_model_id":"tencent/hy3"},"tencent/hy4-preview":{"id":"tencent/hy4-preview","name":"Tencent Hy4 Preview","description":"A next-generation productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-08-28","last_updated":"2026-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1024000,"output":64000},"cost":{"input":0.834,"output":2.501,"cache_read":0.042},"canonical_model_id":"tencent/hy4-preview"},"microsoft/mai-voice-2":{"id":"microsoft/mai-voice-2","type":"speech","name":"MAI-Voice-2","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"mai","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"microsoft/mai-voice-2.1":{"id":"microsoft/mai-voice-2.1","type":"speech","name":"MAI-Voice-2.1","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"mai","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-10-01","last_updated":"2026-10-01","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"microsoft/mai-voice-2.1-flash":{"id":"microsoft/mai-voice-2.1-flash","type":"speech","name":"MAI-Voice-2.1-Flash","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"mai","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-10-01","last_updated":"2026-10-01","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"microsoft/mai-transcribe-2":{"id":"microsoft/mai-transcribe-2","type":"transcription","name":"MAI-Transcribe 2","description":"Speech transcription model for accurate audio-to-text and captioning workflows","family":"mai","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-09-03","last_updated":"2026-09-03","modalities":{"input":["audio"],"output":["text"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"microsoft/mai-voice-2-flash":{"id":"microsoft/mai-voice-2-flash","type":"speech","name":"MAI-Voice-2-Flash","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"mai","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-07-23","last_updated":"2026-07-23","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"microsoft/mai-transcribe-2-streaming":{"id":"microsoft/mai-transcribe-2-streaming","type":"transcription","name":"MAI-Transcribe-2-Streaming","description":"Speech transcription model for accurate audio-to-text and captioning workflows","family":"mai","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-10-01","last_updated":"2026-10-01","modalities":{"input":["audio"],"output":["text"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"microsoft/mai-image-2.6":{"id":"microsoft/mai-image-2.6","type":"image","name":"MAI-Image-2.6","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"mai","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"cost":{"input":5,"output":38}},"microsoft/mai-image-2.6-flash":{"id":"microsoft/mai-image-2.6-flash","type":"image","name":"MAI-Image-2.6-Flash","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"mai","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"cost":{"input":1.75,"output":19}},"moonshotai/kimi-k3.1-pro-highspeed":{"id":"moonshotai/kimi-k3.1-pro-highspeed","name":"Kimi K3.1 Pro Highspeed","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":4}},"moonshotai/kimi-k3.1-pro":{"id":"moonshotai/kimi-k3.1-pro","name":"Kimi K3.1 Pro","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":262144},"cost":{"input":2,"output":10,"cache_read":0.2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"moonshotai/kimi-k2.6":{"id":"moonshotai/kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.95,"output":4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"moonshotai/kimi-k3-fast":{"id":"moonshotai/kimi-k3-fast","name":"Kimi K3 Fast","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":4.5,"output":22.5,"cache_read":0.45},"canonical_model_id":"moonshotai/kimi-k3"},"moonshotai/kimi-k3":{"id":"moonshotai/kimi-k3","name":"Kimi K3","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"moonshotai/kimi-k2.5":{"id":"moonshotai/kimi-k2.5","name":"Kimi K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.6,"output":3},"canonical_model_id":"moonshotai/kimi-k2.5"},"moonshotai/kimi-k2":{"id":"moonshotai/kimi-k2","name":"Kimi K2 Instruct","description":"Kimi model for long-context chat, coding, and agentic reasoning","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-12-31","release_date":"2025-07-11","last_updated":"2025-07-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.57,"output":2.3},"canonical_model_id":"moonshotai/kimi-k2"},"moonshotai/kimi-k2.7-code":{"id":"moonshotai/kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":32768},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"moonshotai/kimi-k2.7-code-highspeed":{"id":"moonshotai/kimi-k2.7-code-highspeed","name":"Kimi K2.7 Code High Speed","description":"Lower-latency Kimi Code variant for interactive edits and coding-agent loops","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":1.9,"output":8,"cache_read":0.38},"canonical_model_id":"moonshotai/kimi-k2.7-code-highspeed"},"topaz/proteus":{"id":"topaz/proteus","type":"video","name":"Proteus","description":"Video model for prompt-guided generation, editing, and motion workflows","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"topaz/wonder-3.5":{"id":"topaz/wonder-3.5","type":"image","name":"Wonder 3.5","description":"Image model for prompt-driven generation, editing, and visual design workflows","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"topaz/starlight-precise-2.6":{"id":"topaz/starlight-precise-2.6","type":"video","name":"Starlight Precise 2.6","description":"Video model for prompt-guided generation, editing, and motion workflows","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"alibaba/qwen3.6-plus":{"id":"alibaba/qwen3.6-plus","name":"Qwen 3.6 Plus","description":"Earlier Qwen multimodal workhorse for million-token agent and document tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]},{"type":"budget_tokens","min":1,"max":131072}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.5,"output":3,"cache_read":0.05,"cache_write":0.625,"tiers":[{"input":2,"output":6,"cache_read":0.2,"cache_write":2.5,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":2,"output":6,"cache_read":0.2,"cache_write":2.5}},"canonical_model_id":"alibaba/qwen3.6-plus"},"alibaba/wan-v2.7-t2v":{"id":"alibaba/wan-v2.7-t2v","type":"video","name":"Wan v2.7 Text-to-Video","description":"Video model for prompt-guided generation, editing, and motion workflows","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text","audio"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"alibaba/qwen-3-235b":{"id":"alibaba/qwen-3-235b","name":"Qwen3 235B A22B Instruct 2507","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0.22,"output":0.88},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"alibaba/wan-v2.6-i2v":{"id":"alibaba/wan-v2.6-i2v","type":"video","name":"Wan v2.6 Image-to-Video","description":"Video model for prompt-guided generation, editing, and motion workflows","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-12-16","last_updated":"2025-12-16","modalities":{"input":["text","image","audio"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"alibaba/wan-v2.7-r2v":{"id":"alibaba/wan-v2.7-r2v","type":"video","name":"Wan v2.7 Reference-to-Video","description":"Video model for prompt-guided generation, editing, and motion workflows","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text","image","video","audio"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"alibaba/qwen3.8-omni-flash":{"id":"alibaba/qwen3.8-omni-flash","name":"Qwen 3.8 Omni Flash","description":"Qwen omni model for text, vision, audio, and multimodal agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-17","last_updated":"2026-09-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.47,"cache_read":0.016},"canonical_model_id":"alibaba/qwen3.8-omni-flash"},"alibaba/qwen3-vl-instruct":{"id":"alibaba/qwen3-vl-instruct","name":"Qwen3 VL Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-23","last_updated":"2025-09-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.2,"output":0.88,"cache_read":0.11}},"alibaba/qwen3-coder":{"id":"alibaba/qwen3-coder","name":"Qwen3 Coder 480B A35B Instruct","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.22,"output":1.8,"cache_read":0.022,"tiers":[{"input":2.7,"output":13.5,"cache_read":0.54,"tier":{"type":"context","size":32001}},{"input":4.5,"output":22.5,"cache_read":0.9,"tier":{"type":"context","size":128001}}]},"canonical_model_id":"alibaba/qwen3-coder-480b-a35b-instruct"},"alibaba/qwen-3-30b":{"id":"alibaba/qwen-3-30b","name":"Qwen3-30B-A3B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":40960,"output":16384},"cost":{"input":0.12,"output":0.5},"canonical_model_id":"alibaba/qwen3-30b-a3b"},"alibaba/wan-v2.6-t2v":{"id":"alibaba/wan-v2.6-t2v","type":"video","name":"Wan v2.6 Text-to-Video","description":"Video model for prompt-guided generation, editing, and motion workflows","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-12-16","last_updated":"2025-12-16","modalities":{"input":["text","audio"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"alibaba/wan-v3.0-video":{"id":"alibaba/wan-v3.0-video","type":"video","name":"Wan v3.0 Video","description":"Video model for prompt-guided generation, editing, and motion workflows","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-08-23","last_updated":"2026-08-23","modalities":{"input":["text","image","video","audio"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"alibaba/qwen3.8-27b":{"id":"alibaba/qwen3.8-27b","name":"Qwen3.8 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.06,"output":2.2,"cache_read":0.059},"canonical_model_id":"alibaba/qwen3.8-27b"},"alibaba/qwen3.5-flash":{"id":"alibaba/qwen3.5-flash","name":"Qwen 3.5 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]},{"type":"budget_tokens","min":1,"max":81920}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.1,"output":0.4,"cache_read":0.01,"cache_write":0.125},"canonical_model_id":"alibaba/qwen3.5-flash"},"alibaba/wan-v2.6-r2v-flash":{"id":"alibaba/wan-v2.6-r2v-flash","type":"video","name":"Wan v2.6 Reference-to-Video Flash","description":"Video model for prompt-guided generation, editing, and motion workflows","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-12-16","last_updated":"2025-12-16","modalities":{"input":["text","image","video"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"alibaba/qwen3.8-flash":{"id":"alibaba/qwen3.8-flash","name":"Qwen 3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":991000,"output":128000},"cost":{"input":0.15,"output":0.47,"cache_read":0.016,"cache_write":0.2},"canonical_model_id":"alibaba/qwen3.8-flash"},"alibaba/qwen3-next-80b-a3b-thinking":{"id":"alibaba/qwen3-next-80b-a3b-thinking","name":"Qwen3 Next 80B A3B Thinking","description":"Efficient Qwen thinking model for local reasoning, math, and coding agents","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.15,"output":1.2},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-thinking"},"alibaba/qwen3-embedding-4b":{"id":"alibaba/qwen3-embedding-4b","type":"embedding","name":"Qwen3 Embedding 4B","description":"Multilingual text embedding model for retrieval, code search, classification, and clustering","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-06-05","last_updated":"2025-06-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"alibaba/qwen3-embedding-4b"},"alibaba/qwen3.8-max-prime":{"id":"alibaba/qwen3.8-max-prime","name":"Qwen 3.8 Max Prime","description":"High-throughput edition of Qwen3.8 Max for coding, professional work, multimodal understanding, and long-running agent workflows","family":"qwen3.8-max","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","min":0,"max":262144}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-23","last_updated":"2026-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":4,"output":12,"cache_read":0.5,"cache_write":5},"canonical_model_id":"alibaba/qwen3.8-max-prime"},"alibaba/qwen3-coder-30b-a3b":{"id":"alibaba/qwen3-coder-30b-a3b","name":"Qwen 3 Coder 30B A3B Instruct","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-31","last_updated":"2025-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":8192},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"alibaba/qwen3-coder-30b-a3b-instruct"},"alibaba/qwen3.8-max-0902":{"id":"alibaba/qwen3.8-max-0902","name":"Qwen3.8 Max 0902","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","min":0,"max":262144}],"tool_call":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":991000,"output":128000},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max-0902"},"alibaba/qwen-3-14b":{"id":"alibaba/qwen-3-14b","name":"Qwen3-14B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":40960,"output":16384},"cost":{"input":0.12,"output":0.24}},"alibaba/qwen3.8-2.4t-a95b":{"id":"alibaba/qwen3.8-2.4t-a95b","name":"Qwen3.8 2.4T A95B","description":"Open-weight sparse MoE (2.4T total, 95B active), the open-weight twin of Qwen3.8 Max for coding, research, complex reasoning, and agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":128000},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"alibaba/wan-v2.5-t2v-preview":{"id":"alibaba/wan-v2.5-t2v-preview","type":"video","name":"Wan v2.5 Text-to-Video Preview","description":"Video model for prompt-guided generation, editing, and motion workflows","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-09-24","last_updated":"2025-09-24","modalities":{"input":["text","audio"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"alibaba/qwen3-embedding-8b":{"id":"alibaba/qwen3-embedding-8b","type":"embedding","name":"Qwen3 Embedding 8B","description":"Multilingual text embedding model for retrieval, code search, classification, and clustering","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-06-05","last_updated":"2025-06-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"alibaba/qwen3-embedding-8b"},"alibaba/qwen3-embedding-0.6b":{"id":"alibaba/qwen3-embedding-0.6b","type":"embedding","name":"Qwen3 Embedding 0.6B","description":"Compact multilingual text embedding model for retrieval, code search, classification, and clustering","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-06-05","last_updated":"2025-06-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"alibaba/qwen3-embedding-0.6b"},"alibaba/qwen3.7-plus":{"id":"alibaba/qwen3.7-plus","name":"Qwen 3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]},{"type":"budget_tokens","min":1,"max":262144}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.4,"output":1.6,"cache_read":0.08,"cache_write":0.5,"tiers":[{"input":1.2,"output":4.8,"cache_read":0.24,"cache_write":1.5,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":1.2,"output":4.8,"cache_read":0.24,"cache_write":1.5}},"canonical_model_id":"alibaba/qwen3.7-plus"},"alibaba/qwen3-max-thinking":{"id":"alibaba/qwen3-max-thinking","name":"Qwen 3 Max Thinking","description":"Qwen reasoning model for deliberate problem solving, math, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1,"max":81920}],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-23","last_updated":"2025-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":65536},"cost":{"input":1.2,"output":6,"cache_read":0.24,"tiers":[{"input":2.4,"output":12,"cache_read":0.48,"tier":{"type":"context","size":32001}},{"input":3,"output":15,"cache_read":0.6,"tier":{"type":"context","size":128001}}]}},"alibaba/qwen3.7-max":{"id":"alibaba/qwen3.7-max","name":"Qwen 3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]},{"type":"budget_tokens","min":1,"max":262144}],"tool_call":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":991000,"output":64000},"cost":{"input":2.5,"output":7.5,"cache_read":0.5,"cache_write":3.125},"canonical_model_id":"alibaba/qwen3.7-max"},"alibaba/wan-v2.6-i2v-flash":{"id":"alibaba/wan-v2.6-i2v-flash","type":"video","name":"Wan v2.6 Image-to-Video Flash","description":"Video model for prompt-guided generation, editing, and motion workflows","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-12-16","last_updated":"2025-12-16","modalities":{"input":["text","image","audio"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"alibaba/wan-v2.6-r2v":{"id":"alibaba/wan-v2.6-r2v","type":"video","name":"Wan v2.6 Reference-to-Video","description":"Video model for prompt-guided generation, editing, and motion workflows","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-12-16","last_updated":"2025-12-16","modalities":{"input":["text","image","video"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"alibaba/wan-v3.0-video-prime":{"id":"alibaba/wan-v3.0-video-prime","type":"video","name":"Wan v3.0 Video Prime","description":"Video model for prompt-guided generation, editing, and motion workflows","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-08-28","last_updated":"2026-08-28","modalities":{"input":["text","image","video","audio"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"alibaba/qwen3.7-flash":{"id":"alibaba/qwen3.7-flash","name":"Qwen 3.7 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":991000,"output":64000},"cost":{"input":0.03,"output":0.13,"cache_read":0.006,"cache_write":0.038,"tiers":[{"input":0.1,"output":0.4,"cache_read":0.02,"cache_write":0.125,"tier":{"type":"context","size":32000}},{"input":0.2,"output":0.8,"cache_read":0.04,"cache_write":0.25,"tier":{"type":"context","size":256000}}]},"canonical_model_id":"alibaba/qwen3.7-flash"},"alibaba/qwen3.6-27b":{"id":"alibaba/qwen3.6-27b","name":"Qwen 3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1,"max":131072}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":65536},"cost":{"input":0.6,"output":3.6},"canonical_model_id":"alibaba/qwen3.6-27b"},"alibaba/qwen3.6-35b-a3b":{"id":"alibaba/qwen3.6-35b-a3b","name":"Qwen 3.6 35B A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.375,"output":2.25},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"alibaba/qwen3.5-plus":{"id":"alibaba/qwen3.5-plus","name":"Qwen 3.5 Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]},{"type":"budget_tokens","min":1,"max":81920}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-16","last_updated":"2026-02-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.4,"output":2.4,"cache_read":0.04,"cache_write":0.5,"tiers":[{"input":0.5,"output":3,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":256001}}],"context_over_200k":{"input":0.5,"output":3,"cache_read":0.05,"cache_write":0.625}},"canonical_model_id":"alibaba/qwen3.5-plus"},"alibaba/qwen3-coder-next":{"id":"alibaba/qwen3-coder-next","name":"Qwen3 Coder Next","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-02-03","last_updated":"2026-02-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.5,"output":1.2},"canonical_model_id":"alibaba/qwen3-coder-next"},"alibaba/qwen3-next-80b-a3b-instruct":{"id":"alibaba/qwen3-next-80b-a3b-instruct","name":"Qwen3 Next 80B A3B Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262114,"output":262114},"cost":{"input":0.15,"output":1.2},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-instruct"},"alibaba/qwen-3-32b":{"id":"alibaba/qwen-3-32b","name":"Qwen 3.32B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"alibaba/qwen3-32b"},"alibaba/qwen3.8-max":{"id":"alibaba/qwen3.8-max","name":"Qwen 3.8 Max","description":"Preview Qwen flagship for million-token multimodal reasoning and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","min":0,"max":262144}],"tool_call":true,"temperature":true,"release_date":"2026-07-19","last_updated":"2026-07-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":128000},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.8-max-preview"},"openai/gpt-6-luna-fast":{"id":"openai/gpt-6-luna-fast","name":"GPT-6 Luna (Fast)","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.5,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272001}}],"context_over_200k":{"input":0.4,"output":1.5,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-6-luna"},"openai/gpt-oss-safeguard-120b":{"id":"openai/gpt-oss-safeguard-120b","name":"GPT OSS Safeguard 120B","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-29","last_updated":"2025-10-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":112000,"output":16000},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"openai/gpt-oss-safeguard-120b"},"openai/gpt-5.2-pro":{"id":"openai/gpt-5.2-pro","name":"GPT 5.2 ","description":"Higher-accuracy GPT-5.2 variant for tougher reasoning and review workflows","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":21,"output":168},"canonical_model_id":"openai/gpt-5.2-pro"},"openai/gpt-5.5":{"id":"openai/gpt-5.5","name":"GPT 5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":872000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"openai/gpt-5.4-fast":{"id":"openai/gpt-5.4-fast","name":"GPT 5.4 (Fast)","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"openai/gpt-5.4"},"openai/gpt-realtime-2.1":{"id":"openai/gpt-realtime-2.1","type":"realtime","name":"gpt-realtime-2.1","description":"Realtime speech-to-speech model with configurable reasoning, tool use, and robust voice-agent behavior","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text","audio"],"output":["text","audio"]},"open_weights":false,"limit":{"context":128000,"input":96000,"output":32000},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"cost":{"input":4,"output":24,"cache_read":0.4,"input_audio":32,"output_audio":64},"canonical_model_id":"openai/gpt-realtime-2.1"},"openai/gpt-5.6-luna-fast":{"id":"openai/gpt-5.6-luna-fast","name":"GPT 5.6 Luna (Fast)","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.4,"output":2.4,"cache_read":0.04,"cache_write":0.5,"tiers":[{"input":0.8,"output":3.6,"cache_read":0.08,"cache_write":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.8,"output":3.6,"cache_read":0.08,"cache_write":1}},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-realtime-mini":{"id":"openai/gpt-realtime-mini","type":"realtime","name":"GPT-Realtime mini","description":"Cost-efficient realtime speech-to-speech model for voice agents","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-10-01","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","audio"],"output":["text","audio"]},"open_weights":false,"limit":{"context":32000,"output":4096},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"cost":{"input":0.6,"output":2.4,"cache_read":0.06,"input_audio":10,"output_audio":20},"canonical_model_id":"openai/gpt-realtime-mini"},"openai/gpt-6.1-sol-fast":{"id":"openai/gpt-6.1-sol-fast","name":"GPT-6.1 Sol (Fast)","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.4,"cache_write":10,"tier":{"type":"context","size":272001}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.4,"cache_write":10}},"canonical_model_id":"openai/gpt-6.1-sol"},"openai/text-embedding-ada-002":{"id":"openai/text-embedding-ada-002","type":"embedding","name":"text-embedding-ada-002","description":"Legacy OpenAI text embedding model","family":"text-embedding","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2022-12-15","last_updated":"2022-12-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"openai/text-embedding-ada-002"},"openai/gpt-6-sol-fast":{"id":"openai/gpt-6-sol-fast","name":"GPT-6 Sol (Fast)","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272001}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-6-sol"},"openai/gpt-4.1-nano":{"id":"openai/gpt-4.1-nano","name":"GPT-4.1 nano","description":"Tiny GPT-4.1 option for classification, routing, and very high-volume tasks","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"input":1014808,"output":32768},"status":"deprecated","experimental":{"modes":{"fast":{"cost":{"input":0.2,"output":0.8,"cache_read":0.06},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.1,"output":0.4,"cache_read":0.03},"canonical_model_id":"openai/gpt-4.1-nano"},"openai/gpt-5.2":{"id":"openai/gpt-5.2","name":"GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"openai/gpt-realtime-1.5":{"id":"openai/gpt-realtime-1.5","type":"realtime","name":"GPT-Realtime-1.5","description":"Realtime speech-to-speech model for voice agents and customer support","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","audio"],"output":["text","audio"]},"open_weights":false,"limit":{"context":32000,"output":4096},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"cost":{"input":4,"output":16,"cache_read":0.4,"input_audio":32,"output_audio":64},"canonical_model_id":"openai/gpt-realtime-1.5"},"openai/o1":{"id":"openai/o1","name":"o1","description":"O-series reasoning model for hard analysis, math, coding, and planning","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2023-09","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":100000,"output":100000},"status":"deprecated","cost":{"input":15,"output":60,"cache_read":7.5},"canonical_model_id":"openai/o1"},"openai/gpt-4.1-mini":{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"input":1014808,"output":32768},"experimental":{"modes":{"fast":{"cost":{"input":0.7,"output":2.8,"cache_read":0.175},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-4.1-mini"},"openai/gpt-5-mini-fast":{"id":"openai/gpt-5-mini-fast","name":"GPT-5 mini (Fast)","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.45,"output":3.6,"cache_read":0.045},"canonical_model_id":"openai/gpt-5-mini"},"openai/o4-mini":{"id":"openai/o4-mini","name":"o4-mini","description":"Fast o-series model for compact reasoning, coding, and tool use","family":"o-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":100000,"output":100000},"status":"deprecated","experimental":{"modes":{"fast":{"cost":{"input":2,"output":8,"cache_read":0.5},"provider":{"body":{"service_tier":"priority"}}},"flex":{"cost":{"input":0.55,"output":2.2,"cache_read":0.1375},"provider":{"body":{"service_tier":"flex"}}}}},"cost":{"input":1.1,"output":4.4,"cache_read":0.275},"canonical_model_id":"openai/o4-mini"},"openai/gpt-5.2-codex":{"id":"openai/gpt-5.2-codex","name":"GPT-5.2-Codex","description":"Code-specialist GPT for repository edits, reviews, and long-running software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2-codex"},"openai/gpt-5.1-thinking":{"id":"openai/gpt-5.1-thinking","name":"GPT 5.1 Thinking","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2025-11-12","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125}},"openai/gpt-5.4-mini":{"id":"openai/gpt-5.4-mini","name":"GPT 5.4 Mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"openai/gpt-realtime-2":{"id":"openai/gpt-realtime-2","type":"realtime","name":"gpt-realtime-2","description":"Realtime speech-to-speech model with configurable reasoning and reliable tool use for voice agents","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","audio"],"output":["text","audio"]},"open_weights":false,"limit":{"context":128000,"output":32000},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"cost":{"input":4,"output":24,"cache_read":0.4,"input_audio":32,"output_audio":64},"canonical_model_id":"openai/gpt-realtime-2"},"openai/gpt-5.5-fast":{"id":"openai/gpt-5.5-fast","name":"GPT 5.5 (Fast)","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":872000,"output":128000},"cost":{"input":12.5,"output":75,"cache_read":1.25},"canonical_model_id":"openai/gpt-5.5"},"openai/gpt-oss-safeguard-20b":{"id":"openai/gpt-oss-safeguard-20b","name":"gpt-oss-safeguard-20b","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-29","last_updated":"2025-10-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"input":112000,"output":16000},"cost":{"input":0.07,"output":0.2},"canonical_model_id":"openai/gpt-oss-safeguard-20b"},"openai/gpt-image-2.5-flare":{"id":"openai/gpt-image-2.5-flare","type":"image","name":"GPT Image 2.5 Flare","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-09-08","last_updated":"2026-09-08","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"cost":{"input":5,"output":30,"cache_read":1.25},"canonical_model_id":"openai/gpt-image-2.5-flare"},"openai/text-embedding-3-large":{"id":"openai/text-embedding-3-large","type":"embedding","name":"text-embedding-3-large","description":"Most capable OpenAI embedding model for English and non-English text","family":"text-embedding","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-01-25","last_updated":"2024-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"openai/text-embedding-3-large"},"openai/gpt-5":{"id":"openai/gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":2.5,"output":20,"cache_read":0.25},"provider":{"body":{"service_tier":"priority"}}},"flex":{"cost":{"input":0.625,"output":5,"cache_read":0.0625},"provider":{"body":{"service_tier":"flex"}}}}},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"openai/gpt-5.1-codex-max":{"id":"openai/gpt-5.1-codex-max","name":"GPT 5.1 Codex Max","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1-codex-max"},"openai/gpt-5.1-codex":{"id":"openai/gpt-5.1-codex","name":"GPT-5.1-Codex","description":"Codex GPT for repository edits, code review, and practical software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.13},"canonical_model_id":"openai/gpt-5.1-codex"},"openai/gpt-image-1-mini":{"id":"openai/gpt-image-1-mini","type":"image","name":"GPT Image 1 Mini","description":"Cost-efficient GPT Image 1 variant for image generation and editing","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"cost":{"input":2,"output":8,"cache_read":0.2},"canonical_model_id":"openai/gpt-image-1-mini"},"openai/gpt-4o-fast":{"id":"openai/gpt-4o-fast","name":"GPT-4o (Fast)","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":111616,"output":16384},"cost":{"input":4.25,"output":17,"cache_read":2.125},"canonical_model_id":"openai/gpt-4o"},"openai/gpt-5.6-sol":{"id":"openai/gpt-5.6-sol","name":"GPT 5.6 Sol","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"openai/gpt-6.1-terra":{"id":"openai/gpt-6.1-terra","name":"GPT-6.1 Terra","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25,"tiers":[{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5,"tier":{"type":"context","size":272001}}],"context_over_200k":{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5}},"canonical_model_id":"openai/gpt-6.1-terra"},"openai/gpt-4.1-mini-fast":{"id":"openai/gpt-4.1-mini-fast","name":"GPT-4.1 mini (Fast)","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"input":1014808,"output":32768},"cost":{"input":0.7,"output":2.8,"cache_read":0.175},"canonical_model_id":"openai/gpt-4.1-mini"},"openai/gpt-4.1":{"id":"openai/gpt-4.1","name":"GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"input":1014808,"output":32768},"experimental":{"modes":{"fast":{"cost":{"input":3.5,"output":14,"cache_read":0.875},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"openai/gpt-6.1-terra-fast":{"id":"openai/gpt-6.1-terra-fast","name":"GPT-6.1 Terra (Fast)","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272001}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-terra"},"openai/o3":{"id":"openai/o3","name":"o3","description":"Deliberate o-series reasoner for hard math, coding, and multi-step analysis","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":100000,"output":100000},"experimental":{"modes":{"fast":{"cost":{"input":3.5,"output":14,"cache_read":0.875},"provider":{"body":{"service_tier":"priority"}}},"flex":{"cost":{"input":1,"output":4,"cache_read":0.25},"provider":{"body":{"service_tier":"flex"}}}}},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/o3"},"openai/tts-1-hd":{"id":"openai/tts-1-hd","type":"speech","name":"TTS-1 HD","description":"Text-to-speech model optimized for audio quality","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2023-11-06","last_updated":"2023-11-06","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"canonical_model_id":"openai/tts-1-hd"},"openai/gpt-6-luna":{"id":"openai/gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272001}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"openai/gpt-realtime-whisper":{"id":"openai/gpt-realtime-whisper","type":"transcription","name":"gpt-realtime-whisper","description":"Streaming speech-to-text model for low-latency transcript deltas from live audio","family":"whisper","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["audio"],"output":["text"]},"open_weights":false,"limit":{"context":16000,"output":2000},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"canonical_model_id":"openai/gpt-realtime-whisper"},"openai/gpt-image-2":{"id":"openai/gpt-image-2","type":"image","name":"GPT Image 2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-21","last_updated":"2026-04-21","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"cost":{"input":5,"output":30,"cache_read":1.25},"canonical_model_id":"openai/gpt-image-2"},"openai/text-embedding-3-small":{"id":"openai/text-embedding-3-small","type":"embedding","name":"text-embedding-3-small","description":"Small, efficient OpenAI text embedding model","family":"text-embedding","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-01-25","last_updated":"2024-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"openai/text-embedding-3-small"},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT OSS 20B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":122880,"output":8192},"cost":{"input":0.03,"output":0.14},"canonical_model_id":"openai/gpt-oss-20b"},"openai/o3-mini":{"id":"openai/o3-mini","name":"o3-mini","description":"Smaller o-series reasoner for economical coding, math, and planning tasks","family":"o-mini","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2024-12-20","last_updated":"2025-01-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":100000,"output":100000},"status":"deprecated","cost":{"input":1.1,"output":4.4,"cache_read":0.55},"canonical_model_id":"openai/o3-mini"},"openai/whisper-1":{"id":"openai/whisper-1","type":"transcription","name":"Whisper","description":"General-purpose speech recognition model for transcription and translation","family":"whisper","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2023-03-01","last_updated":"2023-03-01","modalities":{"input":["audio"],"output":["text"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"canonical_model_id":"openai/whisper-1"},"openai/gpt-5-pro":{"id":"openai/gpt-5-pro","name":"GPT-5 pro","description":"Higher-accuracy GPT-5 tier for tough analysis, coding reviews, and planning","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":128000,"output":272000},"cost":{"input":15,"output":120},"canonical_model_id":"openai/gpt-5-pro"},"openai/gpt-6-sol":{"id":"openai/gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272001}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"openai/gpt-4o-transcribe":{"id":"openai/gpt-4o-transcribe","type":"transcription","name":"GPT-4o Transcribe","description":"Speech-to-text model powered by GPT-4o for accurate transcription","family":"gpt","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2024-06-01","release_date":"2025-03-20","last_updated":"2025-03-20","modalities":{"input":["audio"],"output":["text"]},"open_weights":false,"limit":{"context":16000,"output":2000},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"cost":{"input":2.5,"output":10,"input_audio":2.5},"canonical_model_id":"openai/gpt-4o-transcribe"},"openai/gpt-image-1.5":{"id":"openai/gpt-image-1.5","type":"image","name":"GPT Image 1.5","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-11-25","last_updated":"2025-11-25","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"cost":{"input":5,"output":32,"cache_read":1.25},"canonical_model_id":"openai/gpt-image-1.5"},"openai/gpt-5.6-terra-fast":{"id":"openai/gpt-5.6-terra-fast","name":"GPT 5.6 Terra (Fast)","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":24,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":36,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":36,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-terra"},"openai/gpt-5.3-codex":{"id":"openai/gpt-5.3-codex","name":"GPT 5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"openai/gpt-5.3-codex-fast":{"id":"openai/gpt-5.3-codex-fast","name":"GPT 5.3 Codex (Fast)","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":3.5,"output":28,"cache_read":0.35},"canonical_model_id":"openai/gpt-5.3-codex"},"openai/gpt-6-astra":{"id":"openai/gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272001}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"openai/o3-fast":{"id":"openai/o3-fast","name":"o3 (Fast)","description":"Deliberate o-series reasoner for hard math, coding, and multi-step analysis","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":100000,"output":100000},"cost":{"input":3.5,"output":14,"cache_read":0.875},"canonical_model_id":"openai/o3"},"openai/gpt-5-mini":{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":0.45,"output":3.6,"cache_read":0.045},"provider":{"body":{"service_tier":"priority"}}},"flex":{"cost":{"input":0.125,"output":1,"cache_read":0.0125},"provider":{"body":{"service_tier":"flex"}}}}},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"openai/gpt-5.1-codex-mini":{"id":"openai/gpt-5.1-codex-mini","name":"GPT-5.1 Codex mini","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.03},"canonical_model_id":"openai/gpt-5.1-codex-mini"},"openai/gpt-5.5-pro":{"id":"openai/gpt-5.5-pro","name":"GPT 5.5 Pro","description":"Highest-accuracy GPT-5.5 tier for slower, precision-heavy reasoning and coding","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":872000,"output":128000},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.5-pro"},"openai/gpt-5.1-thinking-fast":{"id":"openai/gpt-5.1-thinking-fast","name":"GPT 5.1 Thinking (Fast)","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"release_date":"2025-11-12","last_updated":"2025-11-12","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":2.5,"output":20,"cache_read":0.25}},"openai/gpt-4o-mini-transcribe":{"id":"openai/gpt-4o-mini-transcribe","type":"transcription","name":"GPT-4o mini Transcribe","description":"Speech-to-text model powered by GPT-4o Mini for fast, accurate transcription","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2024-06-01","release_date":"2025-03-20","last_updated":"2025-03-20","modalities":{"input":["audio"],"output":["text"]},"open_weights":false,"limit":{"context":16000,"output":2000},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"cost":{"input":1.25,"output":5,"input_audio":1.25},"canonical_model_id":"openai/gpt-4o-mini-transcribe"},"openai/gpt-5.6-luna":{"id":"openai/gpt-5.6-luna","name":"GPT 5.6 Luna","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-6.1-sol":{"id":"openai/gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272001}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-sol"},"openai/gpt-5.4-pro":{"id":"openai/gpt-5.4-pro","name":"GPT 5.4 Pro","description":"More exact GPT-5.4 tier for demanding professional reasoning and agent tasks","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.4-pro"},"openai/gpt-5-nano":{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"flex":{"cost":{"input":0.025,"output":0.2,"cache_read":0.0025},"provider":{"body":{"service_tier":"flex"}}}}},"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-nano"},"openai/gpt-5.4":{"id":"openai/gpt-5.4","name":"GPT 5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5}},"canonical_model_id":"openai/gpt-5.4"},"openai/gpt-image-2.5-sunburst":{"id":"openai/gpt-image-2.5-sunburst","type":"image","name":"GPT Image 2.5 Sunburst","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-09-08","last_updated":"2026-09-08","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"cost":{"input":5,"output":30,"cache_read":1.25},"canonical_model_id":"openai/gpt-image-2.5-sunburst"},"openai/gpt-5.2-fast":{"id":"openai/gpt-5.2-fast","name":"GPT 5.2 (Fast)","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":3.5,"output":28,"cache_read":0.35},"canonical_model_id":"openai/gpt-5.2"},"openai/o3-pro":{"id":"openai/o3-pro","name":"o3 Pro","description":"High-effort o3 tier for difficult technical reasoning and careful answers","family":"o-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-05","release_date":"2025-06-10","last_updated":"2025-06-10","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":100000,"output":100000},"cost":{"input":20,"output":80},"canonical_model_id":"openai/o3-pro"},"openai/gpt-5.4-mini-fast":{"id":"openai/gpt-5.4-mini-fast","name":"GPT 5.4 Mini (Fast)","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.5,"output":9,"cache_read":0.15},"canonical_model_id":"openai/gpt-5.4-mini"},"openai/gpt-5.4-nano":{"id":"openai/gpt-5.4-nano","name":"GPT 5.4 Nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"openai/gpt-4o-mini-fast":{"id":"openai/gpt-4o-mini-fast","name":"GPT-4o mini (Fast)","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":111616,"output":16384},"cost":{"input":0.25,"output":1,"cache_read":0.125},"canonical_model_id":"openai/gpt-4o-mini"},"openai/gpt-6-astra-fast":{"id":"openai/gpt-6-astra-fast","name":"GPT-6 Astra (Fast)","description":"Fast variant of GPT-6 Astra for low-latency assistance and high-volume workloads.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":20,"output":100,"cache_read":2,"cache_write":25,"tiers":[{"input":40,"output":150,"cache_read":4,"cache_write":50,"tier":{"type":"context","size":272001}}],"context_over_200k":{"input":40,"output":150,"cache_read":4,"cache_write":50}},"canonical_model_id":"openai/gpt-6-astra-fast"},"openai/gpt-4o":{"id":"openai/gpt-4o","name":"GPT-4o","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":111616,"output":16384},"experimental":{"modes":{"fast":{"cost":{"input":4.25,"output":17,"cache_read":2.125},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o"},"openai/gpt-5-codex":{"id":"openai/gpt-5-codex","name":"GPT-5-Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-09-15","last_updated":"2025-09-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.13},"canonical_model_id":"openai/gpt-5-codex"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.1,"output":0.5,"cache_read":0.1},"canonical_model_id":"openai/gpt-oss-120b"},"openai/gpt-5.6-terra":{"id":"openai/gpt-5.6-terra","name":"GPT 5.6 Terra","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"openai/gpt-4.1-fast":{"id":"openai/gpt-4.1-fast","name":"GPT-4.1 (Fast)","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"input":1014808,"output":32768},"cost":{"input":3.5,"output":14,"cache_read":0.875},"canonical_model_id":"openai/gpt-4.1"},"openai/gpt-5-fast":{"id":"openai/gpt-5-fast","name":"GPT-5 (Fast)","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":2.5,"output":20,"cache_read":0.25},"canonical_model_id":"openai/gpt-5"},"openai/gpt-5.6-sol-fast":{"id":"openai/gpt-5.6-sol-fast","name":"GPT 5.6 Sol (Fast)","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":8,"output":40,"cache_read":0.8,"cache_write":10,"tiers":[{"input":16,"output":60,"cache_read":1.6,"cache_write":20,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":16,"output":60,"cache_read":1.6,"cache_write":20}},"canonical_model_id":"openai/gpt-5.6-sol"},"openai/gpt-4o-mini":{"id":"openai/gpt-4o-mini","name":"GPT-4o mini","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":111616,"output":16384},"experimental":{"modes":{"fast":{"cost":{"input":0.25,"output":1,"cache_read":0.125},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-4o-mini"},"openai/gpt-live-1":{"id":"openai/gpt-live-1","type":"realtime","name":"GPT-Live 1","description":"Full-duplex voice model for natural conversations that delegates reasoning and tools to a backend agent","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","audio"],"output":["text","audio"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"canonical_model_id":"openai/gpt-live-1"},"openai/tts-1":{"id":"openai/tts-1","type":"speech","name":"TTS-1","description":"Text-to-speech model optimized for low latency","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2023-11-06","last_updated":"2023-11-06","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"canonical_model_id":"openai/tts-1"},"elorian/glimpse":{"id":"elorian/glimpse","name":"Glimpse","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":false,"release_date":"2026-10-16","last_updated":"2026-10-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":220000,"output":4096},"cost":{"input":0.6,"output":3,"cache_read":0.06}},"interfaze/interfaze-beta":{"id":"interfaze/interfaze-beta","name":"Interfaze Beta","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":false,"temperature":true,"release_date":"2025-10-07","last_updated":"2026-04-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32000},"cost":{"input":1.5,"output":3.5}},"mixedbread/toast-1":{"id":"mixedbread/toast-1","name":"Toast 1","description":"Specialized search model for knowledge-intensive questions, multi-step retrieval, and evidence synthesis","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131000,"output":4000},"cost":{"input":0.3,"output":0.72,"cache_read":0.036},"canonical_model_id":"mixedbread/toast-1"},"cohere/rerank-v5-fast":{"id":"cohere/rerank-v5-fast","type":"reranking","name":"Cohere Rerank 5 Fast","description":"Reranking model for improving retrieval quality in search and recommendation systems","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-10-21","last_updated":"2026-10-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":0},"provider":{"npm":"@ai-sdk/cohere","api":"https://ai-gateway.vercel.sh/v1"}},"cohere/embed-v4.0":{"id":"cohere/embed-v4.0","type":"embedding","name":"Embed v4.0","description":"Multimodal embedding model for text, images, and mixed text-and-image documents","family":"cohere-embed","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-04-15","last_updated":"2025-04-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":1536},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"cohere/embed-v4.0"},"cohere/embed-v5.0-fast":{"id":"cohere/embed-v5.0-fast","type":"embedding","name":"Embed 5 Fast","description":"Faster, lighter Embed 5 model sharing Embed 5 Pro's embedding space","family":"cohere-embed","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-09-30","last_updated":"2026-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":2048},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"cohere/embed-v5.0-fast"},"cohere/rerank-v4-pro":{"id":"cohere/rerank-v4-pro","type":"reranking","name":"Cohere Rerank 4 Pro","description":"Multilingual reranker for maximum relevance on documents and semi-structured data","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":0},"provider":{"npm":"@ai-sdk/cohere","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"cohere/rerank-v4.0-pro"},"cohere/command-a":{"id":"cohere/command-a","name":"Command A","description":"Cohere command model for multilingual enterprise agents, tools, and chat","family":"command-a","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08-31","release_date":"2025-03-13","last_updated":"2025-03-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":8000},"cost":{"input":2.5,"output":10},"canonical_model_id":"cohere/command-a"},"cohere/rerank-v5-pro":{"id":"cohere/rerank-v5-pro","type":"reranking","name":"Cohere Rerank 5 Pro","description":"Reranking model for improving retrieval quality in search and recommendation systems","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-10-21","last_updated":"2026-10-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":0},"provider":{"npm":"@ai-sdk/cohere","api":"https://ai-gateway.vercel.sh/v1"}},"cohere/rerank-v4-fast":{"id":"cohere/rerank-v4-fast","type":"reranking","name":"Cohere Rerank 4 Fast","description":"Low-latency multilingual reranker for high-throughput retrieval","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":0},"provider":{"npm":"@ai-sdk/cohere","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"cohere/rerank-v4.0-fast"},"cohere/embed-v5.0-pro":{"id":"cohere/embed-v5.0-pro","type":"embedding","name":"Embed 5 Pro","description":"Cohere's most capable multimodal embedding model for text, images, and mixed documents","family":"cohere-embed","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-09-30","last_updated":"2026-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":2048},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"cohere/embed-v5.0-pro"},"cohere/rerank-v3.5":{"id":"cohere/rerank-v3.5","type":"reranking","name":"Cohere Rerank 3.5","description":"Multilingual reranker for documents and semi-structured data","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-12-02","last_updated":"2024-12-02","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":4096,"output":0},"provider":{"npm":"@ai-sdk/cohere","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"cohere/rerank-v3.5"},"klingai/kling-v3.0-t2v":{"id":"klingai/kling-v3.0-t2v","type":"video","name":"Kling v3.0 Text-to-Video","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"ling","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"klingai/kling-v3.0-i2v":{"id":"klingai/kling-v3.0-i2v","type":"video","name":"Kling v3.0 Image-to-Video","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"ling","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"klingai/kling-v2.6-i2v":{"id":"klingai/kling-v2.6-i2v","type":"video","name":"Kling v2.6 Image-to-Video","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"ling","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-12-03","last_updated":"2025-12-21","modalities":{"input":["text","image"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"klingai/kling-v2.6-t2v":{"id":"klingai/kling-v2.6-t2v","type":"video","name":"Kling v2.6 Text-to-Video","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"ling","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-12-03","last_updated":"2025-12-21","modalities":{"input":["text"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"klingai/kling-v2.6-motion-control":{"id":"klingai/kling-v2.6-motion-control","type":"video","name":"Kling v2.6 Motion Control","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"ling","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-12-18","last_updated":"2025-12-21","modalities":{"input":["text","image","video"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"klingai/kling-v2.5-turbo-i2v":{"id":"klingai/kling-v2.5-turbo-i2v","type":"video","name":"Kling v2.5 Turbo Image-to-Video","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"ling","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"klingai/kling-v2.5-turbo-t2v":{"id":"klingai/kling-v2.5-turbo-t2v","type":"video","name":"Kling v2.5 Turbo Text-to-Video","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"ling","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"klingai/kling-v3.0-motion-control":{"id":"klingai/kling-v3.0-motion-control","type":"video","name":"Kling v3.0 Motion Control","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"ling","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-03-04","last_updated":"2026-03-04","modalities":{"input":["text","image","video"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"callstack/apex":{"id":"callstack/apex","name":"Apex","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"release_date":"2026-10-08","last_updated":"2026-10-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":0.5,"output":3,"cache_read":0.2}},"xiaomi/mimo-v2.6-pro":{"id":"xiaomi/mimo-v2.6-pro","name":"MiMo V2.6 Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.435,"output":0.87,"cache_read":0.0036},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"xiaomi/mimo-v2.6-pro-ultraspeed":{"id":"xiaomi/mimo-v2.6-pro-ultraspeed","name":"MiMo V2.6 Pro UltraSpeed","description":"MiMo pro model for strong multimodal reasoning and agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":4.35,"output":8.7,"cache_read":0.036},"canonical_model_id":"xiaomi/mimo-v2.6-pro-ultraspeed"},"xiaomi/mimo-v2.6-flash":{"id":"xiaomi/mimo-v2.6-flash","name":"MiMo V2.6 Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"fish-audio/s2.1-pro":{"id":"fish-audio/s2.1-pro","type":"speech","name":"S2.1 Pro","description":"Speech generation model for controllable voice, narration, and audio delivery","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-07-28","last_updated":"2026-07-28","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"fish-audio/transcribe-1":{"id":"fish-audio/transcribe-1","type":"transcription","name":"Transcribe-1","description":"Speech transcription model for accurate audio-to-text and captioning workflows","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-03-01","last_updated":"2026-03-01","modalities":{"input":["audio"],"output":["text"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"fish-audio/s1":{"id":"fish-audio/s1","type":"speech","name":"S1","description":"Speech generation model for controllable voice, narration, and audio delivery","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-10-20","last_updated":"2025-10-20","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"fish-audio/s2-pro":{"id":"fish-audio/s2-pro","type":"speech","name":"S2 Pro","description":"Speech generation model for controllable voice, narration, and audio delivery","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"fish-audio/drama-3":{"id":"fish-audio/drama-3","type":"speech","name":"Drama 3","description":"Speech generation model for controllable voice, narration, and audio delivery","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"minimax/minimax-m2.1":{"id":"minimax/minimax-m2.1","name":"MiniMax M2.1","description":"Earlier MiniMax agent model for practical coding and productivity tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"interleaved":true,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.03,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.1"},"minimax/minimax-m2.1-lightning":{"id":"minimax/minimax-m2.1-lightning","name":"MiniMax M2.1 Lightning","description":"High-speed MiniMax model for low-latency coding and agent workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2025-12-23","last_updated":"2025-10-27","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":2.4,"cache_read":0.03,"cache_write":0.375}},"minimax/minimax-m2.5-highspeed":{"id":"minimax/minimax-m2.5-highspeed","name":"MiniMax M2.5 High Speed","description":"High-speed MiniMax model for low-latency coding and agent workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"release_date":"2026-02-13","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131000},"cost":{"input":0.6,"output":2.4,"cache_read":0.03,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.5-highspeed"},"minimax/minimax-h3":{"id":"minimax/minimax-h3","type":"video","name":"MiniMax H3","description":"MiniMax general-purpose video model with multimodal references and synchronized stereo audio. Open H3-Base checkpoints; Context-IR and 2K regeneration are not included in the initial weights release.","family":"minimax","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-07-31","last_updated":"2026-10-04","modalities":{"input":["text","image"],"output":["video"]},"open_weights":true,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"canonical_model_id":"minimax/MiniMax-H3"},"minimax/minimax-m2.5":{"id":"minimax/minimax-m2.5","name":"MiniMax M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131000},"cost":{"input":0.3,"output":1.2,"cache_read":0.03,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.5"},"minimax/minimax-m2":{"id":"minimax/minimax-m2","name":"MiniMax M2","description":"Efficient open MiniMax model built for coding agents and tool-heavy workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"interleaved":true,"temperature":true,"release_date":"2025-10-27","last_updated":"2025-10-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":205000,"output":196608},"cost":{"input":0.3,"output":1.2,"cache_read":0.03,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2"},"minimax/minimax-m3.1-flash":{"id":"minimax/minimax-m3.1-flash","name":"MiniMax-M3.1-Flash","description":"MiniMax multimodal coding model for long-context reasoning and agent tasks","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"minimax/minimax-h3-max":{"id":"minimax/minimax-h3-max","type":"video","name":"MiniMax H3 Max","description":"Fast video model post-trained by fal.ai on MiniMax H3, with synchronized audio at 480p and 768p","family":"minimax","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"canonical_model_id":"minimax/MiniMax-H3-Max"},"minimax/minimax-m3":{"id":"minimax/minimax-m3","name":"MiniMax M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":512000,"output":512000},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"},"minimax/minimax-m2.7-highspeed":{"id":"minimax/minimax-m2.7-highspeed","name":"MiniMax M2.7 High Speed","description":"Low-latency M2.7 variant for interactive coding plans and agent loops","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131100},"cost":{"input":0.6,"output":2.4,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.7-highspeed"},"minimax/minimax-m2.7":{"id":"minimax/minimax-m2.7","name":"Minimax M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131000},"cost":{"input":0.3,"output":1.2,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.7"},"thinkingmachines/inkling-small":{"id":"thinkingmachines/inkling-small","name":"Inkling Small","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-30","last_updated":"2026-07-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":1000000},"cost":{"input":0.45,"output":1.2,"cache_read":0.1},"canonical_model_id":"thinkingmachines/inkling-small"},"thinkingmachines/inkling":{"id":"thinkingmachines/inkling","name":"Inkling","description":"Multimodal MoE reasoning model (975B total, 41B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":1,"output":4.05,"cache_read":0.17},"canonical_model_id":"thinkingmachines/inkling"},"reflection/beam-free":{"id":"reflection/beam-free","name":"Beam 1.0 (Free)","description":"Free provider route for experiments, demos, and cost-sensitive chat workloads","family":"beam","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-06-30","release_date":"2026-10-05","last_updated":"2026-10-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"reflection/beam-1.0-501b-a23b"},"reflection/beam":{"id":"reflection/beam","name":"Beam 1.0","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"beam","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-06-30","release_date":"2026-10-05","last_updated":"2026-10-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"reflection/beam-1.0-501b-a23b"},"meta/muse-spark-1.3":{"id":"meta/muse-spark-1.3","name":"Muse Spark 1.3","description":"Open Llama multimodal model for image understanding and text reasoning","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.3"},"meta/llama-3.1-8b":{"id":"meta/llama-3.1-8b","name":"Llama 3.1 8B Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0.22,"output":0.22},"canonical_model_id":"meta/llama-3.1-8b-instruct"},"meta/llama-3.1-70b":{"id":"meta/llama-3.1-70b","name":"Llama 3.1 70B Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0.72,"output":0.72},"canonical_model_id":"meta/llama-3.1-70b-instruct"},"meta/muse-spark-1.1":{"id":"meta/muse-spark-1.1","name":"Muse Spark 1.1","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-08","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.1"},"meta/llama-4-maverick":{"id":"meta/llama-4-maverick","name":"Llama-4-Maverick-17B-128E-Instruct-FP8","description":"Open multimodal Llama model for strong reasoning and fast responses","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0.24,"output":0.97},"canonical_model_id":"meta/llama-4-maverick-17b-instruct"},"meta/llama-3.3-70b":{"id":"meta/llama-3.3-70b","name":"Llama-3.3-70B-Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0.72,"output":0.72},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"meta/muse-image-1.0":{"id":"meta/muse-image-1.0","type":"image","name":"Muse Image 1.0","description":"Agentic image generation and editing model that plans, searches and refines before rendering","family":"muse","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-07-07","last_updated":"2026-07-07","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"meta/muse-image-1.0"},"meta/muse-wonder-1.0":{"id":"meta/muse-wonder-1.0","name":"Muse Wonder","description":"Open Llama multimodal model for image understanding and text reasoning","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-12","last_updated":"2026-10-12","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":4,"output":20,"cache_read":0.2},"canonical_model_id":"meta/muse-wonder-1.0"},"meta/muse-spark-1.2-contributor":{"id":"meta/muse-spark-1.2-contributor","name":"Muse Spark 1.2 Contributor","description":"Open Llama multimodal model for image understanding and text reasoning","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.1,"output":0.2,"cache_read":0.002}},"meta/muse-spark-open":{"id":"meta/muse-spark-open","name":"Muse Spark Open","description":"Open Llama multimodal model for image understanding and text reasoning","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-open"},"meta/llama-4-scout":{"id":"meta/llama-4-scout","name":"Llama-4-Scout-17B-16E-Instruct-FP8","description":"Open multimodal Llama model for long-context analysis and efficient agents","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0.17,"output":0.66},"canonical_model_id":"meta/llama-4-scout-17b-instruct"},"meta/muse-ember":{"id":"meta/muse-ember","name":"Muse Ember","description":"Open Llama multimodal model for image understanding and text reasoning","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.1,"output":0.5,"cache_read":0.004}},"meta/muse-glimmer-30b":{"id":"meta/muse-glimmer-30b","name":"Muse Glimmer 30B","description":"Muse Glimmer is a 30-billion-parameter open-weight multimodal model from Meta Superintelligence Labs, distilled from Muse Spark for always-on local agents, tool use, coding, and image understanding.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-08-10","last_updated":"2026-08-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.35,"output":1.5,"cache_read":0.04},"canonical_model_id":"meta/muse-glimmer-30b"},"meta/muse-spark-1.2":{"id":"meta/muse-spark-1.2","name":"Muse Spark 1.2","description":"Open Llama multimodal model for image understanding and text reasoning","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.2"},"meta/muse-spark-1.3-contributor":{"id":"meta/muse-spark-1.3-contributor","name":"Muse Spark 1.3 Contributor","description":"Open Llama multimodal model for image understanding and text reasoning","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.1,"output":0.2,"cache_read":0.002}},"heygen/heygen-video-1":{"id":"heygen/heygen-video-1","type":"video","name":"HeyGen Video","description":"Video model for prompt-guided generation, editing, and motion workflows","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-10-09","last_updated":"2026-10-09","modalities":{"input":["text","image","video","audio"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"stepfun/step-5-preview":{"id":"stepfun/step-5-preview","name":"Step 5 Preview","description":"StepFun flash model for efficient multimodal reasoning, coding, and tool use","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":1,"output":2.7,"cache_read":0.1},"canonical_model_id":"stepfun/step-5-preview"},"stepfun/step-3.7-flash":{"id":"stepfun/step-3.7-flash","name":"Step 3.7 Flash","description":"Newer StepFun flash model for faster agents, coding, and multimodal prompts","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2026-03-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":256000},"cost":{"input":0.2,"output":1.15,"cache_read":0.04},"canonical_model_id":"stepfun/step-3.7-flash"},"fireworks/ember-1":{"id":"fireworks/ember-1","name":"Ember-1","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"fireworks/ember-1"},"inception/mercury-2":{"id":"inception/mercury-2","name":"Mercury 2","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"mercury","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-24","last_updated":"2026-02-24","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":50000},"cost":{"input":0.25,"output":0.75,"cache_read":0.025},"canonical_model_id":"inception/mercury-2"},"inception/mercury-2.5":{"id":"inception/mercury-2.5","name":"Mercury 2.5","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"mercury","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-08","last_updated":"2026-09-08","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":260000,"output":65536},"cost":{"input":0.04,"output":0.15,"cache_read":0.004},"canonical_model_id":"inception/mercury-2.5"},"inception/mercury-coder-small":{"id":"inception/mercury-coder-small","name":"Mercury Coder Small Beta","description":"Coding model for repository understanding, refactors, and agentic engineering tasks","family":"mercury","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-02-26","last_updated":"2025-02-26","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":16384},"cost":{"input":0.25,"output":1}},"inception/mercury-3":{"id":"inception/mercury-3","name":"Mercury 3","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"mercury","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.1,"output":0.35,"cache_read":0.01}},"voyage/voyage-4-large":{"id":"voyage/voyage-4-large","type":"embedding","name":"voyage-4-large","description":"General-purpose and multilingual embedding model optimized for retrieval quality","family":"voyage","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-01-15","last_updated":"2026-01-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"voyageai/voyage-4-large"},"voyage/rerank-2.5":{"id":"voyage/rerank-2.5","type":"reranking","name":"Voyage Rerank 2.5","description":"Instruction-following reranker optimized for retrieval quality","family":"voyage","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-08-11","last_updated":"2025-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":0},"provider":{"npm":"@ai-sdk/cohere","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"voyageai/rerank-2.5"},"voyage/voyage-code-3":{"id":"voyage/voyage-code-3","type":"embedding","name":"voyage-code-3","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"voyage","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-12-04","last_updated":"2024-09","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"voyage/voyage-3.5-lite":{"id":"voyage/voyage-3.5-lite","type":"embedding","name":"voyage-3.5-lite","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"voyage","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-05-20","last_updated":"2025-05-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"voyage/rerank-3":{"id":"voyage/rerank-3","type":"reranking","name":"Voyage Rerank 3","description":"Reranker optimized for retrieval quality, successor to rerank-2.5","family":"voyage","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-09-30","last_updated":"2026-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":0},"provider":{"npm":"@ai-sdk/cohere","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"voyageai/rerank-3"},"voyage/voyage-law-2":{"id":"voyage/voyage-law-2","type":"embedding","name":"voyage-law-2","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"voyage","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-04-15","last_updated":"2024-03","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":16000,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"voyage/rerank-3-lite":{"id":"voyage/rerank-3-lite","type":"reranking","name":"Voyage Rerank 3 Lite","description":"Reranker optimized for latency and cost, successor to rerank-2.5-lite","family":"voyage","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-09-30","last_updated":"2026-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":0},"provider":{"npm":"@ai-sdk/cohere","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"voyageai/rerank-3-lite"},"voyage/voyage-4":{"id":"voyage/voyage-4","type":"embedding","name":"voyage-4","description":"General-purpose and multilingual embedding model balancing retrieval quality and cost","family":"voyage","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-01-15","last_updated":"2026-01-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"voyageai/voyage-4"},"voyage/voyage-3-large":{"id":"voyage/voyage-3-large","type":"embedding","name":"voyage-3-large","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"voyage","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-01-07","last_updated":"2024-09","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"voyage/voyage-code-2":{"id":"voyage/voyage-code-2","type":"embedding","name":"voyage-code-2","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"voyage","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-01-01","last_updated":"2024-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":16000,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"voyage/voyage-3.5":{"id":"voyage/voyage-3.5","type":"embedding","name":"voyage-3.5","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"voyage","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-05-20","last_updated":"2025-05-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"voyage/voyage-finance-2":{"id":"voyage/voyage-finance-2","type":"embedding","name":"voyage-finance-2","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"voyage","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-06-03","last_updated":"2024-03","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"}},"voyage/rerank-2.5-lite":{"id":"voyage/rerank-2.5-lite","type":"reranking","name":"Voyage Rerank 2.5 Lite","description":"Instruction-following reranker optimized for latency and quality","family":"voyage","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-08-11","last_updated":"2025-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":0},"provider":{"npm":"@ai-sdk/cohere","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"voyageai/rerank-2.5-lite"},"voyage/voyage-4-lite":{"id":"voyage/voyage-4-lite","type":"embedding","name":"voyage-4-lite","description":"Lightweight general-purpose embedding model optimized for latency and cost","family":"voyage","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-01-15","last_updated":"2026-01-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"voyageai/voyage-4-lite"},"liquid/lfm2.5-24b-a2b":{"id":"liquid/lfm2.5-24b-a2b","name":"LFM2.5-24B-A2B","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"liquid","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8200},"cost":{"input":0.05,"output":0.7,"cache_read":0.025}},"nvidia/nemotron-3-ultra-550b-a55b":{"id":"nvidia/nemotron-3-ultra-550b-a55b","name":"Nemotron 3 Ultra","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":65000},"cost":{"input":0.6,"output":2.4,"cache_read":0.12},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"nvidia/nemotron-3-nano-30b-a3b":{"id":"nvidia/nemotron-3-nano-30b-a3b","name":"Nemotron 3 Nano 30B A3B","description":"Small Nemotron 3 MoE for efficient coding, math, and long-context agents","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":false,"temperature":true,"knowledge":"2025-06-25","release_date":"2025-12-15","last_updated":"2025-12-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.05,"output":0.2,"cache_read":0.025},"canonical_model_id":"nvidia/nemotron-3-nano-30b-a3b"},"nvidia/nemotron-3.5-super-vl":{"id":"nvidia/nemotron-3.5-super-vl","name":"NVIDIA Nemotron 3.5 Super VL","description":"Nemotron multimodal model for visual reasoning and agentic AI workflows","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.2,"output":0.5,"cache_read":0.04},"canonical_model_id":"nvidia/nemotron-3.5-super-vl-120b-a12b"},"nvidia/nemotron-3.5-lightning-free":{"id":"nvidia/nemotron-3.5-lightning-free","name":"Nemotron 3.5 Lightning Free","description":"Nemotron model for efficient reasoning, coding, and specialized AI agents","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":65000},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3.5-lightning"},"nvidia/nemotron-nano-9b-v2":{"id":"nvidia/nemotron-nano-9b-v2","name":"Nvidia Nemotron Nano 9B V2","description":"Compact Nemotron model for efficient reasoning and deployable AI agents","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-09","release_date":"2025-08-18","last_updated":"2025-08-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.06,"output":0.23},"canonical_model_id":"nvidia/nemotron-nano-9b-v2"},"nvidia/nemotron-3.5-lightning":{"id":"nvidia/nemotron-3.5-lightning","name":"Nemotron 3.5 Lightning 30B","description":"Nemotron model for efficient reasoning, coding, and specialized AI agents","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0.06,"output":0.16,"cache_read":0.03},"canonical_model_id":"nvidia/nemotron-3.5-lightning"},"nvidia/nemotron-3-super-120b-a12b":{"id":"nvidia/nemotron-3-super-120b-a12b","name":"NVIDIA Nemotron 3 Super 120B A12B","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":false,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":32000},"cost":{"input":0.15,"output":0.65},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"},"nvidia/nemotron-nano-12b-v2-vl":{"id":"nvidia/nemotron-nano-12b-v2-vl","name":"Nvidia Nemotron Nano 12B V2 VL","description":"Nemotron multimodal model for visual reasoning and agentic AI workflows","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2025-10-28","last_updated":"2025-10-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.2,"output":0.6},"canonical_model_id":"nvidia/nemotron-nano-12b-v2-vl"},"stealth/glyph-cluster":{"id":"stealth/glyph-cluster","name":"Glyph Cluster","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":0,"output":0}},"quiverai/arrow-2":{"id":"quiverai/arrow-2","name":"Arrow 2","description":"Fast SVG generation model for creation, vectorization, editing, and animation","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"temperature":false,"release_date":"2026-09-16","last_updated":"2026-09-16","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":131072,"output":65536},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5},"canonical_model_id":"quiverai/arrow-2"},"quiverai/arrow-2-telos":{"id":"quiverai/arrow-2-telos","name":"Arrow 2 Telos","description":"High-fidelity SVG generation model for complex vector work and long-context refinement","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"temperature":false,"release_date":"2026-09-16","last_updated":"2026-09-16","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":131072,"output":65536},"cost":{"input":6,"output":30,"cache_read":0.6,"cache_write":7.5},"canonical_model_id":"quiverai/arrow-2-telos"},"morph/morph-v3-fast":{"id":"morph/morph-v3-fast","name":"Morph V3 Fast","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"morph","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-07-07","last_updated":"2025-07-07","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":0.8,"output":1.2},"canonical_model_id":"morph/morph-v3-fast"},"morph/morph-v3-large":{"id":"morph/morph-v3-large","name":"Morph V3 Large","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"morph","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-07-07","last_updated":"2025-07-07","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":0.9,"output":1.9},"canonical_model_id":"morph/morph-v3-large"},"particle/particle-1":{"id":"particle/particle-1","name":"Particle-1","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"release_date":"2026-10-28","last_updated":"2026-10-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.125,"output":0.5,"cache_read":0.015}},"sakana/fugu-max":{"id":"sakana/fugu-max","name":"Fugu Max","description":"Multi-agent model for routing expert agents across complex analytical tasks","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"sakana/fugu-max"},"sakana/fugu-ultra-v2":{"id":"sakana/fugu-ultra-v2","name":"Fugu Ultra v2","description":"Quality-first multi-agent model for hard research, analysis, and competitions","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-08-28","release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272001}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"sakana/fugu-ultra-v2"},"sakana/namazu":{"id":"sakana/namazu","name":"Sakana Namazu","description":"Multi-agent model for routing expert agents across complex analytical tasks","family":"sakana-namazu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":0.95,"output":4,"cache_read":0.15},"canonical_model_id":"sakana/sakana-namazu"},"sakana/fugu-ultra":{"id":"sakana/fugu-ultra","name":"Fugu Ultra","description":"Quality-first multi-agent model for hard research, analysis, and competitions","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-15","last_updated":"2026-06-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272001}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"sakana/fugu-ultra"},"scaledown/scaledown-extract-1":{"id":"scaledown/scaledown-extract-1","name":"Extract-1","description":"General-purpose chat model for instruction following, writing, and analysis","attachment":false,"reasoning":false,"tool_call":false,"release_date":"2026-10-20","last_updated":"2026-10-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":0.05,"output":0}},"scaledown/scaledown-summarize-1":{"id":"scaledown/scaledown-summarize-1","name":"Summarize-1","description":"General-purpose chat model for instruction following, writing, and analysis","attachment":false,"reasoning":false,"tool_call":false,"release_date":"2026-10-20","last_updated":"2026-10-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000},"cost":{"input":0.05,"output":0}},"spacexai/grok-4.20-reasoning":{"id":"spacexai/grok-4.20-reasoning","name":"Grok 4.20 Reasoning","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":2000000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200001}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.20-0309-reasoning"},"spacexai/grok-tts":{"id":"spacexai/grok-tts","type":"speech","name":"Grok TTS","description":"Convert text into spoken audio with a single API call. The API supports a rich set of expressive voices, inline speech tags for fine-grained delivery control, and output formats from high-fidelity MP3 to telephony-optimized μ-law.","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":15000,"output":15000},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"canonical_model_id":"xai/grok-tts"},"spacexai/grok-4.5":{"id":"spacexai/grok-4.5","name":"Grok 4.5","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.3,"tiers":[{"input":4,"output":12,"cache_read":0.6,"tier":{"type":"context","size":200001}}],"context_over_200k":{"input":4,"output":12,"cache_read":0.6}},"canonical_model_id":"xai/grok-4.5"},"spacexai/grok-4.3":{"id":"spacexai/grok-4.3","name":"Grok 4.3","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200001}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.3"},"spacexai/grok-4.20-reasoning-beta":{"id":"spacexai/grok-4.20-reasoning-beta","name":"Grok 4.20 Beta Reasoning","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":2000000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200001}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}}},"spacexai/grok-imagine-video":{"id":"spacexai/grok-imagine-video","type":"video","name":"Grok Imagine","description":"Video model for text-to-video, image-to-video, video editing and extension with native synchronized audio","family":"grok","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-01-28","last_updated":"2026-01-28","modalities":{"input":["text","image","video"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"canonical_model_id":"xai/grok-imagine-video"},"spacexai/grok-4.7":{"id":"spacexai/grok-4.7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200001}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.7"},"spacexai/grok-stt":{"id":"spacexai/grok-stt","type":"transcription","name":"Grok STT","description":"Speech transcription model for accurate audio-to-text and captioning workflows","family":"grok","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["audio"],"output":["text"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"}},"spacexai/grok-4.20-non-reasoning-beta":{"id":"spacexai/grok-4.20-non-reasoning-beta","name":"Grok 4.20 Beta Non-Reasoning","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":2000000},"cost":{"input":1.25,"output":2.5,"cache_read":0.4,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200001}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}}},"spacexai/grok-imagine-image":{"id":"spacexai/grok-imagine-image","type":"image","name":"Grok Imagine Image","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"grok","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-01-28","last_updated":"2026-01-28","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":16000,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"xai/grok-imagine-image"},"spacexai/grok-imagine-video-1.5-lite":{"id":"spacexai/grok-imagine-video-1.5-lite","type":"video","name":"Grok Imagine Video 1.5 Lite","description":"Cost-efficient video model for text-to-video and image-to-video generation","family":"grok","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-10-01","last_updated":"2026-10-01","modalities":{"input":["text"],"output":["video"]},"open_weights":false,"limit":{"context":1024,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"canonical_model_id":"xai/grok-imagine-video-1.5-lite"},"spacexai/grok-4.6":{"id":"spacexai/grok-4.6","name":"Grok 4.6","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200001}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.6"},"spacexai/grok-imagine-image-2.0":{"id":"spacexai/grok-imagine-image-2.0","type":"image","name":"Grok Imagine Image 2.0","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"grok","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-08-07","last_updated":"2026-08-07","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":64000,"output":0},"provider":{"npm":"@ai-sdk/openai","api":"https://ai-gateway.vercel.sh/v1"},"canonical_model_id":"xai/grok-imagine-image-2.0"},"spacexai/grok-build-0.1":{"id":"spacexai/grok-build-0.1","name":"Grok Build 0.1","description":"Grok coding model for agentic engineering, edits, and codebase workflows","family":"grok-build","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":1,"output":2,"cache_read":0.2,"tiers":[{"input":2,"output":4,"cache_read":0.4,"tier":{"type":"context","size":200001}}],"context_over_200k":{"input":2,"output":4,"cache_read":0.4}},"canonical_model_id":"xai/grok-build-0.1"},"spacexai/grok-4.20-multi-agent":{"id":"spacexai/grok-4.20-multi-agent","name":"Grok 4.20 Multi-Agent","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"release_date":"2026-03-10","last_updated":"2026-03-10","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":2000000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200001}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}}},"spacexai/grok-4.20-non-reasoning":{"id":"spacexai/grok-4.20-non-reasoning","name":"Grok 4.20 Non-Reasoning","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":2000000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200001}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.20-0309-non-reasoning"},"spacexai/grok-imagine-video-1.5":{"id":"spacexai/grok-imagine-video-1.5","type":"video","name":"Grok Imagine Video 1.5","description":"Video model for text-to-video, image-to-video, and reference-to-video generation with optional voice references","family":"grok","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-05-30","last_updated":"2026-05-30","modalities":{"input":["text"],"output":["video"]},"open_weights":false,"limit":{"context":1024,"output":0},"provider":{"api":"https://ai-gateway.vercel.sh/v4/ai"},"canonical_model_id":"xai/grok-imagine-video-1.5"},"spacexai/grok-4.20-multi-agent-beta":{"id":"spacexai/grok-4.20-multi-agent-beta","name":"Grok 4.20 Multi Agent Beta","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":2000000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200001}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}}},"inference-net/schematron-v2-turbo":{"id":"inference-net/schematron-v2-turbo","name":"Schematron V2 Turbo","description":"Efficient model for low-latency assistance, extraction, and routine automation","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"cost":{"input":0.03,"output":0.15,"cache_read":0.03},"canonical_model_id":"inference-net/schematron-v2-turbo"},"inference-net/schematron-v2-small":{"id":"inference-net/schematron-v2-small","name":"Schematron V2 Small","description":"Efficient model for low-latency assistance, extraction, and routine automation","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"cost":{"input":0.05,"output":0.23,"cache_read":0.05},"canonical_model_id":"inference-net/schematron-v2-small"}}},"longcat":{"id":"longcat","env":["LONGCAT_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.longcat.chat/openai","name":"LongCat","doc":"https://longcat.chat/platform/docs/","models":{"LongCat-2.5-Preview":{"id":"LongCat-2.5-Preview","name":"LongCat-2.5-Preview","description":"Meituan's multimodal reasoning model for coding and agent tasks, with image understanding and a 1M-token context window","family":"longcat","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":false,"release_date":"2026-09-25","last_updated":"2026-09-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":262144},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"meituan/longcat-2.5-preview"},"LongCat-2.0":{"id":"LongCat-2.0","name":"LongCat-2.0","description":"Meituan LongCat-2.0, a reasoning model with tool calling and a 1M-token context window","family":"longcat","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":false,"release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"meituan/longcat-2.0"}}},"venice":{"id":"venice","env":["VENICE_API_KEY"],"npm":"venice-ai-sdk-provider","name":"Venice AI","doc":"https://docs.venice.ai","models":{"deepseek-v4-1-flash-1017-ultrafast":{"id":"deepseek-v4-1-flash-1017-ultrafast","name":"DeepSeek V4.1 Flash 1017 Ultrafast","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-10-23","last_updated":"2026-11-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":3,"output":12,"cache_read":0.06}},"grok-4-6":{"id":"grok-4-6","name":"Grok 4.6","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":200000},"cost":{"input":2.27,"output":6.8,"cache_read":0.57,"tiers":[{"input":4.53,"output":13.6,"cache_read":1.13,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4.53,"output":13.6,"cache_read":1.13}},"canonical_model_id":"xai/grok-4.6"},"claude-sonnet-5-5":{"id":"claude-sonnet-5-5","name":"Claude Sonnet 5.5","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"openai-gpt-56-sol-pro":{"id":"openai-gpt-56-sol-pro","name":"GPT-5.6 Sol Pro","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"claude-fable-5-1":{"id":"claude-fable-5-1","name":"Claude Fable 5.1","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"google-gemma-4-26b-a4b-it":{"id":"google-gemma-4-26b-a4b-it","name":"Google Gemma 4 26B A4B Instruct","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":16384},"cost":{"input":0.13,"output":0.4,"cache_read":0.05},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"qwen-3-8-27b":{"id":"qwen-3-8-27b","name":"Qwen 3.8 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.45,"output":3.2},"canonical_model_id":"alibaba/qwen3.8-27b"},"claude-opus-4-5":{"id":"claude-opus-4-5","name":"Claude Opus 4.5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":198000,"output":32768},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"zai-org-glm-4.7":{"id":"zai-org-glm-4.7","name":"GLM 4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":198000,"output":16384},"cost":{"input":0.55,"output":2.65,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.7"},"grok-4-3":{"id":"grok-4-3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32000},"cost":{"input":1.42,"output":2.83,"cache_read":0.23,"tiers":[{"input":2.83,"output":5.67,"cache_read":0.45,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.83,"output":5.67,"cache_read":0.45}},"canonical_model_id":"xai/grok-4.3"},"qwen-3-8-2-4t-a95b":{"id":"qwen-3-8-2-4t-a95b","name":"Qwen 3.8 2.4T","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":2.5,"output":7.5,"cache_read":0.3125},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"openai-gpt-54":{"id":"openai-gpt-54","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":922000,"output":131072},"cost":{"input":2.5,"output":15,"cache_read":0.25,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5}},"canonical_model_id":"openai/gpt-5.4"},"aion-labs-aion-3-0":{"id":"aion-labs-aion-3-0","name":"Aion 3.0","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-05-05","last_updated":"2026-05-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32768},"cost":{"input":3.75,"output":7.5,"cache_read":0.9375},"canonical_model_id":"aion-labs/aion-3.0"},"qwen3-235b-a22b-thinking-2507":{"id":"qwen3-235b-a22b-thinking-2507","name":"Qwen 3 235B A22B Thinking 2507","description":"Qwen reasoning model for deliberate problem solving, math, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2025-07-25","last_updated":"2025-07-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.45,"output":3.5},"canonical_model_id":"alibaba/qwen3-235b-a22b-thinking-2507"},"openai-gpt-61-sol-ultrafast":{"id":"openai-gpt-61-sol-ultrafast","name":"GPT-6.1 Sol Ultrafast","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":12,"output":60,"cache_read":0.6,"cache_write":15,"tiers":[{"input":24,"output":90,"cache_read":1.2,"cache_write":30,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":24,"output":90,"cache_read":1.2,"cache_write":30}},"canonical_model_id":"openai/gpt-6.1-sol"},"openai-gpt-56-luna-pro":{"id":"openai-gpt-56-luna-pro","name":"GPT-5.6 Luna Pro","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"openai-gpt-61-terra":{"id":"openai-gpt-61-terra","name":"GPT-6.1 Terra","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25,"tiers":[{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5}},"canonical_model_id":"openai/gpt-6.1-terra"},"minimax-m27":{"id":"minimax-m27","name":"MiniMax M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":198000,"output":32768},"cost":{"input":0.375,"output":1.5,"cache_read":0.06875},"canonical_model_id":"minimax/MiniMax-M2.7"},"google-gemma-4-31b-it":{"id":"google-gemma-4-31b-it","name":"Google Gemma 4 31B Instruct","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":16384},"cost":{"input":0.12,"output":0.36,"cache_read":0.09},"canonical_model_id":"google/gemma-4-31b-it"},"openai-gpt-54-pro":{"id":"openai-gpt-54-pro","name":"GPT-5.4 Pro","description":"More exact GPT-5.4 tier for demanding professional reasoning and agent tasks","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.4-pro"},"muse-wonder":{"id":"muse-wonder","name":"Muse Wonder","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-10-12","last_updated":"2026-10-15","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":5,"output":25,"cache_read":0.25}},"llama-3.2-3b":{"id":"llama-3.2-3b","name":"Llama 3.2 3B","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"meta/llama-3.2-3b"},"xiaomi-mimo-v2-6-flash":{"id":"xiaomi-mimo-v2-6-flash","name":"MiMo-V2.6-Flash","description":"MiMo flash model for fast multimodal assistance and agent workflows","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.175,"output":0.35,"cache_read":0.00375},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"openai-gpt-53-codex":{"id":"openai-gpt-53-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"grok-4-20-multi-agent":{"id":"grok-4-20-multi-agent","name":"Grok 4.20 Multi-Agent","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":true,"release_date":"2026-03-12","last_updated":"2026-06-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":128000},"cost":{"input":1.42,"output":2.83,"cache_read":0.23,"tiers":[{"input":2.83,"output":5.67,"cache_read":0.45,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.83,"output":5.67,"cache_read":0.45}}},"openai-gpt-4o-2024-11-20":{"id":"openai-gpt-4o-2024-11-20","name":"GPT-4o","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-11-20","last_updated":"2024-11-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o-2024-11-20"},"openai-gpt-55-pro":{"id":"openai-gpt-55-pro","name":"GPT-5.5 Pro","description":"Highest-accuracy GPT-5.5 tier for slower, precision-heavy reasoning and coding","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.5-pro"},"deepseek-v4-flash-0731-fast":{"id":"deepseek-v4-flash-0731-fast","name":"DeepSeek V4 Flash 0731 Fast","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":32768},"cost":{"input":0.35,"output":0.7,"cache_read":0.0875},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"zai-org-glm-4.6":{"id":"zai-org-glm-4.6","name":"GLM 4.6","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":198000,"output":16384},"cost":{"input":0.43,"output":1.75,"cache_read":0.08},"canonical_model_id":"zhipuai/glm-4.6"},"openai-gpt-6-luna":{"id":"openai-gpt-6-luna","name":"GPT-6 Luna","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"deepseek-v4-1-flash-uncensored":{"id":"deepseek-v4-1-flash-uncensored","name":"DeepSeek V4.1 Flash Uncensored","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.33,"output":1.32,"cache_read":0.00825}},"qwen3-6-27b":{"id":"qwen3-6-27b","name":"Qwen 3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":65536},"cost":{"input":0.325,"output":3.25},"canonical_model_id":"alibaba/qwen3.6-27b"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":3.75,"output":18.75,"cache_read":0.375},"canonical_model_id":"moonshotai/kimi-k3"},"claude-sonnet-5":{"id":"claude-sonnet-5","name":"Claude Sonnet 5","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"openai-gpt-56-terra":{"id":"openai-gpt-56-terra","name":"GPT-5.6 Terra","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"claude-fable-5-2":{"id":"claude-fable-5-2","name":"Claude Fable 5.2","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"gemini-3-8-flash":{"id":"gemini-3-8-flash","name":"Gemini 3.8 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.9375,"output":4.6875,"cache_read":0.09375},"canonical_model_id":"google/gemini-3.8-flash"},"gemini-3-6-flash":{"id":"gemini-3-6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.9375,"output":4.6875,"cache_read":0.09375},"canonical_model_id":"google/gemini-3.6-flash"},"kimi-k3-1-pro":{"id":"kimi-k3-1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":2,"output":10,"cache_read":0.2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"grok-4-20":{"id":"grok-4-20","name":"Grok 4.20","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2026-03-12","last_updated":"2026-06-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":128000},"cost":{"input":1.42,"output":2.83,"cache_read":0.23,"tiers":[{"input":2.83,"output":5.67,"cache_read":0.45,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.83,"output":5.67,"cache_read":0.45}}},"minimax-m3-1-flash":{"id":"minimax-m3-1-flash","name":"MiniMax M3.1 Flash","description":"MiniMax multimodal coding model for long-context reasoning and agent tasks","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.1875,"output":0.75,"cache_read":0.01875},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"deepseek-v4-pro-0813":{"id":"deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"Flagship DeepSeek model for coding, reasoning, and agentic work","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":262144},"cost":{"input":1.65,"output":4.95,"cache_read":0.165},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"claude-opus-4-8-fast":{"id":"claude-opus-4-8-fast","name":"Claude Opus 4.8 Fast","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"status":"deprecated","cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-opus-4-8"},"openai-gpt-61-sol":{"id":"openai-gpt-61-sol","name":"GPT-6.1 Sol","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-sol"},"llama-3.3-70b":{"id":"llama-3.3-70b","name":"Llama 3.3 70B","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"cost":{"input":0.7,"output":2.8},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"grok-4-7":{"id":"grok-4-7","name":"Grok 4.7","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":200000},"cost":{"input":2.27,"output":6.8,"cache_read":0.57,"tiers":[{"input":4.53,"output":13.6,"cache_read":1.13,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4.53,"output":13.6,"cache_read":1.13}},"canonical_model_id":"xai/grok-4.7"},"kimi-k2-7-code":{"id":"kimi-k2-7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":65536},"cost":{"input":0.75,"output":3.5,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"grok-4-5":{"id":"grok-4-5","name":"Grok 4.5","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":32000},"cost":{"input":2.27,"output":6.8,"cache_read":0.34,"tiers":[{"input":4.53,"output":13.6,"cache_read":0.68,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4.53,"output":13.6,"cache_read":0.68}},"canonical_model_id":"xai/grok-4.5"},"qwen3-235b-a22b-instruct-2507":{"id":"qwen3-235b-a22b-instruct-2507","name":"Qwen 3 235B A22B Instruct 2507","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.15,"output":0.75},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"z-ai-glm-5-3":{"id":"z-ai-glm-5-3","name":"GLM 5.3","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.75,"output":5.5,"cache_read":0.325},"canonical_model_id":"zhipuai/glm-5.3"},"abliteration-abliterated-model-large-v2":{"id":"abliteration-abliterated-model-large-v2","name":"Abliterated Large V2","description":"Flagship model for demanding analysis, coding, and production agent workflows","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2026-10-01","last_updated":"2026-10-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":3,"output":5,"cache_read":0.3}},"grok-build-0-1":{"id":"grok-build-0-1","name":"Grok Build 0.1","description":"Fast Grok coding model tuned for agentic engineering and iterative edits","family":"grok-build","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":65536},"cost":{"input":1,"output":2,"cache_read":0.2,"tiers":[{"input":2,"output":4,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2,"output":4,"cache_read":0.4}},"canonical_model_id":"xai/grok-build-0.1"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":262144},"cost":{"input":1.65,"output":3.301,"cache_read":0.33},"canonical_model_id":"deepseek/deepseek-v4-pro"},"qwen3-5-397b-a17b":{"id":"qwen3-5-397b-a17b","name":"Qwen 3.5 397B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0.75,"output":4.5},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"openai-gpt-52":{"id":"openai-gpt-52","name":"GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"input":272000,"output":65536},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"gemini-4-argon":{"id":"gemini-4-argon","name":"Gemini 4 Argon","description":"Gemini multimodal model for text, image, audio, video, and document tasks","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":2.5,"output":12.5,"cache_read":0.125},"canonical_model_id":"google/gemini-4-argon"},"openai-gpt-56-sol":{"id":"openai-gpt-56-sol","name":"GPT-5.6 Sol","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"qwen3-next-80b":{"id":"qwen3-next-80b","name":"Qwen 3 Next 80b","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":16384},"cost":{"input":0.35,"output":1.9},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-instruct"},"qwen-3-8-max":{"id":"qwen-3-8-max","name":"Qwen 3.8 Max","description":"Preview Qwen flagship for million-token multimodal reasoning and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-07-19","last_updated":"2026-07-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2.5,"output":7.5,"cache_read":0.3125,"cache_write":3.125},"canonical_model_id":"alibaba/qwen3.8-max-preview"},"claude-fable-5":{"id":"claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"muse-spark-open":{"id":"muse-spark-open","name":"Muse Spark Open","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.5625,"output":5.3125,"cache_read":0.1875},"canonical_model_id":"meta/muse-spark-open"},"xiaomi-mimo-v2-5":{"id":"xiaomi-mimo-v2-5","name":"MiMo-V2.5","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":65536},"cost":{"input":0.4,"output":2,"cache_read":0.08},"canonical_model_id":"xiaomi/mimo-v2.5"},"gemini-3-7-flash":{"id":"gemini-3-7-flash","name":"Gemini 3.7 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.9375,"output":4.6875,"cache_read":0.09375},"canonical_model_id":"google/gemini-3.7-flash"},"zai-org-glm-5":{"id":"zai-org-glm-5","name":"GLM 5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":198000,"output":32000},"cost":{"input":1,"output":3.2,"cache_read":0.2},"canonical_model_id":"zhipuai/glm-5"},"kimi-k3-fast-api":{"id":"kimi-k3-fast-api","name":"Kimi K3 Fast","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":4.5,"output":22.5,"cache_read":0.45},"canonical_model_id":"moonshotai/kimi-k3"},"aion-labs-aion-3-0-mini":{"id":"aion-labs-aion-3-0-mini","name":"Aion 3.0 Mini","description":"Efficient model for low-latency assistance, extraction, and routine automation","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-05-14","last_updated":"2026-05-14","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32768},"cost":{"input":0.875,"output":1.75,"cache_read":0.225},"canonical_model_id":"aion-labs/aion-3.0-mini"},"openai-gpt-oss-120b":{"id":"openai-gpt-oss-120b","name":"OpenAI GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.07,"output":0.3},"canonical_model_id":"openai/gpt-oss-120b"},"minimax-m25":{"id":"minimax-m25","name":"MiniMax M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":198000,"output":32768},"cost":{"input":0.27,"output":0.95,"cache_read":0.03},"canonical_model_id":"minimax/MiniMax-M2.5"},"kimi-k2-6":{"id":"kimi-k2-6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":65536},"cost":{"input":0.75,"output":3.5,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"nvidia-nemotron-3-5-super-vl-120b-a12b":{"id":"nvidia-nemotron-3-5-super-vl-120b-a12b","name":"NVIDIA Nemotron 3.5 Super VL 120B","description":"Nemotron multimodal model for visual reasoning and agentic AI workflows","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":102400},"cost":{"input":0.2,"output":0.5,"cache_read":0.04},"canonical_model_id":"nvidia/nemotron-3.5-super-vl-120b-a12b"},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash 0423","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":262144},"cost":{"input":0.138,"output":0.275,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek-v4-1-flash":{"id":"deepseek-v4-1-flash","name":"DeepSeek V4.1 Flash","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":262144},"status":"deprecated","cost":{"input":0.3,"output":1.2,"cache_read":0.0075},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"openai-gpt-56-terra-pro":{"id":"openai-gpt-56-terra-pro","name":"GPT-5.6 Terra Pro","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"kimi-k3-1-pro-highspeed":{"id":"kimi-k3-1-pro-highspeed","name":"Kimi K3.1 Pro Highspeed","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":5,"output":25,"cache_read":0.375}},"claude-opus-5":{"id":"claude-opus-5","name":"Claude Opus 5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"openai-gpt-6-astra-pro":{"id":"openai-gpt-6-astra-pro","name":"GPT-6 Astra Pro","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"kimi-k2-5":{"id":"kimi-k2-5","name":"Kimi K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":65536},"status":"deprecated","cost":{"input":0.56,"output":3.5,"cache_read":0.22},"canonical_model_id":"moonshotai/kimi-k2.5"},"qwen-3-7-max":{"id":"qwen-3-7-max","name":"Qwen 3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":2.7,"output":8.05,"cache_read":0.27,"cache_write":3.35},"canonical_model_id":"alibaba/qwen3.7-max"},"openai-gpt-6-astra":{"id":"openai-gpt-6-astra","name":"GPT-6 Astra","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"gemini-3-5-flash-lite":{"id":"gemini-3-5-flash-lite","name":"Gemini 3.5 Flash-Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.375,"output":3.125,"cache_read":0.0375},"canonical_model_id":"google/gemini-3.5-flash-lite"},"abliteration-abliterated-model-large-flash":{"id":"abliteration-abliterated-model-large-flash","name":"Abliterated Large Flash","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":1.25,"output":2.5,"cache_read":0.125}},"nvidia-nemotron-3-nano-30b-a3b":{"id":"nvidia-nemotron-3-nano-30b-a3b","name":"NVIDIA Nemotron 3 Nano 30B","description":"Small Nemotron 3 MoE for efficient coding, math, and long-context agents","family":"nemotron","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06-25","release_date":"2025-12-15","last_updated":"2025-12-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.075,"output":0.3},"canonical_model_id":"nvidia/nemotron-3-nano-30b-a3b"},"deepseek-v4-1-flash-1017-uncensored":{"id":"deepseek-v4-1-flash-1017-uncensored","name":"DeepSeek V4.1 Flash 1017 Uncensored","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-10-27","last_updated":"2026-10-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.33,"output":1.32,"cache_read":0.00825}},"gemini-3-5-flash":{"id":"gemini-3-5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":1.55,"output":9.45,"cache_read":0.155,"cache_write":0.086},"canonical_model_id":"google/gemini-3.5-flash"},"hy4-preview":{"id":"hy4-preview","name":"Hy4 Preview","description":"Preview model for early access evaluation, prototyping, and compatibility testing","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-28","last_updated":"2026-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":64000},"cost":{"input":1.0425,"output":3.12625,"cache_read":0.0525},"canonical_model_id":"tencent/hy4-preview"},"claude-opus-5-5-fast":{"id":"claude-opus-5-5-fast","name":"Claude Opus 5.5 Fast","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":8,"output":40,"cache_read":0.4,"cache_write":10},"canonical_model_id":"anthropic/claude-opus-5-5"},"gemini-3-flash-preview":{"id":"gemini-3-flash-preview","name":"Gemini 3 Flash Preview","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":65536},"cost":{"input":0.7,"output":3.75,"cache_read":0.07},"canonical_model_id":"google/gemini-3-flash-preview"},"qwen3-vl-235b-a22b":{"id":"qwen3-vl-235b-a22b","name":"Qwen3 VL 235B","description":"Multimodal model for analyzing text, images, documents, and rich media","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"release_date":"2026-01-16","last_updated":"2026-06-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.21,"output":1.9,"cache_read":0.1}},"openai-gpt-55":{"id":"openai-gpt-55","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":922000,"output":131072},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"claude-opus-4-6":{"id":"claude-opus-4-6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"z-ai-glm-5-3-flash":{"id":"z-ai-glm-5-3-flash","name":"GLM 5.3 Flash","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai-org-glm-5-2":{"id":"zai-org-glm-5-2","name":"GLM 5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"gemini-3-1-pro-preview":{"id":"gemini-3-1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":2.5,"output":15,"cache_read":0.5,"cache_write":0.5,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"cache_write":0.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5,"cache_write":0.5}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"qwen3-6-35b-a3b":{"id":"qwen3-6-35b-a3b","name":"Qwen 3.6 35B A3B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":65536},"cost":{"input":0.1,"output":1},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"aion-labs-aion-3-5-mini":{"id":"aion-labs-aion-3-5-mini","name":"Aion 3.5 Mini","description":"Efficient model for low-latency assistance, extraction, and routine automation","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2026-09-23","last_updated":"2026-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"cost":{"input":0.875,"output":1.75,"cache_read":0.225}},"openai-gpt-4o-mini-2024-07-18":{"id":"openai-gpt-4o-mini-2024-07-18","name":"GPT-4o Mini","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-4o-mini"},"claude-opus-5-fast":{"id":"claude-opus-5-fast","name":"Claude Opus 5 Fast","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-opus-5"},"venice-uncensored-role-play":{"id":"venice-uncensored-role-play","name":"Venice Role Play Uncensored","description":"Multimodal model for analyzing text, images, documents, and rich media","family":"venice","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"release_date":"2026-02-20","last_updated":"2026-06-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"cost":{"input":0.5,"output":2}},"qwen3-coder-480b-a35b-instruct-turbo":{"id":"qwen3-coder-480b-a35b-instruct-turbo","name":"Qwen 3 Coder 480B Turbo","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"release_date":"2026-01-27","last_updated":"2026-06-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":65536},"cost":{"input":0.35,"output":1.5,"cache_read":0.04}},"openai-gpt-6-sol":{"id":"openai-gpt-6-sol","name":"GPT-6 Sol","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"claude-opus-4-8":{"id":"claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"deepseek-v4-1-flash-1017":{"id":"deepseek-v4-1-flash-1017","name":"DeepSeek v4.1 Flash (1017)","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":262144},"cost":{"input":0.3,"output":1.2,"cache_read":0.0075},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"deepseek-v3.2":{"id":"deepseek-v3.2","name":"DeepSeek V3.2","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":160000,"output":32768},"status":"deprecated","cost":{"input":0.33,"output":0.48,"cache_read":0.16},"canonical_model_id":"deepseek/deepseek-v3.2"},"deepseek-v4-flash-0731":{"id":"deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":262144},"cost":{"input":0.13,"output":0.26,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"google-gemma-3-27b-it":{"id":"google-gemma-3-27b-it","name":"Google Gemma 3 27B Instruct","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":198000,"output":16384},"cost":{"input":0.12,"output":0.2},"canonical_model_id":"google/gemma-3-27b-it"},"mistral-small-3-2-24b-instruct":{"id":"mistral-small-3-2-24b-instruct","name":"Mistral Small 3.2 24B Instruct","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-10-31","release_date":"2025-06-20","last_updated":"2025-06-20","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":16384},"cost":{"input":0.09375,"output":0.25},"canonical_model_id":"mistral/mistral-small-3.2-24b-instruct"},"openai-gpt-54-mini":{"id":"openai-gpt-54-mini","name":"GPT-5.4 Mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"minimax-m3-preview":{"id":"minimax-m3-preview","name":"MiniMax M3 Preview","description":"MiniMax multimodal coding model for long-context reasoning and agent tasks","family":"minimax-m3","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"release_date":"2026-06-12","last_updated":"2026-06-13","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.06}},"nvidia-nemotron-3-ultra-550b-a55b":{"id":"nvidia-nemotron-3-ultra-550b-a55b","name":"NVIDIA Nemotron 3 Ultra","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":32768},"cost":{"input":0.625,"output":3.125,"cache_read":0.1875},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"qwen-3-8-flash":{"id":"qwen-3-8-flash","name":"Qwen 3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.14,"output":0.49,"cache_read":0.014},"canonical_model_id":"alibaba/qwen3.8-flash"},"qwen-3-6-plus":{"id":"qwen-3-6-plus","name":"Qwen 3.6 Plus Uncensored","description":"Earlier Qwen multimodal workhorse for million-token agent and document tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.625,"output":3.75,"cache_read":0.0625,"cache_write":0.78,"tiers":[{"input":2.5,"output":7.5,"cache_read":0.0625,"cache_write":0.78,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":2.5,"output":7.5,"cache_read":0.0625,"cache_write":0.78}},"canonical_model_id":"alibaba/qwen3.6-plus"},"claude-opus-5-5":{"id":"claude-opus-5-5","name":"Claude Opus 5.5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"olafangensan-glm-4.7-flash-heretic":{"id":"olafangensan-glm-4.7-flash-heretic","name":"GLM 4.7 Flash Heretic","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"release_date":"2026-02-04","last_updated":"2026-06-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":24000},"cost":{"input":0.07,"output":0.4,"cache_read":0.035}},"qwen-3-7-plus":{"id":"qwen-3-7-plus","name":"Qwen 3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.5,"output":2,"cache_read":0.05,"cache_write":0.625,"tiers":[{"input":1.5,"output":6,"cache_read":0.15,"cache_write":1.875,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":1.5,"output":6,"cache_read":0.15,"cache_write":1.875}},"canonical_model_id":"alibaba/qwen3.7-plus"},"z-ai-glm-5-turbo":{"id":"z-ai-glm-5-turbo","name":"GLM 5 Turbo","description":"Faster GLM-5 lane for coding agents that need lower latency","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32768},"cost":{"input":1.2,"output":4,"cache_read":0.24},"canonical_model_id":"zhipuai/glm-5-turbo"},"claude-haiku-5-5":{"id":"claude-haiku-5-5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"openai-gpt-56-luna":{"id":"openai-gpt-56-luna","name":"GPT-5.6 Luna","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"aion-labs-aion-3-5":{"id":"aion-labs-aion-3-5","name":"Aion 3.5","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"release_date":"2026-09-23","last_updated":"2026-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"cost":{"input":3.75,"output":7.5,"cache_read":0.9375}},"z-ai-glm-5v-turbo":{"id":"z-ai-glm-5v-turbo","name":"GLM 5V Turbo","description":"Fast GLM vision model for screenshots, documents, and multimodal agent tasks","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32768},"cost":{"input":1.5,"output":5,"cache_read":0.3},"canonical_model_id":"zhipuai/glm-5v-turbo"},"claude-opus-4-7":{"id":"claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"zai-org-glm-5-1":{"id":"zai-org-glm-5-1","name":"GLM 5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":80000},"cost":{"input":1.54,"output":4.84,"cache_read":0.286},"canonical_model_id":"zhipuai/glm-5.1"},"gemma-4-uncensored":{"id":"gemma-4-uncensored","name":"Gemma 4 Uncensored","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"release_date":"2026-04-13","last_updated":"2026-06-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":8192},"status":"deprecated","cost":{"input":0.1625,"output":0.5}},"venice-uncensored-1-2":{"id":"venice-uncensored-1-2","name":"Venice Uncensored 1.2","description":"Multimodal model for analyzing text, images, documents, and rich media","family":"venice","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"release_date":"2026-04-01","last_updated":"2026-06-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0.2,"output":0.9}},"qwen3-5-35b-a3b":{"id":"qwen3-5-35b-a3b","name":"Qwen 3.5 35B A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":16384},"cost":{"input":0.15,"output":1,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3.5-35b-a3b"},"seed-2-1-turbo":{"id":"seed-2-1-turbo","name":"Seed 2.1 Turbo","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-23","last_updated":"2026-06-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":65536},"cost":{"input":0.625,"output":3.125,"cache_read":0.125},"canonical_model_id":"bytedance-seed/seed-2.1-turbo"}}},"agnes":{"id":"agnes","env":["AGNES_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://apihub.agnes-ai.com/v1","name":"Agnes AI","doc":"https://agnes-ai.com/doc","models":{"agnes-3.0-flash":{"id":"agnes-3.0-flash","name":"Agnes 3.0 Flash","description":"A new-generation Agnes AI text model with stronger Agnes Code task execution, tool orchestration, and trustworthy delivery.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09","last_updated":"2026-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":512000,"output":65536},"cost":{"input":0,"output":0}},"agnes-2.5-flash":{"id":"agnes-2.5-flash","name":"Agnes 2.5 Flash","description":"Upgraded model with improved coding, agent workflows, tool calling, and multimodal understanding.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-07","last_updated":"2026-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":512000,"output":65536},"cost":{"input":0,"output":0}},"agnes-2.5-pro-alpha":{"id":"agnes-2.5-pro-alpha","name":"Agnes 2.5 Pro Alpha","description":"Paid reasoning model for advanced coding, scientific reasoning, long-context analysis, agentic workflows, and multimodal understanding.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":65536},"cost":{"input":0.45,"output":0.9,"cache_read":0.0038}},"agnes-2.0-flash":{"id":"agnes-2.0-flash","name":"Agnes 2.0 Flash","description":"Fast and efficient model for agent workflows, tool calling, coding, and image understanding.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-05-25","last_updated":"2026-05-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":512000,"output":65536},"status":"deprecated","cost":{"input":0,"output":0}}}},"tencent-coding-plan":{"id":"tencent-coding-plan","env":["TENCENT_CODING_PLAN_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.lkeap.cloud.tencent.com/coding/v3","name":"Tencent Coding Plan (China)","doc":"https://cloud.tencent.com/document/product/1772/128947","models":{"hunyuan-2.0-thinking":{"id":"hunyuan-2.0-thinking","name":"Tencent HY 2.0 Think","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"hunyuan","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-03-08","last_updated":"2026-03-08","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":16384},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"hunyuan-turbos":{"id":"hunyuan-turbos","name":"Hunyuan-TurboS","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"hunyuan","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2026-03-08","last_updated":"2026-03-08","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":16384},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"kimi-k2.5":{"id":"kimi-k2.5","name":"Kimi-K2.5","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k2.5"},"minimax-m2.5":{"id":"minimax-m2.5","name":"MiniMax-M2.5","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":32768},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"minimax/MiniMax-M2.5"},"hunyuan-2.0-instruct":{"id":"hunyuan-2.0-instruct","name":"Tencent HY 2.0 Instruct","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"hunyuan","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2026-03-08","last_updated":"2026-03-08","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":16384},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"hunyuan-t1":{"id":"hunyuan-t1","name":"Hunyuan-T1","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"hunyuan","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-03-08","last_updated":"2026-03-08","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":16384},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"tc-code-latest":{"id":"tc-code-latest","name":"Auto","description":"Automatic model router for matching prompts to suitable backends and budgets","family":"auto","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2026-03-08","last_updated":"2026-03-08","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":16384},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"glm-5":{"id":"glm-5","name":"GLM-5","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":16384},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-5"}}},"claudinio":{"id":"claudinio","env":["CLAUDINIO_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.claudin.io/v1","name":"Claudinio","doc":"https://claudin.io","models":{"claudinio":{"id":"claudinio","name":"Claudinio","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"knowledge":"2026-05","release_date":"2026-05-12","last_updated":"2026-06-02","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":64000},"cost":{"input":0.5,"output":2,"cache_read":0.15}},"claudius":{"id":"claudius","name":"Claudius","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"knowledge":"2026-05","release_date":"2026-05-12","last_updated":"2026-05-12","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":64000},"cost":{"input":3,"output":8,"cache_read":0.9}}}},"amd":{"id":"amd","env":["AMD_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://developer.amd.com.cn/radeon/api/v1","name":"AMD","doc":"https://developer.amd.com.cn/radeon/tokenfactory","models":{"DeepSeek-V4-Flash":{"id":"DeepSeek-V4-Flash","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"GLM-5.3-Flash":{"id":"GLM-5.3-Flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"zhipuai/glm-5.3-flash"},"Qwen3.8-Flash-Next":{"id":"Qwen3.8-Flash-Next","name":"Qwen3.8 Flash Next","description":"Open-weight experimental preview of the Qwen4 architecture: hybrid-attention MoE (125B total, 6B active) with vision encoder for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-27","last_updated":"2026-08-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"alibaba/qwen3.8-flash-next"},"MiMo-V2.6-Flash":{"id":"MiMo-V2.6-Flash","name":"MiMo-V2.6-Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"DeepSeek-V4-Flash-Vision-Exp":{"id":"DeepSeek-V4-Flash-Vision-Exp","name":"DeepSeek V4 Flash Vision Exp","description":"Experimental multimodal DeepSeek V4 Flash model for image understanding, coding, and agentic work","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-21","last_updated":"2026-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"deepseek/deepseek-v4-flash-vision-exp"},"Gemma-4-31B-IT":{"id":"Gemma-4-31B-IT","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"google/gemma-4-31b-it"},"MiniCPM5-2B":{"id":"MiniCPM5-2B","name":"MiniCPM5-2B","description":"Dense 2B-class open-source model for on-device and resource-constrained use, with native long-context support, tool calling, and agentic tasks","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-09-06","last_updated":"2026-09-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"openbmb/minicpm5-2b"},"Qwen3.8-27B":{"id":"Qwen3.8-27B","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"alibaba/qwen3.8-27b"},"MiniCPM-V-4.7-35B-A3B":{"id":"MiniCPM-V-4.7-35B-A3B","name":"MiniCPM-V 4.7 35B-A3B","description":"First MoE MiniCPM-V model for single-image, multi-image and video understanding","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"openbmb/minicpm-v-4.7-35b-a3b"},"MiniCPM-V-4.7-1B":{"id":"MiniCPM-V-4.7-1B","name":"MiniCPM-V 4.7 1B","description":"Compact MiniCPM-V model for single-image, multi-image and video understanding","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"openbmb/minicpm-v-4.7-1b"},"DeepSeek-V4.1-Flash":{"id":"DeepSeek-V4.1-Flash","name":"DeepSeek V4.1 Flash","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"}}},"prime":{"id":"prime","env":["PRIME_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.pinference.ai/api/v1","name":"Prime Inference","doc":"https://docs.primeintellect.ai/inference/overview","models":{"anthropic/claude-opus-4.6":{"id":"anthropic/claude-opus-4.6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25},"canonical_model_id":"anthropic/claude-opus-4-6"},"anthropic/claude-opus-4.7":{"id":"anthropic/claude-opus-4.7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25},"canonical_model_id":"anthropic/claude-opus-4-7"},"anthropic/claude-opus-4.8":{"id":"anthropic/claude-opus-4.8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic/claude-opus-5.5":{"id":"anthropic/claude-opus-5.5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20},"canonical_model_id":"anthropic/claude-opus-5-5"},"anthropic/claude-sonnet-5":{"id":"anthropic/claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10},"canonical_model_id":"anthropic/claude-sonnet-5"},"anthropic/claude-fable-5.2":{"id":"anthropic/claude-fable-5.2","name":"Claude Fable 5.2","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":8,"output":40},"canonical_model_id":"anthropic/claude-fable-5-2"},"anthropic/claude-fable-5.1":{"id":"anthropic/claude-fable-5.1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50},"canonical_model_id":"anthropic/claude-fable-5-1"},"anthropic/claude-sonnet-4.6":{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":3,"output":15},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"anthropic/claude-fable-5":{"id":"anthropic/claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50},"canonical_model_id":"anthropic/claude-fable-5"},"anthropic/claude-opus-5":{"id":"anthropic/claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25},"canonical_model_id":"anthropic/claude-opus-5"},"anthropic/claude-sonnet-5.5":{"id":"anthropic/claude-sonnet-5.5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"x-ai/grok-4.7":{"id":"x-ai/grok-4.7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":450000},"cost":{"input":1.6,"output":4.8},"canonical_model_id":"xai/grok-4.7"},"x-ai/grok-4.6":{"id":"x-ai/grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":450000},"cost":{"input":2,"output":6},"canonical_model_id":"xai/grok-4.6"},"deepseek/deepseek-v4.1-flash":{"id":"deepseek/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.039,"output":1.2,"cache_read":0.0012,"cache_write":0.039},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro 0423","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":1.91,"output":3.83},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-v4-flash":{"id":"deepseek/deepseek-v4-flash","name":"DeepSeek V4 Flash 0423","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.44,"output":1.32},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek/deepseek-v4-flash-0731":{"id":"deepseek/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":0.44,"output":1.32},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepseek/deepseek-v4.1-flash-1017":{"id":"deepseek/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.04368,"output":0.7,"cache_read":0.0024,"cache_write":0.04368},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"google/gemini-3.8-flash":{"id":"google/gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75},"canonical_model_id":"google/gemini-3.8-flash"},"google/gemini-4-carbon":{"id":"google/gemini-4-carbon","name":"Gemini 4 Carbon","description":"Google's most capable reasoning model for complex software engineering, deep math and science, high factual accuracy, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["audio","image","text","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":2,"output":10},"canonical_model_id":"google/gemini-4-carbon"},"google/gemma-3-27b-it":{"id":"google/gemma-3-27b-it","name":"Gemma 3 27B","description":"Largest open Gemma 3 instruction model for multilingual text generation and visual understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":117964},"cost":{"input":0.119,"output":0.3},"canonical_model_id":"google/gemma-3-27b-it"},"google/gemini-3.5-flash":{"id":"google/gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9},"canonical_model_id":"google/gemini-3.5-flash"},"google/gemini-3.6-flash":{"id":"google/gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":7.5},"canonical_model_id":"google/gemini-3.6-flash"},"google/gemini-3.1-pro-preview":{"id":"google/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["audio","image","text","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12},"canonical_model_id":"google/gemini-3.1-pro-preview"},"google/gemini-4-argon":{"id":"google/gemini-4-argon","name":"Gemini 4 Argon","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["audio","image","text","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":2,"output":10},"canonical_model_id":"google/gemini-4-argon"},"google/gemini-3-flash-preview":{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.5,"output":3},"canonical_model_id":"google/gemini-3-flash-preview"},"google/gemini-3.7-flash":{"id":"google/gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.35,"output":6.75},"canonical_model_id":"google/gemini-3.7-flash"},"qwen/qwen3-vl-235b-a22b-instruct":{"id":"qwen/qwen3-vl-235b-a22b-instruct","name":"Qwen3 VL 235B A22B Instruct","description":"Qwen vision-language instruct model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.3,"output":1.5},"canonical_model_id":"alibaba/qwen3-vl-235b-a22b-instruct"},"qwen/qwen3-vl-30b-a3b-instruct":{"id":"qwen/qwen3-vl-30b-a3b-instruct","name":"Qwen3 VL 30B A3B Instruct","description":"Open vision-language MoE model for image and video understanding, documents, and visual agents","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-04","last_updated":"2025-10-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0.2,"output":0.7},"canonical_model_id":"alibaba/qwen3-vl-30b-a3b-instruct"},"qwen/qwen3.8-27b":{"id":"qwen/qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":235929},"cost":{"input":0.99,"output":3.2},"canonical_model_id":"alibaba/qwen3.8-27b"},"qwen/qwen3-30b-a3b-instruct-2507":{"id":"qwen/qwen3-30b-a3b-instruct-2507","name":"Qwen3 30B A3B Instruct 2507","description":"Updated compact Qwen3 MoE instruct model for multilingual chat, coding, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.13,"output":0.52},"canonical_model_id":"alibaba/qwen3-30b-a3b-instruct-2507"},"qwen/qwen3-coder-next":{"id":"qwen/qwen3-coder-next","name":"Qwen3 Coder Next","description":"Open-weight Qwen coding model for agents, repository edits, and multi-turn tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-02-03","last_updated":"2026-02-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.3,"output":1.5},"canonical_model_id":"alibaba/qwen3-coder-next"},"mistralai/mixtral-8x22b-instruct":{"id":"mistralai/mixtral-8x22b-instruct","name":"Mixtral 8x22B Instruct","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-01-31","release_date":"2024-04-17","last_updated":"2024-04-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":52428},"cost":{"input":2.2,"output":6.6},"canonical_model_id":"mistral/mixtral-8x22b-instruct"},"mistralai/mistral-large-2512":{"id":"mistralai/mistral-large-2512","name":"Mistral Large 3 2512","description":"Mistral's largest general model for enterprise agents, coding, and multilingual reasoning","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-11","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":209715},"cost":{"input":0.5,"output":1.5},"canonical_model_id":"mistral/mistral-large-2512"},"mistralai/mistral-small-2603":{"id":"mistralai/mistral-small-2603","name":"Mistral Small 4","description":"Fast Mistral production model for chat, extraction, and cost-sensitive agents","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":209715},"cost":{"input":0.165,"output":0.66},"canonical_model_id":"mistral/mistral-small-2603"},"mistralai/mistral-nemo":{"id":"mistralai/mistral-nemo","name":"Mistral Nemo","description":"Efficient Mistral-NVIDIA open model for multilingual chat and local deployment","family":"mistral-nemo","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.165,"output":0.17},"canonical_model_id":"mistral/mistral-nemo"},"moonshotai/kimi-k3.1-pro":{"id":"moonshotai/kimi-k3.1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":2,"output":10},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"moonshotai/kimi-k2-0905":{"id":"moonshotai/kimi-k2-0905","name":"Kimi K2 0905","description":"September 2025 Kimi K2 instruction update with a 256K context and improved agentic coding","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-09-05","last_updated":"2025-09-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":98304},"cost":{"input":0.6,"output":2.5},"canonical_model_id":"moonshotai/kimi-k2-0905"},"moonshotai/kimi-k3":{"id":"moonshotai/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":3.45,"output":17.25},"canonical_model_id":"moonshotai/kimi-k3"},"openai/gpt-5.5":{"id":"openai/gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":5,"output":30},"canonical_model_id":"openai/gpt-5.5"},"openai/gpt-4.1-nano":{"id":"openai/gpt-4.1-nano","name":"GPT-4.1 Nano","description":"Tiny GPT-4.1 option for classification, routing, and very high-volume tasks","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":942818},"cost":{"input":0.1,"output":0.4},"canonical_model_id":"openai/gpt-4.1-nano"},"openai/gpt-5.2":{"id":"openai/gpt-5.2","name":"GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"cost":{"input":1.75,"output":14},"canonical_model_id":"openai/gpt-5.2"},"openai/gpt-4.1-mini":{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 Mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.4,"output":1.6},"canonical_model_id":"openai/gpt-4.1-mini"},"openai/gpt-5.4-mini":{"id":"openai/gpt-5.4-mini","name":"GPT-5.4 Mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"cost":{"input":0.75,"output":4.5},"canonical_model_id":"openai/gpt-5.4-mini"},"openai/gpt-5.6-terra-pro":{"id":"openai/gpt-5.6-terra-pro","name":"GPT-5.6 Terra Pro","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":2.5,"output":15},"canonical_model_id":"openai/gpt-5.6-terra"},"openai/gpt-5":{"id":"openai/gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"cost":{"input":1.25,"output":10},"canonical_model_id":"openai/gpt-5"},"openai/gpt-5.6-sol":{"id":"openai/gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":5,"output":30},"canonical_model_id":"openai/gpt-5.6-sol"},"openai/gpt-4.1":{"id":"openai/gpt-4.1","name":"GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":2,"output":8},"canonical_model_id":"openai/gpt-4.1"},"openai/gpt-6-luna":{"id":"openai/gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":0.1,"output":0.5},"canonical_model_id":"openai/gpt-6-luna"},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"gpt-oss-20b","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.07,"output":0.3},"canonical_model_id":"openai/gpt-oss-20b"},"openai/gpt-6-sol":{"id":"openai/gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":2,"output":10},"canonical_model_id":"openai/gpt-6-sol"},"openai/gpt-5.3-codex":{"id":"openai/gpt-5.3-codex","name":"GPT-5.3-Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"cost":{"input":1.75,"output":14},"canonical_model_id":"openai/gpt-5.3-codex"},"openai/gpt-6-astra":{"id":"openai/gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":10,"output":50},"canonical_model_id":"openai/gpt-6-astra"},"openai/gpt-5.1":{"id":"openai/gpt-5.1","name":"GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"cost":{"input":1.25,"output":10},"canonical_model_id":"openai/gpt-5.1"},"openai/gpt-5-mini":{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"cost":{"input":0.25,"output":2},"canonical_model_id":"openai/gpt-5-mini"},"openai/gpt-5.6-luna-pro":{"id":"openai/gpt-5.6-luna-pro","name":"GPT-5.6 Luna Pro","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":1,"output":6},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-5.6-luna":{"id":"openai/gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":0.2,"output":1.2},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-6.1-sol":{"id":"openai/gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":2,"output":10},"canonical_model_id":"openai/gpt-6.1-sol"},"openai/gpt-5.4-pro":{"id":"openai/gpt-5.4-pro","name":"GPT-5.4 Pro","description":"More exact GPT-5.4 tier for demanding professional reasoning and agent tasks","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":30,"output":180},"canonical_model_id":"openai/gpt-5.4-pro"},"openai/gpt-5-nano":{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"cost":{"input":0.05,"output":0.4},"canonical_model_id":"openai/gpt-5-nano"},"openai/gpt-5.4":{"id":"openai/gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":2.5,"output":15},"canonical_model_id":"openai/gpt-5.4"},"openai/gpt-5.4-nano":{"id":"openai/gpt-5.4-nano","name":"GPT-5.4 Nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"cost":{"input":0.2,"output":1.25},"canonical_model_id":"openai/gpt-5.4-nano"},"openai/gpt-4o":{"id":"openai/gpt-4o","name":"GPT-4o","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10},"canonical_model_id":"openai/gpt-4o"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"gpt-oss-120b","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":65536},"cost":{"input":0.35,"output":0.75},"canonical_model_id":"openai/gpt-oss-120b"},"openai/gpt-5.6-terra":{"id":"openai/gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":2.5,"output":15},"canonical_model_id":"openai/gpt-5.6-terra"},"openai/gpt-4o-mini":{"id":"openai/gpt-4o-mini","name":"GPT-4o-mini","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"openai/gpt-4o-mini"},"openai/gpt-5.6-sol-pro":{"id":"openai/gpt-5.6-sol-pro","name":"GPT-5.6 Sol Pro","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":5,"output":30},"canonical_model_id":"openai/gpt-5.6-sol"},"meta/muse-spark-open":{"id":"meta/muse-spark-open","name":"Muse Spark Open","description":"Muse Spark Open is an 816B total / 42B active open-weight multimodal reasoning model from Meta for coding and long-horizon agentic work, with 1M-token context.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":262144},"cost":{"input":1.25,"output":4.25},"canonical_model_id":"meta/muse-spark-open"},"z-ai/glm-5.2":{"id":"z-ai/glm-5.2","name":"GLM 5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":1.54,"output":4.84},"canonical_model_id":"zhipuai/glm-5.2"},"z-ai/glm-5.3":{"id":"z-ai/glm-5.3","name":"GLM 5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.4,"output":2.464,"cache_read":0.0744,"cache_write":0.4},"canonical_model_id":"zhipuai/glm-5.3"},"z-ai/glm-5.3-flash":{"id":"z-ai/glm-5.3-flash","name":"GLM 5.3 Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.0525,"output":0.25,"cache_read":0.0105,"cache_write":0.0525},"canonical_model_id":"zhipuai/glm-5.3-flash"},"meta-llama/llama-3.3-70b-instruct":{"id":"meta-llama/llama-3.3-70b-instruct","name":"Llama 3.3 70B Instruct","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":115200},"cost":{"input":1.04,"output":2.253},"canonical_model_id":"meta/llama-3.3-70b-instruct"}}},"above":{"id":"above","env":["ABOVE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.above.dev/v1","name":"above.dev","doc":"https://above.dev/docs","models":{"glm-5.2-fast":{"id":"glm-5.2-fast","name":"GLM 5.2 Fast","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":2.31,"output":7.26,"cache_read":0.231},"canonical_model_id":"zhipuai/glm-5.2"},"glm-5.2":{"id":"glm-5.2","name":"GLM 5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.54,"output":4.84,"cache_read":0.154},"canonical_model_id":"zhipuai/glm-5.2"},"mimo-v2.6-pro":{"id":"mimo-v2.6-pro","name":"MiMo V2.6 Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.5077,"output":1.0154,"cache_read":0.0042},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"mimo-v2.6-pro-ultraspeed":{"id":"mimo-v2.6-pro-ultraspeed","name":"MiMo V2.6 Pro UltraSpeed","description":"MiMo pro model for strong multimodal reasoning and agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":5.0769,"output":10.1538,"cache_read":0.0423},"canonical_model_id":"xiaomi/mimo-v2.6-pro-ultraspeed"},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.165,"output":0.66,"reasoning":0.66,"cache_read":0.0033},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.726,"output":2.178,"reasoning":2.178,"cache_read":0.0242},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"mimo-v2.6-flash":{"id":"mimo-v2.6-flash","name":"MiMo V2.6 Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.1692,"output":0.3385,"cache_read":0.0034},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"deprecated","cost":{"input":0.165,"output":0.66,"reasoning":0.66,"cache_read":0.0033},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM 5.3 Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.165,"output":0.55,"cache_read":0.0319},"canonical_model_id":"zhipuai/glm-5.3-flash"},"qwen3.8-max":{"id":"qwen3.8-max","name":"Qwen 3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":2.2,"output":6.6,"cache_read":0.275},"canonical_model_id":"alibaba/qwen3.8-max"}}},"qihang-ai":{"id":"qihang-ai","env":["QIHANG_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.qhaigc.net/v1","name":"QiHang","doc":"https://www.qhaigc.net/docs","models":{"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.09,"output":0.71,"tiers":[{"input":0.09,"output":0.71,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":0.09,"output":0.71}},"canonical_model_id":"google/gemini-2.5-flash"},"gpt-5.2":{"id":"gpt-5.2","name":"GPT-5.2","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":0.25,"output":2},"canonical_model_id":"openai/gpt-5.2"},"gpt-5.2-codex":{"id":"gpt-5.2-codex","name":"GPT-5.2 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":0.14,"output":1.14},"canonical_model_id":"openai/gpt-5.2-codex"},"gemini-3-pro-preview":{"id":"gemini-3-pro-preview","name":"Gemini 3 Pro Preview","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-11","release_date":"2025-11-18","last_updated":"2025-11-18","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65000},"cost":{"input":0.57,"output":3.43},"canonical_model_id":"google/gemini-3-pro-preview"},"claude-sonnet-4-5-20250929":{"id":"claude-sonnet-4-5-20250929","name":"Claude Sonnet 4.5","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","cost":{"input":0.43,"output":2.14},"canonical_model_id":"anthropic/claude-sonnet-4-5-20250929"},"claude-haiku-4-5-20251001":{"id":"claude-haiku-4-5-20251001","name":"Claude Haiku 4.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":0.14,"output":0.71},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"gpt-5-mini":{"id":"gpt-5-mini","name":"GPT-5-Mini","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":0.04,"output":0.29},"canonical_model_id":"openai/gpt-5-mini"},"claude-opus-4-5-20251101":{"id":"claude-opus-4-5-20251101","name":"Claude Opus 4.5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-03","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"status":"deprecated","cost":{"input":0.71,"output":3.57},"canonical_model_id":"anthropic/claude-opus-4-5-20251101"},"gemini-3-flash-preview":{"id":"gemini-3-flash-preview","name":"Gemini 3 Flash Preview","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.07,"output":0.43,"tiers":[{"input":0.07,"output":0.43,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":0.07,"output":0.43}},"canonical_model_id":"google/gemini-3-flash-preview"}}},"aimlapi":{"id":"aimlapi","env":["AIMLAPI_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.aimlapi.com/v1","name":"AI/ML API","doc":"https://docs.aimlapi.com","models":{"anthropic/claude-opus-4.7":{"id":"anthropic/claude-opus-4.7","name":"Claude 4.7 Opus","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.29,"output":26.45,"cache_read":0.529,"cache_write":6.6125},"canonical_model_id":"anthropic/claude-opus-4-7"},"anthropic/claude-opus-4.8":{"id":"anthropic/claude-opus-4.8","name":"Claude 4.8 Opus","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.29,"output":26.45,"cache_read":0.529,"cache_write":6.6125},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic/claude-opus-4.5":{"id":"anthropic/claude-opus-4.5","name":"Claude 4.5 Opus","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5.29,"output":26.45,"cache_read":0.529,"cache_write":6.6125},"canonical_model_id":"anthropic/claude-opus-4-5"},"anthropic/claude-opus-5.5":{"id":"anthropic/claude-opus-5.5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"anthropic/claude-haiku-4.5":{"id":"anthropic/claude-haiku-4.5","name":"Claude 4.5 Haiku","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1.058,"output":5.29,"cache_read":0.1058,"cache_write":1.3225},"canonical_model_id":"anthropic/claude-haiku-4-5"},"anthropic/claude-sonnet-5":{"id":"anthropic/claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"anthropic/claude-sonnet-4.5":{"id":"anthropic/claude-sonnet-4.5","name":"Claude 4.5 Sonnet","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3.174,"output":15.87,"cache_read":0.3174,"cache_write":3.9675},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"anthropic/claude-fable-5.1":{"id":"anthropic/claude-fable-5.1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"anthropic/claude-sonnet-4.6":{"id":"anthropic/claude-sonnet-4.6","name":"Claude 4.6 Sonnet","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3.174,"output":15.87,"cache_read":0.3174,"cache_write":3.9675},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"anthropic/claude-fable-5":{"id":"anthropic/claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"anthropic/claude-opus-5":{"id":"anthropic/claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"anthropic/claude-sonnet-5.5":{"id":"anthropic/claude-sonnet-5.5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"anthropic/claude-haiku-5.5":{"id":"anthropic/claude-haiku-5.5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125},"canonical_model_id":"anthropic/claude-haiku-5-5"},"aion-labs/aion-rp-llama-3.1-8b":{"id":"aion-labs/aion-rp-llama-3.1-8b","name":"Aion-RP 1.0 (8B)","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12-31","release_date":"2025-02-04","last_updated":"2025-02-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32768},"cost":{"input":0.8464,"output":1.6928},"canonical_model_id":"aion-labs/aion-rp-llama-3.1-8b"},"anthracite-org/magnum-v4-72b":{"id":"anthracite-org/magnum-v4-72b","name":"Magnum v4 72B","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-06-30","release_date":"2024-10-22","last_updated":"2024-10-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":16384},"cost":{"input":3.174,"output":5.29},"canonical_model_id":"anthracite-org/magnum-v4-72b"},"amazon/nova-pro-v1":{"id":"amazon/nova-pro-v1","name":"Nova Pro 1.0","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"nova-pro","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10-31","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":5120},"cost":{"input":0.8464,"output":3.3856},"canonical_model_id":"amazon/nova-pro-v1"},"amazon/nova-lite-v1":{"id":"amazon/nova-lite-v1","name":"Nova Lite 1.0","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-lite","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10-31","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":5120},"cost":{"input":0.06348,"output":0.25392},"canonical_model_id":"amazon/nova-lite-v1"},"amazon/nova-micro-v1":{"id":"amazon/nova-micro-v1","name":"Nova Micro 1.0","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-micro","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10-31","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":5120},"cost":{"input":0.03703,"output":0.14812},"canonical_model_id":"amazon/nova-micro-v1"},"perplexity/sonar-pro":{"id":"perplexity/sonar-pro","name":"Sonar Pro","description":"Deeper Sonar search model with broader retrieval and stronger synthesis","family":"sonar-pro","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2025-09-01","release_date":"2024-01-01","last_updated":"2025-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":3,"output":15},"canonical_model_id":"perplexity/sonar-pro"},"perplexity/sonar":{"id":"perplexity/sonar","name":"Sonar","description":"Fast web-grounded Sonar for current answers, citations, and lightweight retrieval","family":"sonar","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2025-09-01","release_date":"2024-01-01","last_updated":"2025-09-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":100000},"cost":{"input":1,"output":1},"canonical_model_id":"perplexity/sonar"},"rekaai/reka-edge":{"id":"rekaai/reka-edge","name":"Reka Edge","description":"Multimodal model for analyzing text, images, documents, and rich media","family":"reka","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["image","text","video"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"output":16384},"cost":{"input":0.1058,"output":0.1058},"canonical_model_id":"rekaai/reka-edge"},"x-ai/grok-4-20-0309-non-reasoning":{"id":"x-ai/grok-4-20-0309-non-reasoning","name":"Grok 4.20 Non-Reasoning","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":1999000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2},"canonical_model_id":"xai/grok-4.20-0309-non-reasoning"},"x-ai/grok-4-fast-non-reasoning":{"id":"x-ai/grok-4-fast-non-reasoning","name":"Grok 4 Fast Non-Reasoning","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-18","last_updated":"2025-12-18","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":1999000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2},"canonical_model_id":"xai/grok-4-fast-non-reasoning"},"deepseek/deepseek-chat-v3-0324":{"id":"deepseek/deepseek-chat-v3-0324","name":"DeepSeek V3","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07-31","release_date":"2025-03-24","last_updated":"2025-03-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":124000},"cost":{"input":0.30682,"output":1.20612,"cache_read":0.14812},"canonical_model_id":"deepseek/deepseek-chat-v3-0324"},"deepseek/deepseek-v4-pro-0813":{"id":"deepseek/deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":1.84092,"output":3.68184,"cache_read":0.15341},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"deepseek/deepseek-v4.1-flash":{"id":"deepseek/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.9,"output":2.7,"cache_read":0.03},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-v4-flash-vision-exp":{"id":"deepseek/deepseek-v4-flash-vision-exp","name":"DeepSeek V4 Flash Vision Exp","description":"Experimental multimodal DeepSeek V4 Flash model for image understanding, coding, and agentic work","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-21","last_updated":"2026-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.44,"output":1.32,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4-flash-vision-exp"},"deepseek/deepseek-chat":{"id":"deepseek/deepseek-chat","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.39,"output":1.56,"cache_read":0.0078},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek/deepseek-v4-flash":{"id":"deepseek/deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4-flash"},"google/gemini-3.8-flash":{"id":"google/gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.8-flash"},"google/gemma-3-27b-it":{"id":"google/gemma-3-27b-it","name":"Gemma 3 27B","description":"Largest open Gemma 3 instruction model for multilingual text generation and visual understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":117964},"cost":{"input":0.1587,"output":0.48668,"cache_read":0.07935},"canonical_model_id":"google/gemma-3-27b-it"},"google/gemma-2-27b-it":{"id":"google/gemma-2-27b-it","name":"Gemma 2 27B","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-06-30","release_date":"2024-07-13","last_updated":"2024-07-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":2048},"cost":{"input":0.6877,"output":0.6877},"canonical_model_id":"google/gemma-2-27b-it"},"google/gemini-flash-latest":{"id":"google/gemini-flash-latest","name":"Gemini Flash Latest","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.587,"output":9.522,"cache_read":0.1587,"cache_write":0.088167},"canonical_model_id":"google/gemini-flash-latest"},"google/gemini-3.6-flash":{"id":"google/gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":7.5,"cache_read":0.15},"canonical_model_id":"google/gemini-3.6-flash"},"google/gemini-3-8-flash":{"id":"google/gemini-3-8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.8-flash"},"google/gemini-3.1-pro-preview-customtools":{"id":"google/gemini-3.1-pro-preview-customtools","name":"Gemini 3.1 Pro Preview Custom Tools","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048756,"output":65536},"cost":{"input":2.116,"output":12.696,"cache_read":0.2116,"cache_write":0.39675},"canonical_model_id":"google/gemini-3.1-pro-preview-customtools"},"google/gemma-3-4b-it":{"id":"google/gemma-3-4b-it","name":"Gemma 3 4B","description":"Open multimodal Gemma instruction model for efficient text generation and image understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":32768},"cost":{"input":0.0529,"output":0.1058,"cache_read":0.04232},"canonical_model_id":"google/gemma-3-4b-it"},"google/gemini-3.1-pro-preview":{"id":"google/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.5},"canonical_model_id":"google/gemini-3.1-pro-preview"},"google/gemini-3.1-flash-lite-preview":{"id":"google/gemini-3.1-flash-lite-preview","name":"Gemini 3.1 Flash Lite Preview","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-03-03","last_updated":"2026-03-03","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.2645,"output":1.587,"cache_read":0.02645,"cache_write":0.088167},"canonical_model_id":"google/gemini-3.1-flash-lite-preview"},"google/gemma-4-31b-it":{"id":"google/gemma-4-31b-it","name":"Gemma 4 31B Instruct","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":16384},"cost":{"input":1.04742,"output":1.57642,"cache_read":1.04742},"canonical_model_id":"google/gemma-4-31b-it"},"google/gemma-4-26b-a4b-it":{"id":"google/gemma-4-26b-a4b-it","name":"Gemma 4 26B A4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":128000},"cost":{"input":0.1587,"output":0.6348,"cache_read":0.1587},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"google/gemma-3-12b-it":{"id":"google/gemma-3-12b-it","name":"Gemma 3 12B","description":"Open multimodal Gemma instruction model for multilingual text generation and image understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":96000},"cost":{"input":0.0529,"output":0.1587,"cache_read":0.04232},"canonical_model_id":"google/gemma-3-12b-it"},"google/gemini-3.7-flash":{"id":"google/gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.7-flash"},"nousresearch/hermes-3-llama-3.1-405b":{"id":"nousresearch/hermes-3-llama-3.1-405b","name":"Hermes 3 405B Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"nousresearch","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2023-12-31","release_date":"2024-08-16","last_updated":"2024-08-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":1.058,"output":1.058},"canonical_model_id":"nousresearch/hermes-3-llama-3.1-405b"},"nousresearch/hermes-3-llama-3.1-70b":{"id":"nousresearch/hermes-3-llama-3.1-70b","name":"Hermes 3 70B Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"nousresearch","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2023-12-31","release_date":"2024-08-18","last_updated":"2024-08-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.7406,"output":0.7406},"canonical_model_id":"nousresearch/hermes-3-llama-3.1-70b"},"thedrummer/unslopnemo-12b":{"id":"thedrummer/unslopnemo-12b","name":"UnslopNemo 12B","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-04-30","release_date":"2024-11-08","last_updated":"2024-11-08","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32768},"cost":{"input":0.4232,"output":0.4232},"canonical_model_id":"thedrummer/unslopnemo-12b"},"thedrummer/cydonia-24b-v4.1":{"id":"thedrummer/cydonia-24b-v4.1","name":"Cydonia 24B V4.1","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-04-30","release_date":"2025-09-27","last_updated":"2025-09-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.3174,"output":0.529,"cache_read":0.1587},"canonical_model_id":"thedrummer/cydonia-24b-v4.1"},"thedrummer/skyfall-36b-v2":{"id":"thedrummer/skyfall-36b-v2","name":"Skyfall 36B V2","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-06-30","release_date":"2025-03-10","last_updated":"2025-03-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32768},"cost":{"input":0.5819,"output":0.8464,"cache_read":0.2645},"canonical_model_id":"thedrummer/skyfall-36b-v2"},"tencent/hy-mt2-7b":{"id":"tencent/hy-mt2-7b","name":"Hy-MT2-7B","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":4096},"cost":{"input":0.078292,"output":0.31211},"canonical_model_id":"tencent/hy-mt2-7b"},"tencent/hy-mt2-30b-a3b":{"id":"tencent/hy-mt2-30b-a3b","name":"Hy-MT2-30B-A3B","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":4096},"cost":{"input":0.078292,"output":0.31211},"canonical_model_id":"tencent/hy-mt2-30b-a3b"},"tencent/hy3":{"id":"tencent/hy3","name":"Hy3","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0.2116,"output":0.8464,"cache_read":0.0529},"canonical_model_id":"tencent/hy3"},"tencent/hy4-preview":{"id":"tencent/hy4-preview","name":"Hy4 preview","description":"A next-generation productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":true,"release_date":"2026-08-28","last_updated":"2026-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":64000},"cost":{"input":0.882372,"output":2.646058,"cache_read":0.044436},"canonical_model_id":"tencent/hy4-preview"},"tencent/hy-mt2-1.8b":{"id":"tencent/hy-mt2-1.8b","name":"Hy-MT2-1.8B","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":4096},"cost":{"input":0.046552,"output":0.187266},"canonical_model_id":"tencent/hy-mt2-1.8b"},"mistralai/voxtral-small-24b-2507":{"id":"mistralai/voxtral-small-24b-2507","name":"Voxtral Small 24B 2507","description":"Open audio-language model for speech transcription, audio understanding, and voice-driven tool use","family":"voxtral","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-07-15","last_updated":"2025-07-15","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":32768},"cost":{"input":0.1058,"output":0.3174,"cache_read":0.01058},"canonical_model_id":"mistral/voxtral-small-24b-2507"},"mistralai/codestral-2508":{"id":"mistralai/codestral-2508","name":"Codestral 2508","description":"Mistral code model for low-latency completion, fill-in-the-middle, and code generation","family":"codestral","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-30","last_updated":"2025-07-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":8192},"cost":{"input":0.3174,"output":0.9522,"cache_read":0.03174},"canonical_model_id":"mistral/codestral-2508"},"mistralai/mistral-small-3.1-24b-instruct":{"id":"mistralai/mistral-small-3.1-24b-instruct","name":"Small 3.1 24B","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-10-31","release_date":"2025-03-17","last_updated":"2025-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"cost":{"input":0.371358,"output":0.58719},"canonical_model_id":"mistral/mistral-small-3.1-24b-instruct"},"mistralai/mixtral-8x22b-instruct":{"id":"mistralai/mixtral-8x22b-instruct","name":"Mixtral 8x22B Instruct","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-01-31","release_date":"2024-04-17","last_updated":"2024-04-17","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":52428},"cost":{"input":2.116,"output":6.348,"cache_read":0.2116},"canonical_model_id":"mistral/mixtral-8x22b-instruct"},"mistralai/mistral-medium-3-5":{"id":"mistralai/mistral-medium-3-5","name":"Medium 3.5","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-30","last_updated":"2026-04-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":209715},"cost":{"input":1.587,"output":7.935},"canonical_model_id":"mistral/mistral-medium-3-5"},"mistralai/ministral-3b-2512":{"id":"mistralai/ministral-3b-2512","name":"Ministral 3 3B 2512","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":104857},"cost":{"input":0.1587,"output":0.1587,"cache_read":0.01058},"canonical_model_id":"mistral/ministral-3b-2512"},"mistralai/ministral-8b-2512":{"id":"mistralai/ministral-8b-2512","name":"Ministral 3 8B 2512","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":209715},"cost":{"input":0.3174,"output":0.3174,"cache_read":0.01587},"canonical_model_id":"mistral/ministral-8b-2512"},"mistralai/mistral-large-2407":{"id":"mistralai/mistral-large-2407","name":"Large 2407","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-03-31","release_date":"2024-07-24","last_updated":"2024-07-24","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":104857},"cost":{"input":2.116,"output":6.348,"cache_read":0.2116},"canonical_model_id":"mistral/mistral-large-2407"},"mistralai/mistral-small-24b-instruct-2501":{"id":"mistralai/mistral-small-24b-instruct-2501","name":"Small 3","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2023-10-31","release_date":"2025-01-30","last_updated":"2025-01-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":16384},"cost":{"input":0.0529,"output":0.08464},"canonical_model_id":"mistral/mistral-small-24b-instruct-2501"},"mistralai/mistral-small-3.2-24b-instruct":{"id":"mistralai/mistral-small-3.2-24b-instruct","name":"Small 3.2 24B","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-10-31","release_date":"2025-06-20","last_updated":"2025-06-20","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.07935,"output":0.2116},"canonical_model_id":"mistral/mistral-small-3.2-24b-instruct"},"mistralai/mistral-medium-3.1":{"id":"mistralai/mistral-medium-3.1","name":"Medium 3.1","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06-30","release_date":"2025-08-12","last_updated":"2025-08-12","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":104857},"cost":{"input":0.4232,"output":2.116,"cache_read":0.04232},"canonical_model_id":"mistral/mistral-medium-3.1"},"mistralai/mistral-small-2603":{"id":"mistralai/mistral-small-2603","name":"Small 4","description":"Fast Mistral production model for chat, extraction, and cost-sensitive agents","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"cost":{"input":0.198375,"output":0.7935,"cache_read":0.01587},"canonical_model_id":"mistral/mistral-small-2603"},"mistralai/mistral-nemo":{"id":"mistralai/mistral-nemo","name":"Mistral NeMo","description":"Efficient Mistral-NVIDIA open model for multilingual chat and local deployment","family":"mistral-nemo","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.1587,"output":0.17986,"cache_read":0.1587},"canonical_model_id":"mistral/mistral-nemo"},"mistralai/devstral-2512":{"id":"mistralai/devstral-2512","name":"Devstral 2 2512","description":"Mistral's coding-agent model for repository work, terminal tasks, and software fixes","family":"devstral","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-12","release_date":"2025-12-09","last_updated":"2025-12-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.46552,"output":2.3276,"cache_read":0.046552},"canonical_model_id":"mistral/devstral-2512"},"mistralai/mistral-saba":{"id":"mistralai/mistral-saba","name":"Saba","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-02-17","last_updated":"2025-02-17","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":26214},"cost":{"input":0.2116,"output":0.6348,"cache_read":0.02116},"canonical_model_id":"mistral/mistral-saba"},"mistralai/mistral-large":{"id":"mistralai/mistral-large","name":"Large","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-11-30","release_date":"2024-02-26","last_updated":"2024-02-26","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":102400},"cost":{"input":2.116,"output":6.348,"cache_read":0.2116},"canonical_model_id":"mistral/mistral-large"},"mistralai/mistral-medium-3":{"id":"mistralai/mistral-medium-3","name":"Medium 3","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-07","last_updated":"2025-05-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":104857},"cost":{"input":0.4232,"output":2.116,"cache_read":0.04232},"canonical_model_id":"mistral/mistral-medium-3"},"mistralai/ministral-14b-2512":{"id":"mistralai/ministral-14b-2512","name":"Ministral 3 14B 2512","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":209715},"cost":{"input":0.3703,"output":0.3703,"cache_read":0.02116},"canonical_model_id":"mistral/ministral-14b-2512"},"moonshotai/kimi-k2-0905":{"id":"moonshotai/kimi-k2-0905","name":"Kimi K2 0905","description":"September 2025 Kimi K2 instruction update with a 256K context and improved agentic coding","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-09-05","last_updated":"2025-09-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":98304},"cost":{"input":1.058,"output":3.174},"canonical_model_id":"moonshotai/kimi-k2-0905"},"moonshotai/kimi-k2":{"id":"moonshotai/kimi-k2","name":"Kimi K2 0711","description":"Kimi model for long-context chat, coding, and agentic reasoning","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-12-31","release_date":"2025-07-11","last_updated":"2025-07-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"cost":{"input":0.60306,"output":2.4334},"canonical_model_id":"moonshotai/kimi-k2"},"moonshotai/kimi-k2-thinking":{"id":"moonshotai/kimi-k2-thinking","name":"Kimi K2 Thinking","description":"Thinking Kimi model for slower research passes, planning, and hard technical questions","family":"kimi-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-11-06","last_updated":"2025-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":98304},"cost":{"input":0.6348,"output":2.645,"cache_read":0.1587},"canonical_model_id":"moonshotai/kimi-k2-thinking"},"perceptron/perceptron-mk1.5":{"id":"perceptron/perceptron-mk1.5","name":"Mk1.5","description":"Image, video, and audio understanding with visual grounding, reasoning, and function calling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-25","last_updated":"2026-09-25","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":36864,"output":8192},"cost":{"input":0.1587,"output":1.587},"canonical_model_id":"perceptron/perceptron-mk1.5"},"alibaba/qwen3-coder-480b-a35b-instruct":{"id":"alibaba/qwen3-coder-480b-a35b-instruct","name":"Qwen3 Coder","description":"Open Qwen coding heavyweight for repository reasoning and agentic engineering","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":65536},"cost":{"input":1.058,"output":5.15775,"cache_read":1.058},"canonical_model_id":"alibaba/qwen3-coder-480b-a35b-instruct"},"alibaba/qwen-max":{"id":"alibaba/qwen-max","name":"Qwen Max","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-04-03","last_updated":"2025-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":8192},"cost":{"input":1.6,"output":6.4,"cache_read":0.32},"canonical_model_id":"alibaba/qwen-max"},"alibaba/qwen3.8-27b":{"id":"alibaba/qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0.4761,"output":3.3856},"canonical_model_id":"alibaba/qwen3.8-27b"},"alibaba/qwen-plus":{"id":"alibaba/qwen-plus","name":"Qwen Plus","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-01-25","last_updated":"2025-09-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131000,"output":16384},"cost":{"input":0.4,"output":1.2,"cache_read":0.08},"canonical_model_id":"alibaba/qwen-plus"},"alibaba/qwen3.8-flash":{"id":"alibaba/qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.16,"output":0.47,"cache_read":0.016},"canonical_model_id":"alibaba/qwen3.8-flash"},"alibaba/qwen3.8-max-prime":{"id":"alibaba/qwen3.8-max-prime","name":"Qwen3.8 Max Prime","description":"High-throughput edition of Qwen3.8 Max for coding, professional work, multimodal understanding, and long-running agent workflows","family":"qwen3.8-max","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-23","last_updated":"2026-09-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":4.232,"output":12.696,"cache_read":0.529},"canonical_model_id":"alibaba/qwen3.8-max-prime"},"alibaba/qwen3.8-2.4t-a95b":{"id":"alibaba/qwen3.8-2.4t-a95b","name":"Qwen3.8 2.4T A95B","description":"Open-weight sparse MoE (2.4T total, 95B active), the open-weight twin of Qwen3.8 Max for coding, research, complex reasoning, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":52429},"cost":{"input":2.645,"output":6.6125,"cache_read":0.529},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"alibaba/qwen3-next-80b-a3b-instruct":{"id":"alibaba/qwen3-next-80b-a3b-instruct","name":"Qwen3 Next 80B A3B Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":129024,"output":16384},"cost":{"input":0.1587,"output":1.2696},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-instruct"},"alibaba/qwen3.8-max":{"id":"alibaba/qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.8-max"},"openai/gpt-5.2-pro":{"id":"openai/gpt-5.2-pro","name":"GPT-5.2 Pro","description":"Higher-accuracy GPT-5.2 variant for tougher reasoning and review workflows","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":false,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":22.218,"output":177.744},"canonical_model_id":"openai/gpt-5.2-pro"},"openai/gpt-4.1-mini":{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 Mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-4.1-mini"},"openai/gpt-5.4-mini":{"id":"openai/gpt-5.4-mini","name":"GPT-5.4 Mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.587,"output":9.522,"cache_read":0.1587},"canonical_model_id":"openai/gpt-5.4-mini"},"openai/gpt-5-4":{"id":"openai/gpt-5-4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25},"canonical_model_id":"openai/gpt-5.4"},"openai/gpt-5-2":{"id":"openai/gpt-5-2","name":"GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"openai/gpt-oss-safeguard-20b":{"id":"openai/gpt-oss-safeguard-20b","name":"gpt-oss-safeguard-20b","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-29","last_updated":"2025-10-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":65536},"cost":{"input":0.07935,"output":0.3174,"cache_read":0.039675},"canonical_model_id":"openai/gpt-oss-safeguard-20b"},"openai/gpt-5.6-terra-pro":{"id":"openai/gpt-5.6-terra-pro","name":"GPT-5.6 Terra Pro","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.116,"output":12.696,"cache_read":0.2116},"canonical_model_id":"openai/gpt-5.6-terra"},"openai/gpt-5":{"id":"openai/gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"openai/gpt-5.1-codex-max":{"id":"openai/gpt-5.1-codex-max","name":"GPT-5.1-Codex-Max","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":2.645,"output":21.16,"cache_read":0.2645},"canonical_model_id":"openai/gpt-5.1-codex-max"},"openai/gpt-5.6-sol":{"id":"openai/gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5},"canonical_model_id":"openai/gpt-5.6-sol"},"openai/gpt-6.1-terra":{"id":"openai/gpt-6.1-terra","name":"GPT-6.1 Terra","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25},"canonical_model_id":"openai/gpt-6.1-terra"},"openai/gpt-4.1":{"id":"openai/gpt-4.1","name":"GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"openai/gpt-4o-2024-11-20":{"id":"openai/gpt-4o-2024-11-20","name":"GPT-4o","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-11-20","last_updated":"2024-11-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o-2024-11-20"},"openai/gpt-6-luna":{"id":"openai/gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125},"canonical_model_id":"openai/gpt-6-luna"},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT OSS 20B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":117964},"cost":{"input":0.07935,"output":0.3174,"cache_read":0.039675},"canonical_model_id":"openai/gpt-oss-20b"},"openai/gpt-5-5":{"id":"openai/gpt-5-5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"openai/gpt-5.5"},"openai/gpt-5-pro":{"id":"openai/gpt-5-pro","name":"GPT-5 Pro","description":"Higher-accuracy GPT-5 tier for tough analysis, coding reviews, and planning","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":272000},"cost":{"input":15.87,"output":126.96},"canonical_model_id":"openai/gpt-5-pro"},"openai/gpt-6-sol":{"id":"openai/gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"openai/gpt-6-sol"},"openai/gpt-5.3-codex":{"id":"openai/gpt-5.3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":3.703,"output":29.624,"cache_read":0.3703},"canonical_model_id":"openai/gpt-5.3-codex"},"openai/gpt-4o-2024-05-13":{"id":"openai/gpt-4o-2024-05-13","name":"GPT-4o (2024-05-13)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-05-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":5.29,"output":15.87},"canonical_model_id":"openai/gpt-4o-2024-05-13"},"openai/gpt-6-astra":{"id":"openai/gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"openai/gpt-6-astra"},"openai/gpt-5-mini":{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"openai/gpt-5.5-pro":{"id":"openai/gpt-5.5-pro","name":"GPT-5.5 Pro","description":"Highest-accuracy GPT-5.5 tier for slower, precision-heavy reasoning and coding","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":31.74,"output":190.44},"canonical_model_id":"openai/gpt-5.5-pro"},"openai/gpt-5.6-luna-pro":{"id":"openai/gpt-5.6-luna-pro","name":"GPT-5.6 Luna Pro","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2116,"output":1.2696,"cache_read":0.02116},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-5.6-luna":{"id":"openai/gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-6.1-sol":{"id":"openai/gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"openai/gpt-6.1-sol"},"openai/gpt-5.4-pro":{"id":"openai/gpt-5.4-pro","name":"GPT-5.4 Pro","description":"More exact GPT-5.4 tier for demanding professional reasoning and agent tasks","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":false,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":31.74,"output":190.44},"canonical_model_id":"openai/gpt-5.4-pro"},"openai/gpt-5-1":{"id":"openai/gpt-5-1","name":"GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1"},"openai/gpt-5-nano":{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-nano"},"openai/gpt-5.4-image-2":{"id":"openai/gpt-5.4-image-2","type":"image","name":"GPT-5.4 Image 2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":false,"structured_output":true,"temperature":false,"release_date":"2026-04-21","last_updated":"2026-04-21","modalities":{"input":["image","text","pdf"],"output":["image","text"]},"open_weights":false,"limit":{"context":272000,"output":128000},"cost":{"input":8.464,"output":15.87,"cache_read":2.116},"canonical_model_id":"openai/gpt-5.4-image-2"},"openai/o3-pro":{"id":"openai/o3-pro","name":"o3 Pro","description":"High-effort o3 tier for difficult technical reasoning and careful answers","family":"o-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-06-10","last_updated":"2025-06-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":21.16,"output":84.64},"canonical_model_id":"openai/o3-pro"},"openai/gpt-4o-2024-08-06":{"id":"openai/gpt-4o-2024-08-06","name":"GPT-4o","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-08-06","last_updated":"2024-08-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o-2024-08-06"},"openai/gpt-5.4-nano":{"id":"openai/gpt-5.4-nano","name":"GPT-5.4 Nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2116,"output":1.3225,"cache_read":0.02116},"canonical_model_id":"openai/gpt-5.4-nano"},"openai/gpt-4o":{"id":"openai/gpt-4o","name":"GPT-4o","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":117964},"cost":{"input":0.3703,"output":1.0051,"cache_read":0.3703},"canonical_model_id":"openai/gpt-oss-120b"},"openai/gpt-5.6-terra":{"id":"openai/gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"openai/gpt-5.6-terra"},"openai/gpt-4o-mini":{"id":"openai/gpt-4o-mini","name":"GPT-4o Mini","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-4o-mini"},"openai/gpt-5.6-sol-pro":{"id":"openai/gpt-5.6-sol-pro","name":"GPT-5.6 Sol Pro","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4.232,"output":21.16,"cache_read":0.4232},"canonical_model_id":"openai/gpt-5.6-sol"},"cognitivecomputations/dolphin-mistral-24b-venice-edition":{"id":"cognitivecomputations/dolphin-mistral-24b-venice-edition","name":"Venice Uncensored","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-04-30","release_date":"2025-07-09","last_updated":"2025-07-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0.2116,"output":0.9522},"canonical_model_id":"cognitivecomputations/dolphin-mistral-24b-venice-edition"},"cohere/command-r-plus-08-2024":{"id":"cohere/command-r-plus-08-2024","name":"Command R+ (08-2024)","description":"Cohere's RAG workhorse for long-context enterprise search and tool use","family":"command-r","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2024-08-30","last_updated":"2024-08-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4000},"cost":{"input":2.645,"output":10.58},"canonical_model_id":"cohere/command-r-plus-08-2024"},"cohere/command-r7b-12-2024":{"id":"cohere/command-r7b-12-2024","name":"Command R7B (12-2024)","description":"Cohere retrieval model for long-context chat and enterprise RAG workflows","family":"command-r","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2024-12-13","last_updated":"2024-12-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4000},"cost":{"input":0.039675,"output":0.1587},"canonical_model_id":"cohere/command-r7b-12-2024"},"cohere/command-r-08-2024":{"id":"cohere/command-r-08-2024","name":"Command R (08-2024)","description":"Cohere retrieval model for long-context chat and enterprise RAG workflows","family":"command-r","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2024-08-30","last_updated":"2024-08-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4000},"cost":{"input":0.1587,"output":0.6348},"canonical_model_id":"cohere/command-r-08-2024"},"cohere/command-a":{"id":"cohere/command-a","name":"Command A","description":"Cohere command model for multilingual enterprise agents, tools, and chat","family":"command-a","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08-31","release_date":"2025-03-13","last_updated":"2025-03-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":2.645,"output":10.58},"canonical_model_id":"cohere/command-a"},"moonshot/kimi-k3":{"id":"moonshot/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"xiaomi/mimo-v2.5":{"id":"xiaomi/mimo-v2.5","name":"MiMo V2.5","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":0.14812,"output":0.29624,"cache_read":0.002962},"canonical_model_id":"xiaomi/mimo-v2.5"},"xiaomi/mimo-v2.5-pro":{"id":"xiaomi/mimo-v2.5-pro","name":"MiMo V2.5 Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":0.46023,"output":0.92046,"cache_read":0.003809},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"mancer/weaver":{"id":"mancer/weaver","name":"Weaver (alpha)","description":"General-purpose chat model for instruction following, writing, and analysis","family":"alpha","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-06-30","release_date":"2023-08-02","last_updated":"2023-08-02","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8000,"output":2000},"cost":{"input":0.7935,"output":1.058},"canonical_model_id":"mancer/weaver"},"thinkingmachines/inkling-small":{"id":"thinkingmachines/inkling-small","name":"Inkling Small","description":"Multimodal MoE reasoning model (276B total, 12B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":true,"release_date":"2026-07-30","last_updated":"2026-07-30","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":262144},"cost":{"input":0.61364,"output":1.52352,"cache_read":0.122728},"canonical_model_id":"thinkingmachines/inkling-small"},"thinkingmachines/inkling":{"id":"thinkingmachines/inkling","name":"Inkling","description":"Multimodal MoE reasoning model (975B total, 41B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":1.058,"output":4.2849,"cache_read":0.17986},"canonical_model_id":"thinkingmachines/inkling"},"upstage/solar-pro4":{"id":"upstage/solar-pro4","name":"Solar Pro 4","description":"Upstage's flagship model, specialized for agentic use","family":"solar-pro","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02","release_date":"2026-08-06","last_updated":"2026-08-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"output":131072},"cost":{"input":0.09522,"output":0.38088,"cache_read":0.019044},"canonical_model_id":"upstage/solar-pro4"},"meta/muse-spark-1.3":{"id":"meta/muse-spark-1.3","name":"Muse Spark 1.3","description":"Muse Spark 1.3 is a multimodal reasoning model from Meta for long-running agentic, multi-agent, and coding workflows. It improves long-horizon agent collaboration, instruction following, and coding efficiency relative to Muse Spark 1.2.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.3225,"output":4.4965,"cache_read":0.1587},"canonical_model_id":"meta/muse-spark-1.3"},"meta/muse-spark-1.1":{"id":"meta/muse-spark-1.1","name":"Muse Spark 1.1","description":"Muse Spark is a natively multimodal reasoning model with support for tool-use, visual chain of thought, and multi-agent orchestration.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"release_date":"2026-04-08","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.3225,"output":4.4965,"cache_read":0.1587},"canonical_model_id":"meta/muse-spark-1.1"},"meta/muse-glimmer-30b":{"id":"meta/muse-glimmer-30b","name":"Muse Glimmer 30B","description":"Muse Glimmer is a 30-billion-parameter open-weight multimodal model from Meta Superintelligence Labs, distilled from Muse Spark for always-on local agents, tool use, coding, and image understanding.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-08-10","last_updated":"2026-08-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.3703,"output":1.587,"cache_read":0.04232},"canonical_model_id":"meta/muse-glimmer-30b"},"meta/muse-spark-1.2":{"id":"meta/muse-spark-1.2","name":"Muse Spark 1.2","description":"Muse Spark 1.2 is a coding-focused update to Muse Spark 1.1 with improvements in code generation, complex debugging, codebase understanding, and end-to-end developer workflows.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.3225,"output":4.4965,"cache_read":0.1587},"canonical_model_id":"meta/muse-spark-1.2"},"stepfun/step-5-preview":{"id":"stepfun/step-5-preview","name":"Step 5 Preview","description":"StepFun's next-generation flagship base model for coding and professional knowledge work, with native text, image, and video input and a 1M-token context window","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":64000},"cost":{"input":1.058,"output":2.8566,"cache_read":0.0529},"canonical_model_id":"stepfun/step-5-preview"},"undi95/remm-slerp-l2-13b":{"id":"undi95/remm-slerp-l2-13b","name":"ReMM SLERP 13B","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2023-06-30","release_date":"2023-07-22","last_updated":"2023-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":6144,"output":4096},"cost":{"input":0.529,"output":0.7935},"canonical_model_id":"undi95/remm-slerp-l2-13b"},"unbiased/pareto":{"id":"unbiased/pareto","name":"Pareto","description":"Blended multimodal model that runs multiple language models in parallel and returns a synthesized answer","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-09-17","last_updated":"2026-09-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":2.645,"output":7.935,"cache_read":0.2645},"canonical_model_id":"unbiased/pareto"},"z-ai/glm-4.6v":{"id":"z-ai/glm-4.6v","name":"GLM 4.6V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":true,"knowledge":"2025-04","release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.3174,"output":0.9522,"cache_read":0.05819},"canonical_model_id":"zhipuai/glm-4.6v"},"z-ai/glm-5.3-flash":{"id":"z-ai/glm-5.3-flash","name":"GLM 5.3 Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"z-ai/glm-5-turbo":{"id":"z-ai/glm-5-turbo","name":"GLM 5 Turbo","description":"Faster GLM-5 lane for coding agents that need lower latency","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24},"canonical_model_id":"zhipuai/glm-5-turbo"},"z-ai/glm-4.5v":{"id":"z-ai/glm-4.5v","name":"GLM 4.5V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":true,"knowledge":"2025-04","release_date":"2025-08-11","last_updated":"2025-08-11","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":16384},"cost":{"input":0.6348,"output":1.9044,"cache_read":0.11638},"canonical_model_id":"zhipuai/glm-4.5v"},"z-ai/glm-5v-turbo":{"id":"z-ai/glm-5v-turbo","name":"GLM 5V Turbo","description":"Fast GLM vision model for screenshots, documents, and multimodal agent tasks","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":202752,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24},"canonical_model_id":"zhipuai/glm-5v-turbo"},"z-ai/glm-4.7-flash":{"id":"z-ai/glm-4.7-flash","name":"GLM 4.7 Flash","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":16384},"cost":{"input":0.13225,"output":0.529,"cache_read":0.01058},"canonical_model_id":"zhipuai/glm-4.7-flash"},"inception/mercury-2":{"id":"inception/mercury-2","name":"Mercury 2","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"mercury","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-24","last_updated":"2026-02-24","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":50000},"cost":{"input":0.2645,"output":0.7935,"cache_read":0.02645},"canonical_model_id":"inception/mercury-2"},"inception/mercury-2.5":{"id":"inception/mercury-2.5","name":"Mercury 2.5","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"mercury","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-08","last_updated":"2026-09-08","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":260000,"output":65536},"cost":{"input":0.2116,"output":0.7935,"cache_read":0.02116},"canonical_model_id":"inception/mercury-2.5"},"meta-llama/Llama-3.3-70B-Instruct-Turbo":{"id":"meta-llama/Llama-3.3-70B-Instruct-Turbo","name":"Llama 3.3 70B Instruct Turbo","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":127000},"cost":{"input":0.76176,"output":2.383674},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"morph/morph-v3-large":{"id":"morph/morph-v3-large","name":"V3 Large","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"morph","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-07-07","last_updated":"2025-07-07","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":0.9522,"output":2.0102},"canonical_model_id":"morph/morph-v3-large"},"morph/morph-v3-fast":{"id":"morph/morph-v3-fast","name":"V3 Fast","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"morph","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-07-07","last_updated":"2025-07-07","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":81920,"output":38000},"cost":{"input":0.8464,"output":1.2696},"canonical_model_id":"morph/morph-v3-fast"},"gryphe/mythomax-l2-13b":{"id":"gryphe/mythomax-l2-13b","name":"MythoMax 13B","description":"Llama 2 merge combining MythoLogic and Huginn for creative writing and roleplay","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2023-08-10","last_updated":"2023-08-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":4096,"output":4096},"cost":{"input":1.98375,"output":1.98375,"cache_read":1.98375},"canonical_model_id":"gryphe/mythomax-l2-13b"},"sakana/fugu-max":{"id":"sakana/fugu-max","name":"Fugu Max","description":"Multi-agent model for routing expert agents across complex analytical tasks","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2.116,"output":6.348,"cache_read":0.2645},"canonical_model_id":"sakana/fugu-max"},"sakana/fugu-ultra-v2":{"id":"sakana/fugu-ultra-v2","name":"Fugu Ultra v2","description":"Quality-first multi-agent model for hard research, analysis, and competitions","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-08-28","release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.29,"output":31.74,"cache_read":0.529},"canonical_model_id":"sakana/fugu-ultra-v2"},"sakana/fugu-ultra":{"id":"sakana/fugu-ultra","name":"Fugu Ultra","description":"Quality-first multi-agent model for hard research, analysis, and competitions","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-06-15","last_updated":"2026-06-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.29,"output":31.74,"cache_read":0.529},"canonical_model_id":"sakana/fugu-ultra"},"sao10k/l3-lunaris-8b":{"id":"sao10k/l3-lunaris-8b","name":"Llama 3 8B Lunaris","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2023-12-31","release_date":"2024-08-13","last_updated":"2024-08-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":7372},"cost":{"input":0.0529,"output":0.0529},"canonical_model_id":"sao10k/l3-lunaris-8b"},"sao10k/l3.1-euryale-70b":{"id":"sao10k/l3.1-euryale-70b","name":"Llama 3.1 Euryale 70B v2.2","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12-31","release_date":"2024-08-28","last_updated":"2024-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":1.534523,"output":1.534523},"canonical_model_id":"sao10k/l3.1-euryale-70b"},"bytedance-seed/seed-1.6-flash":{"id":"bytedance-seed/seed-1.6-flash","name":"Seed 1.6 Flash","description":"Low-latency ByteDance Seed model for high-throughput chat, extraction, and lightweight tool use","family":"seed","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-08-28","last_updated":"2025-08-28","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"cost":{"input":0.07935,"output":0.3174},"canonical_model_id":"bytedance-seed/seed-1-6-flash"},"bytedance-seed/seed-2.0-mini":{"id":"bytedance-seed/seed-2.0-mini","name":"Seed-2.0-Mini","description":"Lightweight ByteDance Seed 2.0 model for low-latency multimodal reasoning and high-volume tasks","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":0.1058,"output":0.4232},"canonical_model_id":"bytedance-seed/seed-2.0-mini"},"bytedance-seed/seed-2.0-lite":{"id":"bytedance-seed/seed-2.0-lite","name":"Seed-2.0-Lite","description":"Cost-efficient ByteDance Seed 2.0 model for production chat, analysis, and structured generation","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":0.2645,"output":2.116},"canonical_model_id":"bytedance-seed/seed-2.0-lite"},"zhipu/glm-5.2":{"id":"zhipu/glm-5.2","name":"GLM 5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"zhipu/glm-5.3":{"id":"zhipu/glm-5.3","name":"GLM 5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1024000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"relace/relace-search":{"id":"relace/relace-search","name":"Search","description":"Tool-capable chat model for instruction following and agentic application workflows","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"cost":{"input":1.058,"output":3.174},"canonical_model_id":"relace/relace-search"},"relace/relace-apply-3":{"id":"relace/relace-apply-3","name":"Apply 3","description":"General-purpose chat model for instruction following, writing, and analysis","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2025-09-26","last_updated":"2025-09-26","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"cost":{"input":0.8993,"output":1.3225},"canonical_model_id":"relace/relace-apply-3"},"inference-net/schematron-v2-turbo":{"id":"inference-net/schematron-v2-turbo","name":"Schematron V2 Turbo","description":"Efficient model for low-latency assistance, extraction, and routine automation","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"cost":{"input":0.03174,"output":0.1587},"canonical_model_id":"inference-net/schematron-v2-turbo"},"inference-net/schematron-v2-small":{"id":"inference-net/schematron-v2-small","name":"Schematron V2 Small","description":"Efficient model for low-latency assistance, extraction, and routine automation","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"cost":{"input":0.0529,"output":0.24334},"canonical_model_id":"inference-net/schematron-v2-small"}}},"pareto":{"id":"pareto","env":["PARETO_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.paretoinference.com/v1","name":"Pareto Inference","doc":"https://docs.paretoinference.com/","models":{"z-ai/glm-5.3-flash":{"id":"z-ai/glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.06,"output":0.2,"cache_read":0.012},"canonical_model_id":"zhipuai/glm-5.3-flash"}}},"minimax-cn-coding-plan":{"id":"minimax-cn-coding-plan","env":["MINIMAX_API_KEY"],"npm":"@ai-sdk/anthropic","api":"https://api.minimax.cn/anthropic/v1","name":"MiniMax Token Plan (minimax.cn)","doc":"https://platform.minimaxi.com/docs/token-plan/intro","models":{"MiniMax-M2.1":{"id":"MiniMax-M2.1","name":"MiniMax-M2.1","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"MiniMax-M2.5":{"id":"MiniMax-M2.5","name":"MiniMax-M2.5","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"MiniMax-M2.7":{"id":"MiniMax-M2.7","name":"MiniMax-M2.7","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"MiniMax-M2.5-highspeed":{"id":"MiniMax-M2.5-highspeed","name":"MiniMax-M2.5-highspeed","description":"High-speed MiniMax model for low-latency coding and agent workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-02-13","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"MiniMax-M3":{"id":"MiniMax-M3","name":"MiniMax-M3","description":"MiniMax multimodal coding model for long-context reasoning and agent tasks","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-25","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":524288},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"MiniMax-M2.7-highspeed":{"id":"MiniMax-M2.7-highspeed","name":"MiniMax-M2.7-highspeed","description":"High-speed MiniMax model for low-latency coding and agent workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"MiniMax-M3.1-Flash-Preview":{"id":"MiniMax-M3.1-Flash-Preview","name":"MiniMax-M3.1-Flash-Preview","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-09-27","last_updated":"2026-09-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":512000},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"minimax/MiniMax-M3.1-Flash-Preview"},"MiniMax-M3.1-Flash":{"id":"MiniMax-M3.1-Flash","name":"MiniMax-M3.1-Flash","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":524288},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"MiniMax-M2":{"id":"MiniMax-M2","name":"MiniMax-M2","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-10-27","last_updated":"2025-10-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0,"output":0}}}},"zai":{"id":"zai","env":["ZHIPU_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.z.ai/api/paas/v4","name":"Z.AI","doc":"https://docs.z.ai/guides/overview/pricing","models":{"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.2"},"glm-4.6v-flash":{"id":"glm-4.6v-flash","name":"GLM-4.6V-Flash","description":"Lightweight GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.6v-flash"},"glm-4.6v":{"id":"glm-4.6v","name":"GLM-4.6V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0.3,"output":0.9,"cache_read":0.05,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.6v"},"glm-5.1":{"id":"glm-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.1"},"glm-4.5":{"id":"glm-4.5","name":"GLM-4.5","description":"Hybrid-reasoning GLM release that made the 4.5 line broadly useful","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"cost":{"input":0.6,"output":2.2,"cache_read":0.11,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.5"},"glm-4.7":{"id":"glm-4.7","name":"GLM-4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.2,"cache_read":0.11,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.7"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3-flash"},"glm-5-turbo":{"id":"glm-5-turbo","name":"GLM-5-Turbo","description":"Faster GLM-5 lane for coding agents that need lower latency","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24,"cache_write":0},"canonical_model_id":"zhipuai/glm-5-turbo"},"glm-4.5-air":{"id":"glm-4.5-air","name":"GLM-4.5-Air","description":"Lighter GLM-4.5 variant for fast coding assistance and cheaper agents","family":"glm-air","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"cost":{"input":0.2,"output":1.1,"cache_read":0.03,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.5-air"},"glm-4.6":{"id":"glm-4.6","name":"GLM-4.6","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.2,"cache_read":0.11,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.6"},"glm-4.5v":{"id":"glm-4.5v","name":"GLM-4.5V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-08-11","last_updated":"2025-08-11","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":64000,"output":16384},"cost":{"input":0.6,"output":1.8,"cache_read":0.11,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.5v"},"glm-5.3-flashx":{"id":"glm-5.3-flashx","name":"GLM-5.3-FlashX","description":"High-speed GLM-5.3-Flash serving option for coding and agent workflows","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-18","last_updated":"2026-09-18","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.37,"output":1.25,"cache_read":0.075,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3-flash"},"glm-5v-turbo":{"id":"glm-5v-turbo","name":"GLM-5V-Turbo","description":"Fast GLM vision model for screenshots, documents, and multimodal agent tasks","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24,"cache_write":0},"canonical_model_id":"zhipuai/glm-5v-turbo"},"glm-4.7-flashx":{"id":"glm-4.7-flashx","name":"GLM-4.7-FlashX","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0.07,"output":0.4,"cache_read":0.01,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.7-flashx"},"glm-5":{"id":"glm-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":1,"output":3.2,"cache_read":0.2,"cache_write":0},"canonical_model_id":"zhipuai/glm-5"},"glm-4.7-flash":{"id":"glm-4.7-flash","name":"GLM-4.7-Flash","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.7-flash"},"glm-4.5-flash":{"id":"glm-4.5-flash","name":"GLM-4.5-Flash","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":98304},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.5-flash"}}},"regolo-ai":{"id":"regolo-ai","env":["REGOLO_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.regolo.ai/v1","name":"Regolo AI","doc":"https://docs.regolo.ai/","models":{"qwen-image":{"id":"qwen-image","type":"image","name":"Qwen-Image","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-03-01","last_updated":"2026-03-01","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":8192,"output":4096},"cost":{"input":0.5,"output":2}},"brick-complexity-pro":{"id":"brick-complexity-pro","name":"Brick Complexity Pro","description":"Complexity classifier that powers the Brick semantic router by extracting query difficulty","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2026-02-06","last_updated":"2026-02-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":100000,"output":15000},"cost":{"input":0.12,"output":0.46}},"qwen3.8-27b":{"id":"qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":120000,"output":120000},"cost":{"input":0.58,"output":2.42},"canonical_model_id":"alibaba/qwen3.8-27b"},"apertus-70b":{"id":"apertus-70b","name":"Apertus 70B","description":"Fully open 70B multilingual LLM supporting 1800+ languages with 65K context. Trained on 15T tokens of compliant open data. Apache 2.0, EU AI Act compliant.","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2025-09-02","last_updated":"2025-09-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":30000,"output":30000},"cost":{"input":0.46,"output":2.42},"canonical_model_id":"swiss-ai/apertus-70b"},"gpt-oss-20b":{"id":"gpt-oss-20b","name":"GPT-OSS-20B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.11215,"output":0.47103},"canonical_model_id":"openai/gpt-oss-20b"},"qwen3.5-9b":{"id":"qwen3.5-9b","name":"Qwen3.5-9B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":8192},"cost":{"input":0.078505,"output":0.392525},"canonical_model_id":"alibaba/qwen3.5-9b"},"qwen3.5-122b":{"id":"qwen3.5-122b","name":"Qwen3.5-122B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":1.1215,"output":4.7103},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"brick-v1-beta":{"id":"brick-v1-beta","name":"Brick v1 Beta","description":"Semantic router by Regolo.ai that directs each request to the most suitable model, optimizing costs and performance","family":"model-router","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2026-02-06","last_updated":"2026-02-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":100000,"output":15000},"status":"beta","cost":{"input":0,"output":0}},"qwen3-embedding-8b":{"id":"qwen3-embedding-8b","type":"embedding","name":"Qwen3-Embedding-8B","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-06-05","last_updated":"2025-06-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":8192},"cost":{"input":0.1,"output":0.1},"canonical_model_id":"alibaba/qwen3-embedding-8b"},"faster-whisper-large-v3":{"id":"faster-whisper-large-v3","type":"transcription","name":"Faster Whisper Large v3","description":"Open Whisper checkpoint for robust multilingual transcription and captioning","family":"whisper","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2023-11-06","last_updated":"2023-11-06","modalities":{"input":["audio"],"output":["text"]},"open_weights":true,"limit":{"context":448,"output":4096},"cost":{"input":0,"output":0},"canonical_model_id":"openai/whisper-large-v3"},"llama-3.3-70b-instruct":{"id":"llama-3.3-70b-instruct","name":"Llama 3.3 70B Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"status":"deprecated","cost":{"input":0.6,"output":2.7},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"mistral-small-4-119b":{"id":"mistral-small-4-119b","name":"Mistral Small 4 119B","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":16384},"cost":{"input":0.56075,"output":2.35515},"canonical_model_id":"mistral/mistral-small-2603"},"qwen3-reranker-4b":{"id":"qwen3-reranker-4b","type":"reranking","name":"Qwen3-Reranker-4B","description":"Reranking model for improving retrieval quality in search and recommendation systems","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-02-01","last_updated":"2026-02-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":8192},"cost":{"input":0.12,"output":0.12}},"qwen3-coder-next":{"id":"qwen3-coder-next","name":"Qwen3-Coder-Next","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-02-03","last_updated":"2026-02-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"status":"deprecated","cost":{"input":0.3,"output":1.2},"canonical_model_id":"alibaba/qwen3-coder-next"},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"GPT-OSS-120B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":1.1215,"output":4.7103},"canonical_model_id":"openai/gpt-oss-120b"},"glm5.2":{"id":"glm5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":96000,"output":96000},"cost":{"input":2.31,"output":6},"canonical_model_id":"zhipuai/glm-5.2"},"deepseek-ocr-2":{"id":"deepseek-ocr-2","name":"DeepSeek OCR 2","description":"High-accuracy OCR model for extracting text from documents, screenshots, receipts, and natural scenes","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":4000,"output":4000},"cost":{"input":0,"output":0},"canonical_model_id":"deepseek/deepseek-ocr-2"},"gemma4-31b":{"id":"gemma4-31b","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":100000,"output":100000},"cost":{"input":0.46,"output":2.42},"canonical_model_id":"google/gemma-4-31b-it"}}},"watsonx":{"id":"watsonx","env":["WATSONX_AI_APIKEY","WATSONX_AI_PROJECT_ID"],"npm":"watsonx-ai-provider","name":"watsonx.ai","doc":"https://www.ibm.com/docs/en/watsonx/saas?topic=solutions-supported-foundation-models","models":{"ibm/granite-4-h-small":{"id":"ibm/granite-4-h-small","name":"Granite-4.0-H-Small","description":"Open-weight hybrid model for enterprise chat, coding, retrieval-augmented generation, and tool-calling workloads","family":"granite","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-02","last_updated":"2025-10-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.0636,"output":0.265},"canonical_model_id":"ibm/granite-4-h-small"},"mistralai/mistral-small-3-1-24b-instruct-2503":{"id":"mistralai/mistral-small-3-1-24b-instruct-2503","name":"Mistral Small 3.1 24B","description":"Efficient multimodal model for instruction following, coding, reasoning, and function calling","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-03-17","last_updated":"2025-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.106,"output":0.318},"canonical_model_id":"mistral/mistral-small-3-1-24b-instruct-2503"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.159,"output":0.636},"canonical_model_id":"openai/gpt-oss-120b"},"meta-llama/llama-3-3-70b-instruct":{"id":"meta-llama/llama-3-3-70b-instruct","name":"Llama-3.3-70B-Instruct","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":4096},"cost":{"input":0.7526,"output":0.7526},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"meta-llama/llama-4-maverick-17b-128e-instruct-fp8":{"id":"meta-llama/llama-4-maverick-17b-128e-instruct-fp8","name":"Llama 4 Maverick 17B 128E Instruct FP8","description":"Open multimodal Llama for strong reasoning with efficient everyday serving","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"cost":{"input":0.371,"output":1.484},"canonical_model_id":"meta/llama-4-maverick-17b-instruct"}}},"coralbricks":{"id":"coralbricks","env":["CORAL_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://inference.coralbricks.ai/v1","name":"CoralBricks","doc":"https://www.coralbricks.ai/docs","models":{"deepseek-v4.1-flash-fast":{"id":"deepseek-v4.1-flash-fast","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.25,"output":1.2,"cache_read":0.005,"cache_write":0},"canonical_model_id":"deepseek/deepseek-v4.1-flash"}}},"302ai":{"id":"302ai","env":["302AI_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.302.ai/v1","name":"302.AI","doc":"https://doc.302.ai","models":{"qwen3.6-plus":{"id":"qwen3.6-plus","name":"Qwen3.6 Plus","description":"Earlier Qwen multimodal workhorse for million-token agent and document tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.3,"output":1.8,"tiers":[{"input":1.2,"output":7.2,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":1.2,"output":7.2}},"canonical_model_id":"alibaba/qwen3.6-plus"},"gemini-3.5-flash-thinking":{"id":"gemini-3.5-flash-thinking","name":"gemini-3.5-flash-thinking","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9},"canonical_model_id":"google/gemini-3.5-flash"},"gpt-5.5":{"id":"gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":0.5}},"canonical_model_id":"openai/gpt-5.5"},"claude-opus-4-7-thinking":{"id":"claude-opus-4-7-thinking","name":"claude-opus-4-7-thinking","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25},"canonical_model_id":"anthropic/claude-opus-4-7"},"qwen3-30b-a3b":{"id":"qwen3-30b-a3b","name":"Qwen3-30B-A3B","description":"Sparse MoE Qwen model with 3B active parameters for efficient chat and reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0.11,"output":1.08},"canonical_model_id":"alibaba/qwen3-30b-a3b"},"gpt-5.3-chat-latest":{"id":"gpt-5.3-chat-latest","name":"GPT-5.3 Chat (latest)","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-03","last_updated":"2026-03-03","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":1.75,"output":14},"canonical_model_id":"openai/gpt-5.3-chat-latest"},"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"gemini-2.5-flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.3,"output":2.5},"canonical_model_id":"google/gemini-2.5-flash"},"claude-sonnet-5-5":{"id":"claude-sonnet-5-5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"kimi-k2-0905-preview":{"id":"kimi-k2-0905-preview","name":"kimi-k2-0905-preview","description":"September 2025 Kimi K2 instruction update with a 256K context and improved agentic coding","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2025-09-05","last_updated":"2025-09-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.62854,"output":2.5146},"canonical_model_id":"moonshotai/kimi-k2-0905"},"claude-fable-5-1":{"id":"claude-fable-5-1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"gpt-4.1-nano":{"id":"gpt-4.1-nano","name":"gpt-4.1-nano","description":"Tiny GPT-4.1 option for classification, routing, and very high-volume tasks","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.1,"output":0.4},"canonical_model_id":"openai/gpt-4.1-nano"},"MiniMax-M1":{"id":"MiniMax-M1","name":"MiniMax-M1","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-06-16","last_updated":"2025-06-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.132,"output":1.254}},"gemini-3.8-flash":{"id":"gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.8-flash"},"gemini-2.0-flash-lite":{"id":"gemini-2.0-flash-lite","name":"gemini-2.0-flash-lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-11","release_date":"2024-12-11","last_updated":"2024-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":8192},"cost":{"input":0.075,"output":0.3},"canonical_model_id":"google/gemini-2.0-flash-lite"},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"gemini-3.1-flash-image-preview":{"id":"gemini-3.1-flash-image-preview","type":"image","name":"gemini-3.1-flash-image-preview","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-26","last_updated":"2026-02-26","modalities":{"input":["text","image","pdf"],"output":["text","image"]},"open_weights":false,"limit":{"context":131072,"output":32768},"cost":{"input":0.5,"output":60},"canonical_model_id":"google/gemini-3.1-flash-image-preview"},"gpt-5.2":{"id":"gpt-5.2","name":"gpt-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14},"canonical_model_id":"openai/gpt-5.2"},"grok-4.5":{"id":"grok-4.5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.5"},"gpt-4.1-mini":{"id":"gpt-4.1-mini","name":"gpt-4.1-mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.4,"output":1.6},"canonical_model_id":"openai/gpt-4.1-mini"},"kimi-k3.1-pro":{"id":"kimi-k3.1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":2.4,"output":12,"cache_read":0.24},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4},"canonical_model_id":"moonshotai/kimi-k2.6"},"MiniMax-M2.1":{"id":"MiniMax-M2.1","name":"MiniMax-M2.1","description":"Earlier MiniMax agent model for practical coding and productivity tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2},"canonical_model_id":"minimax/MiniMax-M2.1"},"gpt-5.4-mini":{"id":"gpt-5.4-mini","name":"gpt-5.4-mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"gemini-2.5-flash-nothink":{"id":"gemini-2.5-flash-nothink","name":"gemini-2.5-flash-nothink","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.3,"output":2.5},"canonical_model_id":"google/gemini-2.5-flash"},"grok-4-fast-reasoning":{"id":"grok-4-fast-reasoning","name":"grok-4-fast-reasoning","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2025-12-18","last_updated":"2025-12-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"cost":{"input":0.2,"output":0.5},"canonical_model_id":"xai/grok-4-fast-reasoning"},"grok-4.3":{"id":"grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5},"canonical_model_id":"xai/grok-4.3"},"qwen3-coder-480b-a35b-instruct":{"id":"qwen3-coder-480b-a35b-instruct","name":"qwen3-coder-480b-a35b-instruct","description":"Open Qwen coding heavyweight for repository reasoning and agentic engineering","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.86,"output":3.43,"tiers":[{"input":1.29,"output":5.15,"tier":{"type":"context","size":32000}},{"input":2.15,"output":8.58,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3-coder-480b-a35b-instruct"},"MiniMax-M2.5":{"id":"MiniMax-M2.5","name":"MiniMax-M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2},"canonical_model_id":"minimax/MiniMax-M2.5"},"gpt-5.6-terra-pro":{"id":"gpt-5.6-terra-pro","name":"gpt-5.6-terra-pro","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2},"canonical_model_id":"openai/gpt-5.6-terra"},"gpt-5":{"id":"gpt-5","name":"gpt-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10},"canonical_model_id":"openai/gpt-5"},"gemini-2.5-pro":{"id":"gemini-2.5-pro","name":"gemini-2.5-pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":1.25,"output":10,"tiers":[{"input":2.5,"output":15,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":15}},"canonical_model_id":"google/gemini-2.5-pro"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"openai/gpt-5.6-sol"},"gemini-3.5-flash":{"id":"gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9},"canonical_model_id":"google/gemini-3.5-flash"},"claude-sonnet-5":{"id":"claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"MiniMax-M2.7":{"id":"MiniMax-M2.7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2},"canonical_model_id":"minimax/MiniMax-M2.7"},"claude-opus-4-1-20250805-thinking":{"id":"claude-opus-4-1-20250805-thinking","name":"claude-opus-4-1-20250805-thinking","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"cost":{"input":15,"output":75},"canonical_model_id":"anthropic/claude-opus-4-1-20250805"},"claude-opus-5-thinking":{"id":"claude-opus-5-thinking","name":"claude-opus-5-thinking","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5"},"gpt-4.1":{"id":"gpt-4.1","name":"gpt-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":2,"output":8},"canonical_model_id":"openai/gpt-4.1"},"deepseek-v3.2-thinking":{"id":"deepseek-v3.2-thinking","name":"DeepSeek-V3.2-Thinking","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes, sparse attention, and tool-use","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"cost":{"input":0.29,"output":0.43},"canonical_model_id":"deepseek/deepseek-v3.2"},"o3":{"id":"o3","name":"o3","description":"Deliberate o-series reasoner for hard math, coding, and multi-step analysis","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":2,"output":8},"canonical_model_id":"openai/o3"},"grok-4.20-beta-0309-reasoning":{"id":"grok-4.20-beta-0309-reasoning","name":"grok-4.20-beta-0309-reasoning","description":"Reasoning Grok for document-heavy analysis and long-horizon tool use","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"cost":{"input":2,"output":6},"canonical_model_id":"xai/grok-4.20-0309-reasoning"},"gemini-3.6-flash":{"id":"gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":7.5,"cache_read":0.15},"canonical_model_id":"google/gemini-3.6-flash"},"gpt-6-luna":{"id":"gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02}},"canonical_model_id":"openai/gpt-6-luna"},"grok-4.7":{"id":"grok-4.7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"cache_write":0.5},"canonical_model_id":"xai/grok-4.7"},"mistral-large-2512":{"id":"mistral-large-2512","name":"mistral-large-2512","description":"Mistral's largest general model for enterprise agents, coding, and multilingual reasoning","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":262144},"cost":{"input":1.1,"output":3.3},"canonical_model_id":"mistral/mistral-large-2512"},"doubao-seed-1-6-thinking-250715":{"id":"doubao-seed-1-6-thinking-250715","name":"doubao-seed-1-6-thinking-250715","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-07-15","last_updated":"2025-07-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":16000},"cost":{"input":0.121,"output":1.21}},"glm-4.6v":{"id":"glm-4.6v","name":"GLM-4.6V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0.145,"output":0.43,"tiers":[{"input":0.29,"output":0.86,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-4.6v"},"gpt-5-thinking":{"id":"gpt-5-thinking","name":"gpt-5-thinking","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10},"canonical_model_id":"openai/gpt-5"},"qwen3.8-flash":{"id":"qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.47,"cache_read":0.016,"cache_write":0.2},"canonical_model_id":"alibaba/qwen3.8-flash"},"glm-5.1":{"id":"glm-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.1"},"kimi-k2.5":{"id":"kimi-k2.5","name":"Kimi K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.627,"output":3.3},"canonical_model_id":"moonshotai/kimi-k2.5"},"gemini-3-pro-preview":{"id":"gemini-3-pro-preview","name":"gemini-3-pro-preview","description":"Preview Gemini flagship for complex reasoning, coding, and rich multimodal prompts","family":"gemini-pro","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2025-11-18","last_updated":"2025-11-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":2,"output":12,"tiers":[{"input":4,"output":18,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18}},"canonical_model_id":"google/gemini-3-pro-preview"},"qwen3-235b-a22b-instruct-2507":{"id":"qwen3-235b-a22b-instruct-2507","name":"qwen3-235b-a22b-instruct-2507","description":"Updated large open Qwen3 MoE instruct model for multilingual chat, coding, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":65536},"cost":{"input":0.29,"output":1.143},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"glm-4.5":{"id":"glm-4.5","name":"GLM-4.5","description":"Hybrid-reasoning GLM release that made the 4.5 line broadly useful","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"cost":{"input":0.286,"output":1.143,"tiers":[{"input":0.5714,"output":2.29,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-4.5"},"gpt-5.1-chat-latest":{"id":"gpt-5.1-chat-latest","name":"gpt-5.1-chat-latest","description":"Chat-tuned GPT-5.1 for polished assistants, writing, and product conversations","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":1.25,"output":10},"canonical_model_id":"openai/gpt-5.1-chat-latest"},"gemini-3.1-pro-preview":{"id":"gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"tiers":[{"input":4,"output":18,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"gemini-3.1-flash-lite":{"id":"gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.03},"canonical_model_id":"google/gemini-3.1-flash-lite"},"glm-4.7":{"id":"glm-4.7","name":"glm-4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.286,"output":1.142,"tiers":[{"input":0.572,"output":2.29,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-4.7"},"gpt-5-pro":{"id":"gpt-5-pro","name":"gpt-5-pro","description":"Higher-accuracy GPT-5 tier for tough analysis, coding reviews, and planning","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":272000},"cost":{"input":15,"output":120,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-pro"},"claude-sonnet-4-5-20250929":{"id":"claude-sonnet-4-5-20250929","name":"claude-sonnet-4-5-20250929","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75,"tiers":[{"input":6,"output":22.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":6,"output":22.5}},"canonical_model_id":"anthropic/claude-sonnet-4-5-20250929"},"gpt-6-sol":{"id":"gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4}},"canonical_model_id":"openai/gpt-6-sol"},"deepseek-flash":{"id":"deepseek-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"qwen3-max-2025-09-23":{"id":"qwen3-max-2025-09-23","name":"qwen3-max-2025-09-23","description":"Flagship Qwen3 model for coding agents, complex reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":258048,"output":65536},"cost":{"input":0.86,"output":3.43,"tiers":[{"input":1.43,"output":5.72,"tier":{"type":"context","size":32000}},{"input":2.15,"output":8.58,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3-max"},"gemini-4-argon":{"id":"gemini-4-argon","name":"Gemini 4 Argon","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":4,"output":10,"cache_read":0.2,"cache_write":0.375},"canonical_model_id":"google/gemini-4-argon"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"qwen3.5-35b-a3b":{"id":"qwen3.5-35b-a3b","name":"Qwen3.5 35B-A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.06,"output":0.46,"tiers":[{"input":0.23,"output":1.83,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3.5-35b-a3b"},"qwen3.7-plus":{"id":"qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.228,"output":0.92,"cache_read":0.023,"cache_write":0.286,"tiers":[{"input":0.68,"output":2.74,"cache_read":0.068,"cache_write":0.86,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":0.68,"output":2.74,"cache_read":0.068,"cache_write":0.86}},"canonical_model_id":"alibaba/qwen3.7-plus"},"claude-opus-4-1-20250805":{"id":"claude-opus-4-1-20250805","name":"claude-opus-4-1-20250805","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024,"max":31999}],"tool_call":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-1-20250805"},"claude-fable-5":{"id":"claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"gemini-2.5-flash-preview-09-2025":{"id":"gemini-2.5-flash-preview-09-2025","name":"gemini-2.5-flash-preview-09-2025","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-09-26","last_updated":"2025-09-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.3,"output":2.5}},"qwen3.7-max":{"id":"qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":1.8,"output":5.3},"canonical_model_id":"alibaba/qwen3.7-max"},"grok-4-1-fast-reasoning":{"id":"grok-4-1-fast-reasoning","name":"grok-4-1-fast-reasoning","description":"xAI's fast agentic tool-calling model with a 2M context window and built-in reasoning","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2025-11-19","last_updated":"2025-11-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"cost":{"input":0.2,"output":0.5},"canonical_model_id":"xai/grok-4.1-fast-reasoning"},"gpt-6-astra":{"id":"gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1},"canonical_model_id":"openai/gpt-6-astra"},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"gpt-5.1":{"id":"gpt-5.1","name":"gpt-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10},"canonical_model_id":"openai/gpt-5.1"},"claude-haiku-4-5-20251001":{"id":"claude-haiku-4-5-20251001","name":"claude-haiku-4-5-20251001","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"gpt-5-mini":{"id":"gpt-5-mini","name":"gpt-5-mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"qwen3.6-flash":{"id":"qwen3.6-flash","name":"Qwen3.6 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.6","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.19,"output":1.13,"cache_read":0.0171,"cache_write":0.214,"tiers":[{"input":0.76,"output":4.52,"cache_read":0.0686,"cache_write":0.857,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":0.76,"output":4.52,"cache_read":0.0686,"cache_write":0.857}},"canonical_model_id":"alibaba/qwen3.6-flash"},"gemini-3.1-flash-lite-preview":{"id":"gemini-3.1-flash-lite-preview","name":"Gemini 3.1 Flash Lite Preview","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-03-03","last_updated":"2026-03-03","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5},"canonical_model_id":"google/gemini-3.1-flash-lite-preview"},"gpt-5.6-luna-pro":{"id":"gpt-5.6-luna-pro","name":"gpt-5.6-luna-pro","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.6-luna"},"gemini-3-pro-image-preview":{"id":"gemini-3-pro-image-preview","type":"image","name":"gemini-3-pro-image-preview","description":"Nano Banana Pro for higher-fidelity image generation and design-heavy edits","family":"gemini-pro","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2025-06","release_date":"2025-11-20","last_updated":"2025-11-20","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":32768,"output":64000},"cost":{"input":2,"output":120},"canonical_model_id":"google/gemini-3-pro-image-preview"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.075,"output":0.25,"cache_read":0.015},"canonical_model_id":"zhipuai/glm-5.3-flash"},"claude-opus-5":{"id":"claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5"},"glm-5-turbo":{"id":"glm-5-turbo","name":"glm-5-turbo","description":"Faster GLM-5 lane for coding agents that need lower latency","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":131072},"cost":{"input":0.72,"output":3.2,"tiers":[{"input":1.1,"output":3.8,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-5-turbo"},"doubao-seed-1-8-251215":{"id":"doubao-seed-1-8-251215","name":"doubao-seed-1-8-251215","description":"ByteDance Seed model for multimodal reasoning, long-context analysis, and agent workflows","family":"seed","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-12-28","last_updated":"2025-12-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":224000,"output":64000},"cost":{"input":0.1143,"output":0.286,"tiers":[{"input":0.1715,"output":2.286,"tier":{"type":"context","size":32000}},{"input":0.343,"output":3.43,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-1-8"},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.6-luna"},"gemini-3.5-flash-lite":{"id":"gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03},"canonical_model_id":"google/gemini-3.5-flash-lite"},"kimi-k2-thinking":{"id":"kimi-k2-thinking","name":"kimi-k2-thinking","description":"Thinking Kimi model for slower research passes, planning, and hard technical questions","family":"kimi-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2025-11-06","last_updated":"2025-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.575,"output":2.3},"canonical_model_id":"moonshotai/kimi-k2-thinking"},"claude-opus-4-5-20251101":{"id":"claude-opus-4-5-20251101","name":"claude-opus-4-5-20251101","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25},"canonical_model_id":"anthropic/claude-opus-4-5-20251101"},"gpt-6.1-sol":{"id":"gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2}},"canonical_model_id":"openai/gpt-6.1-sol"},"MiniMax-M3":{"id":"MiniMax-M3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":512000},"cost":{"input":0.72,"output":2.88,"cache_read":0.144,"cache_write":0.9,"tiers":[{"input":1.44,"output":5.76,"cache_read":0.144,"cache_write":0.9,"tier":{"type":"context","size":512000}}],"context_over_200k":{"input":1.44,"output":5.76,"cache_read":0.144,"cache_write":0.9}},"canonical_model_id":"minimax/MiniMax-M3"},"doubao-seed-1-6-vision-250815":{"id":"doubao-seed-1-6-vision-250815","name":"doubao-seed-1-6-vision-250815","description":"ByteDance Seed multimodal model for image understanding, visual reasoning, and tool-assisted tasks","family":"seed","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-08-15","last_updated":"2025-08-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000},"cost":{"input":0.114,"output":1.143},"canonical_model_id":"bytedance-seed/seed-1-6-vision"},"gpt-5.4":{"id":"gpt-5.4","name":"gpt-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25,"cache_write":0,"tiers":[{"input":5,"output":22.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5}},"canonical_model_id":"openai/gpt-5.4"},"glm-4.6":{"id":"glm-4.6","name":"glm-4.6","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.286,"output":1.142,"tiers":[{"input":0.572,"output":2.29,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-4.6"},"gemini-3-flash-preview":{"id":"gemini-3-flash-preview","name":"gemini-3-flash-preview","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.5,"output":3},"canonical_model_id":"google/gemini-3-flash-preview"},"qwen3.6-35b-a3b":{"id":"qwen3.6-35b-a3b","name":"Qwen3.6 35B-A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.28,"output":1.7},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"gemini-2.5-flash-image":{"id":"gemini-2.5-flash-image","type":"image","name":"gemini-2.5-flash-image","description":"Nano Banana image model for fast generation, edits, and character-consistent assets","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-08-26","last_updated":"2025-08-26","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":32768,"output":32768},"cost":{"input":0.3,"output":30},"canonical_model_id":"google/gemini-2.5-flash-image"},"gpt-5.4-nano":{"id":"gpt-5.4-nano","name":"gpt-5.4-nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"qwen3.5-plus":{"id":"qwen3.5-plus","name":"Qwen3.5 Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-16","last_updated":"2026-02-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.12,"output":0.69,"tiers":[{"input":0.29,"output":1.72,"tier":{"type":"context","size":128000}},{"input":0.58,"output":3.44,"tier":{"type":"context","size":256000}}]},"canonical_model_id":"alibaba/qwen3.5-plus"},"grok-4.6":{"id":"grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.6"},"gpt-5.2-chat-latest":{"id":"gpt-5.2-chat-latest","name":"gpt-5.2-chat-latest","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":1.75,"output":14},"canonical_model_id":"openai/gpt-5.2-chat-latest"},"glm-4.5v":{"id":"glm-4.5v","name":"GLM-4.5V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-08-11","last_updated":"2025-08-11","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":64000,"output":16384},"cost":{"input":0.29,"output":0.86,"tiers":[{"input":0.58,"output":1.72,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-4.5v"},"gpt-4o":{"id":"gpt-4o","name":"gpt-4o","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10},"canonical_model_id":"openai/gpt-4o"},"claude-opus-4-8":{"id":"claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"deepseek-v3.2":{"id":"deepseek-v3.2","name":"deepseek-v3.2","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes, sparse attention, and tool-use","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0.29,"output":0.43},"canonical_model_id":"deepseek/deepseek-v3.2"},"claude-sonnet-4-6-thinking":{"id":"claude-sonnet-4-6-thinking","name":"claude-sonnet-4-6-thinking","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75,"tiers":[{"input":6,"output":22.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":6,"output":22.5}},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"qwen3-235b-a22b":{"id":"qwen3-235b-a22b","name":"Qwen3-235B-A22B","description":"Large open Qwen MoE for multilingual reasoning, coding, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.29,"output":2.86},"canonical_model_id":"alibaba/qwen3-235b-a22b"},"grok-4.1":{"id":"grok-4.1","name":"grok-4.1","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2025-11-18","last_updated":"2025-11-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":2,"output":10}},"gpt-5.6-terra":{"id":"gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2},"canonical_model_id":"openai/gpt-5.6-terra"},"claude-sonnet-4-5-20250929-thinking":{"id":"claude-sonnet-4-5-20250929-thinking","name":"claude-sonnet-4-5-20250929-thinking","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-03","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75,"tiers":[{"input":6,"output":22.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":6,"output":22.5}},"canonical_model_id":"anthropic/claude-sonnet-4-5-20250929"},"claude-opus-5-5":{"id":"claude-opus-5-5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"qwen3.8-max":{"id":"qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2.16,"output":6.36,"cache_read":0.168,"cache_write":2.58},"canonical_model_id":"alibaba/qwen3.8-max"},"grok-4-fast-non-reasoning":{"id":"grok-4-fast-non-reasoning","name":"grok-4-fast-non-reasoning","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2025-12-18","last_updated":"2025-12-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"cost":{"input":0.2,"output":0.5},"canonical_model_id":"xai/grok-4-fast-non-reasoning"},"glm-5v-turbo":{"id":"glm-5v-turbo","name":"GLM-5V-Turbo","description":"Fast GLM vision model for screenshots, documents, and multimodal agent tasks","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":131072},"cost":{"input":0.72,"output":3.2,"tiers":[{"input":1.1,"output":3.8,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-5v-turbo"},"ministral-14b-2512":{"id":"ministral-14b-2512","name":"ministral-14b-2512","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"cost":{"input":0.33,"output":0.33},"canonical_model_id":"mistral/ministral-14b-2512"},"claude-haiku-5-5":{"id":"claude-haiku-5-5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"claude-sonnet-4-6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75,"tiers":[{"input":6,"output":22.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":6,"output":22.5}},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"glm-5":{"id":"glm-5","name":"glm-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.6,"tiers":[{"input":0.9,"output":3.2,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-5"},"gpt-5.6-sol-pro":{"id":"gpt-5.6-sol-pro","name":"gpt-5.6-sol-pro","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"openai/gpt-5.6-sol"},"MiniMax-M2":{"id":"MiniMax-M2","name":"MiniMax-M2","description":"Efficient open MiniMax model built for coding agents and tool-heavy workflows","family":"minimax","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-10-27","last_updated":"2025-10-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":0.33,"output":1.32},"canonical_model_id":"minimax/MiniMax-M2"},"claude-opus-4-7":{"id":"claude-opus-4-7","name":"claude-opus-4-7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25,"tiers":[{"input":10,"output":37.5,"cache_read":1,"cache_write":12.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":10,"output":37.5,"cache_read":1,"cache_write":12.5}},"canonical_model_id":"anthropic/claude-opus-4-7"},"gemini-3.7-flash":{"id":"gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.7-flash"},"qwen3.7-max-2026-06-08":{"id":"qwen3.7-max-2026-06-08","name":"qwen3.7-max-2026-06-08","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":1.8,"output":5.3},"canonical_model_id":"alibaba/qwen3.7-max"},"gemini-2.5-flash-lite-preview-09-2025":{"id":"gemini-2.5-flash-lite-preview-09-2025","name":"gemini-2.5-flash-lite-preview-09-2025","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-09-26","last_updated":"2025-09-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.1,"output":0.4}},"claude-haiku-4-5":{"id":"claude-haiku-4-5","name":"claude-haiku-4-5","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5},"canonical_model_id":"anthropic/claude-haiku-4-5"}}},"runinfra":{"id":"runinfra","env":["RUNINFRA_GATEWAY_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.runinfra.ai/v1","name":"RunInfra","doc":"https://runinfra.ai/docs","models":{"deepseek-ai/DeepSeek-V4-Flash-0731":{"id":"deepseek-ai/DeepSeek-V4-Flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":32768},"status":"deprecated","cost":{"input":0.13,"output":0.27,"cache_read":0.01},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepseek-ai/DeepSeek-V4-Pro-0813":{"id":"deepseek-ai/DeepSeek-V4-Pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":32768},"status":"deprecated","cost":{"input":0.6,"output":1.9,"cache_read":0.03},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"ornith-ai/Ornith-1.5-35B-A3B":{"id":"ornith-ai/Ornith-1.5-35B-A3B","name":"Ornith 1.5 35B A3B","description":"Mixture-of-experts coding-reasoning model for agentic software tasks, tool use, and image understanding","family":"ornith","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-18","last_updated":"2026-08-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.1,"output":0.4,"cache_read":0.01},"canonical_model_id":"deepreinforce/ornith-1.5-35b-a3b"},"Inferact/Qwen3.8-2.4T-A95B-NVFP4":{"id":"Inferact/Qwen3.8-2.4T-A95B-NVFP4","name":"Qwen3.8 2.4T A95B (NVFP4)","description":"Open-weight sparse MoE (2.4T total, 95B active), the open-weight twin of Qwen3.8 Max for coding, research, complex reasoning, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"status":"deprecated","cost":{"input":2,"output":6,"cache_read":0.2},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"Qwen/Qwen3.8-27B":{"id":"Qwen/Qwen3.8-27B","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.1,"output":0.4,"cache_read":0.01},"canonical_model_id":"alibaba/qwen3.8-27b"},"zai-org/GLM-5.3-Flash":{"id":"zai-org/GLM-5.3-Flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":32768},"cost":{"input":0.11,"output":0.45,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai-org/GLM-5.3":{"id":"zai-org/GLM-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536},"cost":{"input":1.3,"output":4.2,"cache_read":0.13},"canonical_model_id":"zhipuai/glm-5.3"},"nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16":{"id":"nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16","name":"Nemotron 3.5 Lightning 30B A3B","description":"Fast NVIDIA Nemotron MoE for reliable agentic tasks across enterprise workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.05,"output":0.15,"cache_read":0.01},"canonical_model_id":"nvidia/nemotron-3.5-lightning"}}},"qiniu-ai":{"id":"qiniu-ai","env":["QINIU_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.qnaigc.com/v1","name":"Qiniu","doc":"https://developer.qiniu.com/aitokenapi","models":{"gemini-2.0-flash":{"id":"gemini-2.0-flash","name":"Gemini 2.0 Flash","description":"Earlier Gemini Flash workhorse for responsive multimodal apps and tool use","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2024-12-11","last_updated":"2024-12-11","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":8192},"status":"deprecated","canonical_model_id":"google/gemini-2.0-flash"},"qwen3-30b-a3b":{"id":"qwen3-30b-a3b","name":"Qwen3 30B A3B","description":"Sparse MoE Qwen model with 3B active parameters for efficient chat and reasoning","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":40000,"output":4096},"status":"deprecated","cost":{"input":0.10869565,"output":0.43478261},"canonical_model_id":"alibaba/qwen3-30b-a3b"},"deepseek-r1-0528":{"id":"deepseek-r1-0528","name":"DeepSeek-R1-0528","description":"May 2025 DeepSeek R1 update with improved mathematics, coding, and reasoning","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-05-28","last_updated":"2025-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32000},"status":"deprecated","cost":{"input":0.57971014,"output":2.31884058},"canonical_model_id":"deepseek/deepseek-r1-0528"},"qwen2.5-vl-72b-instruct":{"id":"qwen2.5-vl-72b-instruct","name":"Qwen 2.5 VL 72B Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-01-26","last_updated":"2025-01-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"status":"deprecated","cost":{"input":2.31884058,"output":6.95652174},"canonical_model_id":"alibaba/qwen2-5-vl-72b-instruct"},"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":64000},"status":"deprecated","canonical_model_id":"google/gemini-2.5-flash"},"claude-4.0-opus":{"id":"claude-4.0-opus","name":"Claude 4.0 Opus","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"status":"deprecated","canonical_model_id":"anthropic/claude-opus-4-0"},"claude-4.0-sonnet":{"id":"claude-4.0-sonnet","name":"Claude 4.0 Sonnet","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","canonical_model_id":"anthropic/claude-sonnet-4-0"},"MiniMax-M1":{"id":"MiniMax-M1","name":"MiniMax M1","description":"Open hybrid-attention MoE reasoning model with a million-token context and an 80K thinking budget","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":80000},"status":"deprecated","cost":{"input":0.57971014,"output":2.31884058},"canonical_model_id":"minimax/minimax-m1-80k"},"gemini-2.0-flash-lite":{"id":"gemini-2.0-flash-lite","name":"Gemini 2.0 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2024-12-11","last_updated":"2024-12-11","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":8192},"status":"deprecated","canonical_model_id":"google/gemini-2.0-flash-lite"},"claude-4.5-haiku":{"id":"claude-4.5-haiku","name":"Claude 4.5 Haiku","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","canonical_model_id":"anthropic/claude-haiku-4-5"},"doubao-seed-2.0-code":{"id":"doubao-seed-2.0-code","name":"Doubao Seed 2.0 Code","description":"ByteDance Seed coding model for multimodal software engineering and long-running agents","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"status":"deprecated","cost":{"input":0.46376812,"output":2.31884058,"cache_read":0.09275362,"tiers":[{"input":0.69565217,"output":3.47826087,"cache_read":0.13913043,"tier":{"type":"context","size":32000}},{"input":1.39130435,"output":6.95652174,"cache_read":0.27826087,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-code"},"doubao-seed-2.0-lite":{"id":"doubao-seed-2.0-lite","name":"Doubao Seed 2.0 Lite","description":"Cost-efficient ByteDance Seed 2.0 model for production chat, analysis, and structured generation","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000},"cost":{"input":0.08695652,"output":0.52173913,"cache_read":0.0173913,"tiers":[{"input":0.13043478,"output":0.7826087,"cache_read":0.02608696,"tier":{"type":"context","size":32000}},{"input":0.26086957,"output":1.56521739,"cache_read":0.05217391,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-lite"},"qwen3-235b-a22b-thinking-2507":{"id":"qwen3-235b-a22b-thinking-2507","name":"Qwen3 235B A22B Thinking 2507","description":"Updated large open Qwen3 MoE thinking model for reasoning, math, coding, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-25","last_updated":"2025-07-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":4096},"status":"deprecated","cost":{"input":0.28985507,"output":2.89855072},"canonical_model_id":"alibaba/qwen3-235b-a22b-thinking-2507"},"qwen3-30b-a3b-thinking-2507":{"id":"qwen3-30b-a3b-thinking-2507","name":"Qwen3 30b A3b Thinking 2507","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-04","last_updated":"2026-02-04","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":126000,"output":32000},"status":"deprecated","cost":{"input":0.10869565,"output":1.08695652}},"gemini-3.0-pro-image-preview":{"id":"gemini-3.0-pro-image-preview","type":"image","name":"Gemini 3.0 Pro Image Preview","description":"Nano Banana Pro for higher-fidelity image generation and design-heavy edits","family":"gemini-pro","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-11-20","last_updated":"2025-11-20","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":32768,"output":8192},"status":"deprecated","canonical_model_id":"google/gemini-3-pro-image-preview"},"qwen-vl-max-2025-01-25":{"id":"qwen-vl-max-2025-01-25","name":"Qwen VL-MAX-2025-01-25","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"status":"deprecated","cost":{"input":0.43478261,"output":1.30434783}},"claude-4.5-opus":{"id":"claude-4.5-opus","name":"Claude 4.5 Opus","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":200000},"status":"deprecated","canonical_model_id":"anthropic/claude-opus-4-5"},"qwen3-coder-480b-a35b-instruct":{"id":"qwen3-coder-480b-a35b-instruct","name":"Qwen3 Coder 480B A35B Instruct","description":"Open Qwen coding heavyweight for repository reasoning and agentic engineering","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":4096},"status":"deprecated","cost":{"input":0.86956522,"output":3.47826087,"tiers":[{"input":1.30434783,"output":5.2173913,"tier":{"type":"context","size":32000}},{"input":2.17391304,"output":8.69565217,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3-coder-480b-a35b-instruct"},"deepseek-v3.1":{"id":"deepseek-v3.1","name":"DeepSeek-V3.1","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32000},"status":"deprecated","cost":{"input":0.57971014,"output":1.73913043},"canonical_model_id":"deepseek/deepseek-v3.1"},"gemini-2.5-pro":{"id":"gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","canonical_model_id":"google/gemini-2.5-pro"},"qwen3-vl-30b-a3b-thinking":{"id":"qwen3-vl-30b-a3b-thinking","name":"Qwen3-Vl 30b A3b Thinking","description":"Multimodal model for analyzing text, images, documents, and rich media","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-09","last_updated":"2026-02-09","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32000},"status":"deprecated","cost":{"input":0.10869565,"output":1.08695652}},"doubao-seed-1.6-flash":{"id":"doubao-seed-1.6-flash","name":"Doubao-Seed 1.6 Flash","description":"Low-latency ByteDance Seed model for high-throughput chat, extraction, and lightweight tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-08-28","last_updated":"2025-08-28","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000},"status":"deprecated","cost":{"input":0.02173913,"output":0.2173913,"tiers":[{"input":0.04347826,"output":0.43478261,"tier":{"type":"context","size":32000}},{"input":0.08695652,"output":0.86956522,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-1-6-flash"},"deepseek-r1":{"id":"deepseek-r1","name":"DeepSeek-R1","description":"Classic open reasoning model for transparent math, coding, and deliberate problem solving","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-07","release_date":"2025-01-20","last_updated":"2025-05-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32000},"status":"deprecated","cost":{"input":0.57971014,"output":2.31884058},"canonical_model_id":"deepseek/deepseek-r1"},"qwen3-30b-a3b-instruct-2507":{"id":"qwen3-30b-a3b-instruct-2507","name":"Qwen3 30b A3b Instruct 2507","description":"Updated compact Qwen3 MoE instruct model for multilingual chat, coding, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32000},"status":"deprecated","cost":{"input":0.10869565,"output":0.43478261},"canonical_model_id":"alibaba/qwen3-30b-a3b-instruct-2507"},"qwen3-235b-a22b-instruct-2507":{"id":"qwen3-235b-a22b-instruct-2507","name":"Qwen3 235b A22B Instruct 2507","description":"Updated large open Qwen3 MoE instruct model for multilingual chat, coding, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":64000},"status":"deprecated","cost":{"input":0.28985507,"output":1.15942029},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"glm-4.5":{"id":"glm-4.5","name":"GLM 4.5","description":"Hybrid-reasoning GLM release that made the 4.5 line broadly useful","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"status":"deprecated","cost":{"input":0.57971014,"output":2.31884058},"canonical_model_id":"zhipuai/glm-4.5"},"claude-3.5-haiku":{"id":"claude-3.5-haiku","name":"Claude 3.5 Haiku","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-07-31","release_date":"2024-10-22","last_updated":"2024-10-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8192},"status":"deprecated","canonical_model_id":"anthropic/claude-3-5-haiku-20241022"},"gpt-oss-20b":{"id":"gpt-oss-20b","name":"gpt-oss-20b","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"status":"deprecated","canonical_model_id":"openai/gpt-oss-20b"},"qwen3-next-80b-a3b-thinking":{"id":"qwen3-next-80b-a3b-thinking","name":"Qwen3 Next 80B A3B Thinking","description":"Efficient Qwen thinking model for local reasoning, math, and coding agents","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"status":"deprecated","cost":{"input":0.14492754,"output":1.44927536},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-thinking"},"doubao-1.5-vision-pro":{"id":"doubao-1.5-vision-pro","name":"Doubao 1.5 Vision Pro","description":"Flagship model for demanding analysis, coding, and production agent workflows","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16000},"status":"deprecated","cost":{"input":0.43478261,"output":1.30434783}},"qwen3.5-397b-a17b":{"id":"qwen3.5-397b-a17b","name":"Qwen3.5 397B A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":64000},"cost":{"input":0.17391304,"output":1.04347826,"tiers":[{"input":0.43478261,"output":2.60869565,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"mimo-v2-flash":{"id":"mimo-v2-flash","name":"Mimo-V2-Flash","description":"MiMo flash model for fast multimodal assistance and agent workflows","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-12-01","release_date":"2025-12-16","last_updated":"2026-02-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"status":"deprecated","cost":{"input":0.1,"output":0.3,"cache_read":0.01},"canonical_model_id":"xiaomi/mimo-v2-flash"},"doubao-1.5-pro-32k":{"id":"doubao-1.5-pro-32k","name":"Doubao 1.5 Pro 32k","description":"Flagship model for demanding analysis, coding, and production agent workflows","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":12000},"status":"deprecated","cost":{"input":0.11594203,"output":0.28985507}},"deepseek-v3":{"id":"deepseek-v3","name":"DeepSeek-V3","description":"Open DeepSeek MoE chat model for coding, math, and general reasoning","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2024-12-26","last_updated":"2024-12-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16000},"status":"deprecated","cost":{"input":0.28985507,"output":1.15942029},"canonical_model_id":"deepseek/deepseek-v3"},"gemini-2.5-flash-lite":{"id":"gemini-2.5-flash-lite","name":"Gemini 2.5 Flash Lite","description":"Lean Gemini 2.5 lane for cheap multimodal traffic and quick agents","family":"gemini-flash-lite","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":64000},"status":"deprecated","canonical_model_id":"google/gemini-2.5-flash-lite"},"doubao-seed-2.0-mini":{"id":"doubao-seed-2.0-mini","name":"Doubao Seed 2.0 Mini","description":"Lightweight ByteDance Seed 2.0 model for low-latency multimodal reasoning and high-volume tasks","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000},"cost":{"input":0.02898551,"output":0.28985507,"cache_read":0.0057971,"tiers":[{"input":0.05797101,"output":0.57971014,"cache_read":0.0115942,"tier":{"type":"context","size":32000}},{"input":0.11594203,"output":1.15942029,"cache_read":0.02318841,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-mini"},"claude-3.5-sonnet":{"id":"claude-3.5-sonnet","name":"Claude 3.5 Sonnet","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-04-30","release_date":"2024-10-22","last_updated":"2024-10-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8192},"status":"deprecated","canonical_model_id":"anthropic/claude-3-5-sonnet-20241022"},"qwen3-max-preview":{"id":"qwen3-max-preview","name":"Qwen3 Max Preview","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-05","last_updated":"2025-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":64000},"status":"deprecated","cost":{"input":0.86956522,"output":3.47826087,"tiers":[{"input":1.44927536,"output":5.79710145,"tier":{"type":"context","size":32000}},{"input":2.17391304,"output":8.69565217,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3-max-preview"},"kimi-k2":{"id":"kimi-k2","name":"Kimi K2","description":"Kimi model for long-context chat, coding, and agentic reasoning","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-12-31","release_date":"2025-07-11","last_updated":"2025-07-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"status":"deprecated","cost":{"input":0.57971014,"output":2.31884058},"canonical_model_id":"moonshotai/kimi-k2"},"doubao-seed-2.0-pro":{"id":"doubao-seed-2.0-pro","name":"Doubao Seed 2.0 Pro","description":"Flagship ByteDance Seed 2.0 model for complex multimodal reasoning and long-horizon agent workflows","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"status":"deprecated","cost":{"input":0.46376812,"output":2.31884058,"cache_read":0.09275362,"tiers":[{"input":0.69565217,"output":3.47826087,"cache_read":0.13913043,"tier":{"type":"context","size":32000}},{"input":1.39130435,"output":6.95652174,"cache_read":0.27826087,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-pro"},"doubao-seed-1.6":{"id":"doubao-seed-1.6","name":"Doubao-Seed 1.6","description":"ByteDance Seed model for long-context reasoning, instruction following, and tool-assisted tasks","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000},"status":"deprecated","cost":{"input":0.11594203,"output":1.15942029,"tiers":[{"input":0.17391304,"output":2.31884058,"tier":{"type":"context","size":32000}},{"input":0.34782609,"output":3.47826087,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-1-6"},"gemini-3.0-flash-preview":{"id":"gemini-3.0-flash-preview","name":"Gemini 3.0 Flash Preview","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"status":"deprecated","canonical_model_id":"google/gemini-3-flash-preview"},"qwen3-max":{"id":"qwen3-max","name":"Qwen3 Max","description":"Flagship Qwen3 model for coding agents, complex reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536},"status":"deprecated","cost":{"input":0.86956522,"output":3.47826087,"tiers":[{"input":1.44927536,"output":5.79710145,"tier":{"type":"context","size":32000}},{"input":2.17391304,"output":8.69565217,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3-max"},"doubao-1.5-thinking-pro":{"id":"doubao-1.5-thinking-pro","name":"Doubao 1.5 Thinking Pro","description":"Flagship model for demanding analysis, coding, and production agent workflows","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16000},"status":"deprecated","cost":{"input":0.57971014,"output":2.31884058}},"qwen-turbo":{"id":"qwen-turbo","name":"Qwen-Turbo","description":"Efficient Qwen model for fast chat, extraction, and high-volume workloads","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-11-01","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":4096},"status":"deprecated","cost":{"input":0.04347826,"output":0.08695652},"canonical_model_id":"alibaba/qwen-turbo"},"claude-4.1-opus":{"id":"claude-4.1-opus","name":"Claude 4.1 Opus","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"status":"deprecated","canonical_model_id":"anthropic/claude-opus-4-1"},"glm-4.5-air":{"id":"glm-4.5-air","name":"GLM 4.5 Air","description":"Lighter GLM-4.5 variant for fast coding assistance and cheaper agents","family":"glm-air","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":4096},"status":"deprecated","canonical_model_id":"zhipuai/glm-4.5-air"},"gemini-2.5-flash-image":{"id":"gemini-2.5-flash-image","type":"image","name":"Gemini 2.5 Flash Image","description":"Nano Banana image model for fast generation, edits, and character-consistent assets","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-26","last_updated":"2025-08-26","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":32768,"output":8192},"status":"deprecated","canonical_model_id":"google/gemini-2.5-flash-image"},"gemini-3.0-pro-preview":{"id":"gemini-3.0-pro-preview","name":"Gemini 3.0 Pro Preview","description":"Preview Gemini flagship for complex reasoning, coding, and rich multimodal prompts","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-11-18","last_updated":"2025-11-18","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"status":"deprecated","canonical_model_id":"google/gemini-3-pro-preview"},"qwen3-next-80b-a3b-instruct":{"id":"qwen3-next-80b-a3b-instruct","name":"Qwen3 Next 80B A3B Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"status":"deprecated","cost":{"input":0.14492754,"output":0.57971014},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-instruct"},"qwen3-32b":{"id":"qwen3-32b","name":"Qwen3 32B","description":"Dense open Qwen model for self-hosted chat, reasoning, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":40000,"output":4096},"status":"deprecated","cost":{"input":0.28985507,"output":1.15942029},"canonical_model_id":"alibaba/qwen3-32b"},"claude-3.7-sonnet":{"id":"claude-3.7-sonnet","name":"Claude 3.7 Sonnet","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10-31","release_date":"2025-02-19","last_updated":"2025-02-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":128000},"status":"deprecated","canonical_model_id":"anthropic/claude-3-7-sonnet-20250219"},"qwen3-235b-a22b":{"id":"qwen3-235b-a22b","name":"Qwen 3 235B A22B","description":"Large open Qwen MoE for multilingual reasoning, coding, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32000},"status":"deprecated","cost":{"input":0.28985507,"output":1.15942029},"canonical_model_id":"alibaba/qwen3-235b-a22b"},"kling-v2-6":{"id":"kling-v2-6","type":"video","name":"Kling-V2 6","description":"Video model for prompt-guided generation, editing, and motion workflows","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-01-13","last_updated":"2026-01-13","modalities":{"input":["text","image","video"],"output":["video"]},"open_weights":false,"limit":{"context":99999999,"output":99999999}},"qwen-max-2025-01-25":{"id":"qwen-max-2025-01-25","name":"Qwen2.5-Max-2025-01-25","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-04-03","last_updated":"2025-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"status":"deprecated","cost":{"input":0.34782609,"output":1.39130435},"canonical_model_id":"alibaba/qwen-max"},"claude-4.5-sonnet":{"id":"claude-4.5-sonnet","name":"Claude 4.5 Sonnet","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","canonical_model_id":"anthropic/claude-sonnet-4-5"},"doubao-seed-1.6-thinking":{"id":"doubao-seed-1.6-thinking","name":"Doubao-Seed 1.6 Thinking","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-08-15","last_updated":"2025-08-15","modalities":{"input":["image","text","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000},"status":"deprecated","cost":{"input":0.11594203,"output":1.15942029,"tiers":[{"input":0.17391304,"output":2.31884058,"tier":{"type":"context","size":32000}},{"input":0.34782609,"output":3.47826087,"tier":{"type":"context","size":128000}}]}},"meituan/longcat-flash-chat":{"id":"meituan/longcat-flash-chat","name":"Meituan/Longcat-Flash-Chat","description":"Efficient model for low-latency assistance, extraction, and routine automation","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-11-05","last_updated":"2025-11-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":131072},"status":"deprecated"},"meituan/longcat-flash-lite":{"id":"meituan/longcat-flash-lite","name":"Meituan/Longcat-Flash-Lite","description":"Efficient model for low-latency assistance, extraction, and routine automation","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-06","last_updated":"2026-02-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":320000},"status":"deprecated","cost":{"input":0,"output":0}},"x-ai/grok-4-fast":{"id":"x-ai/grok-4-fast","name":"x-AI/Grok-4-Fast","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-09-20","last_updated":"2025-09-20","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":2000000},"status":"deprecated"},"x-ai/grok-4.1-fast-reasoning":{"id":"x-ai/grok-4.1-fast-reasoning","name":"X-Ai/Grok 4.1 Fast Reasoning","description":"xAI's fast agentic tool-calling model with a 2M context window and built-in reasoning","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-11-19","last_updated":"2025-11-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":20000000,"output":2000000},"status":"deprecated","canonical_model_id":"xai/grok-4.1-fast-reasoning"},"x-ai/grok-4-fast-reasoning":{"id":"x-ai/grok-4-fast-reasoning","name":"X-Ai/Grok-4-Fast-Reasoning","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-18","last_updated":"2025-12-18","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":2000000},"status":"deprecated","canonical_model_id":"xai/grok-4-fast-reasoning"},"x-ai/grok-4.1-fast":{"id":"x-ai/grok-4.1-fast","name":"x-AI/Grok-4.1-Fast","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-11-20","last_updated":"2025-11-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":2000000},"status":"deprecated"},"x-ai/grok-4.1-fast-non-reasoning":{"id":"x-ai/grok-4.1-fast-non-reasoning","name":"X-Ai/Grok 4.1 Fast Non Reasoning","description":"xAI's fast agentic tool-calling model with a 2M context window; non-reasoning variant for low-latency responses","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-11-19","last_updated":"2025-11-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":2000000},"status":"deprecated","canonical_model_id":"xai/grok-4.1-fast"},"x-ai/grok-code-fast-1":{"id":"x-ai/grok-code-fast-1","name":"x-AI/Grok-Code-Fast 1","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-09-02","last_updated":"2025-09-02","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":10000},"status":"deprecated","canonical_model_id":"xai/grok-code-fast-1"},"x-ai/grok-4-fast-non-reasoning":{"id":"x-ai/grok-4-fast-non-reasoning","name":"X-Ai/Grok-4-Fast-Non-Reasoning","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-18","last_updated":"2025-12-18","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":2000000},"status":"deprecated","canonical_model_id":"xai/grok-4-fast-non-reasoning"},"deepseek/deepseek-v3.2-251201":{"id":"deepseek/deepseek-v3.2-251201","name":"Deepseek/DeepSeek-V3.2","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes, sparse attention, and tool-use","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32000},"status":"deprecated","cost":{"input":0.28985507,"output":0.43478261,"cache_read":0.02898551},"canonical_model_id":"deepseek/deepseek-v3.2"},"deepseek/deepseek-v3.2-exp-thinking":{"id":"deepseek/deepseek-v3.2-exp-thinking","name":"DeepSeek/DeepSeek-V3.2-Exp-Thinking","description":"DeepSeek chat model for instruction following, coding, and analysis","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32000},"status":"deprecated","cost":{"input":0.28985507,"output":0.43478261}},"deepseek/deepseek-v3.2-exp":{"id":"deepseek/deepseek-v3.2-exp","name":"DeepSeek/DeepSeek-V3.2-Exp","description":"DeepSeek chat model for instruction following, coding, and analysis","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32000},"status":"deprecated","cost":{"input":0.28985507,"output":0.43478261}},"deepseek/deepseek-math-v2":{"id":"deepseek/deepseek-math-v2","name":"Deepseek/Deepseek-Math-V2","description":"DeepSeek chat model for instruction following, coding, and analysis","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-12-04","last_updated":"2025-12-04","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":160000,"output":160000},"status":"deprecated"},"deepseek/deepseek-v3.1-terminus":{"id":"deepseek/deepseek-v3.1-terminus","name":"DeepSeek/DeepSeek-V3.1-Terminus","description":"DeepSeek chat model for instruction following, coding, and analysis","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-09-22","last_updated":"2025-09-22","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32000},"status":"deprecated","cost":{"input":0.57971014,"output":1.73913043}},"deepseek/deepseek-v3.1-terminus-thinking":{"id":"deepseek/deepseek-v3.1-terminus-thinking","name":"DeepSeek/DeepSeek-V3.1-Terminus-Thinking","description":"DeepSeek chat model for instruction following, coding, and analysis","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-09-22","last_updated":"2025-09-22","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32000},"status":"deprecated","cost":{"input":0.57971014,"output":1.73913043}},"moonshotai/kimi-k2-0905":{"id":"moonshotai/kimi-k2-0905","name":"Kimi K2 0905","description":"September 2025 Kimi K2 instruction update with a 256K context and improved agentic coding","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-09-05","last_updated":"2025-09-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":100000},"status":"deprecated","canonical_model_id":"moonshotai/kimi-k2-0905"},"moonshotai/kimi-k2.5":{"id":"moonshotai/kimi-k2.5","name":"Moonshotai/Kimi-K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"status":"deprecated","cost":{"input":0.57971014,"output":3.04347826},"canonical_model_id":"moonshotai/kimi-k2.5"},"moonshotai/kimi-k2-thinking":{"id":"moonshotai/kimi-k2-thinking","name":"Kimi K2 Thinking","description":"Thinking Kimi model for slower research passes, planning, and hard technical questions","family":"kimi-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-11-06","last_updated":"2025-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":100000},"status":"deprecated","cost":{"input":0.57971014,"output":2.31884058},"canonical_model_id":"moonshotai/kimi-k2-thinking"},"openai/gpt-5.2":{"id":"openai/gpt-5.2","name":"OpenAI/GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","canonical_model_id":"openai/gpt-5.2"},"openai/gpt-5":{"id":"openai/gpt-5","name":"OpenAI/GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","canonical_model_id":"openai/gpt-5"},"minimax/minimax-m2.1":{"id":"minimax/minimax-m2.1","name":"Minimax/Minimax-M2.1","description":"Earlier MiniMax agent model for practical coding and productivity tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":128000},"status":"deprecated","cost":{"input":0.30434783,"output":1.2173913},"canonical_model_id":"minimax/MiniMax-M2.1"},"minimax/minimax-m2.5-highspeed":{"id":"minimax/minimax-m2.5-highspeed","name":"Minimax/Minimax-M2.5 Highspeed","description":"High-speed MiniMax model for low-latency coding and agent workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-13","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":128000},"status":"deprecated","cost":{"input":0.60869565,"output":2.43478261},"canonical_model_id":"minimax/MiniMax-M2.5-highspeed"},"minimax/minimax-m2.5":{"id":"minimax/minimax-m2.5","name":"Minimax/Minimax-M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":128000},"cost":{"input":0.30434783,"output":1.2173913},"canonical_model_id":"minimax/MiniMax-M2.5"},"minimax/minimax-m2":{"id":"minimax/minimax-m2","name":"Minimax/Minimax-M2","description":"Efficient open MiniMax model built for coding agents and tool-heavy workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-27","last_updated":"2025-10-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"status":"deprecated","cost":{"input":0.30434783,"output":1.2173913},"canonical_model_id":"minimax/MiniMax-M2"},"stepfun/step-3.5-flash":{"id":"stepfun/step-3.5-flash","name":"Stepfun/Step-3.5 Flash","description":"StepFun flash lane for quick multimodal reasoning and coding assistance","family":"step","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-29","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":64000,"input":256000,"output":4096},"status":"deprecated","canonical_model_id":"stepfun/step-3.5-flash"},"z-ai/autoglm-phone-9b":{"id":"z-ai/autoglm-phone-9b","name":"Z-Ai/Autoglm Phone 9b","description":"GLM vision model for visual reasoning, documents, and multimodal agents","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":12800,"output":4096},"status":"deprecated"},"z-ai/glm-4.7":{"id":"z-ai/glm-4.7","name":"Z-Ai/GLM 4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":200000},"status":"deprecated","cost":{"input":0.45913043,"output":1.81565217},"canonical_model_id":"zhipuai/glm-4.7"},"z-ai/glm-4.6":{"id":"z-ai/glm-4.6","name":"Z-AI/GLM 4.6","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":200000},"status":"deprecated","cost":{"input":1.04347826,"output":1.82608696},"canonical_model_id":"zhipuai/glm-4.6"},"z-ai/glm-5":{"id":"z-ai/glm-5","name":"Z-Ai/GLM 5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.57971014,"output":2.60869565,"tiers":[{"input":0.86956522,"output":3.1884058,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-5"},"stepfun-ai/gelab-zero-4b-preview":{"id":"stepfun-ai/gelab-zero-4b-preview","name":"Stepfun-Ai/Gelab Zero 4b Preview","description":"StepFun flash model for efficient multimodal reasoning, coding, and tool use","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":4096},"status":"deprecated"}}},"amazon-bedrock":{"id":"amazon-bedrock","env":["AWS_ACCESS_KEY_ID","AWS_SECRET_ACCESS_KEY","AWS_REGION","AWS_BEARER_TOKEN_BEDROCK"],"npm":"@ai-sdk/amazon-bedrock","name":"Amazon Bedrock","doc":"https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html","models":{"global.anthropic.claude-sonnet-4-20250514-v1:0":{"id":"global.anthropic.claude-sonnet-4-20250514-v1:0","name":"Claude Sonnet 4 (Global)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-20250514"},"global.anthropic.claude-sonnet-5":{"id":"global.anthropic.claude-sonnet-5","name":"Claude Sonnet 5 (Global)","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"global.amazon.nova-2-lite-v1:0":{"id":"global.amazon.nova-2-lite-v1:0","name":"Nova 2 Lite (Global)","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"nova","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-10","release_date":"2025-12-02","last_updated":"2025-12-01","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65535},"cost":{"input":0.3,"output":2.5,"cache_read":0.075,"cache_write":0.3},"canonical_model_id":"amazon/nova-2-lite"},"us.xai.grok-4.7":{"id":"us.xai.grok-4.7","name":"Grok 4.7 (US)","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2.2,"output":6.6,"cache_read":0.55},"canonical_model_id":"xai/grok-4.7"},"jp.anthropic.claude-haiku-4-5-20251001-v1:0":{"id":"jp.anthropic.claude-haiku-4-5-20251001-v1:0","name":"Claude Haiku 4.5 (JP)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1.1,"output":5.5,"cache_read":0.11,"cache_write":1.375},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"eu.anthropic.claude-haiku-4-5-20251001-v1:0":{"id":"eu.anthropic.claude-haiku-4-5-20251001-v1:0","name":"Claude Haiku 4.5 (EU)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1.1,"output":5.5,"cache_read":0.11,"cache_write":1.375},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"anthropic.claude-opus-4-1-20250805-v1:0":{"id":"anthropic.claude-opus-4-1-20250805-v1:0","name":"Claude Opus 4.1","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"status":"deprecated","cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-1-20250805"},"global.openai.gpt-5.6-luna":{"id":"global.openai.gpt-5.6-luna","name":"GPT-5.6 Luna (Global)","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"global.xai.grok-4.7":{"id":"global.xai.grok-4.7","name":"Grok 4.7 (Global)","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.7"},"deepseek.r1-v1:0":{"id":"deepseek.r1-v1:0","name":"DeepSeek-R1","description":"Classic open reasoning model for transparent math, coding, and deliberate problem solving","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"knowledge":"2024-07","release_date":"2025-01-20","last_updated":"2025-05-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"status":"deprecated","cost":{"input":1.35,"output":5.4},"canonical_model_id":"deepseek/deepseek-r1"},"us.meta.llama4-maverick-17b-instruct-v1:0":{"id":"us.meta.llama4-maverick-17b-instruct-v1:0","name":"Llama 4 Maverick 17B Instruct (US)","description":"Open multimodal Llama for strong reasoning with efficient everyday serving","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":8192},"status":"deprecated","cost":{"input":0.24,"output":0.97},"canonical_model_id":"meta/llama-4-maverick-17b-instruct"},"jp.anthropic.claude-haiku-5-5":{"id":"jp.anthropic.claude-haiku-5-5","name":"Claude Haiku 5.5 (JP)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.11,"output":0.55,"cache_read":0.011,"cache_write":0.1375,"tiers":[{"input":0.55,"output":2.75,"cache_read":0.055,"cache_write":0.6875,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"us.meta.llama4-scout-17b-instruct-v1:0":{"id":"us.meta.llama4-scout-17b-instruct-v1:0","name":"Llama 4 Scout 17B Instruct (US)","description":"Open Llama with long-context vision for efficient multimodal agents","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":10000000,"output":8192},"status":"deprecated","cost":{"input":0.17,"output":0.66},"canonical_model_id":"meta/llama-4-scout-17b-instruct"},"openai.gpt-6.1-terra":{"id":"openai.gpt-6.1-terra","name":"GPT-6.1 Terra","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/amazon-bedrock/mantle","api":"https://bedrock-mantle.${AWS_REGION}.api.aws/openai/v1","shape":"responses"},"cost":{"input":1.1,"output":5.5,"cache_read":0.055,"cache_write":1.375,"tiers":[{"input":2.2,"output":8.25,"cache_read":0.11,"cache_write":2.75,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":2.2,"output":8.25,"cache_read":0.11,"cache_write":2.75}},"canonical_model_id":"openai/gpt-6.1-terra"},"qwen.qwen3-vl-235b-a22b":{"id":"qwen.qwen3-vl-235b-a22b","name":"Qwen3 VL 235B A22B Instruct","description":"Qwen vision-language instruct model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-09-23","last_updated":"2025-11-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262000},"cost":{"input":0.53,"output":2.66},"canonical_model_id":"alibaba/qwen3-vl-235b-a22b-instruct"},"amazon.nova-pro-v1:0":{"id":"amazon.nova-pro-v1:0","name":"Nova Pro","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"nova-pro","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":10000},"cost":{"input":0.8,"output":3.2,"cache_read":0.2,"cache_write":0.8},"canonical_model_id":"amazon/nova-pro"},"anthropic.claude-opus-4-7":{"id":"anthropic.claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"us.xai.grok-4.6":{"id":"us.xai.grok-4.6","name":"Grok 4.6 (US)","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2.2,"output":6.6,"cache_read":0.55},"canonical_model_id":"xai/grok-4.6"},"eu.anthropic.claude-haiku-5-5":{"id":"eu.anthropic.claude-haiku-5-5","name":"Claude Haiku 5.5 (EU)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.11,"output":0.55,"cache_read":0.011,"cache_write":0.1375,"tiers":[{"input":0.55,"output":2.75,"cache_read":0.055,"cache_write":0.6875,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"eu.anthropic.claude-opus-5-5":{"id":"eu.anthropic.claude-opus-5-5","name":"Claude Opus 5.5 (EU)","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4.4,"output":22,"cache_read":0.22,"cache_write":5.5},"canonical_model_id":"anthropic/claude-opus-5-5"},"openai.gpt-5.4":{"id":"openai.gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-06-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/amazon-bedrock/mantle","api":"https://bedrock-mantle.${AWS_REGION}.api.aws/openai/v1","shape":"responses"},"cost":{"input":2.75,"output":16.5,"cache_read":0.275},"canonical_model_id":"openai/gpt-5.4"},"in.anthropic.claude-haiku-4-5-20251001-v1:0":{"id":"in.anthropic.claude-haiku-4-5-20251001-v1:0","name":"Claude Haiku 4.5 (India)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1.1,"output":5.5,"cache_read":0.11,"cache_write":1.375},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"global.anthropic.claude-fable-5-1":{"id":"global.anthropic.claude-fable-5-1","name":"Claude Fable 5.1 (Global)","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"qwen.qwen3-coder-next":{"id":"qwen.qwen3-coder-next","name":"Qwen3 Coder Next","description":"Open-weight Qwen coding model for agents, repository edits, and multi-turn tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-02-03","last_updated":"2026-02-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.5,"output":1.2},"canonical_model_id":"alibaba/qwen3-coder-next"},"eu.anthropic.claude-opus-4-8":{"id":"eu.anthropic.claude-opus-4-8","name":"Claude Opus 4.8 (EU)","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-4-8"},"us.anthropic.claude-opus-4-8":{"id":"us.anthropic.claude-opus-4-8","name":"Claude Opus 4.8 (US)","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-4-8"},"zai.glm-4.7-flash":{"id":"zai.glm-4.7-flash","name":"GLM-4.7-Flash","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"status":"deprecated","cost":{"input":0.07,"output":0.4},"canonical_model_id":"zhipuai/glm-4.7-flash"},"meta.llama4-scout-17b-instruct-v1:0":{"id":"meta.llama4-scout-17b-instruct-v1:0","name":"Llama 4 Scout 17B Instruct","description":"Open Llama with long-context vision for efficient multimodal agents","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":10000000,"output":8192},"status":"deprecated","cost":{"input":0.17,"output":0.66},"canonical_model_id":"meta/llama-4-scout-17b-instruct"},"openai.gpt-5.5":{"id":"openai.gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-06-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/amazon-bedrock/mantle","api":"https://bedrock-mantle.${AWS_REGION}.api.aws/openai/v1","shape":"responses"},"cost":{"input":5.5,"output":33,"cache_read":0.55},"canonical_model_id":"openai/gpt-5.5"},"global.anthropic.claude-opus-4-6-v1":{"id":"global.anthropic.claude-opus-4-6-v1","name":"Claude Opus 4.6 (Global)","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"openai.gpt-oss-120b":{"id":"openai.gpt-oss-120b","name":"gpt-oss-120b","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"provider":{"npm":"@ai-sdk/amazon-bedrock/mantle","api":"https://bedrock-mantle.${AWS_REGION}.api.aws/v1","shape":"responses"},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"openai/gpt-oss-120b"},"us.amazon.nova-premier-v1:0":{"id":"us.amazon.nova-premier-v1:0","name":"Nova Premier (US)","description":"Multimodal model for complex analysis, long-context understanding, tool use, and model distillation","family":"nova","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10","release_date":"2025-04-30","last_updated":"2025-04-30","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":10000},"status":"deprecated","cost":{"input":2.5,"output":12.5,"cache_read":0.625,"cache_write":2.5},"canonical_model_id":"amazon/nova-premier"},"nvidia.nemotron-super-3-120b":{"id":"nvidia.nemotron-super-3-120b","name":"NVIDIA Nemotron 3 Super 120B A12B","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0.15,"output":0.65},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"},"openai.gpt-oss-20b-1:0":{"id":"openai.gpt-oss-20b-1:0","name":"gpt-oss-20b","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":128000},"cost":{"input":0.07,"output":0.3},"canonical_model_id":"openai/gpt-oss-20b"},"eu.anthropic.claude-opus-4-7":{"id":"eu.anthropic.claude-opus-4-7","name":"Claude Opus 4.7 (EU)","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-4-7"},"au.anthropic.claude-sonnet-5-5":{"id":"au.anthropic.claude-sonnet-5-5","name":"Claude Sonnet 5.5 (AU)","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2.2,"output":11,"cache_read":0.11,"cache_write":2.75},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"openai.gpt-6-astra":{"id":"openai.gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"ultrafast":{"cost":{"input":66,"output":330,"cache_read":6.6,"cache_write":82.5},"provider":{"body":{"service_tier":"ultrafast"}}}}},"provider":{"npm":"@ai-sdk/amazon-bedrock/mantle","api":"https://bedrock-mantle.${AWS_REGION}.api.aws/openai/v1","shape":"responses"},"cost":{"input":11,"output":55,"cache_read":1.1,"cache_write":13.75,"tiers":[{"input":22,"output":82.5,"cache_read":2.2,"cache_write":27.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":22,"output":82.5,"cache_read":2.2,"cache_write":27.5}},"canonical_model_id":"openai/gpt-6-astra"},"au.anthropic.claude-opus-4-8":{"id":"au.anthropic.claude-opus-4-8","name":"Claude Opus 4.8 (AU)","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-4-8"},"jp.anthropic.claude-sonnet-4-6":{"id":"jp.anthropic.claude-sonnet-4-6","name":"Claude Sonnet 4.6 (JP)","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":3.3,"output":16.5,"cache_read":0.33,"cache_write":4.125},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"us.mistral.pixtral-large-2502-v1:0":{"id":"us.mistral.pixtral-large-2502-v1:0","name":"Pixtral Large (25.02) (US)","description":"Mistral vision-language model for image understanding and multimodal chat","family":"pixtral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-04-08","last_updated":"2025-04-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"cost":{"input":2,"output":6},"canonical_model_id":"mistral/pixtral-large-2502"},"openai.gpt-5.6-luna":{"id":"openai.gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/amazon-bedrock/mantle","api":"https://bedrock-mantle.${AWS_REGION}.api.aws/openai/v1","shape":"responses"},"cost":{"input":0.22,"output":1.32,"cache_read":0.022,"cache_write":0.275,"tiers":[{"input":0.44,"output":1.98,"cache_read":0.044,"cache_write":0.55,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.44,"output":1.98,"cache_read":0.044,"cache_write":0.55}},"canonical_model_id":"openai/gpt-5.6-luna"},"global.moonshotai.kimi-k3.1":{"id":"global.moonshotai.kimi-k3.1","name":"Kimi K3.1 Pro Highspeed (Global)","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"anthropic.claude-sonnet-4-5-20250929-v1:0":{"id":"anthropic.claude-sonnet-4-5-20250929-v1:0","name":"Claude Sonnet 4.5","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5-20250929"},"us.anthropic.claude-opus-4-7":{"id":"us.anthropic.claude-opus-4-7","name":"Claude Opus 4.7 (US)","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-4-7"},"openai.gpt-6-luna":{"id":"openai.gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/amazon-bedrock/mantle","api":"https://bedrock-mantle.${AWS_REGION}.api.aws/openai/v1","shape":"responses"},"cost":{"input":0.11,"output":0.55,"cache_read":0.011,"cache_write":0.1375,"tiers":[{"input":0.22,"output":0.825,"cache_read":0.022,"cache_write":0.275,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.22,"output":0.825,"cache_read":0.022,"cache_write":0.275}},"canonical_model_id":"openai/gpt-6-luna"},"xai.grok-4.6":{"id":"xai.grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"provider":{"npm":"@ai-sdk/amazon-bedrock/mantle","api":"https://bedrock-mantle.${AWS_REGION}.api.aws/openai/v1","shape":"responses"},"cost":{"input":2.2,"output":6.6,"cache_read":0.55},"canonical_model_id":"xai/grok-4.6"},"google.gemma-3-27b-it":{"id":"google.gemma-3-27b-it","name":"Gemma 3 27B IT","description":"Largest open Gemma 3 instruction model for multilingual text generation and visual understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"status":"deprecated","cost":{"input":0.23,"output":0.38},"canonical_model_id":"google/gemma-3-27b-it"},"global.openai.gpt-6-sol":{"id":"global.openai.gpt-6-sol","name":"GPT-6 Sol (Global)","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"mistral.devstral-2-123b":{"id":"mistral.devstral-2-123b","name":"Devstral 2 123B","description":"Mistral's coding-agent model for repository work, terminal tasks, and software fixes","family":"devstral","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-12","release_date":"2025-12-09","last_updated":"2025-12-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":8192},"status":"deprecated","cost":{"input":0.4,"output":2},"canonical_model_id":"mistral/devstral-2512"},"in.openai.gpt-5.6-luna":{"id":"in.openai.gpt-5.6-luna","name":"GPT-5.6 Luna (India)","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.22,"output":1.32,"cache_read":0.022,"cache_write":0.275,"tiers":[{"input":0.44,"output":1.98,"cache_read":0.044,"cache_write":0.55,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.44,"output":1.98,"cache_read":0.044,"cache_write":0.55}},"canonical_model_id":"openai/gpt-5.6-luna"},"mistral.ministral-3-8b-instruct":{"id":"mistral.ministral-3-8b-instruct","name":"Ministral 3 8B","description":"Compact open vision-language model for edge deployment, instruction following, and tool use","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"cost":{"input":0.15,"output":0.15},"canonical_model_id":"mistral/ministral-3-8b-instruct-2512"},"nvidia.nemotron-nano-12b-v2":{"id":"nvidia.nemotron-nano-12b-v2","name":"NVIDIA Nemotron Nano 12B v2 VL BF16","description":"Nemotron multimodal model for visual reasoning and agentic AI workflows","family":"nemotron","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-28","last_updated":"2025-10-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"status":"deprecated","cost":{"input":0.2,"output":0.6},"canonical_model_id":"nvidia/nemotron-nano-12b-v2-vl"},"global.anthropic.claude-opus-4-7":{"id":"global.anthropic.claude-opus-4-7","name":"Claude Opus 4.7 (Global)","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"openai.gpt-5.6-terra":{"id":"openai.gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/amazon-bedrock/mantle","api":"https://bedrock-mantle.${AWS_REGION}.api.aws/openai/v1","shape":"responses"},"cost":{"input":2.2,"output":13.2,"cache_read":0.22,"cache_write":2.75,"tiers":[{"input":4.4,"output":19.8,"cache_read":0.44,"cache_write":5.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4.4,"output":19.8,"cache_read":0.44,"cache_write":5.5}},"canonical_model_id":"openai/gpt-5.6-terra"},"qwen.qwen3-coder-480b-a35b-v1:0":{"id":"qwen.qwen3-coder-480b-a35b-v1:0","name":"Qwen3-Coder 480B-A35B Instruct","description":"Open Qwen coding heavyweight for repository reasoning and agentic engineering","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-23","last_updated":"2025-09-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":65536},"status":"deprecated","cost":{"input":0.45,"output":1.8},"canonical_model_id":"alibaba/qwen3-coder-480b-a35b-instruct"},"mistral.ministral-3-14b-instruct":{"id":"mistral.ministral-3-14b-instruct","name":"Ministral 14B 3.0","description":"Open vision-language model for efficient local deployment, instruction following, and tool use","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"cost":{"input":0.2,"output":0.2},"canonical_model_id":"mistral/ministral-3-14b-instruct-2512"},"minimax.minimax-m2.5":{"id":"minimax.minimax-m2.5","name":"MiniMax-M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"output":98304},"cost":{"input":0.3,"output":1.2},"canonical_model_id":"minimax/MiniMax-M2.5"},"global.moonshotai.kimi-k3":{"id":"global.moonshotai.kimi-k3","name":"Kimi K3 (Global)","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":128000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"moonshotai/kimi-k3"},"in.openai.gpt-5.6-terra":{"id":"in.openai.gpt-5.6-terra","name":"GPT-5.6 Terra (India)","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.2,"output":13.2,"cache_read":0.22,"cache_write":2.75,"tiers":[{"input":4.4,"output":19.8,"cache_read":0.44,"cache_write":5.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4.4,"output":19.8,"cache_read":0.44,"cache_write":5.5}},"canonical_model_id":"openai/gpt-5.6-terra"},"us.meta.llama3-3-70b-instruct-v1:0":{"id":"us.meta.llama3-3-70b-instruct-v1:0","name":"Llama 3.3 70B Instruct (US)","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"status":"deprecated","cost":{"input":0.72,"output":0.72},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"us.writer.palmyra-x5-v1:0":{"id":"us.writer.palmyra-x5-v1:0","name":"Palmyra X5 (US)","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"palmyra","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1040000,"input":1040000,"output":8192},"status":"deprecated","cost":{"input":0.6,"output":6},"canonical_model_id":"writer/palmyra-x5"},"qwen.qwen3-32b-v1:0":{"id":"qwen.qwen3-32b-v1:0","name":"Qwen3 32B","description":"Dense open Qwen model for self-hosted chat, reasoning, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-09-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":16384},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"alibaba/qwen3-32b"},"xai.grok-4.3":{"id":"xai.grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-06-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"provider":{"npm":"@ai-sdk/amazon-bedrock/mantle","api":"https://bedrock-mantle.${AWS_REGION}.api.aws/openai/v1","shape":"responses"},"cost":{"input":1.25,"output":2.5,"cache_read":0.2},"canonical_model_id":"xai/grok-4.3"},"mistral.ministral-3-3b-instruct":{"id":"mistral.ministral-3-3b-instruct","name":"Ministral 3 3B","description":"Compact open vision-language model for edge deployment, instruction following, and tool use","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":8192},"cost":{"input":0.1,"output":0.1},"canonical_model_id":"mistral/ministral-3-3b-instruct-2512"},"anthropic.claude-opus-4-6-v1":{"id":"anthropic.claude-opus-4-6-v1","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-4-6"},"in.anthropic.claude-sonnet-5":{"id":"in.anthropic.claude-sonnet-5","name":"Claude Sonnet 5 (India)","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2.2,"output":11,"cache_read":0.22,"cache_write":2.75},"canonical_model_id":"anthropic/claude-sonnet-5"},"global.openai.gpt-6-astra":{"id":"global.openai.gpt-6-astra","name":"GPT-6 Astra (Global)","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"ultrafast":{"cost":{"input":60,"output":300,"cache_read":6,"cache_write":75},"provider":{"body":{"additionalModelRequestFields":{"service_tier":"ultrafast"}}}}}},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"eu.anthropic.claude-sonnet-4-5-20250929-v1:0":{"id":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","name":"Claude Sonnet 4.5 (EU)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","cost":{"input":3.3,"output":16.5,"cache_read":0.33,"cache_write":4.125},"canonical_model_id":"anthropic/claude-sonnet-4-5-20250929"},"global.anthropic.claude-opus-5":{"id":"global.anthropic.claude-opus-5","name":"Claude Opus 5 (Global)","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"us.openai.gpt-5.6-terra":{"id":"us.openai.gpt-5.6-terra","name":"GPT-5.6 Terra (US)","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.2,"output":13.2,"cache_read":0.22,"cache_write":2.75,"tiers":[{"input":4.4,"output":19.8,"cache_read":0.44,"cache_write":5.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4.4,"output":19.8,"cache_read":0.44,"cache_write":5.5}},"canonical_model_id":"openai/gpt-5.6-terra"},"jp.amazon.nova-2-lite-v1:0":{"id":"jp.amazon.nova-2-lite-v1:0","name":"Nova 2 Lite (JP)","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"nova","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-10","release_date":"2025-12-02","last_updated":"2025-12-01","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65535},"cost":{"input":0.396,"output":3.311,"cache_read":0.099,"cache_write":0.396},"canonical_model_id":"amazon/nova-2-lite"},"meta.llama3-1-8b-instruct-v1:0":{"id":"meta.llama3-1-8b-instruct-v1:0","name":"Llama 3.1 8B Instruct","description":"Compact open Llama model for lightweight chat, drafting, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"status":"deprecated","cost":{"input":0.22,"output":0.22},"canonical_model_id":"meta/llama-3.1-8b-instruct"},"apac.amazon.nova-micro-v1:0":{"id":"apac.amazon.nova-micro-v1:0","name":"Nova Micro (APAC)","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-micro","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":10000},"cost":{"input":0.037,"output":0.148,"cache_read":0.00925,"cache_write":0.037},"canonical_model_id":"amazon/nova-micro"},"eu.anthropic.claude-fable-5":{"id":"eu.anthropic.claude-fable-5","name":"Claude Fable 5 (EU)","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":11,"output":55,"cache_read":1.1,"cache_write":13.75},"canonical_model_id":"anthropic/claude-fable-5"},"us.anthropic.claude-opus-5":{"id":"us.anthropic.claude-opus-5","name":"Claude Opus 5 (US)","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-5"},"us.anthropic.claude-sonnet-4-20250514-v1:0":{"id":"us.anthropic.claude-sonnet-4-20250514-v1:0","name":"Claude Sonnet 4 (US)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-20250514"},"us.amazon.nova-micro-v1:0":{"id":"us.amazon.nova-micro-v1:0","name":"Nova Micro (US)","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-micro","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":10000},"cost":{"input":0.035,"output":0.14,"cache_read":0.00875,"cache_write":0.035},"canonical_model_id":"amazon/nova-micro"},"jp.anthropic.claude-opus-5":{"id":"jp.anthropic.claude-opus-5","name":"Claude Opus 5 (JP)","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-5"},"anthropic.claude-sonnet-5":{"id":"anthropic.claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"anthropic.claude-opus-4-8":{"id":"anthropic.claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"au.anthropic.claude-opus-5":{"id":"au.anthropic.claude-opus-5","name":"Claude Opus 5 (AU)","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-5"},"us.anthropic.claude-fable-5-1":{"id":"us.anthropic.claude-fable-5-1","name":"Claude Fable 5.1 (US)","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":11,"output":55,"cache_read":0.275,"cache_write":13.75},"canonical_model_id":"anthropic/claude-fable-5-1"},"in.anthropic.claude-opus-5":{"id":"in.anthropic.claude-opus-5","name":"Claude Opus 5 (India)","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-5"},"global.xai.grok-4.6":{"id":"global.xai.grok-4.6","name":"Grok 4.6 (Global)","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.6"},"us.moonshotai.kimi-k3":{"id":"us.moonshotai.kimi-k3","name":"Kimi K3 (US)","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":128000},"cost":{"input":3.3,"output":16.5,"cache_read":0.33,"cache_write":4.125},"canonical_model_id":"moonshotai/kimi-k3"},"au.anthropic.claude-haiku-4-5-20251001-v1:0":{"id":"au.anthropic.claude-haiku-4-5-20251001-v1:0","name":"Claude Haiku 4.5 (AU)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1.1,"output":5.5,"cache_read":0.11,"cache_write":1.375},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"us.moonshotai.kimi-k3.1":{"id":"us.moonshotai.kimi-k3.1","name":"Kimi K3.1 Pro Highspeed (US)","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":4.4,"output":22,"cache_read":0.22,"cache_write":5.5},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"qwen.qwen3-coder-30b-a3b-v1:0":{"id":"qwen.qwen3-coder-30b-a3b-v1:0","name":"Qwen3-Coder 30B-A3B Instruct","description":"Smaller Qwen coder for efficient local agents and repo-level fixes","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-31","last_updated":"2025-09-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"status":"deprecated","cost":{"input":0.15,"output":0.6},"canonical_model_id":"alibaba/qwen3-coder-30b-a3b-instruct"},"au.anthropic.claude-sonnet-4-5-20250929-v1:0":{"id":"au.anthropic.claude-sonnet-4-5-20250929-v1:0","name":"Claude Sonnet 4.5 (AU)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","cost":{"input":3.3,"output":16.5,"cache_read":0.33,"cache_write":4.125},"canonical_model_id":"anthropic/claude-sonnet-4-5-20250929"},"nvidia.nemotron-nano-3-30b":{"id":"nvidia.nemotron-nano-3-30b","name":"NVIDIA Nemotron Nano 3 30B","description":"Small Nemotron 3 MoE for efficient coding, math, and long-context agents","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06-25","release_date":"2025-12-15","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":8192},"cost":{"input":0.06,"output":0.24},"canonical_model_id":"nvidia/nemotron-3-nano-30b-a3b"},"global.anthropic.claude-fable-5":{"id":"global.anthropic.claude-fable-5","name":"Claude Fable 5 (Global)","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"writer.palmyra-x5-v1:0":{"id":"writer.palmyra-x5-v1:0","name":"Palmyra X5","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"palmyra","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1040000,"input":1040000,"output":8192},"status":"deprecated","cost":{"input":0.6,"output":6},"canonical_model_id":"writer/palmyra-x5"},"eu.anthropic.claude-opus-4-5-20251101-v1:0":{"id":"eu.anthropic.claude-opus-4-5-20251101-v1:0","name":"Claude Opus 4.5 (EU)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-4-5-20251101"},"anthropic.claude-fable-5":{"id":"anthropic.claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"google.gemma-3-12b-it":{"id":"google.gemma-3-12b-it","name":"Gemma 3 12B IT","description":"Open multimodal Gemma instruction model for multilingual text generation and image understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"status":"deprecated","cost":{"input":0.09,"output":0.29},"canonical_model_id":"google/gemma-3-12b-it"},"us.anthropic.claude-sonnet-4-5-20250929-v1:0":{"id":"us.anthropic.claude-sonnet-4-5-20250929-v1:0","name":"Claude Sonnet 4.5 (US)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","cost":{"input":3.3,"output":16.5,"cache_read":0.33,"cache_write":4.125},"canonical_model_id":"anthropic/claude-sonnet-4-5-20250929"},"us.meta.llama3-1-8b-instruct-v1:0":{"id":"us.meta.llama3-1-8b-instruct-v1:0","name":"Llama 3.1 8B Instruct (US)","description":"Compact open Llama model for lightweight chat, drafting, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"status":"deprecated","cost":{"input":0.22,"output":0.22},"canonical_model_id":"meta/llama-3.1-8b-instruct"},"anthropic.claude-fable-5-1":{"id":"anthropic.claude-fable-5-1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"meta.llama4-maverick-17b-instruct-v1:0":{"id":"meta.llama4-maverick-17b-instruct-v1:0","name":"Llama 4 Maverick 17B Instruct","description":"Open multimodal Llama for strong reasoning with efficient everyday serving","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":8192},"status":"deprecated","cost":{"input":0.24,"output":0.97},"canonical_model_id":"meta/llama-4-maverick-17b-instruct"},"mistral.pixtral-large-2502-v1:0":{"id":"mistral.pixtral-large-2502-v1:0","name":"Pixtral Large (25.02)","description":"Mistral vision-language model for image understanding and multimodal chat","family":"pixtral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-04-08","last_updated":"2025-04-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"cost":{"input":2,"output":6},"canonical_model_id":"mistral/pixtral-large-2502"},"writer.palmyra-x4-v1:0":{"id":"writer.palmyra-x4-v1:0","name":"Palmyra X4","description":"Enterprise language model for workflow automation, coding, data analysis, and tool use","family":"palmyra","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2024-10-09","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":122880,"output":8192},"status":"deprecated","cost":{"input":2.5,"output":10},"canonical_model_id":"writer/palmyra-x4"},"us.zai.glm-5.3":{"id":"us.zai.glm-5.3","name":"GLM-5.3 (US)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":1.848,"output":5.808,"cache_read":0.3432,"cache_write":2.31},"canonical_model_id":"zhipuai/glm-5.3"},"au.anthropic.claude-opus-4-7":{"id":"au.anthropic.claude-opus-4-7","name":"Claude Opus 4.7 (AU)","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-4-7"},"openai.gpt-6-sol":{"id":"openai.gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/amazon-bedrock/mantle","api":"https://bedrock-mantle.${AWS_REGION}.api.aws/openai/v1","shape":"responses"},"cost":{"input":2.2,"output":11,"cache_read":0.22,"cache_write":2.75,"tiers":[{"input":4.4,"output":16.5,"cache_read":0.44,"cache_write":5.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4.4,"output":16.5,"cache_read":0.44,"cache_write":5.5}},"canonical_model_id":"openai/gpt-6-sol"},"us.anthropic.claude-haiku-4-5-20251001-v1:0":{"id":"us.anthropic.claude-haiku-4-5-20251001-v1:0","name":"Claude Haiku 4.5 (US)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1.1,"output":5.5,"cache_read":0.11,"cache_write":1.375},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"us.anthropic.claude-haiku-5-5":{"id":"us.anthropic.claude-haiku-5-5","name":"Claude Haiku 5.5 (US)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.11,"output":0.55,"cache_read":0.011,"cache_write":0.1375,"tiers":[{"input":0.55,"output":2.75,"cache_read":0.055,"cache_write":0.6875,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"apac.amazon.nova-lite-v1:0":{"id":"apac.amazon.nova-lite-v1:0","name":"Nova Lite (APAC)","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-lite","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":10000},"cost":{"input":0.063,"output":0.252,"cache_read":0.01575,"cache_write":0.063},"canonical_model_id":"amazon/nova-lite"},"openai.gpt-oss-20b":{"id":"openai.gpt-oss-20b","name":"gpt-oss-20b","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"provider":{"npm":"@ai-sdk/amazon-bedrock/mantle","api":"https://bedrock-mantle.${AWS_REGION}.api.aws/v1","shape":"responses"},"cost":{"input":0.07,"output":0.3},"canonical_model_id":"openai/gpt-oss-20b"},"global.openai.gpt-5.6-sol":{"id":"global.openai.gpt-5.6-sol","name":"GPT-5.6 Sol (Global)","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"meta.llama3-3-70b-instruct-v1:0":{"id":"meta.llama3-3-70b-instruct-v1:0","name":"Llama 3.3 70B Instruct","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"status":"deprecated","cost":{"input":0.72,"output":0.72},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"us.amazon.nova-lite-v1:0":{"id":"us.amazon.nova-lite-v1:0","name":"Nova Lite (US)","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-lite","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":10000},"cost":{"input":0.06,"output":0.24,"cache_read":0.015,"cache_write":0.06},"canonical_model_id":"amazon/nova-lite"},"minimax.minimax-m2.1":{"id":"minimax.minimax-m2.1","name":"MiniMax-M2.1","description":"Earlier MiniMax agent model for practical coding and productivity tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"output":131072},"status":"deprecated","cost":{"input":0.3,"output":1.2},"canonical_model_id":"minimax/MiniMax-M2.1"},"au.anthropic.claude-opus-5-5":{"id":"au.anthropic.claude-opus-5-5","name":"Claude Opus 5.5 (AU)","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4.4,"output":22,"cache_read":0.22,"cache_write":5.5},"canonical_model_id":"anthropic/claude-opus-5-5"},"anthropic.claude-opus-5":{"id":"anthropic.claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"us.openai.gpt-5.6-luna":{"id":"us.openai.gpt-5.6-luna","name":"GPT-5.6 Luna (US)","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.22,"output":1.32,"cache_read":0.022,"cache_write":0.275,"tiers":[{"input":0.44,"output":1.98,"cache_read":0.044,"cache_write":0.55,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.44,"output":1.98,"cache_read":0.044,"cache_write":0.55}},"canonical_model_id":"openai/gpt-5.6-luna"},"us.openai.gpt-6-luna":{"id":"us.openai.gpt-6-luna","name":"GPT-6 Luna (US)","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.11,"output":0.55,"cache_read":0.011,"cache_write":0.1375,"tiers":[{"input":0.22,"output":0.825,"cache_read":0.022,"cache_write":0.275,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.22,"output":0.825,"cache_read":0.022,"cache_write":0.275}},"canonical_model_id":"openai/gpt-6-luna"},"nvidia.nemotron-nano-9b-v2":{"id":"nvidia.nemotron-nano-9b-v2","name":"NVIDIA Nemotron Nano 9B v2","description":"Compact Nemotron model for efficient reasoning and deployable AI agents","family":"nemotron","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09","release_date":"2025-08-18","last_updated":"2025-08-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"status":"deprecated","cost":{"input":0.06,"output":0.23},"canonical_model_id":"nvidia/nemotron-nano-9b-v2"},"au.anthropic.claude-sonnet-5":{"id":"au.anthropic.claude-sonnet-5","name":"Claude Sonnet 5 (AU)","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2.2,"output":11,"cache_read":0.22,"cache_write":2.75},"canonical_model_id":"anthropic/claude-sonnet-5"},"moonshot.kimi-k2-thinking":{"id":"moonshot.kimi-k2-thinking","name":"Kimi K2 Thinking","description":"Thinking Kimi model for slower research passes, planning, and hard technical questions","family":"kimi-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-11-06","last_updated":"2025-12-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16000},"status":"deprecated","cost":{"input":0.6,"output":2.5},"canonical_model_id":"moonshotai/kimi-k2-thinking"},"google.gemma-3-4b-it":{"id":"google.gemma-3-4b-it","name":"Gemma 3 4B IT","description":"Open multimodal Gemma instruction model for efficient text generation and image understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":4096},"status":"deprecated","cost":{"input":0.04,"output":0.08},"canonical_model_id":"google/gemma-3-4b-it"},"au.anthropic.claude-sonnet-4-6":{"id":"au.anthropic.claude-sonnet-4-6","name":"AU Anthropic Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":3.3,"output":16.5,"cache_read":0.33,"cache_write":4.125},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"us.writer.palmyra-x4-v1:0":{"id":"us.writer.palmyra-x4-v1:0","name":"Palmyra X4 (US)","description":"Enterprise language model for workflow automation, coding, data analysis, and tool use","family":"palmyra","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2024-10-09","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":122880,"output":8192},"status":"deprecated","cost":{"input":2.5,"output":10},"canonical_model_id":"writer/palmyra-x4"},"eu.amazon.nova-micro-v1:0":{"id":"eu.amazon.nova-micro-v1:0","name":"Nova Micro (EU)","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-micro","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":10000},"cost":{"input":0.04,"output":0.16,"cache_read":0.01,"cache_write":0.04},"canonical_model_id":"amazon/nova-micro"},"meta.llama3-1-70b-instruct-v1:0":{"id":"meta.llama3-1-70b-instruct-v1:0","name":"Llama 3.1 70B Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"status":"deprecated","cost":{"input":0.72,"output":0.72},"canonical_model_id":"meta/llama-3.1-70b-instruct"},"global.anthropic.claude-opus-4-8":{"id":"global.anthropic.claude-opus-4-8","name":"Claude Opus 4.8 (Global)","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"apac.amazon.nova-pro-v1:0":{"id":"apac.amazon.nova-pro-v1:0","name":"Nova Pro (APAC)","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"nova-pro","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":10000},"cost":{"input":0.84,"output":3.36,"cache_read":0.21,"cache_write":0.84},"canonical_model_id":"amazon/nova-pro"},"mistral.voxtral-mini-3b-2507":{"id":"mistral.voxtral-mini-3b-2507","name":"Voxtral Mini 3B 2507","description":"Open audio-language model for speech transcription, audio understanding, and voice-driven tool use","family":"voxtral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-15","last_updated":"2025-07-15","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":4096},"status":"deprecated","cost":{"input":0.04,"output":0.04},"canonical_model_id":"mistral/voxtral-mini-3b-2507"},"us.anthropic.claude-opus-5-5":{"id":"us.anthropic.claude-opus-5-5","name":"Claude Opus 5.5 (US)","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4.4,"output":22,"cache_read":0.22,"cache_write":5.5},"canonical_model_id":"anthropic/claude-opus-5-5"},"us.anthropic.claude-fable-5":{"id":"us.anthropic.claude-fable-5","name":"Claude Fable 5 (US)","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":11,"output":55,"cache_read":1.1,"cache_write":13.75},"canonical_model_id":"anthropic/claude-fable-5"},"us.amazon.nova-pro-v1:0":{"id":"us.amazon.nova-pro-v1:0","name":"Nova Pro (US)","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"nova-pro","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":10000},"cost":{"input":0.8,"output":3.2,"cache_read":0.2,"cache_write":0.8},"canonical_model_id":"amazon/nova-pro"},"anthropic.claude-opus-4-5-20251101-v1:0":{"id":"anthropic.claude-opus-4-5-20251101-v1:0","name":"Claude Opus 4.5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5-20251101"},"anthropic.claude-haiku-5-5":{"id":"anthropic.claude-haiku-5-5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"mistral.voxtral-small-24b-2507":{"id":"mistral.voxtral-small-24b-2507","name":"Voxtral Small 24B 2507","description":"Open audio-language model for speech transcription, audio understanding, and voice-driven tool use","family":"voxtral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-15","last_updated":"2025-07-15","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":8192},"status":"deprecated","cost":{"input":0.1,"output":0.3},"canonical_model_id":"mistral/voxtral-small-24b-2507"},"global.openai.gpt-5.6-terra":{"id":"global.openai.gpt-5.6-terra","name":"GPT-5.6 Terra (Global)","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"eu.anthropic.claude-sonnet-4-20250514-v1:0":{"id":"eu.anthropic.claude-sonnet-4-20250514-v1:0","name":"Claude Sonnet 4 (EU)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-20250514"},"anthropic.claude-opus-5-5":{"id":"anthropic.claude-opus-5-5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"global.openai.gpt-6-luna":{"id":"global.openai.gpt-6-luna","name":"GPT-6 Luna (Global)","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"eu.anthropic.claude-sonnet-5-5":{"id":"eu.anthropic.claude-sonnet-5-5","name":"Claude Sonnet 5.5 (EU)","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2.2,"output":11,"cache_read":0.11,"cache_write":2.75},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"jp.anthropic.claude-opus-4-8":{"id":"jp.anthropic.claude-opus-4-8","name":"Claude Opus 4.8 (JP)","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-4-8"},"us-gov.openai.gpt-oss-120b-1:0":{"id":"us-gov.openai.gpt-oss-120b-1:0","name":"gpt-oss-120b (GovCloud)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.18,"output":0.72},"canonical_model_id":"openai/gpt-oss-120b"},"google.gemma-4-26b-a4b":{"id":"google.gemma-4-26b-a4b","name":"Gemma 4 26B A4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"provider":{"npm":"@ai-sdk/amazon-bedrock/mantle","api":"https://bedrock-mantle.${AWS_REGION}.api.aws/openai/v1","shape":"responses"},"cost":{"input":0.13,"output":0.4},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"us.openai.gpt-6-sol":{"id":"us.openai.gpt-6-sol","name":"GPT-6 Sol (US)","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.2,"output":11,"cache_read":0.22,"cache_write":2.75,"tiers":[{"input":4.4,"output":16.5,"cache_read":0.44,"cache_write":5.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4.4,"output":16.5,"cache_read":0.44,"cache_write":5.5}},"canonical_model_id":"openai/gpt-6-sol"},"global.openai.gpt-6.1-sol":{"id":"global.openai.gpt-6.1-sol","name":"GPT-6.1 Sol (Global)","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"ultrafast":{"cost":{"input":12,"output":60,"cache_read":0.6,"cache_write":15},"provider":{"body":{"additionalModelRequestFields":{"service_tier":"ultrafast"}}}}}},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-sol"},"us.anthropic.claude-opus-4-6-v1":{"id":"us.anthropic.claude-opus-4-6-v1","name":"Claude Opus 4.6 (US)","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-4-6"},"eu.anthropic.claude-sonnet-4-6":{"id":"eu.anthropic.claude-sonnet-4-6","name":"Claude Sonnet 4.6 (EU)","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":3.3,"output":16.5,"cache_read":0.33,"cache_write":4.125},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"us.openai.gpt-6-astra":{"id":"us.openai.gpt-6-astra","name":"GPT-6 Astra (US)","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"ultrafast":{"cost":{"input":66,"output":330,"cache_read":6.6,"cache_write":82.5},"provider":{"body":{"additionalModelRequestFields":{"service_tier":"ultrafast"}}}}}},"cost":{"input":11,"output":55,"cache_read":1.1,"cache_write":13.75,"tiers":[{"input":22,"output":82.5,"cache_read":2.2,"cache_write":27.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":22,"output":82.5,"cache_read":2.2,"cache_write":27.5}},"canonical_model_id":"openai/gpt-6-astra"},"anthropic.claude-sonnet-5-5":{"id":"anthropic.claude-sonnet-5-5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"global.anthropic.claude-haiku-4-5-20251001-v1:0":{"id":"global.anthropic.claude-haiku-4-5-20251001-v1:0","name":"Claude Haiku 4.5 (Global)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"global.anthropic.claude-sonnet-5-5":{"id":"global.anthropic.claude-sonnet-5-5","name":"Claude Sonnet 5.5 (Global)","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"global.anthropic.claude-sonnet-4-5-20250929-v1:0":{"id":"global.anthropic.claude-sonnet-4-5-20250929-v1:0","name":"Claude Sonnet 4.5 (Global)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5-20250929"},"qwen.qwen3-235b-a22b-2507-v1:0":{"id":"qwen.qwen3-235b-a22b-2507-v1:0","name":"Qwen3 235B-A22B Instruct 2507","description":"Updated large open Qwen3 MoE instruct model for multilingual chat, coding, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-21","last_updated":"2025-09-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0.22,"output":0.88},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"us.anthropic.claude-opus-4-1-20250805-v1:0":{"id":"us.anthropic.claude-opus-4-1-20250805-v1:0","name":"Claude Opus 4.1 (US)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"status":"deprecated","cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-1-20250805"},"deepseek.v3.2":{"id":"deepseek.v3.2","name":"DeepSeek V3.2","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes, sparse attention, and tool-use","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2026-02-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":81920},"cost":{"input":0.62,"output":1.85},"canonical_model_id":"deepseek/deepseek-v3.2"},"eu.amazon.nova-pro-v1:0":{"id":"eu.amazon.nova-pro-v1:0","name":"Nova Pro (EU)","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"nova-pro","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":10000},"cost":{"input":0.92,"output":3.68,"cache_read":0.23,"cache_write":0.92},"canonical_model_id":"amazon/nova-pro"},"eu.anthropic.claude-opus-5":{"id":"eu.anthropic.claude-opus-5","name":"Claude Opus 5 (EU)","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-5"},"jp.anthropic.claude-sonnet-5":{"id":"jp.anthropic.claude-sonnet-5","name":"Claude Sonnet 5 (JP)","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2.2,"output":11,"cache_read":0.22,"cache_write":2.75},"canonical_model_id":"anthropic/claude-sonnet-5"},"eu.amazon.nova-2-lite-v1:0":{"id":"eu.amazon.nova-2-lite-v1:0","name":"Nova 2 Lite (EU)","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"nova","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-10","release_date":"2025-12-02","last_updated":"2025-12-01","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65535},"cost":{"input":0.374,"output":3.157,"cache_read":0.0935,"cache_write":0.374},"canonical_model_id":"amazon/nova-2-lite"},"us.anthropic.claude-sonnet-4-6":{"id":"us.anthropic.claude-sonnet-4-6","name":"Claude Sonnet 4.6 (US)","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":3.3,"output":16.5,"cache_read":0.33,"cache_write":4.125},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"us-gov.openai.gpt-oss-20b-1:0":{"id":"us-gov.openai.gpt-oss-20b-1:0","name":"gpt-oss-20b (GovCloud)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.084,"output":0.36},"canonical_model_id":"openai/gpt-oss-20b"},"ca.amazon.nova-lite-v1:0":{"id":"ca.amazon.nova-lite-v1:0","name":"Nova Lite (CA)","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-lite","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":10000},"cost":{"input":0.064,"output":0.256,"cache_read":0.016,"cache_write":0.064},"canonical_model_id":"amazon/nova-lite"},"amazon.nova-lite-v1:0":{"id":"amazon.nova-lite-v1:0","name":"Nova Lite","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-lite","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":10000},"cost":{"input":0.06,"output":0.24,"cache_read":0.015,"cache_write":0.06},"canonical_model_id":"amazon/nova-lite"},"jp.anthropic.claude-opus-5-5":{"id":"jp.anthropic.claude-opus-5-5","name":"Claude Opus 5.5 (JP)","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4.4,"output":22,"cache_read":0.22,"cache_write":5.5},"canonical_model_id":"anthropic/claude-opus-5-5"},"jp.anthropic.claude-sonnet-4-5-20250929-v1:0":{"id":"jp.anthropic.claude-sonnet-4-5-20250929-v1:0","name":"Claude Sonnet 4.5 (JP)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","cost":{"input":3.3,"output":16.5,"cache_read":0.33,"cache_write":4.125},"canonical_model_id":"anthropic/claude-sonnet-4-5-20250929"},"eu.amazon.nova-lite-v1:0":{"id":"eu.amazon.nova-lite-v1:0","name":"Nova Lite (EU)","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-lite","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":10000},"cost":{"input":0.069,"output":0.276,"cache_read":0.01725,"cache_write":0.069},"canonical_model_id":"amazon/nova-lite"},"us.meta.llama3-1-70b-instruct-v1:0":{"id":"us.meta.llama3-1-70b-instruct-v1:0","name":"Llama 3.1 70B Instruct (US)","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"status":"deprecated","cost":{"input":0.72,"output":0.72},"canonical_model_id":"meta/llama-3.1-70b-instruct"},"au.anthropic.claude-opus-4-6-v1":{"id":"au.anthropic.claude-opus-4-6-v1","name":"AU Anthropic Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-4-6"},"moonshotai.kimi-k2.5":{"id":"moonshotai.kimi-k2.5","name":"Kimi K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-02-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0.6,"output":3},"canonical_model_id":"moonshotai/kimi-k2.5"},"us.amazon.nova-2-lite-v1:0":{"id":"us.amazon.nova-2-lite-v1:0","name":"Nova 2 Lite (US)","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"nova","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-10","release_date":"2025-12-02","last_updated":"2025-12-01","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65535},"cost":{"input":0.33,"output":2.75,"cache_read":0.0825,"cache_write":0.33},"canonical_model_id":"amazon/nova-2-lite"},"google.gemma-4-31b":{"id":"google.gemma-4-31b","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"provider":{"npm":"@ai-sdk/amazon-bedrock/mantle","api":"https://bedrock-mantle.${AWS_REGION}.api.aws/openai/v1","shape":"responses"},"cost":{"input":0.14,"output":0.4},"canonical_model_id":"google/gemma-4-31b-it"},"au.anthropic.claude-haiku-5-5":{"id":"au.anthropic.claude-haiku-5-5","name":"Claude Haiku 5.5 (AU)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.11,"output":0.55,"cache_read":0.011,"cache_write":0.1375,"tiers":[{"input":0.55,"output":2.75,"cache_read":0.055,"cache_write":0.6875,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"anthropic.claude-sonnet-4-6":{"id":"anthropic.claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":3.3,"output":16.5,"cache_read":0.33,"cache_write":4.125},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"deepseek.v3-v1:0":{"id":"deepseek.v3-v1:0","name":"DeepSeek-V3.1","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2025-08-21","last_updated":"2025-09-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":81920},"status":"deprecated","cost":{"input":0.58,"output":1.68},"canonical_model_id":"deepseek/deepseek-v3.1"},"us.anthropic.claude-opus-4-5-20251101-v1:0":{"id":"us.anthropic.claude-opus-4-5-20251101-v1:0","name":"Claude Opus 4.5 (US)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-4-5-20251101"},"us.anthropic.claude-sonnet-5-5":{"id":"us.anthropic.claude-sonnet-5-5","name":"Claude Sonnet 5.5 (US)","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2.2,"output":11,"cache_read":0.11,"cache_write":2.75},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"mistral.mistral-large-3-675b-instruct":{"id":"mistral.mistral-large-3-675b-instruct","name":"Mistral Large 3","description":"Mistral's largest general model for enterprise agents, coding, and multilingual reasoning","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-11","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":8192},"cost":{"input":0.5,"output":1.5},"canonical_model_id":"mistral/mistral-large-2512"},"openai.gpt-5.6-sol":{"id":"openai.gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/amazon-bedrock/mantle","api":"https://bedrock-mantle.${AWS_REGION}.api.aws/openai/v1","shape":"responses"},"cost":{"input":4.4,"output":22,"cache_read":0.44,"cache_write":5.5,"tiers":[{"input":8.8,"output":33,"cache_read":0.88,"cache_write":11,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8.8,"output":33,"cache_read":0.88,"cache_write":11}},"canonical_model_id":"openai/gpt-5.6-sol"},"jp.anthropic.claude-opus-4-7":{"id":"jp.anthropic.claude-opus-4-7","name":"Claude Opus 4.7 (JP)","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-4-7"},"global.anthropic.claude-opus-5-5":{"id":"global.anthropic.claude-opus-5-5","name":"Claude Opus 5.5 (Global)","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"us.anthropic.claude-sonnet-5":{"id":"us.anthropic.claude-sonnet-5","name":"Claude Sonnet 5 (US)","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2.2,"output":11,"cache_read":0.22,"cache_write":2.75},"canonical_model_id":"anthropic/claude-sonnet-5"},"openai.gpt-6.1-sol":{"id":"openai.gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"ultrafast":{"cost":{"input":13.2,"output":66,"cache_read":0.66,"cache_write":16.5},"provider":{"body":{"service_tier":"ultrafast"}}}}},"provider":{"npm":"@ai-sdk/amazon-bedrock/mantle","api":"https://bedrock-mantle.${AWS_REGION}.api.aws/openai/v1","shape":"responses"},"cost":{"input":2.2,"output":11,"cache_read":0.11,"cache_write":2.75,"tiers":[{"input":4.4,"output":16.5,"cache_read":0.22,"cache_write":5.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4.4,"output":16.5,"cache_read":0.22,"cache_write":5.5}},"canonical_model_id":"openai/gpt-6.1-sol"},"amazon.nova-2-lite-v1:0":{"id":"amazon.nova-2-lite-v1:0","name":"Nova 2 Lite","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"nova","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-10","release_date":"2025-12-02","last_updated":"2025-12-01","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65535},"cost":{"input":0.33,"output":2.75,"cache_read":0.0825,"cache_write":0.33},"canonical_model_id":"amazon/nova-2-lite"},"qwen.qwen3-next-80b-a3b":{"id":"qwen.qwen3-next-80b-a3b","name":"Qwen3-Next 80B-A3B Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-11","last_updated":"2025-11-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262000},"cost":{"input":0.15,"output":1.2},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-instruct"},"apac.anthropic.claude-sonnet-4-20250514-v1:0":{"id":"apac.anthropic.claude-sonnet-4-20250514-v1:0","name":"Claude Sonnet 4 (APAC)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-20250514"},"mistral.magistral-small-2509":{"id":"mistral.magistral-small-2509","name":"Magistral Small 1.2","description":"Open multimodal reasoning model for transparent analysis of text and images","family":"magistral","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-09-18","last_updated":"2025-09-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":40000},"cost":{"input":0.5,"output":1.5},"canonical_model_id":"mistral/magistral-small-2509"},"amazon.nova-micro-v1:0":{"id":"amazon.nova-micro-v1:0","name":"Nova Micro","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-micro","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":10000},"cost":{"input":0.035,"output":0.14,"cache_read":0.00875,"cache_write":0.035},"canonical_model_id":"amazon/nova-micro"},"us.openai.gpt-5.6-sol":{"id":"us.openai.gpt-5.6-sol","name":"GPT-5.6 Sol (US)","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4.4,"output":22,"cache_read":0.44,"cache_write":5.5,"tiers":[{"input":8.8,"output":33,"cache_read":0.88,"cache_write":11,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8.8,"output":33,"cache_read":0.88,"cache_write":11}},"canonical_model_id":"openai/gpt-5.6-sol"},"global.openai.gpt-6.1-terra":{"id":"global.openai.gpt-6.1-terra","name":"GPT-6.1 Terra (Global)","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25,"tiers":[{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5}},"canonical_model_id":"openai/gpt-6.1-terra"},"anthropic.claude-haiku-4-5-20251001-v1:0":{"id":"anthropic.claude-haiku-4-5-20251001-v1:0","name":"Claude Haiku 4.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"zai.glm-4.7":{"id":"zai.glm-4.7","name":"GLM-4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"status":"deprecated","cost":{"input":0.6,"output":2.2},"canonical_model_id":"zhipuai/glm-4.7"},"anthropic.claude-fable-5-2":{"id":"anthropic.claude-fable-5-2","name":"Claude Fable 5.2","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"global.anthropic.claude-fable-5-2":{"id":"global.anthropic.claude-fable-5-2","name":"Claude Fable 5.2 (Global)","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"eu.mistral.pixtral-large-2502-v1:0":{"id":"eu.mistral.pixtral-large-2502-v1:0","name":"Pixtral Large (25.02) (EU)","description":"Mistral vision-language model for image understanding and multimodal chat","family":"pixtral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-04-08","last_updated":"2025-04-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"cost":{"input":2,"output":6},"canonical_model_id":"mistral/pixtral-large-2502"},"us.openai.gpt-6.1-terra":{"id":"us.openai.gpt-6.1-terra","name":"GPT-6.1 Terra (US)","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1.1,"output":5.5,"cache_read":0.055,"cache_write":1.375,"tiers":[{"input":2.2,"output":8.25,"cache_read":0.11,"cache_write":2.75,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":2.2,"output":8.25,"cache_read":0.11,"cache_write":2.75}},"canonical_model_id":"openai/gpt-6.1-terra"},"global.anthropic.claude-haiku-5-5":{"id":"global.anthropic.claude-haiku-5-5","name":"Claude Haiku 5.5 (Global)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"eu.anthropic.claude-opus-4-6-v1":{"id":"eu.anthropic.claude-opus-4-6-v1","name":"Claude Opus 4.6 (EU)","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-4-6"},"us.deepseek.r1-v1:0":{"id":"us.deepseek.r1-v1:0","name":"DeepSeek-R1 (US)","description":"Classic open reasoning model for transparent math, coding, and deliberate problem solving","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-07","release_date":"2025-01-20","last_updated":"2025-05-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"status":"deprecated","cost":{"input":1.35,"output":5.4},"canonical_model_id":"deepseek/deepseek-r1"},"global.zai.glm-5.3":{"id":"global.zai.glm-5.3","name":"GLM-5.3 (Global)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":1.68,"output":5.28,"cache_read":0.312,"cache_write":2.1},"canonical_model_id":"zhipuai/glm-5.3"},"us.openai.gpt-6.1-sol":{"id":"us.openai.gpt-6.1-sol","name":"GPT-6.1 Sol (US)","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"ultrafast":{"cost":{"input":13.2,"output":66,"cache_read":0.66,"cache_write":16.5},"provider":{"body":{"additionalModelRequestFields":{"service_tier":"ultrafast"}}}}}},"cost":{"input":2.2,"output":11,"cache_read":0.11,"cache_write":2.75,"tiers":[{"input":4.4,"output":16.5,"cache_read":0.22,"cache_write":5.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4.4,"output":16.5,"cache_read":0.22,"cache_write":5.5}},"canonical_model_id":"openai/gpt-6.1-sol"},"us.anthropic.claude-fable-5-2":{"id":"us.anthropic.claude-fable-5-2","name":"Claude Fable 5.2 (US)","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":8.8,"output":44,"cache_read":0.22,"cache_write":11},"canonical_model_id":"anthropic/claude-fable-5-2"},"zai.glm-5":{"id":"zai.glm-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":1,"output":3.2},"canonical_model_id":"zhipuai/glm-5"},"eu.anthropic.claude-sonnet-5":{"id":"eu.anthropic.claude-sonnet-5","name":"Claude Sonnet 5 (EU)","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2.2,"output":11,"cache_read":0.22,"cache_write":2.75},"canonical_model_id":"anthropic/claude-sonnet-5"},"global.anthropic.claude-opus-4-5-20251101-v1:0":{"id":"global.anthropic.claude-opus-4-5-20251101-v1:0","name":"Claude Opus 4.5 (Global)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5-20251101"},"minimax.minimax-m2":{"id":"minimax.minimax-m2","name":"MiniMax-M2","description":"Efficient open MiniMax model built for coding agents and tool-heavy workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2025-10-27","last_updated":"2025-10-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204608,"output":128000},"status":"deprecated","cost":{"input":0.3,"output":1.2},"canonical_model_id":"minimax/MiniMax-M2"},"openai.gpt-oss-120b-1:0":{"id":"openai.gpt-oss-120b-1:0","name":"gpt-oss-120b","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":128000},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"openai/gpt-oss-120b"},"global.anthropic.claude-sonnet-4-6":{"id":"global.anthropic.claude-sonnet-4-6","name":"Claude Sonnet 4.6 (Global)","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"google.gemma-4-e2b":{"id":"google.gemma-4-e2b","name":"Gemma 4 E2B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"provider":{"npm":"@ai-sdk/amazon-bedrock/mantle","api":"https://bedrock-mantle.${AWS_REGION}.api.aws/openai/v1","shape":"responses"},"cost":{"input":0.04,"output":0.08},"canonical_model_id":"google/gemma-4-E2B-it"},"openai.gpt-oss-safeguard-120b":{"id":"openai.gpt-oss-safeguard-120b","name":"GPT OSS Safeguard 120B","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-29","last_updated":"2025-10-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"openai/gpt-oss-safeguard-120b"},"openai.gpt-oss-safeguard-20b":{"id":"openai.gpt-oss-safeguard-20b","name":"GPT OSS Safeguard 20B","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-29","last_updated":"2025-10-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.07,"output":0.2},"canonical_model_id":"openai/gpt-oss-safeguard-20b"}}},"vispark":{"id":"vispark","env":["VISPARK_LAB_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.lab.vispark.in/v1","name":"Vispark","doc":"https://lab.vispark.in/#vision","models":{"vispark/vision-small":{"id":"vispark/vision-small","name":"Vision Small","description":"Fast, low-cost multimodal model for understanding text, images, audio, video, and PDFs, with tool calling and a 1M-token context window.","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2024-05-15","last_updated":"2026-09","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":1.05,"output":3.16},"canonical_model_id":"vispark/vision-small"},"vispark/vision-medium":{"id":"vispark/vision-medium","name":"Vision Medium","description":"Balanced multimodal model pairing a 1M-token context window with deeper reasoning for analysis, content creation, and tool use across text, image, audio, video, and PDF inputs.","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2024-05-15","last_updated":"2026-09","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":4.21,"output":12.63},"canonical_model_id":"vispark/vision-medium"},"vispark/vision-large":{"id":"vispark/vision-large","name":"Vision Large","description":"Most capable Vision model for complex reasoning, detailed media analysis, and structured output over a 1M-token context window.","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2024-05-15","last_updated":"2026-09","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":7.37,"output":22.11},"canonical_model_id":"vispark/vision-large"}}},"snowflake-cortex":{"id":"snowflake-cortex","env":["SNOWFLAKE_ACCOUNT","SNOWFLAKE_CORTEX_PAT"],"npm":"@ai-sdk/openai-compatible","api":"https://${SNOWFLAKE_ACCOUNT}.snowflakecomputing.com/api/v2/cortex/v1","name":"Snowflake Cortex","doc":"https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-rest-api","models":{"claude-opus-4-5":{"id":"claude-opus-4-5","name":"Claude Opus 4.5 (latest)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"openai-gpt-5-nano":{"id":"openai-gpt-5-nano","name":"GPT-5 Nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":272000,"input":272000,"output":8192},"cost":{"input":0.06,"output":0.44,"cache_read":0.01},"canonical_model_id":"openai/gpt-5-nano"},"openai-gpt-5":{"id":"openai-gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":272000,"input":272000,"output":8192},"cost":{"input":1.25,"output":10,"cache_read":0.13},"canonical_model_id":"openai/gpt-5"},"openai-gpt-5.4":{"id":"openai-gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5}},"canonical_model_id":"openai/gpt-5.4"},"openai-gpt-5.5":{"id":"openai-gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"status":"beta","cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"claude-sonnet-5":{"id":"claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"openai-gpt-5-mini":{"id":"openai-gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":272000,"input":272000,"output":8192},"cost":{"input":0.25,"output":2,"cache_read":0.03},"canonical_model_id":"openai/gpt-5-mini"},"deepseek-r1":{"id":"deepseek-r1","name":"DeepSeek-R1","description":"Classic open reasoning model for transparent math, coding, and deliberate problem solving","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-07","release_date":"2025-01-20","last_updated":"2025-05-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"canonical_model_id":"deepseek/deepseek-r1"},"openai-gpt-4.1":{"id":"openai-gpt-4.1","name":"GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32000},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"claude-fable-5":{"id":"claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"status":"beta","cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"claude-opus-5":{"id":"claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"snowflake-llama3.3-70b":{"id":"snowflake-llama3.3-70b","name":"Llama-3.3-70B-Instruct","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"openai-gpt-5.6-terra":{"id":"openai-gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"openai-gpt-5.1":{"id":"openai-gpt-5.1","name":"GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":272000,"input":272000,"output":8192},"cost":{"input":1.25,"output":10,"cache_read":0.13},"canonical_model_id":"openai/gpt-5.1"},"claude-opus-4-6":{"id":"claude-opus-4-6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"openai-gpt-5.6-sol":{"id":"openai-gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"openai-gpt-5.6-luna":{"id":"openai-gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"claude-opus-4-8":{"id":"claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"mistral-large2":{"id":"mistral-large2","name":"Mistral Large 2407","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-03-31","release_date":"2024-07-24","last_updated":"2024-07-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":2,"output":6},"canonical_model_id":"mistral/mistral-large-2407"},"claude-sonnet-4-5":{"id":"claude-sonnet-4-5","name":"Claude Sonnet 4.5 (latest)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"openai-gpt-5.2":{"id":"openai-gpt-5.2","name":"GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.18},"canonical_model_id":"openai/gpt-5.2"},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"claude-opus-4-7":{"id":"claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"gemini-3.1-pro":{"id":"gemini-3.1-pro","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"status":"beta","canonical_model_id":"google/gemini-3.1-pro-preview"},"claude-haiku-4-5":{"id":"claude-haiku-4-5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"}}},"munito-eu":{"id":"munito-eu","env":["MUNITO_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.eu.munito.ai/inference/v1","name":"Munito AI (EU)","doc":"https://docs.munito.ai/regions","models":{"aleph-alpha/kolibri-1":{"id":"aleph-alpha/kolibri-1","name":"Kolibri 1","description":"Aleph Alpha's German and English mixture-of-experts reasoning model (78B total, 3.46B active) for chat, RAG and agents","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-06-18","release_date":"2026-10-03","last_updated":"2026-10-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":0.16,"output":0.56,"cache_read":0.094},"canonical_model_id":"aleph-alpha/kolibri-1"},"qwen/qwen3.8-27b":{"id":"qwen/qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.2,"output":2.7,"cache_read":0.11},"canonical_model_id":"alibaba/qwen3.8-27b"},"deepseek-ai/deepseek-v4-flash":{"id":"deepseek-ai/deepseek-v4-flash","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":0.11,"output":0.28,"cache_read":0.022},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"zai-org/glm-5.3-flash":{"id":"zai-org/glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"}}},"melious":{"id":"melious","env":["MELIOUS_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.melious.ai/v1","name":"Melious","doc":"https://melious.ai/docs/reference/models","models":{"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.669,"output":4.014,"cache_read":0.16725},"canonical_model_id":"moonshotai/kimi-k2.6"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":3.17775,"output":15.88875,"cache_read":0.79165},"canonical_model_id":"moonshotai/kimi-k3"},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.223,"output":1.115,"cache_read":0.01115},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.115,"output":3.345,"cache_read":0.223},"canonical_model_id":"zhipuai/glm-5.3"},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.61325,"output":3.28925,"cache_read":0.16725},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.1115,"output":0.446,"cache_read":0.0223},"canonical_model_id":"zhipuai/glm-5.3-flash"},"deepseek-v4-flash-0731":{"id":"deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.1115,"output":0.27875,"cache_read":0.0223},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepseek-v4.1-flash-1017":{"id":"deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.3345,"output":1.338,"cache_read":0.03345},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"}}},"togetherai":{"id":"togetherai","env":["TOGETHER_API_KEY"],"npm":"@ai-sdk/togetherai","name":"Together AI","doc":"https://docs.together.ai/docs/serverless-models","models":{"meta-models/Muse-Spark-Open-816B-A42B":{"id":"meta-models/Muse-Spark-Open-816B-A42B","name":"Muse Spark Open","description":"Muse Spark Open is an 816B total / 42B active open-weight multimodal reasoning model from Meta for coding and long-horizon agentic work, with 1M-token context.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-open"},"MiniMaxAI/MiniMax-M2.5":{"id":"MiniMaxAI/MiniMax-M2.5","name":"MiniMax-M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M2.5"},"MiniMaxAI/MiniMax-M2.7":{"id":"MiniMaxAI/MiniMax-M2.7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"output":131072},"status":"deprecated","cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M2.7"},"MiniMaxAI/MiniMax-M3":{"id":"MiniMaxAI/MiniMax-M3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":524288},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"},"deepseek-ai/DeepSeek-V3-1":{"id":"deepseek-ai/DeepSeek-V3-1","name":"DeepSeek V3.1","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"status":"deprecated","cost":{"input":0.6,"output":1.7},"canonical_model_id":"deepseek/deepseek-v3.1"},"deepseek-ai/DeepSeek-V4-Flash-0731":{"id":"deepseek-ai/DeepSeek-V4-Flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"status":"deprecated","cost":{"input":0.14,"output":0.28,"cache_read":0.03},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepseek-ai/DeepSeek-V3":{"id":"deepseek-ai/DeepSeek-V3","name":"DeepSeek-V3","description":"Open DeepSeek MoE chat model for coding, math, and general reasoning","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2024-12-26","last_updated":"2024-12-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"status":"deprecated","cost":{"input":1.25,"output":1.25},"canonical_model_id":"deepseek/deepseek-v3"},"deepseek-ai/DeepSeek-V4.1-Flash":{"id":"deepseek-ai/DeepSeek-V4.1-Flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek-ai/DeepSeek-V4-Pro-0813":{"id":"deepseek-ai/DeepSeek-V4-Pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":1.32,"output":3.96,"cache_read":0.13},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"deepseek-ai/DeepSeek-R1":{"id":"deepseek-ai/DeepSeek-R1","name":"DeepSeek-R1","description":"Classic open reasoning model for transparent math, coding, and deliberate problem solving","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"knowledge":"2024-07","release_date":"2025-01-20","last_updated":"2025-05-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163839,"output":163839},"status":"deprecated","cost":{"input":3,"output":7},"canonical_model_id":"deepseek/deepseek-r1"},"LiquidAI/LFM2-24B-A2B":{"id":"LiquidAI/LFM2-24B-A2B","name":"LFM2-24B-A2B","description":"Efficient open Liquid MoE instruct model for on-device chat and tool calling","family":"liquid","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-02-24","last_updated":"2026-02-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32768},"status":"deprecated","cost":{"input":0.03,"output":0.12},"canonical_model_id":"liquid/lfm2-24b-a2b"},"moonshotai/Kimi-K3":{"id":"moonshotai/Kimi-K3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"moonshotai/Kimi-K3.1-Pro":{"id":"moonshotai/Kimi-K3.1-Pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":2,"output":10,"cache_read":0.2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"openai/gpt-oss-120b"},"thinkingmachines/Inkling":{"id":"thinkingmachines/Inkling","name":"Inkling","description":"Multimodal MoE reasoning model (975B total, 41B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":131072},"cost":{"input":1,"output":4.05,"cache_read":0.17},"canonical_model_id":"thinkingmachines/inkling"},"reflection/Beam-1.0-501B-A23B":{"id":"reflection/Beam-1.0-501B-A23B","name":"Beam 1.0 501B A23B","description":"Sparse mixture-of-experts reasoning model with 23B active parameters for coding and agentic workflows","family":"beam","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-06-30","release_date":"2026-10-05","last_updated":"2026-10-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.4,"output":1.2,"cache_read":0.04},"canonical_model_id":"reflection/beam-1.0-501b-a23b"},"meta-llama/Llama-3.3-70B-Instruct-Turbo":{"id":"meta-llama/Llama-3.3-70B-Instruct-Turbo","name":"Llama 3.3 70B","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"status":"deprecated","cost":{"input":1.04,"output":1.04},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"Qwen/Qwen3.5-397B-A17B":{"id":"Qwen/Qwen3.5-397B-A17B","name":"Qwen3.5 397B A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":130000},"status":"deprecated","cost":{"input":0.6,"output":3.6,"cache_read":0.35},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"Qwen/Qwen3-Coder-Next-FP8":{"id":"Qwen/Qwen3-Coder-Next-FP8","name":"Qwen3 Coder Next FP8","description":"Open-weight Qwen coding model for agents, repository edits, and multi-turn tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-02-03","last_updated":"2026-02-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0.5,"output":1.2},"canonical_model_id":"alibaba/qwen3-coder-next"},"Qwen/Qwen3-235B-A22B-Instruct-2507-tput":{"id":"Qwen/Qwen3-235B-A22B-Instruct-2507-tput","name":"Qwen3 235B A22B Instruct 2507 FP8","description":"Updated large open Qwen3 MoE instruct model for multilingual chat, coding, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0.2,"output":0.6},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"Qwen/Qwen2.5-7B-Instruct-Turbo":{"id":"Qwen/Qwen2.5-7B-Instruct-Turbo","name":"Qwen 2.5 7B Instruct Turbo","description":"Small open Qwen2.5 instruction model for chat, structured output, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2024-09-19","last_updated":"2024-09-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32768},"status":"deprecated","cost":{"input":0.3,"output":0.3},"canonical_model_id":"alibaba/qwen2.5-7b-instruct"},"Qwen/Qwen3.6-Plus":{"id":"Qwen/Qwen3.6-Plus","name":"Qwen3.6 Plus","description":"Earlier Qwen multimodal workhorse for million-token agent and document tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.5,"output":3},"canonical_model_id":"alibaba/qwen3.6-plus"},"Qwen/Qwen3.7-Max":{"id":"Qwen/Qwen3.7-Max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2.5,"output":7.5,"cache_read":0.5},"canonical_model_id":"alibaba/qwen3.7-max"},"Qwen/Qwen3.5-9B":{"id":"Qwen/Qwen3.5-9B","name":"Qwen3.5 9B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.17,"output":0.25},"canonical_model_id":"alibaba/qwen3.5-9b"},"Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8":{"id":"Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8","name":"Qwen3 Coder 480B A35B Instruct","description":"Open Qwen coding heavyweight for repository reasoning and agentic engineering","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":2,"output":2},"canonical_model_id":"alibaba/qwen3-coder-480b-a35b-instruct"},"zai-org/GLM-5.3-Flash":{"id":"zai-org/GLM-5.3-Flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048575,"output":400000},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai-org/GLM-5.2":{"id":"zai-org/GLM-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048575,"output":164000},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"zai-org/GLM-5.3":{"id":"zai-org/GLM-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048575,"output":262144},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"zai-org/GLM-5":{"id":"zai-org/GLM-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"status":"deprecated","cost":{"input":1,"output":3.2},"canonical_model_id":"zhipuai/glm-5"},"zai-org/GLM-5.1":{"id":"zai-org/GLM-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"status":"deprecated","cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.1"},"nvidia/nemotron-3-ultra-550b-a55b":{"id":"nvidia/nemotron-3-ultra-550b-a55b","name":"Nemotron 3 Ultra 550B A55B","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":512300,"output":512300},"status":"deprecated","cost":{"input":0.6,"output":3.6,"cache_read":0.2},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"nvidia/NVIDIA-Nemotron-3.5-Super-VL":{"id":"nvidia/NVIDIA-Nemotron-3.5-Super-VL","name":"Nemotron 3.5 Super VL 120B A12B","description":"NVIDIA vision-language reasoning model for text, image, and video understanding and agentic tool use","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.15,"output":0.5,"cache_read":0.02},"canonical_model_id":"nvidia/nemotron-3.5-super-vl-120b-a12b"},"essentialai/Rnj-1-Instruct":{"id":"essentialai/Rnj-1-Instruct","name":"Rnj-1 Instruct","description":"Open 8B Essential AI model for code, STEM reasoning, and agentic tool use","family":"rnj","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-12-04","last_updated":"2025-12-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32768},"status":"deprecated","cost":{"input":0.15,"output":0.15},"canonical_model_id":"essentialai/rnj-1-instruct"}}},"vivgrid":{"id":"vivgrid","env":["VIVGRID_API_KEY"],"npm":"@ai-sdk/openai","api":"https://api.vivgrid.com/v1","name":"Vivgrid","doc":"https://docs.vivgrid.com/models","models":{"gpt-5.5":{"id":"gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"status":"deprecated","provider":{"npm":"@ai-sdk/openai-compatible"},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"claude-sonnet-5-5":{"id":"claude-sonnet-5-5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic"},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"claude-fable-5-1":{"id":"claude-fable-5-1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic"},"cost":{"input":10,"output":50,"cache_read":0.5,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"gemini-3.8-flash":{"id":"gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":128000},"provider":{"npm":"@ai-sdk/openai-compatible"},"cost":{"input":0.75,"output":3.75,"cache_read":0.15},"canonical_model_id":"google/gemini-3.8-flash"},"viv-fast":{"id":"viv-fast","name":"Viv Fast","description":"Fast coding model","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-09","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":256000},"cost":{"input":0.13,"output":0.4,"cache_read":0.05},"canonical_model_id":"vivgrid/viv-fast"},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"status":"deprecated","provider":{"npm":"@ai-sdk/openai-compatible"},"cost":{"input":1.2,"output":4.2,"cache_read":0.3},"canonical_model_id":"zhipuai/glm-5.2"},"gpt-5.2-codex":{"id":"gpt-5.2-codex","name":"GPT-5.2 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2-codex"},"gpt-5.4-mini":{"id":"gpt-5.4-mini","name":"GPT-5.4 Mini","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","provider":{"npm":"@ai-sdk/openai-compatible"},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"gpt-5.1-codex-max":{"id":"gpt-5.1-codex-max","name":"GPT-5.1 Codex Max","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1-codex-max"},"gpt-5.1-codex":{"id":"gpt-5.1-codex","name":"GPT-5.1 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1-codex"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"GPT 5.6 Sol","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"openai/gpt-5.6-sol"},"claude-sonnet-5":{"id":"claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic"},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"gpt-6.1-terra":{"id":"gpt-6.1-terra","name":"GPT-6.1 Terra","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1.1,"output":5.5,"cache_read":0.055,"cache_write":1.375,"tiers":[{"input":2.2,"output":8.25,"cache_read":0.11,"cache_write":2.75,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":2.2,"output":8.25,"cache_read":0.11,"cache_write":2.75}},"canonical_model_id":"openai/gpt-6.1-terra"},"gpt-6-luna":{"id":"gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"deepseek-v4-pro-0813":{"id":"deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"provider":{"npm":"@ai-sdk/openai-compatible"},"cost":{"input":1.35,"output":3,"reasoning":3,"cache_read":0.05},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"gemini-3.1-pro-preview":{"id":"gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","provider":{"npm":"@ai-sdk/openai-compatible"},"cost":{"input":3,"output":12,"cache_read":0.3,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"provider":{"npm":"@ai-sdk/openai-compatible"},"cost":{"input":0.31,"output":1.23,"cache_read":0.01},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"provider":{"npm":"@ai-sdk/openai-compatible"},"cost":{"input":1.74,"output":3.48,"cache_read":0.14},"canonical_model_id":"deepseek/deepseek-v4-pro"},"gpt-6-sol":{"id":"gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"provider":{"npm":"@ai-sdk/openai-compatible"},"cost":{"input":1.2,"output":4.2,"cache_read":0.3},"canonical_model_id":"zhipuai/glm-5.3"},"gpt-5.3-codex":{"id":"gpt-5.3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"claude-fable-5":{"id":"claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic"},"cost":{"input":10,"output":50,"cache_read":1.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"gpt-6-astra":{"id":"gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"gpt-5-mini":{"id":"gpt-5-mini","name":"GPT-5 Mini","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":272000,"output":128000},"status":"deprecated","provider":{"npm":"@ai-sdk/openai-compatible"},"cost":{"input":0.25,"output":2,"cache_read":0.03},"canonical_model_id":"openai/gpt-5-mini"},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"provider":{"npm":"@ai-sdk/openai-compatible"},"cost":{"input":0.44,"output":1.32,"reasoning":1.32,"cache_read":0.044},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"gemini-3.1-flash-lite-preview":{"id":"gemini-3.1-flash-lite-preview","name":"Gemini 3.1 Flash Lite Preview","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-03-03","last_updated":"2026-03-03","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","provider":{"npm":"@ai-sdk/openai-compatible"},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"cache_write":1},"canonical_model_id":"google/gemini-3.1-flash-lite-preview"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"provider":{"npm":"@ai-sdk/openai-compatible"},"cost":{"input":0.15,"output":0.5,"cache_read":0.04},"canonical_model_id":"zhipuai/glm-5.3-flash"},"claude-opus-5":{"id":"claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT 5.6 Luna","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1,"output":6,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"openai/gpt-5.6-luna"},"gpt-6.1-sol":{"id":"gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-sol"},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","provider":{"npm":"@ai-sdk/openai-compatible"},"cost":{"input":2.5,"output":15,"cache_read":0.25},"canonical_model_id":"openai/gpt-5.4"},"gpt-5.4-nano":{"id":"gpt-5.4-nano","name":"GPT-5.4 Nano","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","provider":{"npm":"@ai-sdk/openai-compatible"},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"deepseek-v3.2":{"id":"deepseek-v3.2","name":"DeepSeek-V3.2","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"status":"deprecated","provider":{"npm":"@ai-sdk/openai-compatible"},"cost":{"input":0.28,"output":0.42,"cache_read":0.03},"canonical_model_id":"deepseek/deepseek-v3.2"},"gpt-5.6-terra":{"id":"gpt-5.6-terra","name":"GPT 5.6 Terra","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25,"cache_write":3.125},"canonical_model_id":"openai/gpt-5.6-terra"},"claude-opus-5-5":{"id":"claude-opus-5-5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic"},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"claude-haiku-5-5":{"id":"claude-haiku-5-5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic"},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"gemini-3.7-flash":{"id":"gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"provider":{"npm":"@ai-sdk/openai-compatible"},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.7-flash"}}},"google-vertex":{"id":"google-vertex","env":["GOOGLE_VERTEX_PROJECT","GOOGLE_VERTEX_LOCATION","GOOGLE_APPLICATION_CREDENTIALS"],"npm":"@ai-sdk/google-vertex","name":"Vertex","doc":"https://cloud.google.com/vertex-ai/generative-ai/docs/models","models":{"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":0,"max":24576}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":0.3,"output":2.5,"cache_read":0.03,"input_audio":1}},"gemini-3.1-flash-lite-image":{"id":"gemini-3.1-flash-lite-image","type":"image","name":"Nano Banana 2 Lite","description":"Fastest, most cost-efficient Gemini image model for high-volume 1K generation and editing","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","video","pdf"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":4096},"cost":{"input":0.25,"output":30,"cache_read":0.025},"canonical_model_id":"google/gemini-3.1-flash-lite-image"},"claude-opus-4@20250514":{"id":"claude-opus-4@20250514","name":"Claude Opus 4","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"status":"deprecated","provider":{"npm":"@ai-sdk/google-vertex/anthropic"},"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-20250514"},"gemini-3.8-flash":{"id":"gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"input_audio":0.75},"canonical_model_id":"google/gemini-3.8-flash"},"gemini-2.5-flash-tts":{"id":"gemini-2.5-flash-tts","type":"speech","name":"Gemini 2.5 Flash TTS","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"gemini-flash","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2025-01","release_date":"2025-09-30","last_updated":"2025-12-10","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":32768,"input":8192,"output":16384},"cost":{"input":0.5,"output":10},"canonical_model_id":"google/gemini-2.5-flash-tts"},"gemini-4-carbon":{"id":"gemini-4-carbon","name":"Gemini 4 Carbon","description":"Google's most capable reasoning model for complex software engineering, deep math and science, high factual accuracy, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":10,"cache_read":0.1,"input_audio":2},"canonical_model_id":"google/gemini-4-carbon"},"claude-opus-5@default":{"id":"claude-opus-5@default","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/google-vertex/anthropic"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"claude-sonnet-4-6@default":{"id":"claude-sonnet-4-6@default","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/google-vertex/anthropic"},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"claude-fable-5-1@default":{"id":"claude-fable-5-1@default","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/google-vertex/anthropic"},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"mistral-small-2503":{"id":"mistral-small-2503","name":"Mistral Small 3.1 24B","description":"Efficient multimodal model for instruction following, coding, reasoning, and function calling","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-03-17","last_updated":"2025-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"provider":{"npm":"@ai-sdk/mistral","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/publishers/mistralai/models"},"cost":{"input":0.1,"output":0.3},"canonical_model_id":"mistral/mistral-small-3-1-24b-instruct-2503"},"gemini-2.5-pro-tts":{"id":"gemini-2.5-pro-tts","type":"speech","name":"Gemini 2.5 Pro TTS","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"gemini-pro","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2025-01","release_date":"2025-09-30","last_updated":"2025-12-10","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":32768,"input":8192,"output":16384},"cost":{"input":1,"output":20},"canonical_model_id":"google/gemini-2.5-pro-tts"},"claude-opus-4-8@default":{"id":"claude-opus-4-8@default","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/google-vertex/anthropic"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"claude-haiku-5-5@default":{"id":"claude-haiku-5-5@default","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/google-vertex/anthropic"},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"gemini-2.5-pro":{"id":"gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":1.25,"output":10,"cache_read":0.125,"tiers":[{"input":2.5,"output":15,"cache_read":0.25,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":15,"cache_read":0.25}},"canonical_model_id":"google/gemini-2.5-pro"},"gemini-3.5-flash":{"id":"gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"cache_read":0.15,"input_audio":1.5},"canonical_model_id":"google/gemini-3.5-flash"},"claude-opus-4-1@20250805":{"id":"claude-opus-4-1@20250805","name":"Claude Opus 4.1","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"status":"deprecated","provider":{"npm":"@ai-sdk/google-vertex/anthropic"},"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-1-20250805"},"gemini-3.6-flash":{"id":"gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":0.75,"output":3.75,"cache_read":0.075,"input_audio":0.75},"canonical_model_id":"google/gemini-3.6-flash"},"gemini-embedding-001":{"id":"gemini-embedding-001","type":"embedding","name":"Gemini Embedding 001","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"gemini","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2025-05","release_date":"2025-05-20","last_updated":"2025-05-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":2048,"output":1},"cost":{"input":0.15,"output":0},"canonical_model_id":"google/gemini-embedding-001"},"claude-opus-4-6@default":{"id":"claude-opus-4-6@default","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/google-vertex/anthropic"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"gemini-3.1-flash-image":{"id":"gemini-3.1-flash-image","type":"image","name":"Nano Banana 2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","high"]}],"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","video","pdf"],"output":["text","image"]},"open_weights":false,"limit":{"context":131072,"output":32768},"cost":{"input":0.5,"output":60,"cache_read":0.05},"canonical_model_id":"google/gemini-3.1-flash-image"},"gemini-3.1-pro-preview-customtools":{"id":"gemini-3.1-pro-preview-customtools","name":"Gemini 3.1 Pro Preview Custom Tools","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"beta","cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview-customtools"},"claude-sonnet-5@default":{"id":"claude-sonnet-5@default","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/google-vertex/anthropic"},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"codestral-2":{"id":"codestral-2","name":"Codestral 2","description":"Mistral code model for low-latency completion, fill-in-the-middle, and code generation","family":"codestral","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-30","last_updated":"2025-07-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"provider":{"npm":"@ai-sdk/mistral","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/publishers/mistralai/models"},"cost":{"input":0.3,"output":0.9},"canonical_model_id":"mistral/codestral-2508"},"gemini-3.1-pro-preview":{"id":"gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"beta","cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"gemini-3.1-flash-lite":{"id":"gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"input_audio":0.5},"canonical_model_id":"google/gemini-3.1-flash-lite"},"claude-sonnet-4@20250514":{"id":"claude-sonnet-4@20250514","name":"Claude Sonnet 4","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","provider":{"npm":"@ai-sdk/google-vertex/anthropic"},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-20250514"},"gemini-2.5-flash-lite":{"id":"gemini-2.5-flash-lite","name":"Gemini 2.5 Flash-Lite","description":"Lean Gemini 2.5 lane for cheap multimodal traffic and quick agents","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":512,"max":24576}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":0.1,"output":0.4,"cache_read":0.01,"input_audio":0.3},"canonical_model_id":"google/gemini-2.5-flash-lite"},"claude-opus-4-5@20251101":{"id":"claude-opus-4-5@20251101","name":"Claude Opus 4.5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"provider":{"npm":"@ai-sdk/google-vertex/anthropic"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5-20251101"},"gemini-4-argon":{"id":"gemini-4-argon","name":"Gemini 4 Argon","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":10,"cache_read":0.1,"input_audio":2},"canonical_model_id":"google/gemini-4-argon"},"claude-fable-5@default":{"id":"claude-fable-5@default","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/google-vertex/anthropic"},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"claude-sonnet-4-5@20250929":{"id":"claude-sonnet-4-5@20250929","name":"Claude Sonnet 4.5","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","provider":{"npm":"@ai-sdk/google-vertex/anthropic"},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5-20250929"},"gemini-3.5-flash-lite":{"id":"gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03},"canonical_model_id":"google/gemini-3.5-flash-lite"},"gemini-3-flash-preview":{"id":"gemini-3-flash-preview","name":"Gemini 3 Flash Preview","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"beta","cost":{"input":0.5,"output":3,"cache_read":0.05,"input_audio":1},"canonical_model_id":"google/gemini-3-flash-preview"},"gemini-2.5-flash-image":{"id":"gemini-2.5-flash-image","type":"image","name":"Nano Banana","description":"Nano Banana image model for fast generation, edits, and character-consistent assets","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-26","last_updated":"2025-08-26","modalities":{"input":["text","image","pdf"],"output":["text","image"]},"open_weights":false,"limit":{"context":32768,"output":32768},"cost":{"input":0.3,"output":30},"canonical_model_id":"google/gemini-2.5-flash-image"},"gemini-3-pro-image":{"id":"gemini-3-pro-image","type":"image","name":"Nano Banana Pro","description":"Nano Banana Pro for higher-fidelity image generation and design-heavy edits","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":32768},"cost":{"input":2,"output":120,"cache_read":0.2},"canonical_model_id":"google/gemini-3-pro-image"},"claude-fable-5-2@default":{"id":"claude-fable-5-2@default","name":"Claude Fable 5.2","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":16,"output":80,"cache_read":0.4,"cache_write":20},"provider":{"body":{"speed":"fast"}}}}},"provider":{"npm":"@ai-sdk/google-vertex/anthropic"},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"claude-opus-5-5@default":{"id":"claude-opus-5-5@default","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/google-vertex/anthropic"},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"claude-opus-4-7@default":{"id":"claude-opus-4-7@default","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/google-vertex/anthropic"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"claude-haiku-4-5@20251001":{"id":"claude-haiku-4-5@20251001","name":"Claude Haiku 4.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"provider":{"npm":"@ai-sdk/google-vertex/anthropic"},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"mistral-medium-3":{"id":"mistral-medium-3","name":"Mistral Medium 3","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-05-07","last_updated":"2025-05-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":131072},"provider":{"npm":"@ai-sdk/mistral","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/publishers/mistralai/models"},"cost":{"input":0.4,"output":2},"canonical_model_id":"mistral/mistral-medium-2505"},"claude-sonnet-5-5@default":{"id":"claude-sonnet-5-5@default","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/google-vertex/anthropic"},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"gemini-3.7-flash":{"id":"gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"input_audio":0.75},"canonical_model_id":"google/gemini-3.7-flash"},"gemini-nano-banana-2.1":{"id":"gemini-nano-banana-2.1","type":"image","name":"Nano Banana 2.1","description":"Image model for prompt-driven generation, multi-turn editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","medium","high"]}],"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image","video","pdf"],"output":["text","image"]},"open_weights":false,"limit":{"context":131072,"output":32768},"cost":{"input":1.5,"output":30,"cache_read":0.15},"canonical_model_id":"google/gemini-nano-banana-2.1"},"google/gemma-4-26b-a4b-it-maas":{"id":"google/gemma-4-26b-a4b-it-maas","name":"Gemma 4 26B A4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":128000},"status":"alpha","provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi"},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"qwen/qwen3-235b-a22b-instruct-2507-maas":{"id":"qwen/qwen3-235b-a22b-instruct-2507-maas","name":"Qwen3 235B A22B Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-08-13","last_updated":"2025-08-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"status":"deprecated","provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi"},"cost":{"input":0.22,"output":0.88}},"deepseek-ai/deepseek-v3.2-maas":{"id":"deepseek-ai/deepseek-v3.2-maas","name":"DeepSeek V3.2","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2025-12-17","last_updated":"2026-04-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":65536},"status":"deprecated","provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi"},"cost":{"input":0.56,"output":1.68,"cache_read":0.056}},"deepseek-ai/deepseek-v3.1-maas":{"id":"deepseek-ai/deepseek-v3.1-maas","name":"DeepSeek V3.1","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-08-28","last_updated":"2025-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":32768},"status":"deprecated","provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi"},"cost":{"input":0.6,"output":1.7,"cache_read":0.06}},"moonshotai/kimi-k2-thinking-maas":{"id":"moonshotai/kimi-k2-thinking-maas","name":"Kimi K2 Thinking","description":"Kimi reasoning model for long-horizon research, planning, and tool use","family":"kimi-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi"},"cost":{"input":0.6,"output":2.5,"cache_read":0.06}},"openai/gpt-oss-120b-maas":{"id":"openai/gpt-oss-120b-maas","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi"},"cost":{"input":0.09,"output":0.36},"canonical_model_id":"openai/gpt-oss-120b"},"openai/gpt-oss-20b-maas":{"id":"openai/gpt-oss-20b-maas","name":"GPT OSS 20B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"status":"deprecated","provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi"},"cost":{"input":0.07,"output":0.25,"cache_read":0.007}},"meta/llama-3.3-70b-instruct-maas":{"id":"meta/llama-3.3-70b-instruct-maas","name":"Llama 3.3 70B Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2025-04-29","last_updated":"2025-04-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"status":"deprecated","provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi"},"cost":{"input":0.72,"output":0.72}},"meta/llama-4-maverick-17b-128e-instruct-maas":{"id":"meta/llama-4-maverick-17b-128e-instruct-maas","name":"Llama 4 Maverick 17B 128E Instruct","description":"Open multimodal Llama model for strong reasoning and fast responses","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-29","last_updated":"2025-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":8192},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi"},"cost":{"input":0.35,"output":1.15}},"meta/llama-4-scout-17b-16e-instruct-maas":{"id":"meta/llama-4-scout-17b-16e-instruct-maas","name":"Llama 4 Scout 17B Instruct","description":"Open Llama with long-context vision for efficient multimodal agents","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1310720,"output":8192},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi"},"cost":{"input":0.25,"output":0.7},"canonical_model_id":"meta/llama-4-scout-17b-instruct"},"zai-org/glm-4.7-maas":{"id":"zai-org/glm-4.7-maas","name":"GLM-4.7","description":"GLM model for coding, tool use, and complex reasoning","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-06","last_updated":"2026-01-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"status":"deprecated","provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi"},"cost":{"input":0.6,"output":2.2,"cache_read":0.06}},"zai-org/glm-5-maas":{"id":"zai-org/glm-5-maas","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"status":"deprecated","provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi"},"cost":{"input":1,"output":3.2,"cache_read":0.1},"canonical_model_id":"zhipuai/glm-5"},"zai-org/glm-5.2-maas":{"id":"zai-org/glm-5.2-maas","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":64000},"status":"beta","provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi"},"cost":{"input":1.4,"output":4.4,"cache_read":0.14},"canonical_model_id":"zhipuai/glm-5.2"},"xai/grok-4.20-reasoning":{"id":"xai/grok-4.20-reasoning","name":"Grok 4.20 (Reasoning)","description":"Reasoning Grok for document-heavy analysis and long-horizon tool use","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi"},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.20-0309-reasoning"},"xai/grok-4.1-fast-reasoning":{"id":"xai/grok-4.1-fast-reasoning","name":"Grok 4.1 Fast (Reasoning)","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-11-19","last_updated":"2025-11-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":30000},"status":"deprecated","provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi"},"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"canonical_model_id":"xai/grok-4.1-fast-reasoning"},"xai/grok-4.3":{"id":"xai/grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":30000},"status":"beta","provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi"},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.3"},"xai/grok-4.7":{"id":"xai/grok-4.7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"output":500000},"status":"beta","provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi"},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.7"},"xai/grok-4.1-fast-non-reasoning":{"id":"xai/grok-4.1-fast-non-reasoning","name":"Grok 4.1 Fast","description":"Fast Grok model for responsive chat, tool-assisted work, and low-latency responses","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-11-19","last_updated":"2025-11-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":30000},"status":"deprecated","provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi"},"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"canonical_model_id":"xai/grok-4.1-fast"},"xai/grok-4.6":{"id":"xai/grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"output":500000},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi"},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.6"},"xai/grok-4.20-non-reasoning":{"id":"xai/grok-4.20-non-reasoning","name":"Grok 4.20 (Non-Reasoning)","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${GOOGLE_VERTEX_ENDPOINT}/v1/projects/${GOOGLE_VERTEX_PROJECT}/locations/${GOOGLE_VERTEX_LOCATION}/endpoints/openapi"},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.20-0309-non-reasoning"}}},"nebius":{"id":"nebius","env":["NEBIUS_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.tokenfactory.nebius.com/v1","name":"Nebius Token Factory","doc":"https://docs.tokenfactory.nebius.com/","models":{"meta-models/muse-spark-open":{"id":"meta-models/muse-spark-open","name":"Muse Spark Open","description":"Muse Spark Open is an 816B total / 42B active open-weight multimodal reasoning model from Meta for coding and long-horizon agentic work, with 1M-token context.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-open"},"google/gemma-3-27b-it":{"id":"google/gemma-3-27b-it","name":"Gemma-3-27b-it","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":110000,"input":100000,"output":8192},"cost":{"input":0.1,"output":0.3,"cache_read":0.1},"canonical_model_id":"google/gemma-3-27b-it"},"MiniMaxAI/MiniMax-M3":{"id":"MiniMaxAI/MiniMax-M3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"},"MiniMaxAI/MiniMax-M3.1-Flash":{"id":"MiniMaxAI/MiniMax-M3.1-Flash","name":"MiniMax-M3.1-Flash","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"deepseek-ai/DeepSeek-V4.1-Flash-1017":{"id":"deepseek-ai/DeepSeek-V4.1-Flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"deepseek-ai/DeepSeek-V4-Pro-0813":{"id":"deepseek-ai/DeepSeek-V4-Pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":979000,"output":979000},"cost":{"input":1.32,"output":3.96,"cache_read":0.04},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"NousResearch/Hermes-4-405B":{"id":"NousResearch/Hermes-4-405B","name":"Hermes-4-405B","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"hermes","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-08-31","release_date":"2025-08-26","last_updated":"2025-08-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":120000,"output":8192},"cost":{"input":1,"output":3,"reasoning":3,"cache_read":1},"canonical_model_id":"nousresearch/hermes-4-405b"},"moonshotai/Kimi-K3":{"id":"moonshotai/Kimi-K3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1024000,"output":8000},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"gpt-oss-120b","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"input":124000,"output":8192},"cost":{"input":0.15,"output":0.6,"reasoning":0.6,"cache_read":0.15},"canonical_model_id":"openai/gpt-oss-120b"},"reflection/beam":{"id":"reflection/beam","name":"Beam 1.0 501B A23B","description":"Sparse mixture-of-experts reasoning model with 23B active parameters for coding and agentic workflows","family":"beam","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-06-30","release_date":"2026-10-05","last_updated":"2026-10-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.25,"output":1,"cache_read":0.05},"canonical_model_id":"reflection/beam-1.0-501b-a23b"},"Qwen/Qwen3.8-27B":{"id":"Qwen/Qwen3.8-27B","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.45,"output":3,"cache_read":0.1},"canonical_model_id":"alibaba/qwen3.8-27b"},"Qwen/Qwen3-30B-A3B-Instruct-2507":{"id":"Qwen/Qwen3-30B-A3B-Instruct-2507","name":"Qwen3-30B-A3B-Instruct-2507","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-12","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":8192},"cost":{"input":0.1,"output":0.3,"cache_read":0.1},"canonical_model_id":"alibaba/qwen3-30b-a3b-instruct-2507"},"Qwen/Qwen3-235B-A22B-Instruct-2507":{"id":"Qwen/Qwen3-235B-A22B-Instruct-2507","name":"Qwen3 235B A22B Instruct 2507","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-07","release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":8192},"cost":{"input":0.2,"output":0.6,"cache_read":0.2},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"Qwen/Qwen3-Embedding-8B":{"id":"Qwen/Qwen3-Embedding-8B","type":"embedding","name":"Qwen3-Embedding-8B","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"knowledge":"2025-10","release_date":"2025-06-05","last_updated":"2025-06-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":40960,"input":40960,"output":0},"cost":{"input":0.01,"output":0},"canonical_model_id":"alibaba/qwen3-embedding-8b"},"zai-org/GLM-5.3-Flash":{"id":"zai-org/GLM-5.3-Flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1024000,"output":1024000},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai-org/GLM-5.2":{"id":"zai-org/GLM-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":1.4,"output":4.4,"cache_read":0.14},"canonical_model_id":"zhipuai/glm-5.2"},"zai-org/GLM-5.3":{"id":"zai-org/GLM-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1024000,"output":1024000},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"nvidia/Nemotron-3.5-Super-VL":{"id":"nvidia/Nemotron-3.5-Super-VL","name":"Nemotron 3.5 Super VL 120B A12B","description":"NVIDIA vision-language reasoning model for coding, visual understanding, and agentic tool use","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.3,"output":0.9,"cache_read":0.06},"canonical_model_id":"nvidia/nemotron-3.5-super-vl-120b-a12b"},"nvidia/Nemotron-3-Ultra-550b-a55b":{"id":"nvidia/Nemotron-3-Ultra-550b-a55b","name":"Nemotron 3 Ultra 550B A55B","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":1,"output":3,"cache_read":0.12},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"nvidia/Nemotron-3_5-Lightning":{"id":"nvidia/Nemotron-3_5-Lightning","name":"Nemotron 3.5 Lightning 30B A3B","description":"Fast NVIDIA Nemotron MoE for reliable agentic tasks across enterprise workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.06,"output":0.24,"cache_read":0.06},"canonical_model_id":"nvidia/nemotron-3.5-lightning"},"nvidia/nemotron-3-super-120b-a12b":{"id":"nvidia/nemotron-3-super-120b-a12b","name":"Nemotron-3-Super-120B-A12B","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":32768},"cost":{"input":0.3,"output":0.9,"cache_read":0.06},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"}}},"unorouter":{"id":"unorouter","env":["UNOROUTER_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.unorouter.com/v1","name":"UnoRouter","doc":"https://unorouter.com/models","models":{"gpt-5.5":{"id":"gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1875,"output":1.125},"canonical_model_id":"openai/gpt-5.5"},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"status":"deprecated","cost":{"input":1.6001,"output":5.0288},"canonical_model_id":"zhipuai/glm-5.2"},"gpt-5.2":{"id":"gpt-5.2","name":"GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":1.05,"output":8.4},"canonical_model_id":"openai/gpt-5.2"},"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.2675,"output":5.3368},"canonical_model_id":"moonshotai/kimi-k2.6"},"glm-4.5-flash:free":{"id":"glm-4.5-flash:free","name":"GLM-4.5-Flash","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":98304},"cost":{"input":0,"output":0},"canonical_model_id":"zhipuai/glm-4.5-flash"},"gemini-3.5-flash":{"id":"gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.1857,"output":1.1142},"canonical_model_id":"google/gemini-3.5-flash"},"claude-sonnet-5":{"id":"claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":1.44,"output":7.2},"canonical_model_id":"anthropic/claude-sonnet-5"},"gemma-4-31b-it:free":{"id":"gemma-4-31b-it:free","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0,"output":0},"canonical_model_id":"google/gemma-4-31b-it"},"glm-5.2:free":{"id":"glm-5.2:free","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"zhipuai/glm-5.2"},"deepseek-v4-pro:free":{"id":"deepseek-v4-pro:free","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.8999,"output":1.7999},"canonical_model_id":"deepseek/deepseek-v4-pro"},"claude-haiku-4-5-20251001":{"id":"claude-haiku-4-5-20251001","name":"Claude Haiku 4.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1.2,"output":6},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"deprecated","cost":{"input":0.0625,"output":0.125},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek-v4-flash:free":{"id":"deepseek-v4-flash:free","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"deepseek/deepseek-v4-flash"},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"status":"deprecated","cost":{"input":1.8,"output":10.8},"canonical_model_id":"openai/gpt-5.4"},"qwen3.5-397b-a17b:free":{"id":"qwen3.5-397b-a17b:free","name":"Qwen3.5 397B-A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"step-3.7-flash:free":{"id":"step-3.7-flash:free","name":"Step 3.7 Flash","description":"Newer StepFun flash model for faster agents, coding, and multimodal prompts","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2026-03-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":256000},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"stepfun/step-3.7-flash"},"nemotron-3-ultra-550b-a55b:free":{"id":"nemotron-3-ultra-550b-a55b:free","name":"Nemotron 3 Ultra 550B A55B","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"minimax-m2.7:free":{"id":"minimax-m2.7:free","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"minimax/MiniMax-M2.7"},"claude-opus-4-8":{"id":"claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"status":"deprecated","cost":{"input":0.425,"output":2.125},"canonical_model_id":"anthropic/claude-opus-4-8"},"minimax-m2.7":{"id":"minimax-m2.7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0.819,"output":3.276},"canonical_model_id":"minimax/MiniMax-M2.7"},"gpt-5.5:free":{"id":"gpt-5.5:free","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-5.5"},"gpt-5.4:free":{"id":"gpt-5.4:free","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-5.4"}}},"stepfun-ai-step-plan":{"id":"stepfun-ai-step-plan","env":["STEPFUN_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.stepfun.ai/step_plan/v1","name":"StepFun Step Plan (Global)","doc":"https://platform.stepfun.ai/docs/en/step-plan/integrations/reasoning-api","models":{"step-5-preview":{"id":"step-5-preview","name":"Step 5 Preview","description":"StepFun's next-generation flagship base model for coding and professional knowledge work, with native text, image, and video input and a 1M-token context window","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":65536},"canonical_model_id":"stepfun/step-5-preview"},"step-3.5-flash-2603":{"id":"step-3.5-flash-2603","name":"Step 3.5 Flash 2603","description":"StepFun flash model for efficient multimodal reasoning, coding, and tool use","family":"step","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":256000},"canonical_model_id":"stepfun/step-3.5-flash-2603"},"step-3.7-flash":{"id":"step-3.7-flash","name":"Step 3.7 Flash","description":"Newer StepFun flash model for faster agents, coding, and multimodal prompts","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2026-03-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":256000},"canonical_model_id":"stepfun/step-3.7-flash"},"step-3.5-flash":{"id":"step-3.5-flash","name":"Step 3.5 Flash","description":"StepFun flash lane for quick multimodal reasoning and coding assistance","family":"step","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-01","release_date":"2026-01-29","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":256000},"canonical_model_id":"stepfun/step-3.5-flash"}}},"aki-io":{"id":"aki-io","env":["AKI_IO_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://aki.io/v1","name":"AKI.IO","doc":"https://aki.io/docs/","models":{"mistral4-119b":{"id":"mistral4-119b","name":"Mistral Small 4","description":"Fast Mistral production model for chat, extraction, and cost-sensitive agents","family":"mistral-small","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":81920},"cost":{"input":0.2243,"output":0.6729},"canonical_model_id":"mistral/mistral-small-2603"},"qwen3.8-27b":{"id":"qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.33645,"output":2.4673,"cache_read":0.11215},"canonical_model_id":"alibaba/qwen3.8-27b"},"deepseek-v4.1-flash-552b":{"id":"deepseek-v4.1-flash-552b","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":81920},"cost":{"input":0.280375,"output":1.1215,"cache_read":0.11215},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"qwen3.6-35b":{"id":"qwen3.6-35b","name":"Qwen3.6 35B-A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":32768},"status":"deprecated","cost":{"input":0.168225,"output":0.56075},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"glm5.3-754b":{"id":"glm5.3-754b","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":81920},"cost":{"input":1.1215,"output":3.92525,"cache_read":0.280375},"canonical_model_id":"zhipuai/glm-5.3"},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0.168225,"output":0.616825},"canonical_model_id":"openai/gpt-oss-120b"},"gemma4-26b":{"id":"gemma4-26b","name":"Gemma 4 26B A4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":32768},"cost":{"input":0.11215,"output":0.56075},"canonical_model_id":"google/gemma-4-26b-a4b-it"}}},"trustedrouter":{"id":"trustedrouter","env":["TRUSTEDROUTER_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.trustedrouter.com/v1","name":"TrustedRouter","doc":"https://trustedrouter.com/docs","models":{"trustedrouter/zdr":{"id":"trustedrouter/zdr","name":"Zero Data Retention","description":"TrustedRouter privacy routing alias that prefers zero data retention model endpoints.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-27","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072}},"trustedrouter/fast":{"id":"trustedrouter/fast","name":"Fast","description":"TrustedRouter speed routing alias that prefers low-latency healthy model endpoints.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-27","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072}},"trustedrouter/cheap":{"id":"trustedrouter/cheap","name":"Cheap","description":"TrustedRouter low-cost routing alias that prefers inexpensive healthy model endpoints.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-05-01","last_updated":"2026-06-27","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072}},"trustedrouter/synth":{"id":"trustedrouter/synth","name":"Synth","description":"TrustedRouter synthesis orchestration alias that combines multiple model responses into one answer.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-20","last_updated":"2026-06-27","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072}},"trustedrouter/synth-code":{"id":"trustedrouter/synth-code","name":"Synth Code","description":"TrustedRouter code synthesis orchestration alias that combines multiple model responses into one answer.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-20","last_updated":"2026-06-27","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072}},"trustedrouter/auto":{"id":"trustedrouter/auto","name":"Auto","description":"TrustedRouter automatic routing alias that chooses a healthy supported model endpoint for the request.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-05-01","last_updated":"2026-06-27","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072}},"trustedrouter/e2e":{"id":"trustedrouter/e2e","name":"End-to-End Encrypted","description":"TrustedRouter privacy routing alias for end-to-end encrypted provider routes where available.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-27","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072}}}},"edenai":{"id":"edenai","env":["EDENAI_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.edenai.run/v3","name":"Eden AI","doc":"https://docs.edenai.co","models":{"deepseek-v4-flash-vision-exp":{"id":"deepseek-v4-flash-vision-exp","name":"DeepSeek V4 Flash Vision Exp","description":"Experimental multimodal DeepSeek V4 Flash model for image understanding, coding, and agentic work","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-21","last_updated":"2026-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4-flash-vision-exp"},"anthropic/claude-sonnet-5-5":{"id":"anthropic/claude-sonnet-5-5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"anthropic/claude-fable-5-1":{"id":"anthropic/claude-fable-5-1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"anthropic/claude-opus-4-5":{"id":"anthropic/claude-opus-4-5","name":"Claude Opus 4.5 (latest)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"anthropic/claude-sonnet-latest":{"id":"anthropic/claude-sonnet-latest","name":"Claude Sonnet Latest (Claude Sonnet 5.5)","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"anthropic/claude-fable-latest":{"id":"anthropic/claude-fable-latest","name":"Claude Fable Latest (Claude Fable 5.2)","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"anthropic/claude-sonnet-5":{"id":"anthropic/claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"anthropic/claude-fable-5-2":{"id":"anthropic/claude-fable-5-2","name":"Claude Fable 5.2","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"anthropic/claude-fable-5":{"id":"anthropic/claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"anthropic/claude-opus-5":{"id":"anthropic/claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"anthropic/claude-opus-latest":{"id":"anthropic/claude-opus-latest","name":"Claude Opus Latest (Claude Opus 5.5)","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"anthropic/claude-opus-4-5-20251101":{"id":"anthropic/claude-opus-4-5-20251101","name":"Claude Opus 4.5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5-20251101"},"anthropic/claude-opus-4-6":{"id":"anthropic/claude-opus-4-6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"anthropic/claude-haiku-latest":{"id":"anthropic/claude-haiku-latest","name":"Claude Haiku Latest (Claude Haiku 5.5)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"anthropic/claude-opus-4-8":{"id":"anthropic/claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic/claude-opus-5-5":{"id":"anthropic/claude-opus-5-5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"anthropic/claude-haiku-5-5":{"id":"anthropic/claude-haiku-5-5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"anthropic/claude-sonnet-4-6":{"id":"anthropic/claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"anthropic/claude-opus-4-7":{"id":"anthropic/claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"databricks/databricks-gpt-oss-20b":{"id":"databricks/databricks-gpt-oss-20b","name":"GPT OSS 20B (Databricks)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.07,"output":0.30002,"cache_read":0.007,"cache_write":0.07},"canonical_model_id":"openai/gpt-oss-20b"},"databricks/databricks-qwen3-next-80b-a3b-instruct":{"id":"databricks/databricks-qwen3-next-80b-a3b-instruct","name":"Qwen3-Next 80B-A3B Instruct (Databricks)","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.15001,"output":1.20001,"cache_read":0.015001,"cache_write":0.15001},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-instruct"},"databricks/databricks-gpt-oss-120b@eu":{"id":"databricks/databricks-gpt-oss-120b@eu","name":"GPT OSS 120B (Databricks, EU)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.15001,"output":0.59997,"cache_read":0.015001,"cache_write":0.15001},"canonical_model_id":"openai/gpt-oss-120b"},"databricks/databricks-gpt-oss-20b@eu":{"id":"databricks/databricks-gpt-oss-20b@eu","name":"GPT OSS 20B (Databricks, EU)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.07,"output":0.30002,"cache_read":0.007,"cache_write":0.07},"canonical_model_id":"openai/gpt-oss-20b"},"databricks/databricks-qwen3-next-80b-a3b-instruct@eu":{"id":"databricks/databricks-qwen3-next-80b-a3b-instruct@eu","name":"Qwen3-Next 80B-A3B Instruct (Databricks, EU)","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.15001,"output":1.20001,"cache_read":0.015001,"cache_write":0.15001},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-instruct"},"databricks/databricks-gpt-oss-120b":{"id":"databricks/databricks-gpt-oss-120b","name":"GPT OSS 120B (Databricks)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.15001,"output":0.59997,"cache_read":0.015001,"cache_write":0.15001},"canonical_model_id":"openai/gpt-oss-120b"},"amazon/amazon.nova-pro-v1:0":{"id":"amazon/amazon.nova-pro-v1:0","name":"Nova Pro","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"nova-pro","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":10000},"cost":{"input":0.8,"output":3.2,"cache_read":0.2},"canonical_model_id":"amazon/nova-pro"},"amazon/qwen.qwen3-coder-next":{"id":"amazon/qwen.qwen3-coder-next","name":"Qwen3 Coder Next (Amazon Bedrock)","description":"Open-weight Qwen coding model for agents, repository edits, and multi-turn tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-02-03","last_updated":"2026-02-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.78,"output":1.86},"canonical_model_id":"alibaba/qwen3-coder-next"},"amazon/zai.glm-4.7-flash":{"id":"amazon/zai.glm-4.7-flash","name":"GLM-4.7-Flash (Amazon Bedrock)","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":203000,"output":131072},"cost":{"input":0.07,"output":0.4},"canonical_model_id":"zhipuai/glm-4.7-flash"},"amazon/zai.glm-4.7-flash@us":{"id":"amazon/zai.glm-4.7-flash@us","name":"GLM-4.7-Flash (Amazon Bedrock, US)","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":203000,"output":131072},"cost":{"input":0.07,"output":0.4},"canonical_model_id":"zhipuai/glm-4.7-flash"},"amazon/google.gemma-3-27b-it":{"id":"amazon/google.gemma-3-27b-it","name":"Gemma 3 27B IT (Amazon Bedrock)","description":"Largest open Gemma 3 instruction model for multilingual text generation and visual understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":131072},"cost":{"input":0.23,"output":0.38},"canonical_model_id":"google/gemma-3-27b-it"},"amazon/mistral.pixtral-large-2502-v1:0@us":{"id":"amazon/mistral.pixtral-large-2502-v1:0@us","name":"Pixtral Large (25.02) (Amazon Bedrock, US)","description":"Mistral vision-language model for image understanding and multimodal chat","family":"pixtral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-04-08","last_updated":"2025-04-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"cost":{"input":2,"output":6},"canonical_model_id":"mistral/pixtral-large-2502"},"amazon/amazon.nova-pro-v1:0@us":{"id":"amazon/amazon.nova-pro-v1:0@us","name":"Nova Pro (US)","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"nova-pro","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":10000},"cost":{"input":0.8,"output":3.2,"cache_read":0.2},"canonical_model_id":"amazon/nova-pro"},"amazon/google.gemma-3-4b-it@us":{"id":"amazon/google.gemma-3-4b-it@us","name":"Gemma 3 4B IT (Amazon Bedrock, US)","description":"Open multimodal Gemma instruction model for efficient text generation and image understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":131072},"cost":{"input":0.04,"output":0.08},"canonical_model_id":"google/gemma-3-4b-it"},"amazon/google.gemma-3-12b-it":{"id":"amazon/google.gemma-3-12b-it","name":"Gemma 3 12B IT (Amazon Bedrock)","description":"Open multimodal Gemma instruction model for multilingual text generation and image understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":131072},"cost":{"input":0.09,"output":0.29},"canonical_model_id":"google/gemma-3-12b-it"},"amazon/mistral.pixtral-large-2502-v1:0":{"id":"amazon/mistral.pixtral-large-2502-v1:0","name":"Pixtral Large (25.02) (Amazon Bedrock)","description":"Mistral vision-language model for image understanding and multimodal chat","family":"pixtral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-04-08","last_updated":"2025-04-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"cost":{"input":2,"output":6},"canonical_model_id":"mistral/pixtral-large-2502"},"amazon/mistral.voxtral-mini-3b-2507@us":{"id":"amazon/mistral.voxtral-mini-3b-2507@us","name":"Voxtral Mini 3B 2507 (Amazon Bedrock, US)","description":"Open audio-language model for speech transcription, audio understanding, and voice-driven tool use","family":"voxtral","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-07-15","last_updated":"2025-07-15","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32768},"cost":{"input":0.04,"output":0.04},"canonical_model_id":"mistral/voxtral-mini-3b-2507"},"amazon/moonshot.kimi-k2-thinking":{"id":"amazon/moonshot.kimi-k2-thinking","name":"Kimi K2 Thinking (Amazon Bedrock)","description":"Thinking Kimi model for slower research passes, planning, and hard technical questions","family":"kimi-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-11-06","last_updated":"2025-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":262144},"cost":{"input":0.6,"output":2.5},"canonical_model_id":"moonshotai/kimi-k2-thinking"},"amazon/google.gemma-3-4b-it":{"id":"amazon/google.gemma-3-4b-it","name":"Gemma 3 4B IT (Amazon Bedrock)","description":"Open multimodal Gemma instruction model for efficient text generation and image understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":131072},"cost":{"input":0.04,"output":0.08},"canonical_model_id":"google/gemma-3-4b-it"},"amazon/mistral.voxtral-mini-3b-2507":{"id":"amazon/mistral.voxtral-mini-3b-2507","name":"Voxtral Mini 3B 2507 (Amazon Bedrock)","description":"Open audio-language model for speech transcription, audio understanding, and voice-driven tool use","family":"voxtral","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-07-15","last_updated":"2025-07-15","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32768},"cost":{"input":0.04,"output":0.04},"canonical_model_id":"mistral/voxtral-mini-3b-2507"},"amazon/mistral.voxtral-small-24b-2507":{"id":"amazon/mistral.voxtral-small-24b-2507","name":"Voxtral Small 24B 2507 (Amazon Bedrock)","description":"Open audio-language model for speech transcription, audio understanding, and voice-driven tool use","family":"voxtral","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-07-15","last_updated":"2025-07-15","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32768},"cost":{"input":0.1,"output":0.3},"canonical_model_id":"mistral/voxtral-small-24b-2507"},"amazon/mistral.voxtral-small-24b-2507@us":{"id":"amazon/mistral.voxtral-small-24b-2507@us","name":"Voxtral Small 24B 2507 (Amazon Bedrock, US)","description":"Open audio-language model for speech transcription, audio understanding, and voice-driven tool use","family":"voxtral","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-07-15","last_updated":"2025-07-15","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32768},"cost":{"input":0.1,"output":0.3},"canonical_model_id":"mistral/voxtral-small-24b-2507"},"amazon/google.gemma-3-27b-it@us":{"id":"amazon/google.gemma-3-27b-it@us","name":"Gemma 3 27B IT (Amazon Bedrock, US)","description":"Largest open Gemma 3 instruction model for multilingual text generation and visual understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":131072},"cost":{"input":0.23,"output":0.38},"canonical_model_id":"google/gemma-3-27b-it"},"amazon/google.gemma-3-12b-it@us":{"id":"amazon/google.gemma-3-12b-it@us","name":"Gemma 3 12B IT (Amazon Bedrock, US)","description":"Open multimodal Gemma instruction model for multilingual text generation and image understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":131072},"cost":{"input":0.09,"output":0.29},"canonical_model_id":"google/gemma-3-12b-it"},"amazon/amazon.nova-micro-v1:0@us":{"id":"amazon/amazon.nova-micro-v1:0@us","name":"Nova Micro (US)","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-micro","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":10000},"cost":{"input":0.035,"output":0.14,"cache_read":0.00875},"canonical_model_id":"amazon/nova-micro"},"amazon/amazon.nova-lite-v1:0":{"id":"amazon/amazon.nova-lite-v1:0","name":"Nova Lite","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-lite","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":10000},"cost":{"input":0.06,"output":0.24,"cache_read":0.015},"canonical_model_id":"amazon/nova-lite"},"amazon/moonshotai.kimi-k2.5":{"id":"amazon/moonshotai.kimi-k2.5","name":"Kimi K2.5 (Amazon Bedrock)","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.6,"output":3},"canonical_model_id":"moonshotai/kimi-k2.5"},"amazon/amazon.nova-micro-v1:0":{"id":"amazon/amazon.nova-micro-v1:0","name":"Nova Micro","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-micro","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":10000},"cost":{"input":0.035,"output":0.14,"cache_read":0.00875},"canonical_model_id":"amazon/nova-micro"},"amazon/amazon.nova-lite-v1:0@us":{"id":"amazon/amazon.nova-lite-v1:0@us","name":"Nova Lite (US)","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-lite","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":10000},"cost":{"input":0.06,"output":0.24,"cache_read":0.015},"canonical_model_id":"amazon/nova-lite"},"amazon/openai.gpt-oss-safeguard-20b@us":{"id":"amazon/openai.gpt-oss-safeguard-20b@us","name":"GPT OSS Safeguard 20B (Amazon Bedrock, US)","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-29","last_updated":"2025-10-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":131072},"cost":{"input":0.07,"output":0.2},"canonical_model_id":"openai/gpt-oss-safeguard-20b"},"amazon/openai.gpt-oss-safeguard-20b":{"id":"amazon/openai.gpt-oss-safeguard-20b","name":"GPT OSS Safeguard 20B (Amazon Bedrock)","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-29","last_updated":"2025-10-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":131072},"cost":{"input":0.07,"output":0.2},"canonical_model_id":"openai/gpt-oss-safeguard-20b"},"mistral/voxtral-small-latest@eu":{"id":"mistral/voxtral-small-latest@eu","name":"Voxtral Small (latest) (EU)","description":"Instruct model with native audio input for speech understanding and tool use","family":"voxtral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-15","last_updated":"2025-07-15","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32000},"cost":{"input":0.11,"output":0.44,"cache_read":0.011},"canonical_model_id":"mistral/voxtral-small-latest"},"mistral/ministral-8b-2512@eu":{"id":"mistral/ministral-8b-2512@eu","name":"Ministral 3 8B 2512 (EU)","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":209715},"cost":{"input":0.165,"output":0.165,"cache_read":0.0165},"canonical_model_id":"mistral/ministral-8b-2512"},"mistral/codestral-2508":{"id":"mistral/codestral-2508","name":"Codestral 25.08","description":"Mistral code model for low-latency completion, fill-in-the-middle, and code generation","family":"codestral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-30","last_updated":"2025-07-30","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":8192},"cost":{"input":0.3,"output":0.9,"cache_read":0.03},"canonical_model_id":"mistral/codestral-2508"},"mistral/mistral-large-latest@eu":{"id":"mistral/mistral-large-latest@eu","name":"Mistral Large (latest) (EU)","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-11","release_date":"2024-11-01","last_updated":"2025-12-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":2.2,"output":6.6,"cache_read":0.22},"canonical_model_id":"mistral/mistral-large-latest"},"mistral/mistral-small-2603@eu":{"id":"mistral/mistral-small-2603@eu","name":"Mistral Small 4 (EU)","description":"Fast Mistral production model for chat, extraction, and cost-sensitive agents","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"cost":{"input":0.165,"output":0.66,"cache_read":0.0165},"canonical_model_id":"mistral/mistral-small-2603"},"mistral/mistral-medium-2505":{"id":"mistral/mistral-medium-2505","name":"Mistral Medium 3","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-05-07","last_updated":"2025-05-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":131072},"cost":{"input":0.4,"output":2},"canonical_model_id":"mistral/mistral-medium-2505"},"mistral/mistral-medium-3-5":{"id":"mistral/mistral-medium-3-5","name":"Mistral Medium 3.5","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-30","last_updated":"2026-04-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":209715},"cost":{"input":1.5,"output":7.5,"cache_read":0.15},"canonical_model_id":"mistral/mistral-medium-3-5"},"mistral/mistral-medium-3@eu":{"id":"mistral/mistral-medium-3@eu","name":"Mistral Medium 3 (EU)","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-07","last_updated":"2025-05-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":104857},"cost":{"input":0.44,"output":2.2,"cache_read":0.044},"canonical_model_id":"mistral/mistral-medium-3"},"mistral/mistral-medium-3-5@eu":{"id":"mistral/mistral-medium-3-5@eu","name":"Mistral Medium 3.5 (EU)","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-30","last_updated":"2026-04-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":209715},"cost":{"input":1.65,"output":8.25,"cache_read":0.165},"canonical_model_id":"mistral/mistral-medium-3-5"},"mistral/mistral-large-2512":{"id":"mistral/mistral-large-2512","name":"Mistral Large 3","description":"Mistral's largest general model for enterprise agents, coding, and multilingual reasoning","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-11","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.5,"output":1.5,"cache_read":0.05},"canonical_model_id":"mistral/mistral-large-2512"},"mistral/ministral-3b-2512":{"id":"mistral/ministral-3b-2512","name":"Ministral 3 3B 2512","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":104857},"cost":{"input":0.1,"output":0.1,"cache_read":0.01},"canonical_model_id":"mistral/ministral-3b-2512"},"mistral/ministral-8b-2512":{"id":"mistral/ministral-8b-2512","name":"Ministral 3 8B 2512","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":209715},"cost":{"input":0.15,"output":0.15,"cache_read":0.015},"canonical_model_id":"mistral/ministral-8b-2512"},"mistral/ministral-3b-2512@eu":{"id":"mistral/ministral-3b-2512@eu","name":"Ministral 3 3B 2512 (EU)","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":104857},"cost":{"input":0.11,"output":0.11,"cache_read":0.011},"canonical_model_id":"mistral/ministral-3b-2512"},"mistral/mistral-large-2407":{"id":"mistral/mistral-large-2407","name":"Mistral Large 2407","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-03-31","release_date":"2024-07-24","last_updated":"2024-07-24","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":104857},"cost":{"input":2,"output":6,"cache_read":0.2},"canonical_model_id":"mistral/mistral-large-2407"},"mistral/mistral-large-2512@eu":{"id":"mistral/mistral-large-2512@eu","name":"Mistral Large 3 (EU)","description":"Mistral's largest general model for enterprise agents, coding, and multilingual reasoning","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-11","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.55,"output":1.65,"cache_read":0.055},"canonical_model_id":"mistral/mistral-large-2512"},"mistral/devstral-medium-latest":{"id":"mistral/devstral-medium-latest","name":"Devstral 2 (latest)","description":"Mistral coding agent model for repository tasks and software engineering workflows","family":"devstral","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-12","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.4,"output":2},"canonical_model_id":"mistral/devstral-medium-latest"},"mistral/mistral-small-2603":{"id":"mistral/mistral-small-2603","name":"Mistral Small 4","description":"Fast Mistral production model for chat, extraction, and cost-sensitive agents","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"mistral/mistral-small-2603"},"mistral/magistral-medium-latest":{"id":"mistral/magistral-medium-latest","name":"Magistral Medium (latest)","description":"Mistral reasoning model for transparent analysis, math, and complex decisions","family":"magistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2025-03-17","last_updated":"2025-03-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":16384},"cost":{"input":1.5,"output":7.5,"cache_read":0.15},"canonical_model_id":"mistral/magistral-medium-latest"},"mistral/codestral-latest@eu":{"id":"mistral/codestral-latest@eu","name":"Codestral (latest) (EU)","description":"Mistral code model for completions, refactors, and developer IDE workflows","family":"codestral","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-05-29","last_updated":"2025-01-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":4096},"cost":{"input":0.33,"output":0.99,"cache_read":0.033},"canonical_model_id":"mistral/codestral-latest"},"mistral/codestral-latest":{"id":"mistral/codestral-latest","name":"Codestral (latest)","description":"Mistral code model for completions, refactors, and developer IDE workflows","family":"codestral","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-05-29","last_updated":"2025-01-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":4096},"cost":{"input":0.3,"output":0.9,"cache_read":0.03},"canonical_model_id":"mistral/codestral-latest"},"mistral/mistral-medium-2505@eu":{"id":"mistral/mistral-medium-2505@eu","name":"Mistral Medium 3 (EU)","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-05-07","last_updated":"2025-05-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":131072},"cost":{"input":0.44,"output":2.2},"canonical_model_id":"mistral/mistral-medium-2505"},"mistral/mistral-large-4@eu":{"id":"mistral/mistral-large-4@eu","name":"Mistral Large 4 (EU)","description":"Mistral's 1T-parameter multimodal MoE for reasoning, coding, and agentic work","family":"mistral-large","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"output":262144},"cost":{"input":0.748,"output":2.299,"cache_read":0.077},"canonical_model_id":"mistral/mistral-large-4"},"mistral/mistral-medium-latest@eu":{"id":"mistral/mistral-medium-latest@eu","name":"Mistral Medium (latest) (EU)","description":"Balanced Mistral model for enterprise assistants, multilingual work, and tools","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-29","last_updated":"2026-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.65,"output":8.25,"cache_read":0.165},"canonical_model_id":"mistral/mistral-medium-latest"},"mistral/voxtral-small-latest":{"id":"mistral/voxtral-small-latest","name":"Voxtral Small (latest)","description":"Instruct model with native audio input for speech understanding and tool use","family":"voxtral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-15","last_updated":"2025-07-15","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32000},"cost":{"input":0.1,"output":0.4,"cache_read":0.01},"canonical_model_id":"mistral/voxtral-small-latest"},"mistral/devstral-2512":{"id":"mistral/devstral-2512","name":"Devstral 2","description":"Mistral's coding-agent model for repository work, terminal tasks, and software fixes","family":"devstral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-12","release_date":"2025-12-09","last_updated":"2025-12-09","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.4,"output":2,"cache_read":0.04},"canonical_model_id":"mistral/devstral-2512"},"mistral/codestral-2508@eu":{"id":"mistral/codestral-2508@eu","name":"Codestral 25.08 (EU)","description":"Mistral code model for low-latency completion, fill-in-the-middle, and code generation","family":"codestral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-30","last_updated":"2025-07-30","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":8192},"cost":{"input":0.33,"output":0.99,"cache_read":0.033},"canonical_model_id":"mistral/codestral-2508"},"mistral/mistral-small-latest":{"id":"mistral/mistral-small-latest","name":"Mistral Small (latest)","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"mistral/mistral-small-latest"},"mistral/mistral-medium-latest":{"id":"mistral/mistral-medium-latest","name":"Mistral Medium (latest)","description":"Balanced Mistral model for enterprise assistants, multilingual work, and tools","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-29","last_updated":"2026-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.5,"output":7.5,"cache_read":0.15},"canonical_model_id":"mistral/mistral-medium-latest"},"mistral/mistral-medium-2604":{"id":"mistral/mistral-medium-2604","name":"Mistral Medium 3.5","description":"Balanced Mistral model for enterprise assistants, multilingual work, and tools","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-29","last_updated":"2026-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.5,"output":7.5,"cache_read":0.15},"canonical_model_id":"mistral/mistral-medium-2604"},"mistral/mistral-large-2407@eu":{"id":"mistral/mistral-large-2407@eu","name":"Mistral Large 2407 (EU)","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-03-31","release_date":"2024-07-24","last_updated":"2024-07-24","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":104857},"cost":{"input":2.2,"output":6.6,"cache_read":0.22},"canonical_model_id":"mistral/mistral-large-2407"},"mistral/devstral-2512@eu":{"id":"mistral/devstral-2512@eu","name":"Devstral 2 (EU)","description":"Mistral's coding-agent model for repository work, terminal tasks, and software fixes","family":"devstral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-12","release_date":"2025-12-09","last_updated":"2025-12-09","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.44,"output":2.2,"cache_read":0.044},"canonical_model_id":"mistral/devstral-2512"},"mistral/magistral-medium-latest@eu":{"id":"mistral/magistral-medium-latest@eu","name":"Magistral Medium (latest) (EU)","description":"Mistral reasoning model for transparent analysis, math, and complex decisions","family":"magistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2025-03-17","last_updated":"2025-03-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":16384},"cost":{"input":1.65,"output":8.25,"cache_read":0.165},"canonical_model_id":"mistral/magistral-medium-latest"},"mistral/mistral-small-latest@eu":{"id":"mistral/mistral-small-latest@eu","name":"Mistral Small (latest) (EU)","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"cost":{"input":0.165,"output":0.66,"cache_read":0.0165},"canonical_model_id":"mistral/mistral-small-latest"},"mistral/mistral-medium-3":{"id":"mistral/mistral-medium-3","name":"Mistral Medium 3","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-07","last_updated":"2025-05-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":104857},"cost":{"input":0.4,"output":2,"cache_read":0.04},"canonical_model_id":"mistral/mistral-medium-3"},"mistral/ministral-14b-2512":{"id":"mistral/ministral-14b-2512","name":"Ministral 3 14B 2512","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":209715},"cost":{"input":0.2,"output":0.2,"cache_read":0.02},"canonical_model_id":"mistral/ministral-14b-2512"},"mistral/devstral-medium-latest@eu":{"id":"mistral/devstral-medium-latest@eu","name":"Devstral 2 (latest) (EU)","description":"Mistral coding agent model for repository tasks and software engineering workflows","family":"devstral","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-12","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.44,"output":2.2},"canonical_model_id":"mistral/devstral-medium-latest"},"mistral/ministral-14b-2512@eu":{"id":"mistral/ministral-14b-2512@eu","name":"Ministral 3 14B 2512 (EU)","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":209715},"cost":{"input":0.22,"output":0.22,"cache_read":0.022},"canonical_model_id":"mistral/ministral-14b-2512"},"mistral/mistral-large-latest":{"id":"mistral/mistral-large-latest","name":"Mistral Large (latest)","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-11","release_date":"2024-11-01","last_updated":"2025-12-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":2,"output":6,"cache_read":0.2},"canonical_model_id":"mistral/mistral-large-latest"},"mistral/mistral-medium-2604@eu":{"id":"mistral/mistral-medium-2604@eu","name":"Mistral Medium 3.5 (EU)","description":"Balanced Mistral model for enterprise assistants, multilingual work, and tools","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-29","last_updated":"2026-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.65,"output":8.25,"cache_read":0.165},"canonical_model_id":"mistral/mistral-medium-2604"},"perplexityai/sonar-pro":{"id":"perplexityai/sonar-pro","name":"Sonar Pro","description":"Deeper Sonar search model with broader retrieval and stronger synthesis","family":"sonar-pro","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-09-01","release_date":"2024-01-01","last_updated":"2025-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8192},"cost":{"input":3,"output":15},"canonical_model_id":"perplexity/sonar-pro"},"perplexityai/sonar":{"id":"perplexityai/sonar","name":"Sonar","description":"Fast web-grounded Sonar for current answers, citations, and lightweight retrieval","family":"sonar","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-09-01","release_date":"2024-01-01","last_updated":"2025-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":127072,"output":4096},"cost":{"input":1,"output":1},"canonical_model_id":"perplexity/sonar"},"perplexityai/sonar-reasoning-pro":{"id":"perplexityai/sonar-reasoning-pro","name":"Sonar Reasoning Pro","description":"Web-grounded Sonar for multi-step research questions that need cited reasoning","family":"sonar-reasoning","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-09-01","release_date":"2024-01-01","last_updated":"2025-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"cost":{"input":2,"output":8},"canonical_model_id":"perplexity/sonar-reasoning-pro"},"perplexityai/sonar-deep-research":{"id":"perplexityai/sonar-deep-research","name":"Sonar Deep Research","description":"Sonar search model for autonomous research and citation-backed long-form reports","family":"sonar","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":false,"structured_output":false,"temperature":false,"knowledge":"2025-01","release_date":"2025-02-01","last_updated":"2025-09-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32768},"cost":{"input":2,"output":8,"reasoning":3},"canonical_model_id":"perplexity/sonar-deep-research"},"ovhcloud/gpt-oss-20b":{"id":"ovhcloud/gpt-oss-20b","name":"GPT OSS 20B (OVHcloud)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.05,"output":0.18},"canonical_model_id":"openai/gpt-oss-20b"},"ovhcloud/gpt-oss-120b":{"id":"ovhcloud/gpt-oss-120b","name":"GPT OSS 120B (OVHcloud)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.09,"output":0.47},"canonical_model_id":"openai/gpt-oss-120b"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.66,"output":1.98,"cache_read":0.022},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-v4-flash-vision-exp":{"id":"deepseek/deepseek-v4-flash-vision-exp","name":"DeepSeek V4 Flash Vision Exp","description":"Experimental multimodal DeepSeek V4 Flash model for image understanding, coding, and agentic work","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-21","last_updated":"2026-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4-flash-vision-exp"},"deepseek/deepseek-chat":{"id":"deepseek/deepseek-chat","name":"DeepSeek Chat","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2025-12-01","last_updated":"2026-02-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":384000},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-chat"},"deepseek/deepseek-v4-flash":{"id":"deepseek/deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4-flash"},"tensorx/deepseek/deepseek-r1-0528":{"id":"tensorx/deepseek/deepseek-r1-0528","name":"DeepSeek R1 0528 (TensorX)","description":"May 2025 DeepSeek R1 update with improved mathematics, coding, and reasoning","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-05-28","last_updated":"2025-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":164000,"output":32768},"cost":{"input":0.66,"output":2.6,"cache_read":0.165},"canonical_model_id":"deepseek/deepseek-r1-0528"},"tensorx/deepseek/deepseek-v4-pro-0813":{"id":"tensorx/deepseek/deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813 (TensorX)","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":2,"output":4,"cache_read":0.5},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"tensorx/deepseek/deepseek-v4.1-flash":{"id":"tensorx/deepseek/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash (TensorX)","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.5,"output":1.5,"cache_read":0.125},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"tensorx/deepseek/deepseek-v4-flash-0731":{"id":"tensorx/deepseek/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731 (TensorX)","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.25,"output":0.3,"cache_read":0.0625},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"tensorx/deepseek/deepseek-v4.1-flash-1017":{"id":"tensorx/deepseek/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017 (TensorX)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.5,"output":1.5,"cache_read":0.125},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"tensorx/moonshotai/kimi-k2.5":{"id":"tensorx/moonshotai/kimi-k2.5","name":"Kimi K2.5 (TensorX)","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.5,"output":2.8,"cache_read":0.125},"canonical_model_id":"moonshotai/kimi-k2.5"},"cloudflare/@cf/aisingapore/gemma-sea-lion-v4-27b-it":{"id":"cloudflare/@cf/aisingapore/gemma-sea-lion-v4-27b-it","name":"Gemma-SEA-LION-v4-27B-IT (Cloudflare)","description":"Gemma 3 27B tuned by AI Singapore for Southeast Asian languages and instruction following","family":"gemma","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"cost":{"input":0.351,"output":0.555},"canonical_model_id":"aisingapore/gemma-sea-lion-v4-27b-it"},"cloudflare/@cf/qwen/qwen2.5-coder-32b-instruct":{"id":"cloudflare/@cf/qwen/qwen2.5-coder-32b-instruct","name":"Qwen2.5-Coder-32B-Instruct (Cloudflare)","description":"Open coding-focused Qwen model for code generation, repair, and repository reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2024-11-12","last_updated":"2024-11-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":8192},"cost":{"input":0.66,"output":1},"canonical_model_id":"alibaba/qwen2.5-coder-32b-instruct"},"cloudflare/@cf/deepseek-ai/deepseek-v4-pro-0813":{"id":"cloudflare/@cf/deepseek-ai/deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813 (Cloudflare)","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":1.32,"output":3.96,"cache_read":0.044},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"cloudflare/@cf/deepseek-ai/deepseek-v4-flash-0731":{"id":"cloudflare/@cf/deepseek-ai/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731 (Cloudflare)","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.44,"output":1.32,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"cloudflare/@cf/deepseek-ai/deepseek-v4.1-flash-1017":{"id":"cloudflare/@cf/deepseek-ai/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017 (Cloudflare)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"cloudflare/@cf/mistralai/mistral-small-3.1-24b-instruct":{"id":"cloudflare/@cf/mistralai/mistral-small-3.1-24b-instruct","name":"Mistral Small 3.1 24B (Cloudflare)","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-10-31","release_date":"2025-03-17","last_updated":"2025-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":102400},"cost":{"input":0.351,"output":0.555},"canonical_model_id":"mistral/mistral-small-3.1-24b-instruct"},"cloudflare/@cf/openai/gpt-oss-20b":{"id":"cloudflare/@cf/openai/gpt-oss-20b","name":"GPT OSS 20B (Cloudflare)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0.2,"output":0.3},"canonical_model_id":"openai/gpt-oss-20b"},"cloudflare/@cf/openai/gpt-oss-120b":{"id":"cloudflare/@cf/openai/gpt-oss-120b","name":"GPT OSS 120B (Cloudflare)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0.35,"output":0.75},"canonical_model_id":"openai/gpt-oss-120b"},"cloudflare/@cf/meta/llama-3.2-3b-instruct":{"id":"cloudflare/@cf/meta/llama-3.2-3b-instruct","name":"Llama 3.2 3B Instruct (Cloudflare)","description":"Small instruction-tuned Llama model for multilingual dialogue and agentic retrieval","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":80000,"output":131072},"cost":{"input":0.0509,"output":0.335},"canonical_model_id":"meta/llama-3.2-3b-instruct"},"cloudflare/@cf/meta/llama-guard-3-8b":{"id":"cloudflare/@cf/meta/llama-guard-3-8b","name":"Llama-Guard-3-8B (Cloudflare)","description":"Llama 3.1-based safety classifier for moderating prompts and model responses","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":4096},"cost":{"input":0.484,"output":0.03},"canonical_model_id":"meta/llama-guard-3-8b"},"cloudflare/@cf/meta/llama-3.2-1b-instruct":{"id":"cloudflare/@cf/meta/llama-3.2-1b-instruct","name":"Llama 3.2 1B Instruct (Cloudflare)","description":"Compact instruction-tuned Llama model for multilingual dialogue and on-device assistants","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":60000,"output":32000},"cost":{"input":0.027,"output":0.201},"canonical_model_id":"meta/llama-3.2-1b-instruct"},"cloudflare/@cf/zai-org/glm-4.7-flash":{"id":"cloudflare/@cf/zai-org/glm-4.7-flash","name":"GLM-4.7-Flash (Cloudflare)","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.0605,"output":0.4},"canonical_model_id":"zhipuai/glm-4.7-flash"},"google/deep-research-preview-04-2026":{"id":"google/deep-research-preview-04-2026","name":"Gemini Deep Research Preview","description":"Agentic model for autonomous multi-step research, synthesis, and cited reports","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":false,"knowledge":"2025-01","release_date":"2026-04-21","last_updated":"2026-04-21","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12},"canonical_model_id":"google/deep-research-preview-04-2026"},"google/gemini-3.1-flash-lite-image":{"id":"google/gemini-3.1-flash-lite-image","type":"image","name":"Nano Banana 2 Lite","description":"Fastest, most cost-efficient Gemini image model for high-volume 1K generation and editing","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","high"]}],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":4096},"cost":{"input":0.25,"output":1.5},"canonical_model_id":"google/gemini-3.1-flash-lite-image"},"google/gemini-3.8-flash":{"id":"google/gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":7.5,"reasoning":7.5,"cache_read":0.15,"cache_write":0.083333,"input_audio":1.5},"canonical_model_id":"google/gemini-3.8-flash"},"google/gemini-3.1-flash-image-preview":{"id":"google/gemini-3.1-flash-image-preview","type":"image","name":"Nano Banana 2 Preview","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","high"]}],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-26","last_updated":"2026-02-26","modalities":{"input":["image","text"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":65536},"cost":{"input":0.5,"output":3},"canonical_model_id":"google/gemini-3.1-flash-image-preview"},"google/gemini-4-carbon":{"id":"google/gemini-4-carbon","name":"Gemini 4 Carbon","description":"Google's most capable reasoning model for complex software engineering, deep math and science, high factual accuracy, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":4,"output":20,"reasoning":20,"cache_read":0.2,"cache_write":0.375,"input_audio":4},"canonical_model_id":"google/gemini-4-carbon"},"google/gemini-pro-latest":{"id":"google/gemini-pro-latest","name":"Gemini Pro Latest (Gemini 4 Argon)","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":4,"output":20,"reasoning":20,"cache_read":0.2,"cache_write":0.375,"input_audio":4},"canonical_model_id":"google/gemini-4-argon"},"google/gemini-robotics-er-2-preview":{"id":"google/gemini-robotics-er-2-preview","name":"Gemini Robotics-ER 2 Preview","description":"Embodied reasoning model for robotics: spatial understanding, video progress, and multi-robot orchestration","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-30","last_updated":"2026-07-30","modalities":{"input":["text","image","pdf","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":65536},"cost":{"input":1,"output":5,"reasoning":5,"cache_read":0.1,"input_audio":1},"canonical_model_id":"google/gemini-robotics-er-2-preview"},"google/gemini-3.5-flash":{"id":"google/gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"reasoning":9,"cache_read":0.15,"cache_write":0.083333,"input_audio":3},"canonical_model_id":"google/gemini-3.5-flash"},"google/gemini-flash-latest":{"id":"google/gemini-flash-latest","name":"Gemini Flash Latest (Gemini 3.8 Flash)","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":7.5,"reasoning":7.5,"cache_read":0.15,"cache_write":0.083333,"input_audio":1.5},"canonical_model_id":"google/gemini-3.8-flash"},"google/gemini-3.6-flash":{"id":"google/gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"reasoning":3.75,"cache_read":0.075,"cache_write":0.041667,"input_audio":0.75},"canonical_model_id":"google/gemini-3.6-flash"},"google/gemini-3.1-flash-image":{"id":"google/gemini-3.1-flash-image","type":"image","name":"Nano Banana 2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","high"]}],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["image","text"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":32768},"cost":{"input":0.5,"output":3},"canonical_model_id":"google/gemini-3.1-flash-image"},"google/gemini-3.1-pro-preview-customtools":{"id":"google/gemini-3.1-pro-preview-customtools","name":"Gemini 3.1 Pro Preview Custom Tools","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"reasoning":12,"cache_read":0.2,"cache_write":0.375,"input_audio":2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview-customtools"},"google/gemini-3.1-pro-preview":{"id":"google/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"reasoning":12,"cache_read":0.2,"cache_write":0.375,"input_audio":2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"google/gemini-3.1-flash-lite":{"id":"google/gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"reasoning":1.5,"cache_read":0.025,"cache_write":0.083333,"input_audio":0.5},"canonical_model_id":"google/gemini-3.1-flash-lite"},"google/gemini-4-argon":{"id":"google/gemini-4-argon","name":"Gemini 4 Argon","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":4,"output":20,"reasoning":20,"cache_read":0.2,"cache_write":0.375,"input_audio":4},"canonical_model_id":"google/gemini-4-argon"},"google/deep-research-max-preview-04-2026":{"id":"google/deep-research-max-preview-04-2026","name":"Deep Research Max Preview","description":"Maximum-comprehensiveness agentic researcher for multi-step investigation, synthesis, and cited reports","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":false,"knowledge":"2025-01","release_date":"2026-04-21","last_updated":"2026-04-21","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12},"canonical_model_id":"google/deep-research-max-preview-04-2026"},"google/gemini-3.1-flash-lite-preview":{"id":"google/gemini-3.1-flash-lite-preview","name":"Gemini 3.1 Flash Lite Preview","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-03-03","last_updated":"2026-03-03","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"reasoning":1.5,"cache_read":0.025,"cache_write":0.083333,"input_audio":0.5},"canonical_model_id":"google/gemini-3.1-flash-lite-preview"},"google/gemini-3-pro-image-preview":{"id":"google/gemini-3-pro-image-preview","type":"image","name":"Nano Banana Pro Preview","description":"Nano Banana Pro for higher-fidelity image generation and design-heavy edits","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-11-20","last_updated":"2025-11-20","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":32768},"cost":{"input":2,"output":12,"reasoning":12,"cache_read":0.2,"cache_write":0.375,"input_audio":2},"canonical_model_id":"google/gemini-3-pro-image-preview"},"google/gemini-3.5-flash-lite":{"id":"google/gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"reasoning":2.5,"cache_read":0.03,"cache_write":0.083333,"input_audio":0.3},"canonical_model_id":"google/gemini-3.5-flash-lite"},"google/gemini-3-flash-preview":{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.5,"output":3,"reasoning":3,"cache_read":0.05,"cache_write":0.083333,"input_audio":1},"canonical_model_id":"google/gemini-3-flash-preview"},"google/gemini-2.5-flash-image":{"id":"google/gemini-2.5-flash-image","type":"image","name":"Nano Banana","description":"Nano Banana image model for fast generation, edits, and character-consistent assets","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-26","last_updated":"2025-08-26","modalities":{"input":["audio","image","text","video"],"output":["text","image"]},"open_weights":false,"limit":{"context":32768,"output":32768},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"cache_write":0.083333,"input_audio":1},"canonical_model_id":"google/gemini-2.5-flash-image"},"google/gemini-3-pro-image":{"id":"google/gemini-3-pro-image","type":"image","name":"Nano Banana Pro","description":"Nano Banana Pro for higher-fidelity image generation and design-heavy edits","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":32768},"cost":{"input":2,"output":12,"reasoning":12,"cache_read":0.2,"cache_write":0.375,"input_audio":2},"canonical_model_id":"google/gemini-3-pro-image"},"google/gemini-3.7-flash":{"id":"google/gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":7.5,"reasoning":7.5,"cache_read":0.15,"cache_write":0.083333,"input_audio":1.5},"canonical_model_id":"google/gemini-3.7-flash"},"google/gemini-nano-banana-2.1":{"id":"google/gemini-nano-banana-2.1","type":"image","name":"Nano Banana 2.1","description":"Image model for prompt-driven generation, multi-turn editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["image","text"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":32768},"cost":{"input":1.5,"output":7.5},"canonical_model_id":"google/gemini-nano-banana-2.1"},"greenference/gpt-oss-20b":{"id":"greenference/gpt-oss-20b","name":"GPT OSS 20B (Greenference)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.009,"output":0.045,"cache_read":0.0045},"canonical_model_id":"openai/gpt-oss-20b"},"flexai/DeepSeek-V4.1-Flash-1017":{"id":"flexai/DeepSeek-V4.1-Flash-1017","name":"DeepSeek V4.1 Flash 1017 (FlexAI)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.15,"output":0.6,"cache_read":0.0225},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"flexai/DeepSeek-V4-Flash-0731":{"id":"flexai/DeepSeek-V4-Flash-0731","name":"DeepSeek V4 Flash 0731 (FlexAI)","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.119,"output":0.238,"cache_read":0.0178},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"flexai/gpt-oss-20b":{"id":"flexai/gpt-oss-20b","name":"GPT OSS 20B (FlexAI)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.02,"output":0.1,"cache_read":0.003},"canonical_model_id":"openai/gpt-oss-20b"},"flexai/DeepSeek-V4-Flash-0731@eu":{"id":"flexai/DeepSeek-V4-Flash-0731@eu","name":"DeepSeek V4 Flash 0731 (FlexAI, EU)","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.119,"output":0.238,"cache_read":0.0178},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"flexai/Muse-Glimmer-30B":{"id":"flexai/Muse-Glimmer-30B","name":"Muse Glimmer 30B (FlexAI)","description":"Muse Glimmer is a 30-billion-parameter open-weight multimodal model from Meta Superintelligence Labs, distilled from Muse Spark for always-on local agents, tool use, coding, and image understanding.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-08-10","last_updated":"2026-08-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.045},"canonical_model_id":"meta/muse-glimmer-30b"},"flexai/gpt-oss-120b":{"id":"flexai/gpt-oss-120b","name":"GPT OSS 120B (FlexAI)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.05,"output":0.25,"cache_read":0.0075},"canonical_model_id":"openai/gpt-oss-120b"},"qwen/qwen3.8-omni-flash":{"id":"qwen/qwen3.8-omni-flash","name":"Qwen3.8 Omni Flash","description":"Qwen omni model for text, vision, audio, and multimodal agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-17","last_updated":"2026-09-17","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.47},"canonical_model_id":"alibaba/qwen3.8-omni-flash"},"qwen/qwen-max":{"id":"qwen/qwen-max","name":"Qwen Max","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-04-03","last_updated":"2025-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":8192},"cost":{"input":1.6,"output":6.4,"cache_read":0.32},"canonical_model_id":"alibaba/qwen-max"},"qwen/qwen3.8-27b":{"id":"qwen/qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":32768},"cost":{"input":0.5,"output":3,"cache_read":0.1,"cache_write":0.625},"canonical_model_id":"alibaba/qwen3.8-27b"},"qwen/deepseek-v4-pro-0813":{"id":"qwen/deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813 (Alibaba)","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.66,"output":1.98,"cache_read":0.066},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"qwen/qwen3.8-flash":{"id":"qwen/qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.47,"cache_read":0.016,"cache_write":0.2},"canonical_model_id":"alibaba/qwen3.8-flash"},"qwen/qwen-mt-plus":{"id":"qwen/qwen-mt-plus","name":"Qwen MT Plus","description":"Flagship Qwen translation model with terminology control and support for 92 languages","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-07-24","last_updated":"2025-07-24","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":4096,"output":8192},"cost":{"input":2.46,"output":7.37},"canonical_model_id":"alibaba/qwen-mt-plus"},"qwen/deepseek-v4.1-flash":{"id":"qwen/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash (Alibaba)","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"qwen/qwen3.8-max-0902":{"id":"qwen/qwen3.8-max-0902","name":"Qwen3.8 Max 0902","description":"2026-09-02 upgraded snapshot of Qwen3.8 Max with stronger coding, collaborative agents, and multimodal document understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max-0902"},"qwen/qwen3.8-2.4t-a95b":{"id":"qwen/qwen3.8-2.4t-a95b","name":"Qwen3.8 2.4T A95B","description":"Open-weight sparse MoE (2.4T total, 95B active), the open-weight twin of Qwen3.8 Max for coding, research, complex reasoning, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"qwen/deepseek-v4-flash-0731":{"id":"qwen/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731 (Alibaba)","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.22,"output":0.66,"cache_read":0.022},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"qwen/qwen3.8-max":{"id":"qwen/qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max"},"qwen/deepseek-v4.1-flash-1017":{"id":"qwen/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017 (Alibaba)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"qwen/qwen3-coder-flash":{"id":"qwen/qwen3-coder-flash","name":"Qwen3 Coder Flash","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.3,"output":1.5,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"alibaba/qwen3-coder-flash"},"together_ai/meta-models/Muse-Glimmer-30B":{"id":"together_ai/meta-models/Muse-Glimmer-30B","name":"Muse Glimmer 30B (Together AI)","description":"Muse Glimmer is a 30-billion-parameter open-weight multimodal model from Meta Superintelligence Labs, distilled from Muse Spark for always-on local agents, tool use, coding, and image understanding.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-08-10","last_updated":"2026-08-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.35,"output":1.5,"cache_read":0.04},"canonical_model_id":"meta/muse-glimmer-30b"},"together_ai/deepseek-ai/DeepSeek-V4.1-Flash-1017":{"id":"together_ai/deepseek-ai/DeepSeek-V4.1-Flash-1017","name":"DeepSeek V4.1 Flash 1017 (Together AI)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"together_ai/deepseek-ai/DeepSeek-V4.1-Flash":{"id":"together_ai/deepseek-ai/DeepSeek-V4.1-Flash","name":"DeepSeek V4.1 Flash (Together AI)","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"together_ai/deepseek-ai/DeepSeek-V4-Pro-0813":{"id":"together_ai/deepseek-ai/DeepSeek-V4-Pro-0813","name":"DeepSeek V4 Pro 0813 (Together AI)","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":1.32,"output":3.96,"cache_read":0.13},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"together_ai/openai/gpt-oss-120b":{"id":"together_ai/openai/gpt-oss-120b","name":"GPT OSS 120B (Together AI)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"openai/gpt-oss-120b"},"together_ai/thinkingmachines/Inkling":{"id":"together_ai/thinkingmachines/Inkling","name":"Inkling (Together AI)","description":"Multimodal MoE reasoning model (975B total, 41B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":1048576},"cost":{"input":1,"output":4.05,"cache_read":0.17},"canonical_model_id":"thinkingmachines/inkling"},"together_ai/reflection/Beam-1.0-501B-A23B":{"id":"together_ai/reflection/Beam-1.0-501B-A23B","name":"Beam 1.0 501B A23B (Together AI)","description":"Sparse mixture-of-experts reasoning model with 23B active parameters for coding and agentic workflows","family":"beam","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-06-30","release_date":"2026-10-05","last_updated":"2026-10-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.4,"output":1.2,"cache_read":0.04},"canonical_model_id":"reflection/beam-1.0-501b-a23b"},"zai/glm-5.2":{"id":"zai/glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"zai/glm-4.6v":{"id":"zai/glm-4.6v","name":"GLM-4.6V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.3,"output":0.9,"cache_read":0.05},"canonical_model_id":"zhipuai/glm-4.6v"},"zai/glm-5.1":{"id":"zai/glm-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.1"},"zai/glm-4.7":{"id":"zai/glm-4.7","name":"GLM-4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":0.6,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.7"},"zai/glm-5.3":{"id":"zai/glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"zai/glm-5.3-flash":{"id":"zai/glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai/glm-5-turbo":{"id":"zai/glm-5-turbo","name":"GLM-5-Turbo","description":"Faster GLM-5 lane for coding agents that need lower latency","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":202752,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24},"canonical_model_id":"zhipuai/glm-5-turbo"},"zai/glm-4.6":{"id":"zai/glm-4.6","name":"GLM-4.6","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":0.6,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.6"},"zai/glm-5v-turbo":{"id":"zai/glm-5v-turbo","name":"GLM-5V-Turbo","description":"Fast GLM vision model for screenshots, documents, and multimodal agent tasks","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["image","text","video"],"output":["text"]},"open_weights":false,"limit":{"context":202752,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24},"canonical_model_id":"zhipuai/glm-5v-turbo"},"zai/glm-5":{"id":"zai/glm-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":1,"output":3.2,"cache_read":0.2},"canonical_model_id":"zhipuai/glm-5"},"fireworks_ai/gpt-oss-120b":{"id":"fireworks_ai/gpt-oss-120b","name":"GPT OSS 120B (Fireworks AI)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.15,"output":0.6,"cache_read":0.014},"canonical_model_id":"openai/gpt-oss-120b"},"fireworks_ai/accounts/fireworks/models/muse-spark-open":{"id":"fireworks_ai/accounts/fireworks/models/muse-spark-open","name":"Muse Spark Open (Fireworks AI)","description":"Muse Spark Open is an 816B total / 42B active open-weight multimodal reasoning model from Meta for coding and long-horizon agentic work, with 1M-token context.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-open"},"fireworks_ai/accounts/fireworks/models/ember-1":{"id":"fireworks_ai/accounts/fireworks/models/ember-1","name":"Ember-1 (Fireworks AI)","description":"Specialized model from Fireworks built on Kimi K3, producing shorter reasoning traces with approximately 40% fewer tokens while maintaining comparable quality","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"fireworks/ember-1"},"fireworks_ai/accounts/fireworks/models/inkling":{"id":"fireworks_ai/accounts/fireworks/models/inkling","name":"Inkling (Fireworks AI)","description":"Multimodal MoE reasoning model (975B total, 41B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":1,"output":4.05,"cache_read":0.17},"canonical_model_id":"thinkingmachines/inkling"},"fireworks_ai/accounts/fireworks/models/gpt-oss-120b":{"id":"fireworks_ai/accounts/fireworks/models/gpt-oss-120b","name":"GPT OSS 120B (Fireworks AI)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"openai/gpt-oss-120b"},"nebius/meta-models/muse-spark-open":{"id":"nebius/meta-models/muse-spark-open","name":"Muse Spark Open (Nebius)","description":"Muse Spark Open is an 816B total / 42B active open-weight multimodal reasoning model from Meta for coding and long-horizon agentic work, with 1M-token context.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":1.25},"canonical_model_id":"meta/muse-spark-open"},"nebius/google/gemma-3-27b-it":{"id":"nebius/google/gemma-3-27b-it","name":"Gemma 3 27B IT (Nebius)","description":"Largest open Gemma 3 instruction model for multilingual text generation and visual understanding","family":"gemma","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":110000,"output":131072},"cost":{"input":0.1,"output":0.3,"cache_read":0.1},"canonical_model_id":"google/gemma-3-27b-it"},"nebius/deepseek-ai/DeepSeek-V4.1-Flash-1017":{"id":"nebius/deepseek-ai/DeepSeek-V4.1-Flash-1017","name":"DeepSeek V4.1 Flash 1017 (Nebius)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.3,"output":1.2,"cache_read":0.3},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"nebius/deepseek-ai/DeepSeek-V4-Pro-0813":{"id":"nebius/deepseek-ai/DeepSeek-V4-Pro-0813","name":"DeepSeek V4 Pro 0813 (Nebius)","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":1.32,"output":3.96,"cache_read":1.32},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"nebius/openai/gpt-oss-120b":{"id":"nebius/openai/gpt-oss-120b","name":"GPT OSS 120B (Nebius)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.15,"output":0.6,"cache_read":0.15},"canonical_model_id":"openai/gpt-oss-120b"},"nebius/Qwen/Qwen3-30B-A3B-Instruct-2507":{"id":"nebius/Qwen/Qwen3-30B-A3B-Instruct-2507","name":"Qwen3 30B-A3B Instruct 2507 (Nebius)","description":"Updated compact Qwen3 MoE instruct model for multilingual chat, coding, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0.1,"output":0.3,"cache_read":0.1},"canonical_model_id":"alibaba/qwen3-30b-a3b-instruct-2507"},"nebius/Qwen/Qwen3-235B-A22B-Instruct-2507":{"id":"nebius/Qwen/Qwen3-235B-A22B-Instruct-2507","name":"Qwen3 235B-A22B Instruct 2507 (Nebius)","description":"Updated large open Qwen3 MoE instruct model for multilingual chat, coding, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0.2,"output":0.6,"cache_read":0.2},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"nebius/nvidia/Nemotron-3-Ultra-550b-a55b":{"id":"nebius/nvidia/Nemotron-3-Ultra-550b-a55b","name":"Nemotron 3 Ultra 550B A55B (Nebius)","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":128000},"cost":{"input":1,"output":3,"cache_read":1},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"nebius/nvidia/nemotron-3-super-120b-a12b":{"id":"nebius/nvidia/nemotron-3-super-120b-a12b","name":"Nemotron 3 Super 120B A12B (Nebius)","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.3,"output":0.9,"cache_read":0.3},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"},"tencent/step-5-preview":{"id":"tencent/step-5-preview","name":"Step 5 Preview (Tencent)","description":"StepFun's next-generation flagship base model for coding and professional knowledge work, with native text, image, and video input and a 1M-token context window","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":1000000},"cost":{"input":1,"output":2.7,"cache_read":0.05},"canonical_model_id":"stepfun/step-5-preview"},"tencent/hy4":{"id":"tencent/hy4","name":"Hy4 (Tencent)","description":"A next-generation multimodal productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-04","last_updated":"2026-11-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.834,"output":2.501,"cache_read":0.042},"canonical_model_id":"tencent/hy4"},"tencent/deepseek-v4-pro-0813":{"id":"tencent/deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813 (Tencent)","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.66,"output":1.98,"cache_read":0.022},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"tencent/deepseek-v4.1-flash":{"id":"tencent/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash (Tencent)","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"tencent/hy3":{"id":"tencent/hy3","name":"Hy3 (Tencent)","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":192000,"output":128000},"cost":{"input":0.132,"output":0.528,"cache_read":0.033},"canonical_model_id":"tencent/hy3"},"tencent/hy4-preview":{"id":"tencent/hy4-preview","name":"Hy4 preview (Tencent)","description":"A next-generation productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-28","last_updated":"2026-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":64000},"cost":{"input":0.834,"output":2.501,"cache_read":0.042},"canonical_model_id":"tencent/hy4-preview"},"tencent/deepseek-v4.1-flash-1017":{"id":"tencent/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017 (Tencent)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"microsoft/o3-mini":{"id":"microsoft/o3-mini","name":"o3-mini (Microsoft)","description":"Smaller o-series reasoner for economical coding, math, and planning tasks","family":"o-mini","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":false,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2024-12-20","last_updated":"2025-01-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":1.1,"output":4.4,"cache_read":0.55},"canonical_model_id":"openai/o3-mini"},"microsoft/gpt-4":{"id":"microsoft/gpt-4","name":"GPT-4 (Microsoft)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-11","release_date":"2023-11-06","last_updated":"2024-04-09","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8191,"output":8192},"cost":{"input":30,"output":60},"canonical_model_id":"openai/gpt-4"},"greenpt/qwen3-235b-a22b-instruct-2507":{"id":"greenpt/qwen3-235b-a22b-instruct-2507","name":"Qwen3 235B-A22B Instruct 2507 (Greenpt)","description":"Updated large open Qwen3 MoE instruct model for multilingual chat, coding, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":250000,"output":16384},"cost":{"input":1.00143,"output":3.004289},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"greenpt/deepseek-v4.1-flash":{"id":"greenpt/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash (Greenpt)","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.244794,"output":1.22397,"cache_read":0.01224},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"greenpt/llama-3.3-70b-instruct":{"id":"greenpt/llama-3.3-70b-instruct","name":"Llama-3.3-70B-Instruct (Greenpt)","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"cost":{"input":1.22397,"output":1.22397},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"greenpt/deepseek-v4-flash-0731":{"id":"greenpt/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731 (Greenpt)","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.155778,"output":0.389445,"cache_read":0.044508},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"greenpt/gpt-oss-120b":{"id":"greenpt/gpt-oss-120b","name":"GPT OSS 120B (Greenpt)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0.22254,"output":0.77889},"canonical_model_id":"openai/gpt-oss-120b"},"groq/openai/gpt-oss-safeguard-20b":{"id":"groq/openai/gpt-oss-safeguard-20b","name":"GPT OSS Safeguard 20B (Groq)","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-29","last_updated":"2025-10-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.075,"output":0.3,"cache_read":0.0375},"canonical_model_id":"openai/gpt-oss-safeguard-20b"},"groq/openai/gpt-oss-20b":{"id":"groq/openai/gpt-oss-20b","name":"GPT OSS 20B (Groq)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.075,"output":0.3,"cache_read":0.0375},"canonical_model_id":"openai/gpt-oss-20b"},"groq/openai/gpt-oss-120b":{"id":"groq/openai/gpt-oss-120b","name":"GPT OSS 120B (Groq)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-oss-120b"},"groq/meta-llama/llama-prompt-guard-2-86m":{"id":"groq/meta-llama/llama-prompt-guard-2-86m","name":"Llama Prompt Guard 2 86M (Groq)","description":"86M-parameter (mDeBERTa-base) multilingual classifier that detects prompt injection and jailbreak attempts","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2025-04-29","last_updated":"2025-04-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":512,"output":512},"cost":{"input":0.04,"output":0.04,"cache_read":0.02},"canonical_model_id":"meta/llama-prompt-guard-2-86m"},"groq/meta-llama/llama-prompt-guard-2-22m":{"id":"groq/meta-llama/llama-prompt-guard-2-22m","name":"Llama Prompt Guard 2 22M (Groq)","description":"22M-parameter (DeBERTa-xsmall) English classifier that detects prompt injection and jailbreak attempts","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2025-04-29","last_updated":"2025-04-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":512,"output":512},"cost":{"input":0.03,"output":0.03,"cache_read":0.015},"canonical_model_id":"meta/llama-prompt-guard-2-22m"},"openai/gpt-5.2-pro":{"id":"openai/gpt-5.2-pro","name":"GPT-5.2 Pro","description":"Higher-accuracy GPT-5.2 variant for tougher reasoning and review workflows","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["image","text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":21,"output":168},"canonical_model_id":"openai/gpt-5.2-pro"},"openai/gpt-5.5":{"id":"openai/gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"openai/gpt-5.2":{"id":"openai/gpt-5.2","name":"GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"openai/gpt-4.1-mini":{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-4.1-mini"},"openai/gpt-5.4-mini":{"id":"openai/gpt-5.4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"openai/gpt-5":{"id":"openai/gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"openai/gpt-mini-latest":{"id":"openai/gpt-mini-latest","name":"GPT Mini Latest (GPT-5.6 Luna)","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-5.6-sol":{"id":"openai/gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"openai/gpt-6.1-terra":{"id":"openai/gpt-6.1-terra","name":"GPT-6.1 Terra","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25,"tiers":[{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5}},"canonical_model_id":"openai/gpt-6.1-terra"},"openai/gpt-4.1":{"id":"openai/gpt-4.1","name":"GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"openai/o3":{"id":"openai/o3","name":"o3","description":"Deliberate o-series reasoner for hard math, coding, and multi-step analysis","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/o3"},"openai/gpt-4o-2024-11-20":{"id":"openai/gpt-4o-2024-11-20","name":"GPT-4o (2024-11-20)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-11-20","last_updated":"2024-11-20","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o-2024-11-20"},"openai/gpt-6-luna":{"id":"openai/gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"openai/gpt-5-pro":{"id":"openai/gpt-5-pro","name":"GPT-5 Pro","description":"Higher-accuracy GPT-5 tier for tough analysis, coding reviews, and planning","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["image","text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":272000},"cost":{"input":15,"output":120},"canonical_model_id":"openai/gpt-5-pro"},"openai/gpt-6-sol":{"id":"openai/gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"openai/gpt-5-search-api":{"id":"openai/gpt-5-search-api","type":"chat","name":"GPT-5 Search API","description":"GPT-5 model trained for web search in the Chat Completions API","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2025-10-14","last_updated":"2025-10-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":272000,"output":100000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5-search-api"},"openai/gpt-5.3-codex":{"id":"openai/gpt-5.3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"openai/gpt-6-astra":{"id":"openai/gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"openai/gpt-5.1":{"id":"openai/gpt-5.1","name":"GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["image","text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1"},"openai/gpt-latest":{"id":"openai/gpt-latest","name":"GPT Latest (GPT-6 Astra)","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"openai/gpt-5-mini":{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"openai/gpt-5.5-pro":{"id":"openai/gpt-5.5-pro","name":"GPT-5.5 Pro","description":"Highest-accuracy GPT-5.5 tier for slower, precision-heavy reasoning and coding","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.5-pro"},"openai/gpt-pro-latest":{"id":"openai/gpt-pro-latest","name":"GPT Pro Latest (GPT-5.6 Sol)","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"openai/gpt-5.6-luna":{"id":"openai/gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-6.1-sol":{"id":"openai/gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-sol"},"openai/gpt-5.4-pro":{"id":"openai/gpt-5.4-pro","name":"GPT-5.4 Pro","description":"More exact GPT-5.4 tier for demanding professional reasoning and agent tasks","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.4-pro"},"openai/gpt-5-nano":{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-nano"},"openai/gpt-5.4":{"id":"openai/gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5}},"canonical_model_id":"openai/gpt-5.4"},"openai/o3-pro":{"id":"openai/o3-pro","name":"o3-pro","description":"High-effort o3 tier for difficult technical reasoning and careful answers","family":"o-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-06-10","last_updated":"2025-06-10","modalities":{"input":["text","pdf","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":20,"output":80},"canonical_model_id":"openai/o3-pro"},"openai/gpt-4o-2024-08-06":{"id":"openai/gpt-4o-2024-08-06","name":"GPT-4o (2024-08-06)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-08-06","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o-2024-08-06"},"openai/gpt-5.4-nano":{"id":"openai/gpt-5.4-nano","name":"GPT-5.4 nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"openai/gpt-4o":{"id":"openai/gpt-4o","name":"GPT-4o","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o"},"openai/gpt-5.6-terra":{"id":"openai/gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"openai/gpt-4o-mini":{"id":"openai/gpt-4o-mini","name":"GPT-4o mini","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-4o-mini"},"cohere/command-r-plus-08-2024":{"id":"cohere/command-r-plus-08-2024","name":"Command R+","description":"Cohere's RAG workhorse for long-context enterprise search and tool use","family":"command-r","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2024-08-30","last_updated":"2024-08-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4000},"cost":{"input":2.5,"output":10},"canonical_model_id":"cohere/command-r-plus-08-2024"},"cohere/command-r7b-12-2024":{"id":"cohere/command-r7b-12-2024","name":"Command R7B","description":"Cohere retrieval model for long-context chat and enterprise RAG workflows","family":"command-r","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2024-12-13","last_updated":"2024-12-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":132000,"output":4000},"cost":{"input":0.0375,"output":0.15},"canonical_model_id":"cohere/command-r7b-12-2024"},"cohere/c4ai-aya-expanse-32b":{"id":"cohere/c4ai-aya-expanse-32b","name":"Aya Expanse 32B","description":"Open multilingual model optimized for generation across 23 languages","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2024-10-24","last_updated":"2024-10-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4000},"cost":{"input":0.5,"output":1.5},"canonical_model_id":"cohere/c4ai-aya-expanse-32b"},"cohere/command-r-08-2024":{"id":"cohere/command-r-08-2024","name":"Command R","description":"Cohere retrieval model for long-context chat and enterprise RAG workflows","family":"command-r","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2024-08-30","last_updated":"2024-08-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4000},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"cohere/command-r-08-2024"},"cohere/command-a-03-2025":{"id":"cohere/command-a-03-2025","name":"Command A","description":"Cohere command model for multilingual enterprise agents, tools, and chat","family":"command-a","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2025-03-13","last_updated":"2025-03-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":288000,"output":8000},"cost":{"input":2.5,"output":10},"canonical_model_id":"cohere/command-a-03-2025"},"vertex/gemini-3.6-flash@us":{"id":"vertex/gemini-3.6-flash@us","name":"Gemini 3.6 Flash (Vertex AI, US)","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"reasoning":3.75,"cache_read":0.075,"cache_write":0.041667,"input_audio":0.75},"canonical_model_id":"google/gemini-3.6-flash"},"vertex/gemini-3.1-flash-lite-image":{"id":"vertex/gemini-3.1-flash-lite-image","type":"image","name":"Nano Banana 2 Lite (Vertex AI)","description":"Fastest, most cost-efficient Gemini image model for high-volume 1K generation and editing","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","high"]}],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":4096},"cost":{"input":0.25,"output":1.5},"canonical_model_id":"google/gemini-3.1-flash-lite-image"},"vertex/gemini-3.8-flash":{"id":"vertex/gemini-3.8-flash","name":"Gemini 3.8 Flash (Vertex AI)","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":7.5,"reasoning":7.5,"cache_read":0.15,"cache_write":0.083333,"input_audio":1.5},"canonical_model_id":"google/gemini-3.8-flash"},"vertex/gemini-4-carbon":{"id":"vertex/gemini-4-carbon","name":"Gemini 4 Carbon (Vertex AI)","description":"Google's most capable reasoning model for complex software engineering, deep math and science, high factual accuracy, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":4,"output":20,"reasoning":20,"cache_read":0.2,"cache_write":0.375,"input_audio":4},"canonical_model_id":"google/gemini-4-carbon"},"vertex/gemini-3.6-flash@eu":{"id":"vertex/gemini-3.6-flash@eu","name":"Gemini 3.6 Flash (Vertex AI, EU)","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"reasoning":3.75,"cache_read":0.075,"cache_write":0.041667,"input_audio":0.75},"canonical_model_id":"google/gemini-3.6-flash"},"vertex/gemini-3.7-flash@us":{"id":"vertex/gemini-3.7-flash@us","name":"Gemini 3.7 Flash (Vertex AI, US)","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":7.5,"reasoning":7.5,"cache_read":0.15,"cache_write":0.083333,"input_audio":1.5},"canonical_model_id":"google/gemini-3.7-flash"},"vertex/gemini-4-argon@eu":{"id":"vertex/gemini-4-argon@eu","name":"Gemini 4 Argon (Vertex AI, EU)","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":4,"output":20,"reasoning":20,"cache_read":0.2,"cache_write":0.375,"input_audio":4},"canonical_model_id":"google/gemini-4-argon"},"vertex/gemini-4-carbon@us":{"id":"vertex/gemini-4-carbon@us","name":"Gemini 4 Carbon (Vertex AI, US)","description":"Google's most capable reasoning model for complex software engineering, deep math and science, high factual accuracy, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":4,"output":20,"reasoning":20,"cache_read":0.2,"cache_write":0.375,"input_audio":4},"canonical_model_id":"google/gemini-4-carbon"},"vertex/gemini-3.1-flash-lite@eu":{"id":"vertex/gemini-3.1-flash-lite@eu","name":"Gemini 3.1 Flash Lite (Vertex AI, EU)","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"reasoning":1.5,"cache_read":0.025,"cache_write":0.083333,"input_audio":0.5},"canonical_model_id":"google/gemini-3.1-flash-lite"},"vertex/gemini-pro-latest":{"id":"vertex/gemini-pro-latest","name":"Gemini Pro Latest (Gemini 4 Argon, Vertex AI)","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":4,"output":20,"reasoning":20,"cache_read":0.2,"cache_write":0.375,"input_audio":4},"canonical_model_id":"google/gemini-4-argon"},"vertex/gemini-3.5-flash":{"id":"vertex/gemini-3.5-flash","name":"Gemini 3.5 Flash (Vertex AI)","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"reasoning":9,"cache_read":0.15,"cache_write":0.083333,"input_audio":3},"canonical_model_id":"google/gemini-3.5-flash"},"vertex/gemini-3.1-flash-lite@us":{"id":"vertex/gemini-3.1-flash-lite@us","name":"Gemini 3.1 Flash Lite (Vertex AI, US)","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"reasoning":1.5,"cache_read":0.025,"cache_write":0.083333,"input_audio":0.5},"canonical_model_id":"google/gemini-3.1-flash-lite"},"vertex/gemini-flash-latest":{"id":"vertex/gemini-flash-latest","name":"Gemini Flash Latest (Gemini 3.8 Flash, Vertex AI)","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":7.5,"reasoning":7.5,"cache_read":0.15,"cache_write":0.083333,"input_audio":1.5},"canonical_model_id":"google/gemini-3.8-flash"},"vertex/gemini-3.6-flash":{"id":"vertex/gemini-3.6-flash","name":"Gemini 3.6 Flash (Vertex AI)","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"reasoning":3.75,"cache_read":0.075,"cache_write":0.041667,"input_audio":0.75},"canonical_model_id":"google/gemini-3.6-flash"},"vertex/gemini-3.5-flash@eu":{"id":"vertex/gemini-3.5-flash@eu","name":"Gemini 3.5 Flash (Vertex AI, EU)","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"reasoning":9,"cache_read":0.15,"cache_write":0.083333,"input_audio":3},"canonical_model_id":"google/gemini-3.5-flash"},"vertex/gemini-3.8-flash@us":{"id":"vertex/gemini-3.8-flash@us","name":"Gemini 3.8 Flash (Vertex AI, US)","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":7.5,"reasoning":7.5,"cache_read":0.15,"cache_write":0.083333,"input_audio":1.5},"canonical_model_id":"google/gemini-3.8-flash"},"vertex/gemini-3.5-flash-lite@us":{"id":"vertex/gemini-3.5-flash-lite@us","name":"Gemini 3.5 Flash Lite (Vertex AI, US)","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"reasoning":2.5,"cache_read":0.03,"cache_write":0.083333,"input_audio":0.3},"canonical_model_id":"google/gemini-3.5-flash-lite"},"vertex/gemini-3.8-flash@eu":{"id":"vertex/gemini-3.8-flash@eu","name":"Gemini 3.8 Flash (Vertex AI, EU)","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":7.5,"reasoning":7.5,"cache_read":0.15,"cache_write":0.083333,"input_audio":1.5},"canonical_model_id":"google/gemini-3.8-flash"},"vertex/gemini-3.1-flash-image":{"id":"vertex/gemini-3.1-flash-image","type":"image","name":"Nano Banana 2 (Vertex AI)","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","high"]}],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["image","text"],"output":["text","image"]},"open_weights":false,"limit":{"context":131072,"output":32768},"cost":{"input":0.5,"output":3},"canonical_model_id":"google/gemini-3.1-flash-image"},"vertex/gemini-3.1-pro-preview":{"id":"vertex/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview (Vertex AI)","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"reasoning":12,"cache_read":0.2,"cache_write":0.375,"input_audio":2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"vertex/gemini-3.1-flash-lite":{"id":"vertex/gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite (Vertex AI)","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"reasoning":1.5,"cache_read":0.025,"cache_write":0.083333,"input_audio":0.5},"canonical_model_id":"google/gemini-3.1-flash-lite"},"vertex/gemini-4-argon":{"id":"vertex/gemini-4-argon","name":"Gemini 4 Argon (Vertex AI)","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":4,"output":20,"reasoning":20,"cache_read":0.2,"cache_write":0.375,"input_audio":4},"canonical_model_id":"google/gemini-4-argon"},"vertex/gemini-4-carbon@eu":{"id":"vertex/gemini-4-carbon@eu","name":"Gemini 4 Carbon (Vertex AI, EU)","description":"Google's most capable reasoning model for complex software engineering, deep math and science, high factual accuracy, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":4,"output":20,"reasoning":20,"cache_read":0.2,"cache_write":0.375,"input_audio":4},"canonical_model_id":"google/gemini-4-carbon"},"vertex/gemini-3.5-flash@us":{"id":"vertex/gemini-3.5-flash@us","name":"Gemini 3.5 Flash (Vertex AI, US)","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"reasoning":9,"cache_read":0.15,"cache_write":0.083333,"input_audio":3},"canonical_model_id":"google/gemini-3.5-flash"},"vertex/gemini-3.5-flash-lite":{"id":"vertex/gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite (Vertex AI)","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"reasoning":2.5,"cache_read":0.03,"cache_write":0.083333,"input_audio":0.3},"canonical_model_id":"google/gemini-3.5-flash-lite"},"vertex/gemini-3-flash-preview":{"id":"vertex/gemini-3-flash-preview","name":"Gemini 3 Flash Preview (Vertex AI)","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.5,"output":3,"reasoning":3,"cache_read":0.05,"cache_write":0.083333,"input_audio":1},"canonical_model_id":"google/gemini-3-flash-preview"},"vertex/gemini-2.5-flash-image":{"id":"vertex/gemini-2.5-flash-image","type":"image","name":"Nano Banana (Vertex AI)","description":"Nano Banana image model for fast generation, edits, and character-consistent assets","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-26","last_updated":"2025-08-26","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":32768,"output":32768},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"cache_write":0.083333,"input_audio":1},"canonical_model_id":"google/gemini-2.5-flash-image"},"vertex/gemini-3-pro-image":{"id":"vertex/gemini-3-pro-image","type":"image","name":"Nano Banana Pro (Vertex AI)","description":"Nano Banana Pro for higher-fidelity image generation and design-heavy edits","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":32768},"cost":{"input":2,"output":12,"reasoning":12,"cache_read":0.2,"cache_write":0.375,"input_audio":2},"canonical_model_id":"google/gemini-3-pro-image"},"vertex/gemini-3.7-flash@eu":{"id":"vertex/gemini-3.7-flash@eu","name":"Gemini 3.7 Flash (Vertex AI, EU)","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":7.5,"reasoning":7.5,"cache_read":0.15,"cache_write":0.083333,"input_audio":1.5},"canonical_model_id":"google/gemini-3.7-flash"},"vertex/gemini-3.7-flash":{"id":"vertex/gemini-3.7-flash","name":"Gemini 3.7 Flash (Vertex AI)","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":7.5,"reasoning":7.5,"cache_read":0.15,"cache_write":0.083333,"input_audio":1.5},"canonical_model_id":"google/gemini-3.7-flash"},"vertex/gemini-4-argon@us":{"id":"vertex/gemini-4-argon@us","name":"Gemini 4 Argon (Vertex AI, US)","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":4,"output":20,"reasoning":20,"cache_read":0.2,"cache_write":0.375,"input_audio":4},"canonical_model_id":"google/gemini-4-argon"},"vertex/gemini-3.5-flash-lite@eu":{"id":"vertex/gemini-3.5-flash-lite@eu","name":"Gemini 3.5 Flash Lite (Vertex AI, EU)","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"reasoning":2.5,"cache_read":0.03,"cache_write":0.083333,"input_audio":0.3},"canonical_model_id":"google/gemini-3.5-flash-lite"},"vertex/gemini-nano-banana-2.1":{"id":"vertex/gemini-nano-banana-2.1","type":"image","name":"Nano Banana 2.1 (Vertex AI)","description":"Image model for prompt-driven generation, multi-turn editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","medium","high"]}],"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":131072,"output":32768},"cost":{"input":1.5,"output":7.5},"canonical_model_id":"google/gemini-nano-banana-2.1"},"moonshot/kimi-k3.1-pro":{"id":"moonshot/kimi-k3.1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"moonshot/kimi-k2.6":{"id":"moonshot/kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"moonshot/kimi-k3":{"id":"moonshot/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3},"canonical_model_id":"moonshotai/kimi-k3"},"moonshot/kimi-k2.7-code":{"id":"moonshot/kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"moonshot/kimi-k2.7-code-highspeed":{"id":"moonshot/kimi-k2.7-code-highspeed","name":"Kimi K2.7 Code Highspeed","description":"Lower-latency Kimi Code variant for interactive edits and coding-agent loops","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.9,"output":8,"cache_read":0.38},"canonical_model_id":"moonshotai/kimi-k2.7-code-highspeed"},"cerebras/gpt-oss-120b":{"id":"cerebras/gpt-oss-120b","name":"GPT OSS 120B (Cerebras)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.35,"output":0.75,"cache_read":0.35},"canonical_model_id":"openai/gpt-oss-120b"},"scaleway/qwen3-coder-30b-a3b-instruct":{"id":"scaleway/qwen3-coder-30b-a3b-instruct","name":"Qwen3-Coder 30B-A3B Instruct (Scaleway)","description":"Smaller Qwen coder for efficient local agents and repo-level fixes","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-31","last_updated":"2025-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":65536},"cost":{"input":0.2245,"output":0.898},"canonical_model_id":"alibaba/qwen3-coder-30b-a3b-instruct"},"scaleway/gemma-3-27b-it":{"id":"scaleway/gemma-3-27b-it","name":"Gemma 3 27B IT (Scaleway)","description":"Largest open Gemma 3 instruction model for multilingual text generation and visual understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":40000,"output":131072},"cost":{"input":0.287125,"output":0.57425},"canonical_model_id":"google/gemma-3-27b-it"},"scaleway/qwen3-235b-a22b-instruct-2507":{"id":"scaleway/qwen3-235b-a22b-instruct-2507","name":"Qwen3 235B-A22B Instruct 2507 (Scaleway)","description":"Updated large open Qwen3 MoE instruct model for multilingual chat, coding, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":250000,"output":16384},"cost":{"input":0.834525,"output":2.503575},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"scaleway/deepseek-v4.1-flash":{"id":"scaleway/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash (Scaleway)","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":384000},"cost":{"input":0.669,"output":2.007,"cache_read":0.1338},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"scaleway/llama-3.3-70b-instruct":{"id":"scaleway/llama-3.3-70b-instruct","name":"Llama-3.3-70B-Instruct (Scaleway)","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"cost":{"input":1.00143,"output":1.00143},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"scaleway/deepseek-v4-flash-0731":{"id":"scaleway/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731 (Scaleway)","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":384000},"cost":{"input":0.44508,"output":0.89016,"cache_read":0.089016},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"scaleway/gpt-oss-120b":{"id":"scaleway/gpt-oss-120b","name":"GPT OSS 120B (Scaleway)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0.166905,"output":0.66762},"canonical_model_id":"openai/gpt-oss-120b"},"scaleway/deepseek-v4.1-flash-1017":{"id":"scaleway/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017 (Scaleway)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":384000},"cost":{"input":0.66762,"output":2.00286,"cache_read":0.133524},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"minimax/MiniMax-M2.1":{"id":"minimax/MiniMax-M2.1","name":"MiniMax-M2.1","description":"Earlier MiniMax agent model for practical coding and productivity tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.03},"canonical_model_id":"minimax/MiniMax-M2.1"},"minimax/MiniMax-M2.5":{"id":"minimax/MiniMax-M2.5","name":"MiniMax-M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.03},"canonical_model_id":"minimax/MiniMax-M2.5"},"minimax/MiniMax-M2.7":{"id":"minimax/MiniMax-M2.7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M2.7"},"minimax/MiniMax-M3":{"id":"minimax/MiniMax-M3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":512000},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"},"minimax/MiniMax-M3.1-Flash":{"id":"minimax/MiniMax-M3.1-Flash","name":"MiniMax-M3.1-Flash","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":512000},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"minimax/MiniMax-M2":{"id":"minimax/MiniMax-M2","name":"MiniMax-M2","description":"Efficient open MiniMax model built for coding agents and tool-heavy workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-10-27","last_updated":"2025-10-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2},"canonical_model_id":"minimax/MiniMax-M2"},"meta/muse-spark-1.3":{"id":"meta/muse-spark-1.3","name":"Muse Spark 1.3 (Meta)","description":"Muse Spark 1.3 is a multimodal reasoning model from Meta for long-running agentic, multi-agent, and coding workflows. It improves long-horizon agent collaboration, instruction following, and coding efficiency relative to Muse Spark 1.2.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.3"},"meta/muse-spark-1.1":{"id":"meta/muse-spark-1.1","name":"Muse Spark 1.1 (Meta)","description":"Muse Spark is a natively multimodal reasoning model with support for tool-use, visual chain of thought, and multi-agent orchestration.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-08","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.1"},"meta/muse-wonder-1.0":{"id":"meta/muse-wonder-1.0","name":"Muse Wonder (Meta)","description":"Muse Wonder is a frontier multimodal reasoning model from Meta for personal and professional agents, long-horizon coding, and computer use. It combines Active Memory, which carries relevant context across conversations, with Active Focus, which keeps it working through blockers toward a goal.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-12","last_updated":"2026-10-12","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":4,"output":20,"cache_read":0.2},"canonical_model_id":"meta/muse-wonder-1.0"},"meta/muse-spark-1.2":{"id":"meta/muse-spark-1.2","name":"Muse Spark 1.2 (Meta)","description":"Muse Spark 1.2 is a coding-focused update to Muse Spark 1.1 with improvements in code generation, complex debugging, codebase understanding, and end-to-end developer workflows.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.2"},"deepinfra/nemotron-3-ultra-550b-a55b":{"id":"deepinfra/nemotron-3-ultra-550b-a55b","name":"Nemotron 3 Ultra 550B A55B (Deep Infra)","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":128000},"cost":{"input":0.5,"output":2.2,"cache_read":0.1},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"deepinfra/nemotron-3-super-120b-a12b":{"id":"deepinfra/nemotron-3-super-120b-a12b","name":"Nemotron 3 Super 120B A12B (Deep Infra)","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.075,"output":0.4},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"},"deepinfra/meta-models/Muse-Glimmer-30B":{"id":"deepinfra/meta-models/Muse-Glimmer-30B","name":"Muse Glimmer 30B (Deep Infra)","description":"Muse Glimmer is a 30-billion-parameter open-weight multimodal model from Meta Superintelligence Labs, distilled from Muse Spark for always-on local agents, tool use, coding, and image understanding.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-08-10","last_updated":"2026-08-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.04},"canonical_model_id":"meta/muse-glimmer-30b"},"deepinfra/google/gemma-3-27b-it":{"id":"deepinfra/google/gemma-3-27b-it","name":"Gemma 3 27B IT (Deep Infra)","description":"Largest open Gemma 3 instruction model for multilingual text generation and visual understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.08,"output":0.16},"canonical_model_id":"google/gemma-3-27b-it"},"deepinfra/google/gemma-3-4b-it":{"id":"deepinfra/google/gemma-3-4b-it","name":"Gemma 3 4B IT (Deep Infra)","description":"Open multimodal Gemma instruction model for efficient text generation and image understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.05,"output":0.1},"canonical_model_id":"google/gemma-3-4b-it"},"deepinfra/google/gemma-3-12b-it":{"id":"deepinfra/google/gemma-3-12b-it","name":"Gemma 3 12B IT (Deep Infra)","description":"Open multimodal Gemma instruction model for multilingual text generation and image understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.05,"output":0.15},"canonical_model_id":"google/gemma-3-12b-it"},"deepinfra/deepseek-ai/DeepSeek-V4.1-Flash-1017":{"id":"deepinfra/deepseek-ai/DeepSeek-V4.1-Flash-1017","name":"DeepSeek V4.1 Flash 1017 (Deep Infra)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.2,"output":0.6,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"deepinfra/deepseek-ai/DeepSeek-V4-Flash-0731":{"id":"deepinfra/deepseek-ai/DeepSeek-V4-Flash-0731","name":"DeepSeek V4 Flash 0731 (Deep Infra)","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.06,"output":0.18,"cache_read":0.015},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepinfra/deepseek-ai/DeepSeek-V3":{"id":"deepinfra/deepseek-ai/DeepSeek-V3","name":"DeepSeek-V3 (Deep Infra)","description":"Open DeepSeek MoE chat model for coding, math, and general reasoning","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2024-12-26","last_updated":"2024-12-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":8192},"cost":{"input":0.32,"output":0.89},"canonical_model_id":"deepseek/deepseek-v3"},"deepinfra/deepseek-ai/DeepSeek-V3-0324":{"id":"deepinfra/deepseek-ai/DeepSeek-V3-0324","name":"DeepSeek V3 0324 (Deep Infra)","description":"March 2025 checkpoint of DeepSeek-V3 with improved reasoning and coding","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-03-24","last_updated":"2025-03-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":163840},"cost":{"input":0.24,"output":0.9,"cache_read":0.135},"canonical_model_id":"deepseek/deepseek-v3-0324"},"deepinfra/deepseek-ai/DeepSeek-V4.1-Flash":{"id":"deepinfra/deepseek-ai/DeepSeek-V4.1-Flash","name":"DeepSeek V4.1 Flash (Deep Infra)","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.2,"output":0.6,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepinfra/deepseek-ai/DeepSeek-R1-0528":{"id":"deepinfra/deepseek-ai/DeepSeek-R1-0528","name":"DeepSeek R1 0528 (Deep Infra)","description":"May 2025 DeepSeek R1 update with improved mathematics, coding, and reasoning","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-05-28","last_updated":"2025-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":32768},"cost":{"input":0.5,"output":2.15,"cache_read":0.35},"canonical_model_id":"deepseek/deepseek-r1-0528"},"deepinfra/deepseek-ai/DeepSeek-V4-Pro-0813":{"id":"deepinfra/deepseek-ai/DeepSeek-V4-Pro-0813","name":"DeepSeek V4 Pro 0813 (Deep Infra)","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":1.3,"output":2.6,"cache_read":0.1},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"deepinfra/deepseek-ai/DeepSeek-R1":{"id":"deepinfra/deepseek-ai/DeepSeek-R1","name":"DeepSeek-R1 (Deep Infra)","description":"Classic open reasoning model for transparent math, coding, and deliberate problem solving","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-07","release_date":"2025-01-20","last_updated":"2025-05-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":32768},"cost":{"input":0.7,"output":2.4},"canonical_model_id":"deepseek/deepseek-r1"},"deepinfra/NousResearch/Hermes-3-Llama-3.1-70B":{"id":"deepinfra/NousResearch/Hermes-3-Llama-3.1-70B","name":"Hermes 3 70B Instruct (Deep Infra)","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"nousresearch","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2023-12-31","release_date":"2024-08-18","last_updated":"2024-08-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.7,"output":0.7},"canonical_model_id":"nousresearch/hermes-3-llama-3.1-70b"},"deepinfra/NousResearch/Hermes-3-Llama-3.1-405B":{"id":"deepinfra/NousResearch/Hermes-3-Llama-3.1-405B","name":"Hermes 3 405B Instruct (Deep Infra)","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"nousresearch","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12-31","release_date":"2024-08-16","last_updated":"2024-08-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":1,"output":1},"canonical_model_id":"nousresearch/hermes-3-llama-3.1-405b"},"deepinfra/tencent/Hy4-preview":{"id":"deepinfra/tencent/Hy4-preview","name":"Hy4 preview (Deep Infra)","description":"A next-generation productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-28","last_updated":"2026-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":64000},"cost":{"input":0.834,"output":2.501,"cache_read":0.042},"canonical_model_id":"tencent/hy4-preview"},"deepinfra/tencent/Hy3":{"id":"deepinfra/tencent/Hy3","name":"Hy3 (Deep Infra)","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":128000},"cost":{"input":0.13,"output":0.53,"cache_read":0.033},"canonical_model_id":"tencent/hy3"},"deepinfra/mistralai/Mistral-Small-24B-Instruct-2501":{"id":"deepinfra/mistralai/Mistral-Small-24B-Instruct-2501","name":"Mistral Small 3 (Deep Infra)","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2023-10-31","release_date":"2025-01-30","last_updated":"2025-01-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":16384},"cost":{"input":0.05,"output":0.08},"canonical_model_id":"mistral/mistral-small-24b-instruct-2501"},"deepinfra/mistralai/Mixtral-8x7B-Instruct-v0.1":{"id":"deepinfra/mistralai/Mixtral-8x7B-Instruct-v0.1","name":"Mixtral 8x7B Instruct v0.1 (Deep Infra)","description":"Open sparse mixture-of-experts Mistral instruction model","family":"mistral","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2023-12-11","last_updated":"2023-12-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32768},"cost":{"input":0.4,"output":0.4},"canonical_model_id":"mistral/mixtral-8x7b-instruct-v0.1"},"deepinfra/microsoft/WizardLM-2-8x22B":{"id":"deepinfra/microsoft/WizardLM-2-8x22B","name":"WizardLM 2 8x22B (Deep Infra)","description":"Microsoft WizardLM instruction-tuned Mixtral MoE for multilingual dialogue and complex tasks","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2024-04-15","last_updated":"2024-04-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":8000},"cost":{"input":0.48,"output":0.48},"canonical_model_id":"microsoft/wizardlm-2-8x22b"},"deepinfra/moonshotai/Kimi-K2.5":{"id":"deepinfra/moonshotai/Kimi-K2.5","name":"Kimi K2.5 (Deep Infra)","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.45,"output":2.25,"cache_read":0.07},"canonical_model_id":"moonshotai/kimi-k2.5"},"deepinfra/moonshotai/Kimi-K2-Instruct":{"id":"deepinfra/moonshotai/Kimi-K2-Instruct","name":"Kimi K2 Instruct (Deep Infra)","description":"Non-thinking Kimi K2 MoE instruction model for coding and tool-using agents","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-07-11","last_updated":"2025-07-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.5,"output":2},"canonical_model_id":"moonshotai/kimi-k2-instruct"},"deepinfra/openai/gpt-oss-20b":{"id":"deepinfra/openai/gpt-oss-20b","name":"GPT OSS 20B (Deep Infra)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.03,"output":0.14},"canonical_model_id":"openai/gpt-oss-20b"},"deepinfra/openai/gpt-oss-120b":{"id":"deepinfra/openai/gpt-oss-120b","name":"GPT OSS 120B (Deep Infra)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.037,"output":0.17},"canonical_model_id":"openai/gpt-oss-120b"},"deepinfra/ByteDance/Seed-2.0-mini":{"id":"deepinfra/ByteDance/Seed-2.0-mini","name":"Seed 2.0 Mini (Deep Infra)","description":"Lightweight ByteDance Seed 2.0 model for low-latency multimodal reasoning and high-volume tasks","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000},"cost":{"input":0.1,"output":0.4,"cache_read":0.02},"canonical_model_id":"bytedance-seed/seed-2.0-mini"},"deepinfra/ByteDance/Seed-2.0-code":{"id":"deepinfra/ByteDance/Seed-2.0-code","name":"Seed 2.0 Code (Deep Infra)","description":"ByteDance Seed coding model for multimodal software engineering and long-running agents","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":131072},"cost":{"input":0.5,"output":3,"cache_read":0.1},"canonical_model_id":"bytedance-seed/seed-2.0-code"},"deepinfra/ibm-granite/granite-4.2-8b":{"id":"deepinfra/ibm-granite/granite-4.2-8b","name":"Granite 4.2 8B (Deep Infra)","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"granite","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-25","last_updated":"2026-08-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":117964},"cost":{"input":0.06,"output":0.25,"cache_read":0.015},"canonical_model_id":"ibm/granite-4.2-8b"},"deepinfra/thinkingmachines/Inkling-Small":{"id":"deepinfra/thinkingmachines/Inkling-Small","name":"Inkling Small (Deep Infra)","description":"Multimodal MoE reasoning model (276B total, 12B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-30","last_updated":"2026-07-30","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":1048576},"cost":{"input":0.45,"output":1.2,"cache_read":0.1},"canonical_model_id":"thinkingmachines/inkling-small"},"deepinfra/thinkingmachines/Inkling":{"id":"deepinfra/thinkingmachines/Inkling","name":"Inkling (Deep Infra)","description":"Multimodal MoE reasoning model (975B total, 41B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":1048576},"cost":{"input":0.95,"output":4.05,"cache_read":0.16},"canonical_model_id":"thinkingmachines/inkling"},"deepinfra/meta-llama/Llama-3.2-11B-Vision-Instruct":{"id":"deepinfra/meta-llama/Llama-3.2-11B-Vision-Instruct","name":"Llama-3.2-11B-Vision-Instruct (Deep Infra)","description":"Open multimodal Llama model for image understanding, captioning, and visual QA","family":"llama","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":4096},"cost":{"input":0.345,"output":0.345},"canonical_model_id":"meta/llama-3.2-11b-vision-instruct"},"deepinfra/meta-llama/Llama-3.2-3B-Instruct":{"id":"deepinfra/meta-llama/Llama-3.2-3B-Instruct","name":"Llama 3.2 3B Instruct (Deep Infra)","description":"Small instruction-tuned Llama model for multilingual dialogue and agentic retrieval","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.02,"output":0.02},"canonical_model_id":"meta/llama-3.2-3b-instruct"},"deepinfra/meta-llama/Llama-Guard-4-12B":{"id":"deepinfra/meta-llama/Llama-Guard-4-12B","name":"Llama Guard 4 12B (Deep Infra)","description":"Multimodal Llama 4-based safety classifier for moderating prompts and responses","family":"llama","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-04-29","last_updated":"2025-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":163840},"cost":{"input":0.18,"output":0.18},"canonical_model_id":"meta/llama-guard-4-12b"},"deepinfra/meta-llama/Llama-Guard-3-8B":{"id":"deepinfra/meta-llama/Llama-Guard-3-8B","name":"Llama-Guard-3-8B (Deep Infra)","description":"Llama 3.1-based safety classifier for moderating prompts and model responses","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":4096},"cost":{"input":0.055,"output":0.055},"canonical_model_id":"meta/llama-guard-3-8b"},"deepinfra/meta-llama/Llama-3.3-70B-Instruct":{"id":"deepinfra/meta-llama/Llama-3.3-70B-Instruct","name":"Llama-3.3-70B-Instruct (Deep Infra)","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":4096},"cost":{"input":0.1,"output":0.32},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"deepinfra/Qwen/Qwen3-VL-30B-A3B-Instruct":{"id":"deepinfra/Qwen/Qwen3-VL-30B-A3B-Instruct","name":"Qwen3 VL 30B A3B Instruct (Deep Infra)","description":"Open vision-language MoE model for image and video understanding, documents, and visual agents","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-04","last_updated":"2025-10-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"alibaba/qwen3-vl-30b-a3b-instruct"},"deepinfra/Qwen/Qwen3-235B-A22B-Thinking-2507":{"id":"deepinfra/Qwen/Qwen3-235B-A22B-Thinking-2507","name":"Qwen3 235B-A22B Thinking 2507 (Deep Infra)","description":"Updated large open Qwen3 MoE thinking model for reasoning, math, coding, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-25","last_updated":"2025-07-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":81920},"cost":{"input":0.23,"output":2.3,"cache_read":0.2},"canonical_model_id":"alibaba/qwen3-235b-a22b-thinking-2507"},"deepinfra/Qwen/Qwen3-VL-235B-A22B-Instruct":{"id":"deepinfra/Qwen/Qwen3-VL-235B-A22B-Instruct","name":"Qwen3 VL 235B A22B Instruct (Deep Infra)","description":"Qwen vision-language instruct model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.2,"output":0.88,"cache_read":0.11},"canonical_model_id":"alibaba/qwen3-vl-235b-a22b-instruct"},"deepinfra/Qwen/Qwen3-Next-80B-A3B-Instruct":{"id":"deepinfra/Qwen/Qwen3-Next-80B-A3B-Instruct","name":"Qwen3-Next 80B-A3B Instruct (Deep Infra)","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.09,"output":1.1},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-instruct"},"deepinfra/Qwen/Qwen3-Coder-480B-A35B-Instruct":{"id":"deepinfra/Qwen/Qwen3-Coder-480B-A35B-Instruct","name":"Qwen3-Coder 480B-A35B Instruct (Deep Infra)","description":"Open Qwen coding heavyweight for repository reasoning and agentic engineering","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.4,"output":1.6},"canonical_model_id":"alibaba/qwen3-coder-480b-a35b-instruct"},"deepinfra/Qwen/Qwen3-Max":{"id":"deepinfra/Qwen/Qwen3-Max","name":"Qwen3 Max (Deep Infra)","description":"Flagship Qwen3 model for coding agents, complex reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":65536},"cost":{"input":1.2,"output":6,"cache_read":0.24},"canonical_model_id":"alibaba/qwen3-max"},"deepinfra/Qwen/Qwen2.5-7B-Instruct":{"id":"deepinfra/Qwen/Qwen2.5-7B-Instruct","name":"Qwen2.5 7B Instruct (Deep Infra)","description":"Small open Qwen2.5 instruction model for chat, structured output, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2024-09-19","last_updated":"2024-09-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":8192},"cost":{"input":0.04,"output":0.1},"canonical_model_id":"alibaba/qwen2.5-7b-instruct"},"deepinfra/Qwen/Qwen3-235B-A22B-Instruct-2507":{"id":"deepinfra/Qwen/Qwen3-235B-A22B-Instruct-2507","name":"Qwen3 235B-A22B Instruct 2507 (Deep Infra)","description":"Updated large open Qwen3 MoE instruct model for multilingual chat, coding, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0.09,"output":0.55},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"deepinfra/zai-org/GLM-4.7-Flash":{"id":"deepinfra/zai-org/GLM-4.7-Flash","name":"GLM-4.7-Flash (Deep Infra)","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":0.06,"output":0.4,"cache_read":0.01},"canonical_model_id":"zhipuai/glm-4.7-flash"},"deepinfra/nvidia/Nemotron-3-Nano-30B-A3B":{"id":"deepinfra/nvidia/Nemotron-3-Nano-30B-A3B","name":"Nemotron 3 Nano 30B A3B (Deep Infra)","description":"Small Nemotron 3 MoE for efficient coding, math, and long-context agents","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06-25","release_date":"2025-12-15","last_updated":"2025-12-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.05,"output":0.2,"cache_read":0.025},"canonical_model_id":"nvidia/nemotron-3-nano-30b-a3b"},"deepinfra/nvidia/Llama-3.1-Nemotron-70B-Instruct":{"id":"deepinfra/nvidia/Llama-3.1-Nemotron-70B-Instruct","name":"Llama 3.1 Nemotron 70B Instruct (Deep Infra)","description":"Nemotron model for efficient reasoning, coding, and specialized AI agents","family":"nemotron","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-04-15","last_updated":"2025-04-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"cost":{"input":0.6,"output":0.6},"canonical_model_id":"nvidia/llama-3.1-nemotron-70b-instruct"},"deepinfra/stepfun-ai/Step-3.5-Flash":{"id":"deepinfra/stepfun-ai/Step-3.5-Flash","name":"Step 3.5 Flash (Deep Infra)","description":"StepFun flash lane for quick multimodal reasoning and coding assistance","family":"step","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-29","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"cost":{"input":0.09,"output":0.3,"cache_read":0.02},"canonical_model_id":"stepfun/step-3.5-flash"},"deepinfra/stepfun-ai/Step-5-Preview":{"id":"deepinfra/stepfun-ai/Step-5-Preview","name":"Step 5 Preview (Deep Infra)","description":"StepFun's next-generation flagship base model for coding and professional knowledge work, with native text, image, and video input and a 1M-token context window","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1000000},"cost":{"input":1,"output":2.7,"cache_read":0.1},"canonical_model_id":"stepfun/step-5-preview"},"deepinfra/stepfun-ai/Step-3.7-Flash":{"id":"deepinfra/stepfun-ai/Step-3.7-Flash","name":"Step 3.7 Flash (Deep Infra)","description":"Newer StepFun flash model for faster agents, coding, and multimodal prompts","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"cost":{"input":0.2,"output":1.15,"cache_read":0.04},"canonical_model_id":"stepfun/step-3.7-flash"},"deepinfra/Gryphe/MythoMax-L2-13b":{"id":"deepinfra/Gryphe/MythoMax-L2-13b","name":"MythoMax L2 13B (Deep Infra)","description":"Llama 2 merge combining MythoLogic and Huginn for creative writing and roleplay","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2023-08-10","last_updated":"2023-08-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":4096,"output":3200},"cost":{"input":0.4,"output":0.4},"canonical_model_id":"gryphe/mythomax-l2-13b"},"azure/gpt-4.1-nano":{"id":"azure/gpt-4.1-nano","name":"GPT-4.1 nano (Azure)","description":"Tiny GPT-4.1 option for classification, routing, and very high-volume tasks","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.1,"output":0.4,"cache_read":0.025},"canonical_model_id":"openai/gpt-4.1-nano"},"azure/gpt-5.2-codex":{"id":"azure/gpt-5.2-codex","name":"GPT-5.2 Codex (Azure)","description":"Code-specialist GPT for repository edits, reviews, and long-running software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2-codex"},"azure/gpt-5.1-codex-max":{"id":"azure/gpt-5.1-codex-max","name":"GPT-5.1 Codex Max (Azure)","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1-codex-max"},"azure/gpt-5.1-codex":{"id":"azure/gpt-5.1-codex","name":"GPT-5.1 Codex (Azure)","description":"Codex GPT for repository edits, code review, and practical software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1-codex"},"azure/gpt-4.1-nano@eu":{"id":"azure/gpt-4.1-nano@eu","name":"GPT-4.1 nano (Azure, EU)","description":"Tiny GPT-4.1 option for classification, routing, and very high-volume tasks","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.11,"output":0.44,"cache_read":0.0275},"canonical_model_id":"openai/gpt-4.1-nano"},"azure/gpt-5.1-codex-mini":{"id":"azure/gpt-5.1-codex-mini","name":"GPT-5.1 Codex mini (Azure)","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5.1-codex-mini"},"arkanecloud/ministral-14b":{"id":"arkanecloud/ministral-14b","name":"Ministral 14B (Arkanecloud)","description":"Compact multimodal Mistral model for local assistants, edge agents, and efficient tool use","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":262144},"cost":{"input":0.15,"output":0.15,"cache_read":0.15},"canonical_model_id":"mistral/ministral-14b"},"arkanecloud/deepseek-ai/DeepSeek-V4.1-Flash-1017":{"id":"arkanecloud/deepseek-ai/DeepSeek-V4.1-Flash-1017","name":"DeepSeek V4.1 Flash 1017 (Arkanecloud)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.3,"output":1.2,"cache_read":0.075},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"arkanecloud/deepseek-ai/DeepSeek-V4-Flash-0731":{"id":"arkanecloud/deepseek-ai/DeepSeek-V4-Flash-0731","name":"DeepSeek V4 Flash 0731 (Arkanecloud)","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.2,"output":0.4,"cache_read":0.05},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"arkanecloud/deepseek-ai/DeepSeek-V4.1-Flash":{"id":"arkanecloud/deepseek-ai/DeepSeek-V4.1-Flash","name":"DeepSeek V4.1 Flash (Arkanecloud)","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.3,"output":1.2,"cache_read":0.075},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"arkanecloud/openai/gpt-oss-120b":{"id":"arkanecloud/openai/gpt-oss-120b","name":"GPT OSS 120B (Arkanecloud)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.15,"output":0.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-oss-120b"},"arkanecloud/Qwen/Qwen3-235B-A22B-Instruct-2507":{"id":"arkanecloud/Qwen/Qwen3-235B-A22B-Instruct-2507","name":"Qwen3 235B-A22B Instruct 2507 (Arkanecloud)","description":"Updated large open Qwen3 MoE instruct model for multilingual chat, coding, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":16384},"cost":{"input":0.25,"output":1,"cache_read":0.2},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"arkanecloud/nvidia/nemotron-3-ultra-550b-a55b":{"id":"arkanecloud/nvidia/nemotron-3-ultra-550b-a55b","name":"Nemotron 3 Ultra 550B A55B (Arkanecloud)","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":512288,"output":128000},"cost":{"input":0.6,"output":3.5,"cache_read":0.2},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"arkanecloud/nvidia/nemotron-3-super-120b-a12b":{"id":"arkanecloud/nvidia/nemotron-3-super-120b-a12b","name":"Nemotron 3 Super 120B A12B (Arkanecloud)","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":262144},"cost":{"input":0.4,"output":0.8,"cache_read":0.1},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"},"sference/deepseek-ai/DeepSeek-V4.1-Flash-1017":{"id":"sference/deepseek-ai/DeepSeek-V4.1-Flash-1017","name":"DeepSeek V4.1 Flash 1017 (Sference)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.35,"output":1.32,"cache_read":0.03},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"sference/deepseek-ai/DeepSeek-V4-Flash-0731":{"id":"sference/deepseek-ai/DeepSeek-V4-Flash-0731","name":"DeepSeek V4 Flash 0731 (Sference)","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.28,"output":0.56,"cache_read":0.07},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"xai/grok-4.20-0309-non-reasoning":{"id":"xai/grok-4.20-0309-non-reasoning","name":"Grok 4.20 (Non-Reasoning)","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.20-0309-non-reasoning"},"xai/grok-4.5":{"id":"xai/grok-4.5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.3,"tiers":[{"input":4,"output":12,"cache_read":0.6,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":0.6}},"canonical_model_id":"xai/grok-4.5"},"xai/grok-4.3":{"id":"xai/grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.3"},"xai/grok-4.20-0309-reasoning":{"id":"xai/grok-4.20-0309-reasoning","name":"Grok 4.20 (Reasoning)","description":"Reasoning Grok for document-heavy analysis and long-horizon tool use","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.20-0309-reasoning"},"xai/grok-4.7":{"id":"xai/grok-4.7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.7"},"xai/grok-latest":{"id":"xai/grok-latest","name":"Grok Latest (Grok 4.7)","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.7"},"xai/grok-4.6":{"id":"xai/grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.6"},"xai/grok-build-0.1":{"id":"xai/grok-build-0.1","name":"Grok Build 0.1","description":"Fast Grok coding model tuned for agentic engineering and iterative edits","family":"grok-build","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":1,"output":2,"cache_read":0.2,"tiers":[{"input":2,"output":4,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2,"output":4,"cache_read":0.4}},"canonical_model_id":"xai/grok-build-0.1"},"xai/grok-4-fast-non-reasoning":{"id":"xai/grok-4-fast-non-reasoning","name":"X-Ai/Grok-4-Fast-Non-Reasoning","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-18","last_updated":"2025-12-18","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":2000000},"cost":{"input":0.2,"output":0.5,"cache_read":0.05,"tiers":[{"input":0.4,"output":1,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"xai/grok-4-fast-non-reasoning"},"tsystems/gpt-oss-120b":{"id":"tsystems/gpt-oss-120b","name":"GPT OSS 120B (Tsystems)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.22254,"output":0.723255,"cache_read":0.033381},"canonical_model_id":"openai/gpt-oss-120b"},"infomaniak/mistralai/Ministral-3-14B-Instruct-2512":{"id":"infomaniak/mistralai/Ministral-3-14B-Instruct-2512","name":"Ministral 3 14B (Infomaniak)","description":"Open vision-language model for efficient local deployment, instruction following, and tool use","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":100000,"output":262144},"cost":{"input":0.33381,"output":0.44508},"canonical_model_id":"mistral/ministral-3-14b-instruct-2512"},"ionos/openai/gpt-oss-120b":{"id":"ionos/openai/gpt-oss-120b","name":"GPT OSS 120B (IONOS)","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0.166905,"output":0.723255},"canonical_model_id":"openai/gpt-oss-120b"},"ionos/meta-llama/Llama-3.3-70B-Instruct":{"id":"ionos/meta-llama/Llama-3.3-70B-Instruct","name":"Llama-3.3-70B-Instruct (IONOS)","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"cost":{"input":0.723255,"output":0.723255},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"ionos/Qwen/Qwen3-Coder-Next":{"id":"ionos/Qwen/Qwen3-Coder-Next","name":"Qwen3 Coder Next (IONOS)","description":"Open-weight Qwen coding model for agents, repository edits, and multi-turn tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-02-03","last_updated":"2026-02-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":65536},"cost":{"input":0.166905,"output":0.89016},"canonical_model_id":"alibaba/qwen3-coder-next"}}},"ai-router":{"id":"ai-router","env":["AI_ROUTER_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.ai-router.dev/v1","name":"AI-ROUTER","doc":"https://ai-router.dev/openai-compatible-api-gateway/","models":{"gpt-5.5":{"id":"gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"openai/gpt-5.5"},"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"openai/gpt-5.6-sol"},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1,"output":6,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"openai/gpt-5.6-luna"},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25},"canonical_model_id":"openai/gpt-5.4"},"gpt-5.6-terra":{"id":"gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25,"cache_write":3.125},"canonical_model_id":"openai/gpt-5.6-terra"}}},"bothub":{"id":"bothub","env":["BOTHUB_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://openai.bothub.ru/v1","name":"Bothub","doc":"https://bothub.ru/models","models":{"gemma-4-31b-it:free":{"id":"gemma-4-31b-it:free","name":"Gemma 4 31B IT (free)","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0,"output":0},"canonical_model_id":"google/gemma-4-31b-it"},"deepseek-v4-pro-0813":{"id":"deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":1.7671,"output":5.3011},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4243,"output":4.4765},"canonical_model_id":"zhipuai/glm-5.3"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.1566,"output":0.522},"canonical_model_id":"zhipuai/glm-5.3-flash"},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2677,"output":1.6064},"canonical_model_id":"openai/gpt-5.6-luna"},"nemotron-3-ultra-550b-a55b:free":{"id":"nemotron-3-ultra-550b-a55b:free","name":"Nemotron 3 Ultra (free)","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","medium","high"]}],"tool_call":true,"interleaved":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"deepseek-v4-flash-0731":{"id":"deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.589,"output":1.7671},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"muse-spark-1.3-contributor":{"id":"muse-spark-1.3-contributor","name":"Muse Spark 1.3 Contributor","description":"Muse Spark 1.3 is a multimodal reasoning model from Meta for long-running agentic, multi-agent, and coding workflows. It improves long-horizon agent collaboration, instruction following, and coding efficiency relative to Muse Spark 1.2.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":0.1,"output":0.2},"canonical_model_id":"meta/muse-spark-1.3"}}},"minimax-coding-plan":{"id":"minimax-coding-plan","env":["MINIMAX_API_KEY"],"npm":"@ai-sdk/anthropic","api":"https://api.minimax.io/anthropic/v1","name":"MiniMax Token Plan (minimax.io)","doc":"https://platform.minimax.io/docs/token-plan/intro","models":{"MiniMax-M2.1":{"id":"MiniMax-M2.1","name":"MiniMax-M2.1","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"MiniMax-M2.5":{"id":"MiniMax-M2.5","name":"MiniMax-M2.5","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"MiniMax-M2.7":{"id":"MiniMax-M2.7","name":"MiniMax-M2.7","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"MiniMax-M2.5-highspeed":{"id":"MiniMax-M2.5-highspeed","name":"MiniMax-M2.5-highspeed","description":"High-speed MiniMax model for low-latency coding and agent workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-02-13","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"MiniMax-M3":{"id":"MiniMax-M3","name":"MiniMax-M3","description":"MiniMax multimodal coding model for long-context reasoning and agent tasks","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-25","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":524288},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"MiniMax-M2.7-highspeed":{"id":"MiniMax-M2.7-highspeed","name":"MiniMax-M2.7-highspeed","description":"High-speed MiniMax model for low-latency coding and agent workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"MiniMax-M3.1-Flash-Preview":{"id":"MiniMax-M3.1-Flash-Preview","name":"MiniMax-M3.1-Flash-Preview","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-09-27","last_updated":"2026-09-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":512000},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"minimax/MiniMax-M3.1-Flash-Preview"},"MiniMax-M3.1-Flash":{"id":"MiniMax-M3.1-Flash","name":"MiniMax-M3.1-Flash","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":524288},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"MiniMax-M2":{"id":"MiniMax-M2","name":"MiniMax-M2","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-10-27","last_updated":"2025-10-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0,"output":0}}}},"neuralwatt":{"id":"neuralwatt","env":["NEURALWATT_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.neuralwatt.com/v1","name":"Neuralwatt","doc":"https://portal.neuralwatt.com/docs","models":{"glm-5.3-flex":{"id":"glm-5.3-flex","name":"GLM 5.3 Flex","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":true,"structured_output":false,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048560,"output":1048560},"cost":{"input":0.9425,"output":2.925,"cache_read":0.09425},"canonical_model_id":"zhipuai/glm-5.3"},"qwen-3.8-27b-flex":{"id":"qwen-3.8-27b-flex","name":"Qwen3.8 27B Flex","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262128,"output":131072},"cost":{"input":0.2925,"output":2.08,"cache_read":0.1625},"canonical_model_id":"alibaba/qwen3.8-27b"},"qwen3.6-35b-flex":{"id":"qwen3.6-35b-flex","name":"Qwen3.6 35B Flex","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131056,"output":131056},"cost":{"input":0.1885,"output":0.7475,"cache_read":0.01885},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"kimi-k3-flex":{"id":"kimi-k3-flex","name":"Kimi K3 Flex","description":"Kimi K3 on the flex tier: discounted, best-effort latency, requests may be held under load","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048560,"output":1048560},"cost":{"input":1.95,"output":9.75,"cache_read":0.195},"canonical_model_id":"moonshotai/kimi-k3"},"gemma-4-31b":{"id":"gemma-4-31b","name":"Gemma 4 31B","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262128,"output":16384},"cost":{"input":0.144,"output":0.42,"cache_read":0.0144},"canonical_model_id":"google/gemma-4-31b-it"},"kimi-k3-fast":{"id":"kimi-k3-fast","name":"Kimi K3 Fast","description":"Kimi K3 with thinking disabled for low-latency tool calling, vision, and JSON work","family":"kimi-k3","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048560,"output":1048560},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048560,"output":1048560},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"kimi-k2.7-code-fast":{"id":"kimi-k2.7-code-fast","name":"Kimi K2.7 Code Fast","description":"Kimi K2.7 Code with reasoning capped to a short budget for lower latency; reasoning cannot be disabled on this model","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262128,"output":262128},"status":"deprecated","cost":{"input":0.95,"output":4,"cache_read":0.095},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"deepseek-v4-flash-speed":{"id":"deepseek-v4-flash-speed","name":"DeepSeek V4 Flash (Speed)","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048560,"output":393216},"cost":{"input":0.14,"output":0.28,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"glm-5.3-flash-flex":{"id":"glm-5.3-flash-flex","name":"GLM-5.3 Flash Flex","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":true,"structured_output":false,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048560,"output":1048560},"cost":{"input":0.0975,"output":0.325,"cache_read":0.0195},"canonical_model_id":"zhipuai/glm-5.3-flash"},"mimo-v2.6-pro":{"id":"mimo-v2.6-pro","name":"MiMo-V2.6-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":1048560,"output":393216},"cost":{"input":0.87,"output":1.74,"cache_read":0.036},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","xhigh","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048560,"output":393216},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"qwen-3.8-27b":{"id":"qwen-3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262128,"output":131072},"cost":{"input":0.45,"output":3.2,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.8-27b"},"glm-5.3":{"id":"glm-5.3","name":"GLM 5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":true,"structured_output":false,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048560,"output":1048560},"cost":{"input":1.45,"output":4.5,"cache_read":0.145},"canonical_model_id":"zhipuai/glm-5.3"},"mimo-v2.6-pro-flex":{"id":"mimo-v2.6-pro-flex","name":"MiMo-V2.6-Pro Flex","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":1048560,"output":393216},"cost":{"input":0.5655,"output":1.131,"cache_read":0.0234},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262128,"output":262128},"status":"deprecated","cost":{"input":0.95,"output":4,"cache_read":0.095},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048560,"output":393216},"cost":{"input":0.14,"output":0.28,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash"},"qwen3.6-35b-fast":{"id":"qwen3.6-35b-fast","name":"Qwen3.6 35B Fast","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131056,"output":131056},"cost":{"input":0.29,"output":1.15,"cache_read":0.029},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3 Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":true,"structured_output":false,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048560,"output":1048560},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"deepseek-v4.1-flash-flex":{"id":"deepseek-v4.1-flash-flex","name":"DeepSeek V4.1 Flash Flex","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","xhigh","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048560,"output":393216},"cost":{"input":0.0975,"output":0.39,"cache_read":0.00975},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"qwen3.6-35b":{"id":"qwen3.6-35b","name":"Qwen3.6 35B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131056,"output":131056},"cost":{"input":0.29,"output":1.15,"cache_read":0.029},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"deepseek-v4-flash-flex":{"id":"deepseek-v4-flash-flex","name":"DeepSeek V4 Flash Flex","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048560,"output":393216},"cost":{"input":0.091,"output":0.182,"cache_read":0.0182},"canonical_model_id":"deepseek/deepseek-v4-flash"},"kimi-k2.7-code-flex":{"id":"kimi-k2.7-code-flex","name":"Kimi K2.7 Code Flex","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262128,"output":262128},"status":"deprecated","cost":{"input":0.6175,"output":2.6,"cache_read":0.06175},"canonical_model_id":"moonshotai/kimi-k2.7-code"}}},"meganova":{"id":"meganova","env":["MEGANOVA_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.meganova.ai/v1","name":"Meganova","doc":"https://docs.meganova.ai","models":{"XiaomiMiMo/MiMo-V2-Flash":{"id":"XiaomiMiMo/MiMo-V2-Flash","name":"MiMo V2 Flash","description":"MiMo flash model for fast multimodal assistance and agent workflows","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-12-01","release_date":"2025-12-16","last_updated":"2026-02-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32000},"status":"deprecated","cost":{"input":0.1,"output":0.3},"canonical_model_id":"xiaomi/mimo-v2-flash"},"MiniMaxAI/MiniMax-M2.1":{"id":"MiniMaxAI/MiniMax-M2.1","name":"MiniMax M2.1","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"output":131072},"cost":{"input":0.28,"output":1.2},"canonical_model_id":"minimax/MiniMax-M2.1"},"MiniMaxAI/MiniMax-M2.5":{"id":"MiniMaxAI/MiniMax-M2.5","name":"MiniMax M2.5","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.15},"canonical_model_id":"minimax/MiniMax-M2.5"},"deepseek-ai/DeepSeek-V3.2":{"id":"deepseek-ai/DeepSeek-V3.2","name":"DeepSeek V3.2","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":164000,"output":164000},"cost":{"input":0.26,"output":0.38,"cache_read":0.13},"canonical_model_id":"deepseek/deepseek-v3.2"},"deepseek-ai/DeepSeek-V3.1":{"id":"deepseek-ai/DeepSeek-V3.1","name":"DeepSeek V3.1","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":164000,"output":164000},"cost":{"input":0.19,"output":0.79},"canonical_model_id":"deepseek/deepseek-v3.1"},"deepseek-ai/DeepSeek-V3.2-Exp":{"id":"deepseek-ai/DeepSeek-V3.2-Exp","name":"DeepSeek V3.2 Exp","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-10","last_updated":"2025-10-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":164000,"output":164000},"cost":{"input":0.26,"output":0.38,"cache_read":0.13}},"deepseek-ai/DeepSeek-V3-0324":{"id":"deepseek-ai/DeepSeek-V3-0324","name":"DeepSeek V3 0324","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-03-24","last_updated":"2025-03-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":163840},"cost":{"input":0.275,"output":1.1},"canonical_model_id":"deepseek/deepseek-v3-0324"},"deepseek-ai/DeepSeek-R1-0528":{"id":"deepseek-ai/DeepSeek-R1-0528","name":"DeepSeek R1 0528","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-07","release_date":"2025-05-28","last_updated":"2025-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":64000},"cost":{"input":0.5,"output":2.15,"cache_read":0.4},"canonical_model_id":"deepseek/deepseek-r1-0528"},"mistralai/Mistral-Small-3.2-24B-Instruct-2506":{"id":"mistralai/Mistral-Small-3.2-24B-Instruct-2506","name":"Mistral Small 3.2 24B Instruct","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-10","release_date":"2025-06-20","last_updated":"2025-06-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"mistral/mistral-small-2506"},"mistralai/Mistral-Nemo-Instruct-2407":{"id":"mistralai/Mistral-Nemo-Instruct-2407","name":"Mistral Nemo Instruct 2407","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-nemo","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":65536},"cost":{"input":0.02,"output":0.04},"canonical_model_id":"mistral/mistral-nemo"},"moonshotai/Kimi-K2.5":{"id":"moonshotai/Kimi-K2.5","name":"Kimi K2.5","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2026-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.45,"output":2.25,"cache_read":0.07},"canonical_model_id":"moonshotai/kimi-k2.5"},"moonshotai/Kimi-K2-Thinking":{"id":"moonshotai/Kimi-K2-Thinking","name":"Kimi K2 Thinking","description":"Kimi reasoning model for long-horizon research, planning, and tool use","family":"kimi-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-08","release_date":"2025-11-06","last_updated":"2025-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.6,"output":2.6},"canonical_model_id":"moonshotai/kimi-k2-thinking"},"meta-llama/Llama-3.3-70B-Instruct":{"id":"meta-llama/Llama-3.3-70B-Instruct","name":"Llama 3.3 70B Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.1,"output":0.3},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"Qwen/Qwen2.5-VL-32B-Instruct":{"id":"Qwen/Qwen2.5-VL-32B-Instruct","name":"Qwen2.5 VL 32B Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-03-24","last_updated":"2025-03-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"output":16384},"cost":{"input":0.2,"output":0.6}},"Qwen/Qwen3.5-Plus":{"id":"Qwen/Qwen3.5-Plus","name":"Qwen3.5 Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-16","last_updated":"2026-02-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.4,"output":2.4,"reasoning":2.4},"canonical_model_id":"alibaba/qwen3.5-plus"},"Qwen/Qwen3-235B-A22B-Instruct-2507":{"id":"Qwen/Qwen3-235B-A22B-Instruct-2507","name":"Qwen3 235B A22B Instruct 2507","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.09,"output":0.1},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"zai-org/GLM-4.6":{"id":"zai-org/GLM-4.6","name":"GLM-4.6","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":0.45,"output":1.9},"canonical_model_id":"zhipuai/glm-4.6"},"zai-org/GLM-4.7":{"id":"zai-org/GLM-4.7","name":"GLM-4.7","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":0.4,"output":1.75,"cache_read":0.08},"canonical_model_id":"zhipuai/glm-4.7"},"zai-org/GLM-5":{"id":"zai-org/GLM-5","name":"GLM-5","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":0.8,"output":2.56,"cache_read":0.2},"canonical_model_id":"zhipuai/glm-5"}}},"crusoe":{"id":"crusoe","env":["CRUSOE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.inference.crusoecloud.com/v1","name":"Crusoe","doc":"https://docs.crusoecloud.com/managed-inference/overview","models":{"google/gemma-4-31b-it":{"id":"google/gemma-4-31b-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.14,"output":0.4,"cache_read":0.14},"canonical_model_id":"google/gemma-4-31b-it"},"deepseek-ai/DeepSeek-V3-0324":{"id":"deepseek-ai/DeepSeek-V3-0324","name":"DeepSeek V3 0324","description":"March 2025 checkpoint of DeepSeek-V3 with improved reasoning and coding","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-03-24","last_updated":"2025-03-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":163840},"status":"deprecated","cost":{"input":0.5,"output":1.5,"cache_read":0.25},"canonical_model_id":"deepseek/deepseek-v3-0324"},"zai/GLM-5.2":{"id":"zai/GLM-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"status":"deprecated","cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"zai/GLM-5.1":{"id":"zai/GLM-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"status":"deprecated","cost":{"input":1.2,"output":4.4,"cache_read":0.25},"canonical_model_id":"zhipuai/glm-5.1"},"moonshotai/Kimi-K2.6":{"id":"moonshotai/Kimi-K2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0.7,"output":3.5,"cache_read":0.35},"canonical_model_id":"moonshotai/kimi-k2.6"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.05,"output":0.25,"cache_read":0.05},"canonical_model_id":"openai/gpt-oss-120b"},"meta-llama/Llama-3.3-70B-Instruct":{"id":"meta-llama/Llama-3.3-70B-Instruct","name":"Llama-3.3-70B-Instruct","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"status":"deprecated","cost":{"input":0.25,"output":0.75,"cache_read":0.13},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"Qwen/Qwen3-235B-A22B-Instruct-2507":{"id":"Qwen/Qwen3-235B-A22B-Instruct-2507","name":"Qwen3 235B-A22B Instruct 2507","description":"Updated large open Qwen3 MoE instruct model for multilingual chat, coding, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"status":"deprecated","cost":{"input":0.22,"output":0.8,"cache_read":0.11},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"nvidia/NVIDIA-Nemotron-3-Super-120B-A12B":{"id":"nvidia/NVIDIA-Nemotron-3-Super-120B-A12B","name":"Nemotron 3 Super 120B A12B","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.3,"output":2.4,"cache_read":0.15},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"},"nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B":{"id":"nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B","name":"Nemotron 3 Nano 30B A3B","description":"Small Nemotron 3 MoE for efficient coding, math, and long-context agents","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-06-25","release_date":"2025-12-15","last_updated":"2025-12-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.05,"output":0.2,"cache_read":0.03},"canonical_model_id":"nvidia/nemotron-3-nano-30b-a3b"},"nvidia/Nemotron-3-Nano-Omni-Reasoning-30B-A3B":{"id":"nvidia/Nemotron-3-Nano-Omni-Reasoning-30B-A3B","name":"Nemotron 3 Nano Omni 30B A3B Reasoning","description":"Open Nemotron omni model combining reasoning with text, vision, and audio","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":true,"temperature":true,"release_date":"2026-04-28","last_updated":"2026-04-28","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":65536},"cost":{"input":0.3,"output":1.83,"cache_read":0.3,"input_audio":0.5},"canonical_model_id":"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning"}}},"llmgateway":{"id":"llmgateway","env":["LLMGATEWAY_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.llmgateway.io/v1","name":"DevPass (LLM Gateway)","doc":"https://llmgateway.io/docs","models":{"gpt-live-transcribe":{"id":"gpt-live-transcribe","type":"transcription","name":"GPT-Live-Transcribe","description":"Low-latency streaming speech-to-text model with keyword and language hints","family":"gpt","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2026-07-28","last_updated":"2026-07-28","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-live-transcribe"},"qwen3.6-plus":{"id":"qwen3.6-plus","name":"Qwen3.6 Plus","description":"Earlier Qwen multimodal workhorse for million-token agent and document tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.05,"cache_write":0.625,"tiers":[{"input":2,"output":6,"cache_read":0.2,"cache_write":2.5,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":2,"output":6,"cache_read":0.2,"cache_write":2.5}},"canonical_model_id":"alibaba/qwen3.6-plus"},"glm-5.2-fast":{"id":"glm-5.2-fast","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":2.156,"output":6.776,"cache_read":0.429},"canonical_model_id":"zhipuai/glm-5.2"},"gpt-5.2-pro":{"id":"gpt-5.2-pro","name":"GPT-5.2 Pro","description":"Higher-accuracy GPT-5.2 variant for tougher reasoning and review workflows","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":21,"output":168},"canonical_model_id":"openai/gpt-5.2-pro"},"gpt-5.5":{"id":"gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"grok-4-6":{"id":"grok-4-6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.6"},"qwen3-30b-a3b":{"id":"qwen3-30b-a3b","name":"Qwen3 30B A3B","description":"Sparse MoE Qwen model with 3B active parameters for efficient chat and reasoning","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":16384},"cost":{"input":0.095,"output":0.285},"canonical_model_id":"alibaba/qwen3-30b-a3b"},"muse-spark-1.3":{"id":"muse-spark-1.3","name":"Muse Spark 1.3","description":"Muse Spark 1.3 is a multimodal reasoning model from Meta for long-running agentic, multi-agent, and coding workflows. It improves long-horizon agent collaboration, instruction following, and coding efficiency relative to Muse Spark 1.2.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.3"},"qwen3-vl-235b-a22b-instruct":{"id":"qwen3-vl-235b-a22b-instruct","name":"Qwen3 VL 235B A22B Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":8192},"cost":{"input":0.2,"output":0.88,"cache_read":0.11},"canonical_model_id":"alibaba/qwen3-vl-235b-a22b-instruct"},"qwen-plus-latest":{"id":"qwen-plus-latest","name":"Qwen Plus Latest","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-01-25","last_updated":"2025-01-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":8192},"cost":{"input":0.4,"output":1.2,"cache_read":0.08,"cache_write":0.5}},"claude-sonnet-5-5":{"id":"claude-sonnet-5-5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"ling-3.0-flash-vl":{"id":"ling-3.0-flash-vl","name":"Ling 3.0 Flash VL","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.06,"output":0.18,"cache_read":0.012},"canonical_model_id":"inclusionai/ling-3.0-flash-vl"},"codestral-2508":{"id":"codestral-2508","name":"Codestral","description":"Mistral coding model for code completion, generation, and developer workflows","family":"codestral","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-07-30","last_updated":"2025-07-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":16384},"cost":{"input":0.3,"output":0.9},"canonical_model_id":"mistral/codestral-2508"},"claude-fable-5-1":{"id":"claude-fable-5-1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"gemini-3.8-flash":{"id":"gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"cache_write":0.08333},"canonical_model_id":"google/gemini-3.8-flash"},"kimi-k3.1-pro-highspeed":{"id":"kimi-k3.1-pro-highspeed","name":"Kimi K3.1 Pro Highspeed","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":4}},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.605,"output":2.123,"cache_read":0.154,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.2"},"mistral-small-2506":{"id":"mistral-small-2506","name":"Mistral Small 3.2","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-03","release_date":"2025-06-20","last_updated":"2025-06-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.1,"output":0.3},"canonical_model_id":"mistral/mistral-small-2506"},"grok-4-3":{"id":"grok-4-3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.3"},"gpt-5.2":{"id":"gpt-5.2","name":"GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"gemini-4-carbon":{"id":"gemini-4-carbon","name":"Gemini 4 Carbon","description":"Google's most capable reasoning model for complex software engineering, deep math and science, high factual accuracy, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":0.375},"canonical_model_id":"google/gemini-4-carbon"},"gpt-4.1-mini":{"id":"gpt-4.1-mini","name":"GPT-4.1 mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-4.1-mini"},"kimi-k3.1-pro":{"id":"kimi-k3.1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.9,"output":9.5,"cache_read":0.19,"cache_write":2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.8,"output":3.4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"gpt-5.2-codex":{"id":"gpt-5.2-codex","name":"GPT-5.2 Codex","description":"Code-specialist GPT for repository edits, reviews, and long-running software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2-codex"},"gpt-5.4-mini":{"id":"gpt-5.4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"fugu-max":{"id":"fugu-max","name":"Fugu Max","description":"Multi-agent model for routing expert agents across complex analytical tasks","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"sakana/fugu-max"},"llama-4-scout-17b-instruct":{"id":"llama-4-scout-17b-instruct","name":"Llama 4 Scout 17B Instruct","description":"Open multimodal Llama model for long-context analysis and efficient agents","family":"llama","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":2048},"cost":{"input":0.18,"output":0.59},"canonical_model_id":"meta/llama-4-scout-17b-instruct"},"seed-2-0-pro-260328":{"id":"seed-2-0-pro-260328","name":"Seed 2.0 Pro (260328)","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-28","last_updated":"2026-03-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":262144},"cost":{"input":0.5,"output":3,"cache_read":0.1}},"qwen3.8-omni-flash":{"id":"qwen3.8-omni-flash","name":"Qwen3.8 Omni Flash","description":"Qwen omni model for text, vision, audio, and multimodal agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-09-17","last_updated":"2026-09-17","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"output":131072},"cost":{"input":0.15,"output":0.47,"cache_read":0.016},"canonical_model_id":"alibaba/qwen3.8-omni-flash"},"seed-2-0-lite-260428":{"id":"seed-2-0-lite-260428","name":"Seed 2.0 Lite (260428)","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-28","last_updated":"2026-04-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":262144},"cost":{"input":0.25,"output":2,"cache_read":0.05}},"minimax-m2.1":{"id":"minimax-m2.1","name":"MiniMax-M2.1","description":"Earlier MiniMax agent model for practical coding and productivity tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.27,"output":1.1},"canonical_model_id":"minimax/MiniMax-M2.1"},"glm-4.5-x":{"id":"glm-4.5-x","name":"GLM-4.5 X","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"status":"beta","cost":{"input":2.2,"output":8.9,"cache_read":0.45}},"grok-4-20-reasoning":{"id":"grok-4-20-reasoning","name":"Grok 4.20 (Reasoning)","description":"Reasoning Grok for document-heavy analysis and long-horizon tool use","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.20-0309-reasoning"},"gemini-pro-latest":{"id":"gemini-pro-latest","name":"Gemini Pro Latest","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-27","last_updated":"2026-02-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2}},"minimax-m2.1-lightning":{"id":"minimax-m2.1-lightning","name":"MiniMax M2.1 Lightning","description":"High-speed MiniMax model for low-latency coding and agent workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"output":131072},"cost":{"input":0.12,"output":0.48}},"reka-edge-2603":{"id":"reka-edge-2603","name":"Reka Edge 2603","description":"Multimodal model for analyzing text, images, documents, and rich media","family":"reka","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-09","last_updated":"2026-10-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":16384,"output":16384},"cost":{"input":0.1,"output":0.1}},"gpt-5":{"id":"gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"minimax-m2.5-highspeed":{"id":"minimax-m2.5-highspeed","name":"MiniMax-M2.5-highspeed","description":"High-speed MiniMax model for low-latency coding and agent workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-13","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.4,"cache_read":0.03,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.5-highspeed"},"step-5-preview":{"id":"step-5-preview","name":"Step 5 Preview","description":"StepFun's next-generation flagship base model for coding and professional knowledge work, with native text, image, and video input and a 1M-token context window","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":1000000},"cost":{"input":1,"output":2.7,"cache_read":0.1},"canonical_model_id":"stepfun/step-5-preview"},"gpt-5.1-codex":{"id":"gpt-5.1-codex","name":"GPT-5.1 Codex","description":"Codex GPT for repository edits, code review, and practical software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1-codex"},"qwen-max":{"id":"qwen-max","name":"Qwen Max","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-04","release_date":"2024-04-03","last_updated":"2025-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":8192},"cost":{"input":1.6,"output":6.4},"canonical_model_id":"alibaba/qwen-max"},"muse-spark-1.1":{"id":"muse-spark-1.1","name":"Muse Spark 1.1","description":"Muse Spark is a natively multimodal reasoning model with support for tool-use, visual chain of thought, and multi-agent orchestration.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-08","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.1"},"kimi-k3-fast":{"id":"kimi-k3-fast","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1040384,"output":131072},"cost":{"input":4.5,"output":22.5,"cache_read":0.45},"canonical_model_id":"moonshotai/kimi-k3"},"mistral-medium-3-5":{"id":"mistral-medium-3-5","name":"Mistral Medium 3.5","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-30","last_updated":"2026-04-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":262144},"cost":{"input":1.5,"output":7.5},"canonical_model_id":"mistral/mistral-medium-3-5"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"qwen3-14b":{"id":"qwen3-14b","name":"Qwen3 14B","description":"Tool-capable chat model for instruction following and agentic application workflows","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":32768},"cost":{"input":0.076,"output":0.228}},"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5},"canonical_model_id":"openai/gpt-5.6-sol"},"gemini-3.5-flash":{"id":"gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"cache_read":0.15,"cache_write":0.08333},"canonical_model_id":"google/gemini-3.5-flash"},"claude-sonnet-5":{"id":"claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":false,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"gpt-6.1-terra":{"id":"gpt-6.1-terra","name":"GPT-6.1 Terra","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25},"canonical_model_id":"openai/gpt-6.1-terra"},"gpt-4.1":{"id":"gpt-4.1","name":"GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"glm-4.5-airx":{"id":"glm-4.5-airx","name":"GLM-4.5 AirX","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":1.1,"output":4.5,"cache_read":0.22}},"o3":{"id":"o3","name":"o3","description":"Deliberate o-series reasoner for hard math, coding, and multi-step analysis","family":"o","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/o3"},"claude-fable-5-2":{"id":"claude-fable-5-2","name":"Claude Fable 5.2","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"gemini-3.6-flash":{"id":"gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"cache_write":0.08333},"canonical_model_id":"google/gemini-3.6-flash"},"minimax-text-01":{"id":"minimax-text-01","name":"MiniMax Text 01","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-01-15","last_updated":"2025-01-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.2,"output":1.1}},"qwen3-vl-30b-a3b-instruct":{"id":"qwen3-vl-30b-a3b-instruct","name":"Qwen3 VL 30B A3B Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-04","last_updated":"2025-10-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":8192},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"alibaba/qwen3-vl-30b-a3b-instruct"},"grok-4":{"id":"grok-4","name":"Grok 4","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-07-09","last_updated":"2025-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":3,"output":15,"cache_read":0.75}},"gpt-6-luna":{"id":"gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125},"canonical_model_id":"openai/gpt-6-luna"},"seed-2-0-code-preview-260328":{"id":"seed-2-0-code-preview-260328","name":"Seed 2.0 Code Preview (260328)","description":"Coding model for repository understanding, refactors, and agentic engineering tasks","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-28","last_updated":"2026-03-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":262144},"cost":{"input":0.5,"output":3,"cache_read":0.1}},"mistral-large-2512":{"id":"mistral-large-2512","name":"Mistral Large 3","description":"Mistral's largest general model for enterprise agents, coding, and multilingual reasoning","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-11","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.5,"output":1.5},"canonical_model_id":"mistral/mistral-large-2512"},"qwen3.8-27b":{"id":"qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":32768},"cost":{"input":0.08,"output":0.35,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3.8-27b"},"glm-4.6v":{"id":"glm-4.6v","name":"GLM-4.6V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.3,"output":0.9,"cache_read":0.05},"canonical_model_id":"zhipuai/glm-4.6v"},"ministral-3b-2512":{"id":"ministral-3b-2512","name":"Ministral 3B","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"cost":{"input":0.1,"output":0.1},"canonical_model_id":"mistral/ministral-3b-2512"},"ministral-8b-2512":{"id":"ministral-8b-2512","name":"Ministral 8B","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":8192},"cost":{"input":0.15,"output":0.15},"canonical_model_id":"mistral/ministral-8b-2512"},"grok-4-7":{"id":"grok-4-7","name":"Grok 4.7","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.7"},"qwen-plus":{"id":"qwen-plus","name":"Qwen Plus","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-04","release_date":"2024-01-25","last_updated":"2025-09-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":32768},"cost":{"input":0.4,"output":1.2,"reasoning":4,"cache_read":0.08,"cache_write":0.5},"canonical_model_id":"alibaba/qwen-plus"},"qwen3.8-flash":{"id":"qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.47,"cache_read":0.016,"cache_write":0.2},"canonical_model_id":"alibaba/qwen3.8-flash"},"glm-5.1":{"id":"glm-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":1.38,"output":4.4,"cache_read":0.26,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.1"},"kimi-k2.5":{"id":"kimi-k2.5","name":"Kimi K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.574,"output":3.011,"cache_read":0.225},"canonical_model_id":"moonshotai/kimi-k2.5"},"grok-4-5":{"id":"grok-4-5","name":"Grok 4.5","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.3},"canonical_model_id":"xai/grok-4.5"},"sonar":{"id":"sonar","name":"Sonar","description":"Fast web-grounded Sonar for current answers, citations, and lightweight retrieval","family":"sonar","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-09-01","release_date":"2024-01-01","last_updated":"2025-09-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":130000,"output":4096},"cost":{"input":0.25,"output":2.5,"cache_write":0.25},"canonical_model_id":"perplexity/sonar"},"mimo-v2.6-pro":{"id":"mimo-v2.6-pro","name":"MiMo-V2.6-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.435,"output":0.87,"cache_read":0.0036},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"glm-4.5":{"id":"glm-4.5","name":"GLM-4.5","description":"Hybrid-reasoning GLM release that made the 4.5 line broadly useful","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":98304},"cost":{"input":0.6,"output":2.2,"cache_read":0.11,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.5"},"gpt-oss-20b":{"id":"gpt-oss-20b","name":"GPT OSS 20B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32766},"cost":{"input":0.04,"output":0.19,"cache_read":0.01},"canonical_model_id":"openai/gpt-oss-20b"},"grok-build-0-1":{"id":"grok-build-0-1","name":"Grok Build 0.1","description":"Fast Grok coding model tuned for agentic engineering and iterative edits","family":"grok-build","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":1,"output":2,"cache_read":0.2,"tiers":[{"input":2,"output":4,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2,"output":4,"cache_read":0.4}},"canonical_model_id":"xai/grok-build-0.1"},"minimax-m2.5":{"id":"minimax-m2.5","name":"MiniMax-M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":228700,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.03,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.5"},"hy-mt2-plus":{"id":"hy-mt2-plus","name":"Hy-MT2 Plus","description":"Tool-capable chat model for instruction following and agentic application workflows","family":"Hy","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":8192},"cost":{"input":0.074,"output":0.295}},"qwen35-397b-a17b":{"id":"qwen35-397b-a17b","name":"Qwen3.5 397B-A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.6,"output":3.6},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"gemini-3.1-pro-preview":{"id":"gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"qwen3.5-9b":{"id":"qwen3.5-9b","name":"Qwen3.5 9B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.1,"output":0.15},"canonical_model_id":"alibaba/qwen3.5-9b"},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1050000,"output":384000},"cost":{"input":0.135,"output":0.54,"cache_read":0.0027},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"mistral-small-2603":{"id":"mistral-small-2603","name":"Mistral Small 4","description":"Fast Mistral production model for chat, extraction, and cost-sensitive agents","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"mistral/mistral-small-2603"},"custom":{"id":"custom","name":"Custom Model","description":"Automatic model router for matching prompts to suitable backends and budgets","family":"auto","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2024-01-01","last_updated":"2024-01-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0,"output":0}},"gemini-3.1-flash-lite":{"id":"gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"cache_write":0.08333},"canonical_model_id":"google/gemini-3.1-flash-lite"},"minimax-m2":{"id":"minimax-m2","name":"MiniMax-M2","description":"Efficient open MiniMax model built for coding agents and tool-heavy workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-10-27","last_updated":"2025-10-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"output":131072},"cost":{"input":0.2,"output":1,"cache_read":0.03},"canonical_model_id":"minimax/MiniMax-M2"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1050000,"output":384000},"cost":{"input":0.66,"output":1.98,"cache_read":0.022},"canonical_model_id":"deepseek/deepseek-v4-pro"},"ling-3.0-flash":{"id":"ling-3.0-flash","name":"InclusionAI Ling 3.0 Flash","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-23","last_updated":"2026-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.06,"output":0.18,"cache_read":0.012},"canonical_model_id":"inclusionai/ling-3.0-flash"},"fugu-ultra-v2.0":{"id":"fugu-ultra-v2.0","name":"Fugu Ultra v2.0","description":"Quality-first multi-agent model for hard research, analysis, and competitions","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":5,"output":30,"cache_read":0.5}},"glm-4.7":{"id":"glm-4.7","name":"GLM-4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.45,"output":2,"cache_read":0.19,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.7"},"gpt-5-pro":{"id":"gpt-5-pro","name":"GPT-5 Pro","description":"Higher-accuracy GPT-5 tier for tough analysis, coding reviews, and planning","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":272000},"cost":{"input":15,"output":120},"canonical_model_id":"openai/gpt-5-pro"},"claude-sonnet-4-5-20250929":{"id":"claude-sonnet-4-5-20250929","name":"Claude Sonnet 4.5","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5-20250929"},"glm-5.3-fast":{"id":"glm-5.3-fast","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":2.8,"output":8.8,"cache_read":0.56},"canonical_model_id":"zhipuai/glm-5.3"},"gpt-6-sol":{"id":"gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"openai/gpt-6-sol"},"gpt-4o-transcribe":{"id":"gpt-4o-transcribe","name":"GPT-4o Transcribe","description":"Speech transcription model for accurate audio-to-text and captioning workflows","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-03-20","last_updated":"2025-03-20","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":false,"limit":{"context":16000,"output":16000},"cost":{"input":2.5,"output":10}},"gemini-4-argon":{"id":"gemini-4-argon","name":"Gemini 4 Argon","description":"Gemini multimodal model for text, image, audio, video, and document tasks","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":0.375},"canonical_model_id":"google/gemini-4-argon"},"qwen3.8-2.4t-a95b":{"id":"qwen3.8-2.4t-a95b","name":"Qwen3.8 2.4T A95B","description":"Open-weight sparse MoE (2.4T total, 95B active), the open-weight twin of Qwen3.8 Max for coding, research, complex reasoning, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1010000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"muse-wonder-1.0":{"id":"muse-wonder-1.0","name":"Muse Wonder","description":"Muse Wonder is a frontier multimodal reasoning model from Meta for personal and professional agents, long-horizon coding, and computer use. It combines Active Memory, which carries relevant context across conversations, with Active Focus, which keeps it working through blockers toward a goal.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-12","last_updated":"2026-10-12","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":4,"output":20,"cache_read":0.2},"canonical_model_id":"meta/muse-wonder-1.0"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.5,"output":2,"cache_read":0.15},"canonical_model_id":"zhipuai/glm-5.3"},"gpt-5.3-codex":{"id":"gpt-5.3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"qwen3.5-35b-a3b":{"id":"qwen3.5-35b-a3b","name":"Qwen3.5 35B-A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.25,"output":2},"canonical_model_id":"alibaba/qwen3.5-35b-a3b"},"minimax-m3.1-flash":{"id":"minimax-m3.1-flash","name":"MiniMax-M3.1-Flash","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":512000},"cost":{"input":0.1,"output":0.5,"cache_read":0.005},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"mimo-v2.6-flash":{"id":"mimo-v2.6-flash","name":"MiMo-V2.6-Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"qwen3.7-plus":{"id":"qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"output":64000},"cost":{"input":0.4,"output":1.6,"cache_read":0.08,"cache_write":0.5},"canonical_model_id":"alibaba/qwen3.7-plus"},"muse-spark-1.2-contributor":{"id":"muse-spark-1.2-contributor","name":"Muse Spark 1.2 Contributor","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-06","last_updated":"2026-08-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.1,"output":0.2,"cache_read":0.002}},"granite-4.2-8b":{"id":"granite-4.2-8b","name":"Granite 4.2 8B","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"granite","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-25","last_updated":"2026-08-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.06,"output":0.25,"cache_read":0.015},"canonical_model_id":"ibm/granite-4.2-8b"},"glm-4-32b-0414-128k":{"id":"glm-4-32b-0414-128k","name":"GLM-4 32B (0414-128k)","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.1,"output":0.1}},"claude-fable-5":{"id":"claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"minimax-m3":{"id":"minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":512000},"cost":{"input":0.28,"output":1.1,"cache_read":0.056},"canonical_model_id":"minimax/MiniMax-M3"},"qwen3.7-max":{"id":"qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":1.25,"output":3.75,"cache_read":0.25,"cache_write":3.125},"canonical_model_id":"alibaba/qwen3.7-max"},"grok-4-1-fast-reasoning":{"id":"grok-4-1-fast-reasoning","name":"Grok 4.1 Fast Reasoning","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-11-19","last_updated":"2025-11-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"canonical_model_id":"xai/grok-4.1-fast-reasoning"},"kimi-k2":{"id":"kimi-k2","name":"Kimi K2","description":"Kimi model for long-context chat, coding, and agentic reasoning","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-11","last_updated":"2025-07-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":16384},"cost":{"input":0.57,"output":2.3,"cache_read":0.5}},"gpt-6-astra":{"id":"gpt-6-astra","name":"GPT-6 Astra","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":1050000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"openai/gpt-6-astra"},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.737,"output":3.08,"cache_read":0.143},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"grok-4-20-beta-0309-reasoning":{"id":"grok-4-20-beta-0309-reasoning","name":"Grok 4.20 (Reasoning)","description":"Reasoning Grok for document-heavy analysis and long-horizon tool use","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"cost":{"input":2,"output":6,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.20-0309-reasoning"},"llama-3.1-70b-instruct":{"id":"llama-3.1-70b-instruct","name":"Llama 3.1 70B Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":2048},"status":"beta","cost":{"input":0.72,"output":0.72},"canonical_model_id":"meta/llama-3.1-70b-instruct"},"gpt-5.1":{"id":"gpt-5.1","name":"GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1"},"grok-4-20-beta-0309-non-reasoning":{"id":"grok-4-20-beta-0309-non-reasoning","name":"Grok 4.20 (Non-Reasoning)","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"cost":{"input":2,"output":6,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.20-0309-non-reasoning"},"claude-haiku-4-5-20251001":{"id":"claude-haiku-4-5-20251001","name":"Claude Haiku 4.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"gpt-5-mini":{"id":"gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"gpt-5.1-codex-mini":{"id":"gpt-5.1-codex-mini","name":"GPT-5.1 Codex mini","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5.1-codex-mini"},"gpt-5.5-pro":{"id":"gpt-5.5-pro","name":"GPT-5.5 Pro","description":"Highest-accuracy GPT-5.5 tier for slower, precision-heavy reasoning and coding","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.5-pro"},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1050000,"output":384000},"cost":{"input":0.076,"output":0.153,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4-flash"},"nemotron-3-ultra-550b":{"id":"nemotron-3-ultra-550b","name":"Nemotron 3 Ultra 550B A55B","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":128000},"cost":{"input":0.5,"output":2.2,"cache_read":0.1},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"gpt-4o-mini-transcribe":{"id":"gpt-4o-mini-transcribe","name":"GPT-4o Mini Transcribe","description":"Speech transcription model for accurate audio-to-text and captioning workflows","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-03-20","last_updated":"2025-03-20","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":false,"limit":{"context":16000,"output":16000},"cost":{"input":1.25,"output":5}},"llama-3.3-70b-instruct":{"id":"llama-3.3-70b-instruct","name":"Llama-3.3-70B-Instruct","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":4096},"cost":{"input":0.135,"output":0.4},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"qwen3.6-flash":{"id":"qwen3.6-flash","name":"Qwen3.6 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.6","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.05,"cache_write":0.3125},"canonical_model_id":"alibaba/qwen3.6-flash"},"qwen3.7-flash":{"id":"qwen3.7-flash","name":"Qwen3.7 Flash","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"output":1000000},"cost":{"input":0.03,"output":0.13,"cache_read":0.006,"cache_write":0.0375},"canonical_model_id":"alibaba/qwen3.7-flash"},"kimi-k2.7-code-highspeed":{"id":"kimi-k2.7-code-highspeed","name":"Kimi K2.7 Code Highspeed","description":"Lower-latency Kimi Code variant for interactive edits and coding-agent loops","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.9,"output":8,"cache_read":0.38},"canonical_model_id":"moonshotai/kimi-k2.7-code-highspeed"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.088,"output":0.25,"cache_read":0.025},"canonical_model_id":"zhipuai/glm-5.3-flash"},"claude-opus-5":{"id":"claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"grok-4-20-non-reasoning":{"id":"grok-4-20-non-reasoning","name":"Grok 4.20 (Non-Reasoning)","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.20-0309-non-reasoning"},"glm-5-turbo":{"id":"glm-5-turbo","name":"GLM-5-Turbo","description":"Faster GLM-5 lane for coding agents that need lower latency","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24},"canonical_model_id":"zhipuai/glm-5-turbo"},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25},"canonical_model_id":"openai/gpt-5.6-luna"},"gemini-3.5-flash-lite":{"id":"gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"cache_write":0.08333},"canonical_model_id":"google/gemini-3.5-flash-lite"},"claude-opus-4-5-20251101":{"id":"claude-opus-4-5-20251101","name":"Claude Opus 4.5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]},{"type":"budget_tokens","min":1024,"max":31999}],"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5-20251101"},"gemma-4-31b-it":{"id":"gemma-4-31b-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.1,"output":0.25,"cache_read":0.01},"canonical_model_id":"google/gemma-4-31b-it"},"gpt-6.1-sol":{"id":"gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"openai/gpt-6.1-sol"},"gpt-5.4-pro":{"id":"gpt-5.4-pro","name":"GPT-5.4 Pro","description":"More exact GPT-5.4 tier for demanding professional reasoning and agent tasks","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180},"canonical_model_id":"openai/gpt-5.4-pro"},"hy3":{"id":"hy3","name":"Hy3","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":192000,"output":128000},"cost":{"input":0.132,"output":0.528,"cache_read":0.033},"canonical_model_id":"tencent/hy3"},"qwen3.6-27b":{"id":"qwen3.6-27b","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"output":65536},"cost":{"input":0.15,"output":1.35},"canonical_model_id":"alibaba/qwen3.6-27b"},"hy4-preview":{"id":"hy4-preview","name":"Hy4 preview","description":"A next-generation productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-28","last_updated":"2026-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":64000},"cost":{"input":0.834,"output":2.501,"cache_read":0.042},"canonical_model_id":"tencent/hy4-preview"},"gpt-5-nano":{"id":"gpt-5-nano","name":"GPT-5 Nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-nano"},"glm-4.5-air":{"id":"glm-4.5-air","name":"GLM-4.5-Air","description":"Lighter GLM-4.5 variant for fast coding assistance and cheaper agents","family":"glm-air","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":98304},"cost":{"input":0.2,"output":1.1,"cache_read":0.03,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.5-air"},"devstral-2512":{"id":"devstral-2512","name":"Devstral 2","description":"Mistral's coding-agent model for repository work, terminal tasks, and software fixes","family":"devstral","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-12","release_date":"2025-12-09","last_updated":"2025-12-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0.4,"output":2},"canonical_model_id":"mistral/devstral-2512"},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25},"canonical_model_id":"openai/gpt-5.4"},"glm-4.6":{"id":"glm-4.6","name":"GLM-4.6","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.55,"output":2.2,"cache_read":0.11,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.6"},"gemini-3-flash-preview":{"id":"gemini-3-flash-preview","name":"Gemini 3 Flash Preview","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.05},"canonical_model_id":"google/gemini-3-flash-preview"},"qwen3.6-35b-a3b":{"id":"qwen3.6-35b-a3b","name":"Qwen3.6 35B-A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.248,"output":1.485},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"claude-opus-4-6":{"id":"claude-opus-4-6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"auto":{"id":"auto","name":"Auto Route","description":"Automatic model router for matching prompts to suitable backends and budgets","family":"auto","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2024-01-01","last_updated":"2024-01-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0,"output":0}},"gemma-4-26b-a4b-it":{"id":"gemma-4-26b-a4b-it","name":"Gemma 4 26B A4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.07,"output":0.34},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"gpt-5.4-nano":{"id":"gpt-5.4-nano","name":"GPT-5.4 nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"glm-4.5v":{"id":"glm-4.5v","name":"GLM-4.5V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-08-11","last_updated":"2025-08-11","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.6,"output":1.8,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.5v"},"deepseek-v4.1-flash-cyber":{"id":"deepseek-v4.1-flash-cyber","name":"DeepSeek V4.1 Flash Cyber","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-29","last_updated":"2026-10-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1040000,"output":1040000},"cost":{"input":0.3,"output":1,"cache_read":0.007}},"minimax-m2.7-highspeed":{"id":"minimax-m2.7-highspeed","name":"MiniMax-M2.7-highspeed","description":"Low-latency M2.7 variant for interactive coding plans and agent loops","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.4,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.7-highspeed"},"qwen-flash":{"id":"qwen-flash","name":"Qwen Flash","description":"Efficient Qwen model for fast chat, extraction, and high-volume workloads","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":0.05,"output":0.4,"cache_read":0.01,"cache_write":0.0625},"canonical_model_id":"alibaba/qwen-flash"},"muse-glimmer-30b":{"id":"muse-glimmer-30b","name":"Muse Glimmer 30B","description":"Muse Glimmer is a 30-billion-parameter open-weight multimodal model from Meta Superintelligence Labs, distilled from Muse Spark for always-on local agents, tool use, coding, and image understanding.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-08-10","last_updated":"2026-08-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.04},"canonical_model_id":"meta/muse-glimmer-30b"},"llama-3.2-11b-instruct":{"id":"llama-3.2-11b-instruct","name":"Llama 3.2 11B Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0.07,"output":0.33}},"gpt-4o":{"id":"gpt-4o","name":"GPT-4o","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o"},"claude-opus-4-8":{"id":"claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"qwen3-32b":{"id":"qwen3-32b","name":"Qwen3 32B","description":"Dense open Qwen model for self-hosted chat, reasoning, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":40960,"output":16384},"cost":{"input":0.36,"output":0.87,"reasoning":8.4},"canonical_model_id":"alibaba/qwen3-32b"},"deepseek-v3.2":{"id":"deepseek-v3.2","name":"DeepSeek V3.2","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":16384},"cost":{"input":0.26,"output":0.38,"cache_read":0.13},"canonical_model_id":"deepseek/deepseek-v3.2"},"muse-ember-1.0":{"id":"muse-ember-1.0","name":"Muse Ember 1.0","description":"Muse Ember is Meta's smallest and most efficient reasoning model, built for the work agents repeat all day: tool calls, coding subtasks, routing, extraction, and long-document parsing. It pairs with Muse Wonder or Muse Spark, which plan while Muse Ember handles the volume.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":524288},"cost":{"input":0.1,"output":0.5,"cache_read":0.004},"canonical_model_id":"meta/muse-ember-1.0"},"deepseek-v4-flash-0731":{"id":"deepseek-v4-flash-0731","name":"deepseek-v4-flash-0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1050000,"output":384000},"cost":{"input":0.08,"output":0.18,"cache_read":0.016},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"glm-5.3-flashx":{"id":"glm-5.3-flashx","name":"GLM-5.3 FlashX","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-18","last_updated":"2026-09-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":0.37,"output":1.25,"cache_read":0.075}},"kimi-k2.8-preview":{"id":"kimi-k2.8-preview","name":"Kimi K2.8 Preview","description":"Kimi coding model with more efficient thinking and up to 1M context, available through Kimi Code","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":1,"output":4,"cache_read":0.25},"canonical_model_id":"moonshotai/kimi-k2.8-preview"},"qwen3-vl-plus":{"id":"qwen3-vl-plus","name":"Qwen3-VL Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"cost":{"input":0.2,"output":1.6,"reasoning":4.8,"cache_read":0.04,"cache_write":0.25},"canonical_model_id":"alibaba/qwen3-vl-plus"},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"GPT OSS 120B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32766},"cost":{"input":0.05,"output":0.25,"cache_read":0.01},"canonical_model_id":"openai/gpt-oss-120b"},"fugu-ultra":{"id":"fugu-ultra","name":"Fugu Ultra","description":"Quality-first multi-agent model for hard research, analysis, and competitions","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-06-15","last_updated":"2026-06-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"sakana/fugu-ultra"},"gpt-5.6-terra":{"id":"gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"openai/gpt-5.6-terra"},"minimax-m2.7":{"id":"minimax-m2.7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.7"},"gpt-transcribe":{"id":"gpt-transcribe","type":"transcription","name":"GPT-Transcribe","description":"High-accuracy speech-to-text model for audio files and committed Realtime turns","family":"gpt","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-07-28","last_updated":"2026-07-28","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-transcribe"},"seed-2-0-mini-260428":{"id":"seed-2-0-mini-260428","name":"Seed 2.0 Mini (260428)","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-28","last_updated":"2026-04-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":262144},"cost":{"input":0.1,"output":0.4,"cache_read":0.02}},"claude-opus-5-5":{"id":"claude-opus-5-5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"qwen3.8-max":{"id":"qwen3.8-max","name":"Qwen3.8 Max Preview","description":"Preview Qwen flagship for million-token multimodal reasoning and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-19","last_updated":"2026-07-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":1.54,"output":4.631,"cache_read":0.198,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max-preview"},"qwen3.5-27b":{"id":"qwen3.5-27b","name":"Qwen3.5 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.3,"output":2.4},"canonical_model_id":"alibaba/qwen3.5-27b"},"mistral-large-4":{"id":"mistral-large-4","name":"Mistral Large 4","description":"Mistral's 1T-parameter multimodal MoE for reasoning, coding, and agentic work","family":"mistral-large","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":262144},"cost":{"input":1.36,"output":4.18,"cache_read":0.14},"canonical_model_id":"mistral/mistral-large-4"},"claude-sonnet-4-5":{"id":"claude-sonnet-4-5","name":"Claude Sonnet 4.5 (latest)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"step-3.7-flash":{"id":"step-3.7-flash","name":"Step 3.7 Flash","description":"Newer StepFun flash model for faster agents, coding, and multimodal prompts","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2026-03-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"cost":{"input":0.2,"output":1.15,"cache_read":0.04},"canonical_model_id":"stepfun/step-3.7-flash"},"glm-5v-turbo":{"id":"glm-5v-turbo","name":"GLM-5V-Turbo","description":"Fast GLM vision model for screenshots, documents, and multimodal agent tasks","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24},"canonical_model_id":"zhipuai/glm-5v-turbo"},"deepseek-v4.1-flash-1017":{"id":"deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1050000,"output":1050000},"cost":{"input":0.135,"output":0.54,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"gpt-4o-mini":{"id":"gpt-4o-mini","name":"GPT-4o mini","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-4o-mini"},"ministral-14b-2512":{"id":"ministral-14b-2512","name":"Ministral 14B","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":8192},"cost":{"input":0.2,"output":0.2},"canonical_model_id":"mistral/ministral-14b-2512"},"glm-4.7-flashx":{"id":"glm-4.7-flashx","name":"GLM-4.7-FlashX","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0.07,"output":0.4,"cache_read":0.01,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.7-flashx"},"claude-haiku-5-5":{"id":"claude-haiku-5-5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125},"canonical_model_id":"anthropic/claude-haiku-5-5"},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"muse-spark-1.2":{"id":"muse-spark-1.2","name":"Muse Spark 1.2","description":"Muse Spark 1.2 is a coding-focused update to Muse Spark 1.1 with improvements in code generation, complex debugging, codebase understanding, and end-to-end developer workflows.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.2"},"qwen3-coder-flash":{"id":"qwen3-coder-flash","name":"Qwen3 Coder Flash","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":997952,"output":65536},"cost":{"input":0.3,"output":1.5,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"alibaba/qwen3-coder-flash"},"glm-5":{"id":"glm-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202800,"output":131072},"cost":{"input":0.573,"output":2.58,"cache_read":0.144,"cache_write":0},"canonical_model_id":"zhipuai/glm-5"},"deepseek-v4.1-flash-uncensored":{"id":"deepseek-v4.1-flash-uncensored","name":"DeepSeek V4.1 Flash 1017 Uncensored (HeimdaLLM)","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.18,"output":0.65,"cache_read":0.005}},"llama-4-maverick-17b-instruct":{"id":"llama-4-maverick-17b-instruct","name":"Llama 4 Maverick 17B Instruct","description":"Open multimodal Llama model for strong reasoning and fast responses","family":"llama","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":2048},"cost":{"input":0.27,"output":0.85},"canonical_model_id":"meta/llama-4-maverick-17b-instruct"},"muse-spark-1.3-contributor":{"id":"muse-spark-1.3-contributor","name":"Muse Spark 1.3 Contributor","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.1,"output":0.2,"cache_read":0.002}},"claude-opus-4-7":{"id":"claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"gemini-3.7-flash":{"id":"gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"cache_write":0.08333},"canonical_model_id":"google/gemini-3.7-flash"},"glm-4.6v-flashx":{"id":"glm-4.6v-flashx","name":"GLM-4.6V FlashX","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16000},"cost":{"input":0.04,"output":0.4,"cache_read":0.004}},"mistral-large-latest":{"id":"mistral-large-latest","name":"Mistral Large (latest)","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-11","release_date":"2024-11-01","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":262144},"cost":{"input":4,"output":12},"canonical_model_id":"mistral/mistral-large-latest"},"qwen3.5-122b-a10b":{"id":"qwen3.5-122b-a10b","name":"Qwen3.5 122B-A10B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.4,"output":3.2},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"claude-haiku-4-5":{"id":"claude-haiku-4-5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"}}},"tokengo":{"id":"tokengo","env":["TOKENGO_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.tokengo.com/v1","name":"TokenGo","doc":"https://www.tokengo.com/docs","models":{"deepseek/deepseek-v3.1":{"id":"deepseek/deepseek-v3.1","name":"DeepSeek-V3.1","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"cost":{"input":0.19,"output":0.71,"cache_read":0.06},"canonical_model_id":"deepseek/deepseek-v3.1"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.435,"output":0.87},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-v4-flash":{"id":"deepseek/deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.098,"output":0.196,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek/deepseek-v3.2":{"id":"deepseek/deepseek-v3.2","name":"DeepSeek V3.2","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes, sparse attention, and tool-use","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":64000},"cost":{"input":0.2174,"output":0.326,"cache_read":0.06},"canonical_model_id":"deepseek/deepseek-v3.2"},"qwen/qwen3.5-397b-a17b":{"id":"qwen/qwen3.5-397b-a17b","name":"Qwen3.5 397B-A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.4,"output":2.65,"cache_read":0.2},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"moonshotai/kimi-k2.6":{"id":"moonshotai/kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"moonshotai/kimi-k3":{"id":"moonshotai/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"minimax/minimax-m2.5":{"id":"minimax/minimax-m2.5","name":"MiniMax-M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.03},"canonical_model_id":"minimax/MiniMax-M2.5"},"z-ai/glm-5.2":{"id":"z-ai/glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"z-ai/glm-5.1":{"id":"z-ai/glm-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.1"},"z-ai/glm-5.3":{"id":"z-ai/glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"z-ai/glm-5.3-flash":{"id":"z-ai/glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"z-ai/glm-5":{"id":"z-ai/glm-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.89,"output":3.2647,"cache_read":0.2226},"canonical_model_id":"zhipuai/glm-5"}}},"ebcloud":{"id":"ebcloud","env":["EBCLOUD_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://maas-api.ebcloud.com/v1","name":"EBCloud","doc":"https://docs.ebtech.com/ai/model-api.html","models":{"DeepSeek-V4-Flash":{"id":"DeepSeek-V4-Flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.143,"output":0.2857},"canonical_model_id":"deepseek/deepseek-v4-flash"},"Kimi-K2.6":{"id":"Kimi-K2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.9286,"output":3.8571},"canonical_model_id":"moonshotai/kimi-k2.6"},"GLM-5.1":{"id":"GLM-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0.8571,"output":3.4286},"canonical_model_id":"zhipuai/glm-5.1"},"DeepSeek-V4-Pro":{"id":"DeepSeek-V4-Pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.4286,"output":0.8571},"canonical_model_id":"deepseek/deepseek-v4-pro"}}},"moonshotai":{"id":"moonshotai","env":["MOONSHOT_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.moonshot.ai/v1","name":"Moonshot AI","doc":"https://platform.moonshot.ai/docs/api/chat","models":{"kimi-k3.1-pro-highspeed":{"id":"kimi-k3.1-pro-highspeed","name":"Kimi K3.1 Pro Highspeed","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":4},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"kimi-k3.1-pro":{"id":"kimi-k3.1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3},"canonical_model_id":"moonshotai/kimi-k3"},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"kimi-k2.7-code-highspeed":{"id":"kimi-k2.7-code-highspeed","name":"Kimi K2.7 Code HighSpeed","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.9,"output":8,"cache_read":0.38},"canonical_model_id":"moonshotai/kimi-k2.7-code"}}},"greenpt":{"id":"greenpt","env":["GREENPT_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.greenpt.ai/v1","name":"GreenPT","doc":"https://docs.greenpt.ai","models":{"voxtral-small-24b-2507":{"id":"voxtral-small-24b-2507","name":"Voxtral Small 24B","description":"Mistral Voxtral audio-understanding model for speech and transcription tasks","family":"voxtral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-07","release_date":"2025-07-15","last_updated":"2025-07-15","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":16384},"status":"deprecated","cost":{"input":0.228,"output":0.513},"canonical_model_id":"mistral/voxtral-small-24b-2507"},"qwen3-coder-30b-a3b-instruct":{"id":"qwen3-coder-30b-a3b-instruct","name":"Qwen3-Coder 30B-A3B Instruct","description":"Smaller Qwen coder for efficient local agents and repo-level fixes","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-31","last_updated":"2025-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"status":"deprecated","cost":{"input":0.285,"output":1.083},"canonical_model_id":"alibaba/qwen3-coder-30b-a3b-instruct"},"green-l-raw":{"id":"green-l-raw","name":"Green L Raw","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-03","release_date":"2025-06-20","last_updated":"2025-06-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0.285,"output":0.912},"canonical_model_id":"mistral/mistral-small-2506"},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.738325,"output":5.1589,"cache_read":0.4486},"canonical_model_id":"zhipuai/glm-5.2"},"gemma4":{"id":"gemma4","name":"gemma4","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.57,"output":1.71},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"glm-5.2-caveman-ultra":{"id":"glm-5.2-caveman-ultra","name":"GLM-5.2 Caveman Ultra","description":"glm-5.2 carrying a built-in ruleset that compresses prose, keeping code and technical detail verbatim. The most aggressive tier, close to answer-only. Same upstream model and price per token as glm-5.2, with fewer output tokens.","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.738325,"output":5.1589,"cache_read":0.4486},"canonical_model_id":"zhipuai/glm-5.2"},"green-r-raw":{"id":"green-r-raw","name":"Green R Raw","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.399,"output":1.083},"canonical_model_id":"openai/gpt-oss-120b"},"pixtral-12b-2409":{"id":"pixtral-12b-2409","name":"Pixtral 12B","description":"Mistral vision-language model for image understanding and multimodal chat","family":"pixtral","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-09","release_date":"2024-09-11","last_updated":"2024-09-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"status":"deprecated","cost":{"input":0.285,"output":0.285},"canonical_model_id":"mistral/pixtral-12b"},"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.7524,"output":4.275,"cache_read":0.2508},"canonical_model_id":"moonshotai/kimi-k2.6"},"glm-5.2-ponytail-ultra":{"id":"glm-5.2-ponytail-ultra","name":"GLM-5.2 Ponytail Ultra","description":"glm-5.2 carrying a built-in ruleset that compresses generated code, preferring platform features over custom code. The most aggressive tier, close to answer-only. Same upstream model and price per token as glm-5.2, with fewer output tokens.","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.738325,"output":5.1589,"cache_read":0.4486},"canonical_model_id":"zhipuai/glm-5.2"},"mistral-medium-3.5-128b":{"id":"mistral-medium-3.5-128b","name":"Mistral Medium 3.5","description":"Balanced Mistral model for enterprise assistants, multilingual work, and tools","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-29","last_updated":"2026-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":2.052,"output":10.26},"canonical_model_id":"mistral/mistral-medium-2604"},"gemma-3-27b-it":{"id":"gemma-3-27b-it","name":"Gemma 3 27B","description":"Google Gemma 3 multimodal model for chat, reasoning, and image understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":40000,"output":8192},"status":"deprecated","cost":{"input":0.342,"output":0.684},"canonical_model_id":"google/gemma-3-27b-it"},"green-s":{"id":"green-s","type":"transcription","name":"Green S","description":"GreenPT speech-to-text model for pre-recorded and live transcription","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-01","last_updated":"2025-01","modalities":{"input":["audio"],"output":["text"]},"open_weights":false,"limit":{"context":0,"output":8192},"provider":{"api":"https://api.greenpt.ai"}},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3.762,"output":18.81,"cache_read":0.9405},"canonical_model_id":"moonshotai/kimi-k3"},"glm-5.2-caveman-lite":{"id":"glm-5.2-caveman-lite","name":"GLM-5.2 Caveman Lite","description":"glm-5.2 carrying a built-in ruleset that compresses prose, keeping code and technical detail verbatim. The gentlest tier: it cuts filler only and keeps the explanation intact. Same upstream model and price per token as glm-5.2, with fewer output tokens.","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.738325,"output":5.1589,"cache_read":0.4486},"canonical_model_id":"zhipuai/glm-5.2"},"glm-5.2-ponytail-lite":{"id":"glm-5.2-ponytail-lite","name":"GLM-5.2 Ponytail Lite","description":"glm-5.2 carrying a built-in ruleset that compresses generated code, preferring platform features over custom code. The gentlest tier: it cuts filler only and keeps the explanation intact. Same upstream model and price per token as glm-5.2, with fewer output tokens.","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.738325,"output":5.1589,"cache_read":0.4486},"canonical_model_id":"zhipuai/glm-5.2"},"glm-5.2-ponytail":{"id":"glm-5.2-ponytail","name":"GLM-5.2 Ponytail","description":"glm-5.2 carrying a built-in ruleset that compresses generated code, preferring platform features over custom code. The middle tier, and the ruleset as its authors wrote it. Same upstream model and price per token as glm-5.2, with fewer output tokens.","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.738325,"output":5.1589,"cache_read":0.4486},"canonical_model_id":"zhipuai/glm-5.2"},"glm-5.2-honey-ultra":{"id":"glm-5.2-honey-ultra","name":"GLM-5.2 Honey Ultra","description":"glm-5.2 carrying a built-in ruleset that compresses both generated code and prose. The most aggressive tier, close to answer-only. Same upstream model and price per token as glm-5.2, with fewer output tokens.","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.738325,"output":5.1589,"cache_read":0.4486},"canonical_model_id":"zhipuai/glm-5.2"},"mistral-small-3.2-24b-instruct-2506":{"id":"mistral-small-3.2-24b-instruct-2506","name":"Mistral Small 3.2","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-03","release_date":"2025-06-20","last_updated":"2025-06-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0.228,"output":0.456},"canonical_model_id":"mistral/mistral-small-2506"},"glm-5.1":{"id":"glm-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"status":"deprecated","cost":{"input":1.756,"output":5.518},"canonical_model_id":"zhipuai/glm-5.1"},"qwen3-235b-a22b-instruct-2507":{"id":"qwen3-235b-a22b-instruct-2507","name":"Qwen3 235B A22B Instruct 2507","description":"Qwen3 235B MoE instruct model for long-context multilingual chat and reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":1.026,"output":3.078},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"glm-5.2-honey":{"id":"glm-5.2-honey","name":"GLM-5.2 Honey","description":"glm-5.2 carrying a built-in ruleset that compresses both generated code and prose. The middle tier, and the ruleset as its authors wrote it. Same upstream model and price per token as glm-5.2, with fewer output tokens.","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.738325,"output":5.1589,"cache_read":0.4486},"canonical_model_id":"zhipuai/glm-5.2"},"qwen3.5-397b-a17b":{"id":"qwen3.5-397b-a17b","name":"Qwen3.5 397B-A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0.798,"output":4.959},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"minimax-m2.5":{"id":"minimax-m2.5","name":"MiniMax-M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.49346,"output":2.4673,"cache_read":0.123365},"canonical_model_id":"minimax/MiniMax-M2.5"},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.255552,"output":1.27776,"cache_read":0.0127776},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"glm-5.2-caveman":{"id":"glm-5.2-caveman","name":"GLM-5.2 Caveman","description":"glm-5.2 carrying a built-in ruleset that compresses prose, keeping code and technical detail verbatim. The middle tier, and the ruleset as its authors wrote it. Same upstream model and price per token as glm-5.2, with fewer output tokens.","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.738325,"output":5.1589,"cache_read":0.4486},"canonical_model_id":"zhipuai/glm-5.2"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.27754,"output":5.11016,"cache_read":0.319385},"canonical_model_id":"zhipuai/glm-5.3"},"green-s-pro":{"id":"green-s-pro","type":"transcription","name":"Green S Pro","description":"GreenPT advanced speech-to-text model with multilingual transcription support","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-02","last_updated":"2025-02","modalities":{"input":["audio"],"output":["text"]},"open_weights":false,"limit":{"context":0,"output":8192},"provider":{"api":"https://api.greenpt.ai"}},"green-l":{"id":"green-l","name":"Green L","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-03","release_date":"2025-06-20","last_updated":"2025-06-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0.285,"output":0.912},"canonical_model_id":"mistral/mistral-small-2506"},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.863555,"output":4.317775,"cache_read":0.222057},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"holo2-30b-a3b":{"id":"holo2-30b-a3b","name":"Holo2 30B A3B","description":"H Company Holo2 vision model for GUI navigation and computer-use agents","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-11","last_updated":"2025-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":22016,"output":16384},"status":"deprecated","cost":{"input":0.399,"output":0.969}},"llama-3.3-70b-instruct":{"id":"llama-3.3-70b-instruct","name":"Llama-3.3-70B-Instruct","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":100000,"output":16384},"cost":{"input":1.254,"output":1.254},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"kimi-k2.6-fast":{"id":"kimi-k2.6-fast","name":"Kimi K2.6 Fast","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":1.655,"output":8.778},"canonical_model_id":"moonshotai/kimi-k2.6"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.127754,"output":0.511016,"cache_read":0.0255508},"canonical_model_id":"zhipuai/glm-5.3-flash"},"qwen3.6-35b-a3b":{"id":"qwen3.6-35b-a3b","name":"Qwen3.6 35B-A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.342,"output":2.052},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"green-r":{"id":"green-r","name":"Green R","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.399,"output":1.083},"canonical_model_id":"openai/gpt-oss-120b"},"glm-5.2-honey-lite":{"id":"glm-5.2-honey-lite","name":"GLM-5.2 Honey Lite","description":"glm-5.2 carrying a built-in ruleset that compresses both generated code and prose. The gentlest tier: it cuts filler only and keeps the explanation intact. Same upstream model and price per token as glm-5.2, with fewer output tokens.","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.738325,"output":5.1589,"cache_read":0.4486},"canonical_model_id":"zhipuai/glm-5.2"},"deepseek-v4-flash-0731":{"id":"deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.1596,"output":0.399,"cache_read":0.0456},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.228,"output":0.798},"canonical_model_id":"openai/gpt-oss-120b"},"deepseek-v4.1-flash-1017":{"id":"deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.402192,"output":1.61994,"cache_read":0.044688},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"devstral-2-123b-instruct-2512":{"id":"devstral-2-123b-instruct-2512","name":"Devstral 2","description":"Mistral's coding-agent model for repository work, terminal tasks, and software fixes","family":"devstral","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-12","release_date":"2025-12-09","last_updated":"2025-12-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":16384},"status":"deprecated","cost":{"input":0.57,"output":2.736},"canonical_model_id":"mistral/devstral-2512"}}},"jalapeno":{"id":"jalapeno","env":["JALAPENO_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.jalapeno-cloud.ai/v1","name":"Jalapeno Cloud","doc":"https://www.jalapeno-cloud.ai/docs/","models":{"Kimi-K3":{"id":"Kimi-K3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"DeepSeek-V4-Flash":{"id":"DeepSeek-V4-Flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.14,"output":0.28,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash"},"Qwen3.5-397B-A17B":{"id":"Qwen3.5-397B-A17B","name":"Qwen3.5 397B-A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.6,"output":3.6},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"Kimi-K2.7-Code":{"id":"Kimi-K2.7-Code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":271360,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"Qwen3.5-27B":{"id":"Qwen3.5-27B","name":"Qwen3.5 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.3,"output":2.4},"canonical_model_id":"alibaba/qwen3.5-27b"},"Qwen3-VL-235B-A22B-Instruct":{"id":"Qwen3-VL-235B-A22B-Instruct","name":"Qwen3 VL 235B A22B Instruct","description":"Qwen vision-language instruct model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":129024,"output":32768},"status":"deprecated","cost":{"input":0.3,"output":1.5},"canonical_model_id":"alibaba/qwen3-vl-235b-a22b-instruct"},"GLM-5.2":{"id":"GLM-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"Qwen3-Next-80B-A3B-Instruct":{"id":"Qwen3-Next-80B-A3B-Instruct","name":"Qwen3-Next 80B-A3B Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":129024,"output":32768},"status":"deprecated","cost":{"input":0.15,"output":1.5},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-instruct"},"Kimi-K2.5":{"id":"Kimi-K2.5","name":"Kimi K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":180224},"cost":{"input":0.6,"output":3,"cache_read":0.1},"canonical_model_id":"moonshotai/kimi-k2.5"},"Qwen3.5-122B-A10B":{"id":"Qwen3.5-122B-A10B","name":"Qwen3.5 122B-A10B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.4,"output":3.2},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"Qwen3-Next-80B-A3B-Thinking":{"id":"Qwen3-Next-80B-A3B-Thinking","name":"Qwen3-Next 80B-A3B (Thinking)","description":"Efficient Qwen thinking model for local reasoning, math, and coding agents","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"status":"deprecated","cost":{"input":0.15,"output":1.5},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-thinking"},"Hy3":{"id":"Hy3","name":"Hy3","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"input":192000,"output":128000},"status":"deprecated","cost":{"input":0.14,"output":0.58},"canonical_model_id":"tencent/hy3"},"GLM-5.1":{"id":"GLM-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":1.38,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.1"},"MiniMax-M3":{"id":"MiniMax-M3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":512000},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"},"DeepSeek-V4-Pro":{"id":"DeepSeek-V4-Pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":1.6,"output":3.38,"cache_read":0.14},"canonical_model_id":"deepseek/deepseek-v4-pro"},"Qwen3.5-35B-A3B":{"id":"Qwen3.5-35B-A3B","name":"Qwen3.5 35B-A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.25,"output":2},"canonical_model_id":"alibaba/qwen3.5-35b-a3b"},"Qwen3-VL-235B-A22B-Thinking":{"id":"Qwen3-VL-235B-A22B-Thinking","name":"Qwen3 VL 235B A22B Thinking","description":"Qwen vision-language thinking model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"status":"deprecated","cost":{"input":0.98,"output":3.95},"canonical_model_id":"alibaba/qwen3-vl-235b-a22b-thinking"}}},"stackit":{"id":"stackit","env":["STACKIT_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.openai-compat.model-serving.eu01.onstackit.cloud/v1","name":"STACKIT","doc":"https://docs.stackit.cloud/products/data-and-ai/ai-model-serving/basics/available-shared-models","models":{"google/gemma-3-27b-it":{"id":"google/gemma-3-27b-it","name":"Gemma 3 27B","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":37000,"output":4096},"status":"deprecated","cost":{"input":0.53,"output":0.76},"canonical_model_id":"google/gemma-3-27b-it"},"intfloat/e5-mistral-7b-instruct":{"id":"intfloat/e5-mistral-7b-instruct","type":"embedding","name":"E5 Mistral 7B","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"mistral","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2023-12-11","last_updated":"2023-12-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":4096,"output":4096},"cost":{"input":0.02243,"output":0}},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT OSS 20B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"cost":{"input":0.18,"output":0.29},"canonical_model_id":"openai/gpt-oss-20b"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":8192},"cost":{"input":0.53,"output":0.76},"canonical_model_id":"openai/gpt-oss-120b"},"cortecs/Llama-3.3-70B-Instruct-FP8-Dynamic":{"id":"cortecs/Llama-3.3-70B-Instruct-FP8-Dynamic","name":"Llama 3.3 70B","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"cost":{"input":0.53,"output":0.76},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"Qwen/Qwen3-VL-235B-A22B-Instruct-FP8":{"id":"Qwen/Qwen3-VL-235B-A22B-Instruct-FP8","name":"Qwen3-VL 235B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":218000,"output":16384},"cost":{"input":1.76,"output":2.05},"canonical_model_id":"alibaba/qwen3-vl-235b-a22b-instruct"},"Qwen/Qwen3.6-27B":{"id":"Qwen/Qwen3.6-27B","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"status":"deprecated","cost":{"input":0.53,"output":0.76},"canonical_model_id":"alibaba/qwen3.6-27b"},"Qwen/Qwen3-VL-Embedding-8B":{"id":"Qwen/Qwen3-VL-Embedding-8B","type":"embedding","name":"Qwen3-VL Embedding 8B","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"qwen","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":4096},"cost":{"input":0.09,"output":0}}}},"tencent-token-plan":{"id":"tencent-token-plan","env":["TENCENT_TOKEN_PLAN_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.lkeap.cloud.tencent.com/plan/v3","name":"Tencent Token Plan","doc":"https://cloud.tencent.com/document/product/1823/130060","models":{"hy4":{"id":"hy4","name":"Hy4","description":"A next-generation multimodal productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-11-04","last_updated":"2026-11-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":983010,"output":65536},"cost":{"input":0.834,"output":2.501,"cache_read":0.042},"canonical_model_id":"tencent/hy4"},"hy3":{"id":"hy3","name":"Hy3","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":192000,"output":128000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"tencent/hy3"},"hy4-preview":{"id":"hy4-preview","name":"Hy4 preview","description":"A next-generation productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-08-28","last_updated":"2026-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1024000,"output":64000},"cost":{"input":0.834,"output":2.501,"cache_read":0.042},"canonical_model_id":"tencent/hy4-preview"}}},"alibaba":{"id":"alibaba","env":["DASHSCOPE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://dashscope-intl.aliyuncs.com/compatible-mode/v1","name":"Alibaba","doc":"https://www.alibabacloud.com/help/en/model-studio/models","models":{"qwen3.6-plus":{"id":"qwen3.6-plus","name":"Qwen3.6 Plus","description":"Earlier Qwen multimodal workhorse for million-token agent and document tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.05,"cache_write":0.625,"tiers":[{"input":2,"output":6,"cache_read":0.2,"cache_write":2.5,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":2,"output":6,"cache_read":0.2,"cache_write":2.5}}},"qwen3-coder-30b-a3b-instruct":{"id":"qwen3-coder-30b-a3b-instruct","name":"Qwen3-Coder 30B-A3B Instruct","description":"Smaller Qwen coder for efficient local agents and repo-level fixes","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04","last_updated":"2025-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"status":"deprecated","cost":{"input":0.45,"output":2.25,"tiers":[{"input":0.75,"output":3.75,"tier":{"type":"context","size":32000}},{"input":1.2,"output":6,"tier":{"type":"context","size":128000}}]}},"qwen-vl-plus":{"id":"qwen-vl-plus","name":"Qwen-VL Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-01-25","last_updated":"2025-08-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":8192},"status":"deprecated","cost":{"input":0.21,"output":0.63}},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.28,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.2"},"qwen3.8-omni-flash":{"id":"qwen3.8-omni-flash","name":"Qwen3.8 Omni Flash","description":"Qwen omni model for text, vision, audio, and multimodal agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-17","last_updated":"2026-09-17","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.47,"cache_read":0.016},"canonical_model_id":"alibaba/qwen3.8-omni-flash"},"qwen3-coder-480b-a35b-instruct":{"id":"qwen3-coder-480b-a35b-instruct","name":"Qwen3-Coder 480B-A35B Instruct","description":"Open Qwen coding heavyweight for repository reasoning and agentic engineering","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04","last_updated":"2025-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"status":"deprecated","cost":{"input":1.5,"output":7.5,"tiers":[{"input":2.7,"output":13.5,"tier":{"type":"context","size":32000}},{"input":4.5,"output":22.5,"tier":{"type":"context","size":128000}}]}},"qwen2-5-omni-7b":{"id":"qwen2-5-omni-7b","name":"Qwen2.5-Omni 7B","description":"Qwen omni model for text, vision, audio, and multimodal agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-12","last_updated":"2024-12","modalities":{"input":["text","image","audio","video"],"output":["text","audio"]},"open_weights":true,"limit":{"context":32768,"output":2048},"status":"deprecated","cost":{"input":0.1,"output":0.4,"input_audio":6.76}},"qwen3-livetranslate-flash-realtime":{"id":"qwen3-livetranslate-flash-realtime","type":"realtime","name":"Qwen3-LiveTranslate Flash Realtime","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"qwen","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-04","release_date":"2025-09-22","last_updated":"2025-09-22","modalities":{"input":["text","image","audio","video"],"output":["text","audio"]},"open_weights":false,"limit":{"context":53248,"output":4096},"status":"deprecated","provider":{"api":"wss://dashscope-intl.aliyuncs.com/api-ws/v1/realtime"},"cost":{"input":10,"output":10,"input_audio":10,"output_audio":38}},"qwen-max":{"id":"qwen-max","name":"Qwen Max","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-04-03","last_updated":"2025-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":8192},"cost":{"input":1.6,"output":6.4}},"qwen3-coder-plus":{"id":"qwen3-coder-plus","name":"Qwen3 Coder Plus","description":"Hosted Qwen coder for software agents, repo edits, and long-context code","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-23","last_updated":"2025-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":1,"output":5}},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"qwen3-14b":{"id":"qwen3-14b","name":"Qwen3 14B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04","last_updated":"2025-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"status":"deprecated","cost":{"input":0.35,"output":1.4,"reasoning":4.2}},"qwen3-omni-flash-realtime":{"id":"qwen3-omni-flash-realtime","type":"realtime","name":"Qwen3-Omni Flash Realtime","description":"Qwen omni model for text, vision, audio, and multimodal agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-09-15","last_updated":"2025-09-15","modalities":{"input":["text","image","audio","video"],"output":["text","audio"]},"open_weights":false,"limit":{"context":65536,"output":16384},"status":"deprecated","provider":{"api":"wss://dashscope-intl.aliyuncs.com/api-ws/v1/realtime"},"cost":{"input":0.52,"output":1.99,"input_audio":4.57,"output_audio":18.13}},"qwen-plus-character-ja":{"id":"qwen-plus-character-ja","name":"Qwen Plus Character (Japanese)","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-04","release_date":"2024-01","last_updated":"2024-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":512},"cost":{"input":0.5,"output":1.4}},"qwen3.6-max-preview":{"id":"qwen3.6-max-preview","name":"Qwen3.6 Max Preview","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536},"status":"deprecated","cost":{"input":1.3,"output":7.8,"cache_read":0.13,"cache_write":1.625}},"qwen3.5-flash":{"id":"qwen3.5-flash","name":"Qwen3.5 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":81920}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.1,"output":0.4,"cache_read":0.01,"cache_write":0.125},"canonical_model_id":"alibaba/qwen3.5-flash"},"qwen-plus":{"id":"qwen-plus","name":"Qwen Plus","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-01-25","last_updated":"2025-09-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":0.4,"output":1.2,"reasoning":4,"cache_read":0.08,"cache_write":0.5,"tiers":[{"input":1.2,"output":3.6,"reasoning":12,"cache_read":0.24,"cache_write":1.5,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":1.2,"output":3.6,"reasoning":12,"cache_read":0.24,"cache_write":1.5}}},"qwen3.8-flash":{"id":"qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.47,"cache_read":0.016,"cache_write":0.2},"canonical_model_id":"alibaba/qwen3.8-flash"},"qwen3-next-80b-a3b-thinking":{"id":"qwen3-next-80b-a3b-thinking","name":"Qwen3-Next 80B-A3B (Thinking)","description":"Efficient Qwen thinking model for local reasoning, math, and coding agents","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"status":"deprecated","cost":{"input":0.5,"output":6}},"qwen3-omni-flash":{"id":"qwen3-omni-flash","name":"Qwen3-Omni Flash","description":"Qwen omni model for text, vision, audio, and multimodal agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-09-15","last_updated":"2025-09-15","modalities":{"input":["text","image","audio","video"],"output":["text","audio"]},"open_weights":false,"limit":{"context":65536,"output":16384},"cost":{"input":0.43,"output":1.66,"input_audio":3.81,"output_audio":15.11}},"qwen3.5-397b-a17b":{"id":"qwen3.5-397b-a17b","name":"Qwen3.5 397B-A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.6,"output":3.6}},"qwen-mt-plus":{"id":"qwen-mt-plus","name":"Qwen-MT Plus","description":"Translation model for multilingual conversion, localization, and cross-language workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-04","release_date":"2025-01","last_updated":"2025-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":16384,"output":8192},"cost":{"input":2.46,"output":7.37}},"qwen3-vl-30b-a3b":{"id":"qwen3-vl-30b-a3b","name":"Qwen3-VL 30B-A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04","last_updated":"2025-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.2,"output":0.8,"reasoning":2.4}},"qwen3.5-35b-a3b":{"id":"qwen3.5-35b-a3b","name":"Qwen3.5 35B-A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.25,"output":2}},"qwen3.7-plus":{"id":"qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-04","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.4,"output":1.6,"cache_read":0.08,"cache_write":0.5,"tiers":[{"input":1.2,"output":4.8,"cache_read":0.24,"cache_write":1.5,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":1.2,"output":4.8,"cache_read":0.24,"cache_write":1.5}}},"qwen3.7-max":{"id":"qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2.5,"output":7.5,"cache_read":0.5,"cache_write":3.125}},"qwen3-asr-flash":{"id":"qwen3-asr-flash","type":"transcription","name":"Qwen3-ASR Flash","description":"Speech transcription model for accurate audio-to-text and captioning workflows","family":"qwen","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2024-04","release_date":"2025-09-08","last_updated":"2025-09-08","modalities":{"input":["audio"],"output":["text"]},"open_weights":false,"limit":{"context":53248,"output":4096}},"qwen3.6-flash":{"id":"qwen3.6-flash","name":"Qwen3.6 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.6","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"cache_write":0.3125,"tiers":[{"input":1,"output":4,"cache_read":0.1,"cache_write":1.25,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":1,"output":4,"cache_read":0.1,"cache_write":1.25}}},"qwen3.7-flash":{"id":"qwen3.7-flash","name":"Qwen3.7 Flash","description":"Lightweight multimodal Qwen model for high-throughput text, image, and video tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":991808,"output":131072},"cost":{"input":0.03,"output":0.13,"cache_read":0.006,"cache_write":0.0375,"tiers":[{"input":0.1,"output":0.4,"cache_read":0.02,"cache_write":0.125,"tier":{"type":"context","size":32000}},{"input":0.2,"output":0.8,"cache_read":0.04,"cache_write":0.25,"tier":{"type":"context","size":256000}}]},"canonical_model_id":"alibaba/qwen3.7-flash"},"qwen3-max":{"id":"qwen3-max","name":"Qwen3 Max","description":"Flagship Qwen3 model for coding agents, complex reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536},"status":"deprecated","cost":{"input":1.2,"output":6}},"qwen-mt-turbo":{"id":"qwen-mt-turbo","name":"Qwen-MT Turbo","description":"Translation model for multilingual conversion, localization, and cross-language workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-04","release_date":"2025-01","last_updated":"2025-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":16384,"output":8192},"status":"deprecated","cost":{"input":0.16,"output":0.49}},"qwen-omni-turbo":{"id":"qwen-omni-turbo","name":"Qwen-Omni Turbo","description":"Qwen omni model for text, vision, audio, and multimodal agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-01-19","last_updated":"2025-03-26","modalities":{"input":["text","image","audio","video"],"output":["text","audio"]},"open_weights":false,"limit":{"context":32768,"output":2048},"status":"deprecated","cost":{"input":0.07,"output":0.27,"input_audio":4.44,"output_audio":8.89}},"qwen-turbo":{"id":"qwen-turbo","name":"Qwen Turbo","description":"Efficient Qwen model for fast chat, extraction, and high-volume workloads","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-11-01","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":16384},"status":"deprecated","cost":{"input":0.05,"output":0.2,"reasoning":0.5}},"qwen3.6-27b":{"id":"qwen3.6-27b","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.6,"output":3.6}},"qwen3-vl-235b-a22b":{"id":"qwen3-vl-235b-a22b","name":"Qwen3-VL 235B-A22B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04","last_updated":"2025-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"status":"deprecated","cost":{"input":0.7,"output":2.8,"reasoning":8.4}},"qwen3.6-35b-a3b":{"id":"qwen3.6-35b-a3b","name":"Qwen3.6 35B-A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.375,"output":2.25}},"qwen3.5-plus":{"id":"qwen3.5-plus","name":"Qwen3.5 Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-16","last_updated":"2026-02-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.4,"output":2.4,"reasoning":2.4,"tiers":[{"input":0.5,"output":3,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":0.5,"output":3}}},"qwq-plus":{"id":"qwq-plus","name":"QwQ Plus","description":"Qwen reasoning model for deliberate problem solving, math, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-03-05","last_updated":"2025-03-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":8192},"status":"deprecated","cost":{"input":0.8,"output":2.4}},"qwen-flash":{"id":"qwen-flash","name":"Qwen Flash","description":"Efficient Qwen model for fast chat, extraction, and high-volume workloads","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":0.05,"output":0.4,"cache_read":0.01,"cache_write":0.0625,"tiers":[{"input":0.25,"output":2,"cache_read":0.05,"cache_write":0.3125,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":0.25,"output":2,"cache_read":0.05,"cache_write":0.3125}}},"qwen3-next-80b-a3b-instruct":{"id":"qwen3-next-80b-a3b-instruct","name":"Qwen3-Next 80B-A3B Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"status":"deprecated","cost":{"input":0.5,"output":2}},"qwen3-32b":{"id":"qwen3-32b","name":"Qwen3 32B","description":"Dense open Qwen model for self-hosted chat, reasoning, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04","last_updated":"2025-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"status":"deprecated","cost":{"input":0.7,"output":2.8,"reasoning":8.4}},"qwen3-8b":{"id":"qwen3-8b","name":"Qwen3 8B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04","last_updated":"2025-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"status":"deprecated","cost":{"input":0.18,"output":0.7,"reasoning":2.1}},"deepseek-v4-flash-0731":{"id":"deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.44,"output":1.32,"cache_read":0.088},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"qwen-omni-turbo-realtime":{"id":"qwen-omni-turbo-realtime","type":"realtime","name":"Qwen-Omni Turbo Realtime","description":"Qwen omni model for text, vision, audio, and multimodal agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-05-08","last_updated":"2025-05-08","modalities":{"input":["text","image","audio"],"output":["text","audio"]},"open_weights":false,"limit":{"context":32768,"output":2048},"status":"deprecated","provider":{"api":"wss://dashscope-intl.aliyuncs.com/api-ws/v1/realtime"},"cost":{"input":0.27,"output":1.07,"input_audio":4.44,"output_audio":8.89}},"qwen3-235b-a22b":{"id":"qwen3-235b-a22b","name":"Qwen3 235B-A22B","description":"Large open Qwen MoE for multilingual reasoning, coding, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04","last_updated":"2025-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"status":"deprecated","cost":{"input":0.7,"output":2.8,"reasoning":8.4}},"qwen3-vl-plus":{"id":"qwen3-vl-plus","name":"Qwen3-VL Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"cost":{"input":0.2,"output":1.6,"cache_read":0.04,"cache_write":0.25,"tiers":[{"input":0.3,"output":2.4,"cache_read":0.06,"cache_write":0.375,"tier":{"type":"context","size":32000}},{"input":0.6,"output":4.8,"cache_read":0.12,"cache_write":0.75,"tier":{"type":"context","size":128000}}]}},"qwen-vl-max":{"id":"qwen-vl-max","name":"Qwen-VL Max","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-04-08","last_updated":"2025-08-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":8192},"status":"deprecated","cost":{"input":0.8,"output":3.2}},"qwen3.8-max":{"id":"qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","min":0,"max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max"},"qwen3.5-27b":{"id":"qwen3.5-27b","name":"Qwen3.5 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.3,"output":2.4}},"qwen3-coder-flash":{"id":"qwen3-coder-flash","name":"Qwen3 Coder Flash","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.3,"output":1.5,"cache_read":0.06,"cache_write":0.375,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.1,"cache_write":0.625,"tier":{"type":"context","size":32000}},{"input":0.8,"output":4,"cache_read":0.16,"cache_write":1,"tier":{"type":"context","size":128000}},{"input":1.6,"output":9.6,"cache_read":0.32,"cache_write":2,"tier":{"type":"context","size":256000}}]}},"qwen-vl-ocr":{"id":"qwen-vl-ocr","name":"Qwen-VL OCR","description":"OCR model for extracting structured text from documents and screenshots","family":"qwen","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-04","release_date":"2024-10-28","last_updated":"2025-04-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":34096,"output":4096},"cost":{"input":0.07,"output":0.16}},"qwen3.5-122b-a10b":{"id":"qwen3.5-122b-a10b","name":"Qwen3.5 122B-A10B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.4,"output":3.2}},"qvq-max":{"id":"qvq-max","name":"QVQ Max","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qvq","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-03-25","last_updated":"2025-03-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":8192},"status":"deprecated","cost":{"input":1.2,"output":4.8}}}},"groq":{"id":"groq","env":["GROQ_API_KEY"],"npm":"@ai-sdk/groq","name":"Groq","doc":"https://console.groq.com/docs/models","models":{"whisper-large-v3":{"id":"whisper-large-v3","type":"transcription","name":"Whisper","description":"Speech transcription model for accurate audio-to-text and captioning workflows","family":"whisper","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2023-11-06","last_updated":"2023-11-06","modalities":{"input":["audio"],"output":["text"]},"open_weights":true,"limit":{"context":448,"output":448},"canonical_model_id":"openai/whisper-large-v3"},"llama-3.1-8b-instant":{"id":"llama-3.1-8b-instant","name":"Llama 3.1 8B","description":"Compact Llama instruction model for fast chat and local deployment","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"status":"deprecated","cost":{"input":0.05,"output":0.08},"canonical_model_id":"meta/llama-3.1-8b-instruct"},"allam-2-7b":{"id":"allam-2-7b","name":"ALLaM-2-7b","description":"ALLaM-2-7b instruction tuned model by SDAIA","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-01-23","last_updated":"2025-01-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":4096,"output":4096},"cost":{"input":0,"output":0},"canonical_model_id":"sdaia/allam-2-7b"},"llama-3.3-70b-versatile":{"id":"llama-3.3-70b-versatile","name":"Llama 3.3 70B","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"status":"deprecated","cost":{"input":0.59,"output":0.79},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"whisper-large-v3-turbo":{"id":"whisper-large-v3-turbo","type":"transcription","name":"Whisper Large V3 Turbo","description":"Speech transcription model for accurate audio-to-text and captioning workflows","family":"whisper","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2024-10-01","last_updated":"2024-10-01","modalities":{"input":["audio"],"output":["text"]},"open_weights":true,"limit":{"context":448,"output":448},"canonical_model_id":"openai/whisper-large-v3-turbo"},"qwen/qwen3.8-27b":{"id":"qwen/qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","default","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"status":"beta","cost":{"input":0.8,"output":4},"canonical_model_id":"alibaba/qwen3.8-27b"},"qwen/qwen3.6-27b":{"id":"qwen/qwen3.6-27b","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","default"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"status":"deprecated","cost":{"input":0.6,"output":3,"cache_read":0.3},"canonical_model_id":"alibaba/qwen3.6-27b"},"openai/gpt-oss-safeguard-20b":{"id":"openai/gpt-oss-safeguard-20b","name":"Safety GPT OSS 20B","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-29","last_updated":"2025-10-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":65536},"status":"beta","cost":{"input":0.075,"output":0.3,"cache_read":0.0375},"canonical_model_id":"openai/gpt-oss-safeguard-20b"},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT OSS 20B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":65536},"cost":{"input":0.075,"output":0.3,"cache_read":0.0375},"canonical_model_id":"openai/gpt-oss-20b"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":65536},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-oss-120b"},"meta-llama/llama-prompt-guard-2-86m":{"id":"meta-llama/llama-prompt-guard-2-86m","name":"Prompt Guard 2 86M","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-04-29","last_updated":"2025-04-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":512,"output":512},"status":"beta","cost":{"input":0.04,"output":0.04},"canonical_model_id":"meta/llama-prompt-guard-2-86m"},"meta-llama/llama-prompt-guard-2-22m":{"id":"meta-llama/llama-prompt-guard-2-22m","name":"Llama Prompt Guard 2 22M","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-04-29","last_updated":"2025-04-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":512,"output":512},"status":"beta","cost":{"input":0.03,"output":0.03},"canonical_model_id":"meta/llama-prompt-guard-2-22m"},"canopylabs/orpheus-v1-english":{"id":"canopylabs/orpheus-v1-english","type":"speech","name":"Canopy Labs Orpheus V1 English","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"canopylabs","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-12-19","last_updated":"2025-12-19","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":4000,"output":50000},"status":"beta","provider":{"npm":"@ai-sdk/openai","api":"https://api.groq.com/openai/v1"},"canonical_model_id":"canopylabs/orpheus-v1-english"},"canopylabs/orpheus-arabic-saudi":{"id":"canopylabs/orpheus-arabic-saudi","type":"speech","name":"Canopy Labs Orpheus Arabic Saudi","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"canopylabs","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-12-16","last_updated":"2025-12-16","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":4000,"output":50000},"status":"beta","provider":{"npm":"@ai-sdk/openai","api":"https://api.groq.com/openai/v1"},"canonical_model_id":"canopylabs/orpheus-arabic-saudi"}}},"openai":{"id":"openai","env":["OPENAI_API_KEY"],"npm":"@ai-sdk/openai","name":"OpenAI","doc":"https://platform.openai.com/docs/models","models":{"gpt-daybreak-red-latest":{"id":"gpt-daybreak-red-latest","name":"Daybreak Red","description":"Alias for advanced cybersecurity models for authorized vulnerability research and security testing","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-08-07","last_updated":"2026-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":12.5,"output":75,"cache_read":1.25,"cache_write":15.625},"canonical_model_id":"openai/gpt-5.6-cyber"},"gpt-5.2-pro":{"id":"gpt-5.2-pro","name":"GPT-5.2 Pro","description":"Higher-accuracy GPT-5.2 variant for tougher reasoning and review workflows","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":21,"output":168}},"gpt-5.5":{"id":"gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":12.5,"output":75,"cache_read":1.25},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}}},"gpt-realtime-2.1":{"id":"gpt-realtime-2.1","type":"realtime","name":"GPT-Realtime-2.1","description":"Realtime speech-to-speech model with configurable reasoning, tool use, and robust voice-agent behavior","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2024-09-30","release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text","audio","image"],"output":["text","audio"]},"open_weights":false,"limit":{"context":128000,"input":96000,"output":32000},"cost":{"input":4,"output":24,"cache_read":0.4,"input_audio":32,"output_audio":64},"canonical_model_id":"openai/gpt-realtime-2.1"},"text-embedding-ada-002":{"id":"text-embedding-ada-002","type":"embedding","name":"text-embedding-ada-002","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"text-embedding","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2022-12","release_date":"2022-12-15","last_updated":"2022-12-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":1536},"cost":{"input":0.1,"output":0}},"gpt-4.1-nano":{"id":"gpt-4.1-nano","name":"GPT-4.1 nano","description":"Tiny GPT-4.1 option for classification, routing, and very high-volume tasks","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"status":"deprecated","experimental":{"modes":{"fast":{"cost":{"input":0.2,"output":0.8,"cache_read":0.05},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.1,"output":0.4,"cache_read":0.025}},"gpt-5.2":{"id":"gpt-5.2","name":"GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":3.5,"output":28,"cache_read":0.35},"provider":{"body":{"service_tier":"priority"}}},"flex":{"cost":{"input":0.875,"output":7,"cache_read":0.0875},"provider":{"body":{"service_tier":"flex"}}}}},"cost":{"input":1.75,"output":14,"cache_read":0.175}},"o1":{"id":"o1","name":"o1","description":"O-series reasoning model for hard analysis, math, coding, and planning","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2023-09","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"status":"deprecated","cost":{"input":15,"output":60,"cache_read":7.5}},"gpt-4.1-mini":{"id":"gpt-4.1-mini","name":"GPT-4.1 mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"experimental":{"modes":{"fast":{"cost":{"input":0.7,"output":2.8,"cache_read":0.175},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.4,"output":1.6,"cache_read":0.1}},"o4-mini":{"id":"o4-mini","name":"o4-mini","description":"Fast o-series model for compact reasoning, coding, and tool use","family":"o-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"status":"deprecated","experimental":{"modes":{"fast":{"cost":{"input":2,"output":8,"cache_read":0.5},"provider":{"body":{"service_tier":"priority"}}},"flex":{"cost":{"input":0.55,"output":2.2,"cache_read":0.1375},"provider":{"body":{"service_tier":"flex"}}}}},"cost":{"input":1.1,"output":4.4,"cache_read":0.275}},"gpt-5.4-mini":{"id":"gpt-5.4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":1.5,"output":9,"cache_read":0.15},"provider":{"body":{"service_tier":"priority"}}},"flex":{"cost":{"input":0.375,"output":2.25,"cache_read":0.0375},"provider":{"body":{"service_tier":"flex"}}}}},"cost":{"input":0.75,"output":4.5,"cache_read":0.075}},"o1-pro":{"id":"o1-pro","name":"o1-pro","description":"O-series reasoning model for hard analysis, math, coding, and planning","family":"o-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2023-09","release_date":"2025-03-19","last_updated":"2025-03-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"status":"deprecated","cost":{"input":150,"output":600}},"chatgpt-image-latest":{"id":"chatgpt-image-latest","type":"image","name":"chatgpt-image-latest","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-12-16","last_updated":"2025-12-16","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":0,"input":0,"output":0},"status":"deprecated"},"text-embedding-3-large":{"id":"text-embedding-3-large","type":"embedding","name":"text-embedding-3-large","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"text-embedding","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2024-01","release_date":"2024-01-25","last_updated":"2024-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8191,"output":3072},"cost":{"input":0.13,"output":0}},"gpt-5":{"id":"gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":2.5,"output":20,"cache_read":0.25},"provider":{"body":{"service_tier":"priority"}}},"flex":{"cost":{"input":0.625,"output":5,"cache_read":0.0625},"provider":{"body":{"service_tier":"flex"}}}}},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"gpt-image-1-mini":{"id":"gpt-image-1-mini","type":"image","name":"gpt-image-1-mini","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-09-26","last_updated":"2025-09-26","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":0,"input":0,"output":0},"status":"deprecated"},"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":8,"output":40,"cache_read":0.8,"cache_write":10},"provider":{"body":{"service_tier":"priority"}}},"pro":{"provider":{"body":{"reasoning":{"mode":"pro"}}}}}},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"gpt-6.1-terra":{"id":"gpt-6.1-terra","name":"GPT-6.1 Terra","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"provider":{"body":{"service_tier":"priority"}}},"pro":{"provider":{"body":{"reasoning":{"mode":"pro"}}}}}},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25,"tiers":[{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5}},"canonical_model_id":"openai/gpt-6.1-terra"},"gpt-4.1":{"id":"gpt-4.1","name":"GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"experimental":{"modes":{"fast":{"cost":{"input":3.5,"output":14,"cache_read":0.875},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":2,"output":8,"cache_read":0.5}},"o3":{"id":"o3","name":"o3","description":"Deliberate o-series reasoner for hard math, coding, and multi-step analysis","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"experimental":{"modes":{"fast":{"cost":{"input":3.5,"output":14,"cache_read":0.875},"provider":{"body":{"service_tier":"priority"}}},"flex":{"cost":{"input":1,"output":4,"cache_read":0.25},"provider":{"body":{"service_tier":"flex"}}}}},"cost":{"input":2,"output":8,"cache_read":0.5}},"gpt-4o-2024-11-20":{"id":"gpt-4o-2024-11-20","name":"GPT-4o (2024-11-20)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-11-20","last_updated":"2024-11-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25}},"gpt-6-luna":{"id":"gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":0.2,"output":1,"cache_read":0.02,"cache_write":0.25},"provider":{"body":{"service_tier":"priority"}}},"pro":{"provider":{"body":{"reasoning":{"mode":"pro"}}}}}},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"gpt-image-2":{"id":"gpt-image-2","type":"image","name":"gpt-image-2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-21","last_updated":"2026-04-21","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"input":0,"output":0},"cost":{"input":5,"output":30,"cache_read":1.25},"canonical_model_id":"openai/gpt-image-2"},"text-embedding-3-small":{"id":"text-embedding-3-small","type":"embedding","name":"text-embedding-3-small","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"text-embedding","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2024-01","release_date":"2024-01-25","last_updated":"2024-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8191,"output":1536},"cost":{"input":0.02,"output":0}},"o3-mini":{"id":"o3-mini","name":"o3-mini","description":"Smaller o-series reasoner for economical coding, math, and planning tasks","family":"o-mini","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2024-12-20","last_updated":"2025-01-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"status":"deprecated","cost":{"input":1.1,"output":4.4,"cache_read":0.55}},"gpt-5.6":{"id":"gpt-5.6","name":"GPT-5.6","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":8,"output":40,"cache_read":0.8,"cache_write":10},"provider":{"body":{"service_tier":"priority"}}},"pro":{"provider":{"body":{"reasoning":{"mode":"pro"}}}}}},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"gpt-5.3-codex-spark":{"id":"gpt-5.3-codex-spark","name":"GPT-5.3 Codex Spark","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex-spark","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":100000,"output":32000},"cost":{"input":1.75,"output":14,"cache_read":0.175}},"gpt-4":{"id":"gpt-4","name":"GPT-4","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-11","release_date":"2023-11-06","last_updated":"2024-04-09","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":8192},"status":"deprecated","cost":{"input":30,"output":60}},"gpt-5-pro":{"id":"gpt-5-pro","name":"GPT-5 Pro","description":"Higher-accuracy GPT-5 tier for tough analysis, coding reviews, and planning","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":272000},"cost":{"input":15,"output":120}},"gpt-6-sol":{"id":"gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5},"provider":{"body":{"service_tier":"priority"}}},"pro":{"provider":{"body":{"reasoning":{"mode":"pro"}}}}}},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"gpt-image-1.5":{"id":"gpt-image-1.5","type":"image","name":"gpt-image-1.5","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-11-25","last_updated":"2025-11-25","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":0,"input":0,"output":0},"status":"deprecated","canonical_model_id":"openai/gpt-image-1.5"},"gpt-5.3-codex":{"id":"gpt-5.3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":3.5,"output":28,"cache_read":0.35},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":1.75,"output":14,"cache_read":0.175}},"gpt-4o-2024-05-13":{"id":"gpt-4o-2024-05-13","name":"GPT-4o (2024-05-13)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-05-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"status":"deprecated","experimental":{"modes":{"fast":{"cost":{"input":8.75,"output":26.25},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":5,"output":15}},"gpt-6-astra":{"id":"gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":20,"output":100,"cache_read":2,"cache_write":25},"provider":{"body":{"service_tier":"priority"}}},"pro":{"provider":{"body":{"reasoning":{"mode":"pro"}}}},"ultrafast":{"cost":{"input":60,"output":300,"cache_read":6,"cache_write":75},"provider":{"body":{"service_tier":"ultrafast"}}}}},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"gpt-5.1":{"id":"gpt-5.1","name":"GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":2.5,"output":20,"cache_read":0.25},"provider":{"body":{"service_tier":"priority"}}},"flex":{"cost":{"input":0.625,"output":5,"cache_read":0.0625},"provider":{"body":{"service_tier":"flex"}}}}},"cost":{"input":1.25,"output":10,"cache_read":0.125}},"gpt-5-mini":{"id":"gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":0.45,"output":3.6,"cache_read":0.045},"provider":{"body":{"service_tier":"priority"}}},"flex":{"cost":{"input":0.125,"output":1,"cache_read":0.0125},"provider":{"body":{"service_tier":"flex"}}}}},"cost":{"input":0.25,"output":2,"cache_read":0.025}},"gpt-5.5-pro":{"id":"gpt-5.5-pro","name":"GPT-5.5 Pro","description":"Highest-accuracy GPT-5.5 tier for slower, precision-heavy reasoning and coding","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}}},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":0.4,"output":2.4,"cache_read":0.04,"cache_write":0.5},"provider":{"body":{"service_tier":"priority"}}},"pro":{"provider":{"body":{"reasoning":{"mode":"pro"}}}}}},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"gpt-6.1-sol":{"id":"gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"provider":{"body":{"service_tier":"priority"}}},"pro":{"provider":{"body":{"reasoning":{"mode":"pro"}}}},"ultrafast":{"cost":{"input":12,"output":60,"cache_read":0.6,"cache_write":15},"provider":{"body":{"service_tier":"ultrafast"}}}}},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-sol"},"gpt-5.4-pro":{"id":"gpt-5.4-pro","name":"GPT-5.4 Pro","description":"More exact GPT-5.4 tier for demanding professional reasoning and agent tasks","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}}},"gpt-5-nano":{"id":"gpt-5-nano","name":"GPT-5 Nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"flex":{"cost":{"input":0.025,"output":0.2,"cache_read":0.0025},"provider":{"body":{"service_tier":"flex"}}}}},"cost":{"input":0.05,"output":0.4,"cache_read":0.005}},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":5,"output":30,"cache_read":0.5},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":2.5,"output":15,"cache_read":0.25,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5}}},"gpt-3.5-turbo":{"id":"gpt-3.5-turbo","name":"GPT-3.5-turbo","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2021-09-01","release_date":"2023-03-01","last_updated":"2023-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":16385,"output":4096},"status":"deprecated","cost":{"input":0.5,"output":1.5,"cache_read":0}},"gpt-4-turbo":{"id":"gpt-4-turbo","name":"GPT-4 Turbo","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2023-11-06","last_updated":"2024-04-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"status":"deprecated","cost":{"input":10,"output":30}},"gpt-daybreak-blue-latest":{"id":"gpt-daybreak-blue-latest","name":"Daybreak Blue","description":"Alias for flagship general-purpose models with safeguards for defensive cybersecurity work","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-08-07","last_updated":"2026-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"o3-pro":{"id":"o3-pro","name":"o3-pro","description":"High-effort o3 tier for difficult technical reasoning and careful answers","family":"o-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-06-10","last_updated":"2025-06-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":20,"output":80}},"gpt-4o-2024-08-06":{"id":"gpt-4o-2024-08-06","name":"GPT-4o (2024-08-06)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-08-06","last_updated":"2024-08-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25}},"gpt-5.4-nano":{"id":"gpt-5.4-nano","name":"GPT-5.4 nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"flex":{"cost":{"input":0.1,"output":0.625,"cache_read":0.01},"provider":{"body":{"service_tier":"flex"}}}}},"cost":{"input":0.2,"output":1.25,"cache_read":0.02}},"gpt-4o":{"id":"gpt-4o","name":"GPT-4o","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"experimental":{"modes":{"fast":{"cost":{"input":4.25,"output":17,"cache_read":2.125},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":2.5,"output":10,"cache_read":1.25}},"gpt-5.6-terra":{"id":"gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":4,"output":24,"cache_read":0.4,"cache_write":5},"provider":{"body":{"service_tier":"priority"}}},"pro":{"provider":{"body":{"reasoning":{"mode":"pro"}}}}}},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"gpt-4o-mini":{"id":"gpt-4o-mini","name":"GPT-4o mini","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"experimental":{"modes":{"fast":{"cost":{"input":0.25,"output":1,"cache_read":0.125},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.15,"output":0.6,"cache_read":0.075}}}},"volcengine":{"id":"volcengine","env":["ARK_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://ark.cn-beijing.volces.com/api/v3","name":"Volcengine Ark","doc":"https://www.volcengine.com/docs/82379/1330310","models":{"doubao-seed-2-1-pro-260628":{"id":"doubao-seed-2-1-pro-260628","name":"Seed 2.1 Pro","description":"Flagship ByteDance Seed 2.1 model for complex multimodal reasoning, coding, and agents","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-23","last_updated":"2026-06-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":0.8906,"output":4.45301,"cache_read":0.17812},"canonical_model_id":"bytedance-seed/seed-2.1-pro"},"deepseek-v4-flash-ga-260731":{"id":"deepseek-v4-flash-ga-260731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.4453,"output":1.3359,"cache_read":0.01484},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"doubao-seed-character-260628":{"id":"doubao-seed-character-260628","name":"Seed Character","description":"ByteDance Seed model optimized for character-driven dialogue and consistent conversational behavior","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["minimal","low","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-23","last_updated":"2026-06-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":0.11875,"output":0.29687,"cache_read":0.02375,"tiers":[{"input":0.17812,"output":0.8906,"cache_read":0.02375,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"bytedance-seed/seed-character"},"doubao-seed-2-0-mini-260428":{"id":"doubao-seed-2-0-mini-260428","name":"Seed 2.0 Mini","description":"Lightweight ByteDance Seed 2.0 model for low-latency multimodal reasoning and high-volume tasks","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":131072},"cost":{"input":0.02969,"output":0.29687,"cache_read":0.00594,"tiers":[{"input":0.05937,"output":0.59374,"cache_read":0.01187,"tier":{"type":"context","size":32000}},{"input":0.11875,"output":1.18747,"cache_read":0.02375,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-mini"},"doubao-seed-1-6-251015":{"id":"doubao-seed-1-6-251015","name":"Seed 1.6","description":"ByteDance Seed model for long-context reasoning, instruction following, and tool-assisted tasks","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":64000},"status":"deprecated","cost":{"input":0.11875,"output":1.18747,"cache_read":0.02375,"tiers":[{"input":0.17812,"output":2.37494,"cache_read":0.02375,"tier":{"type":"context","size":32000}},{"input":0.35624,"output":3.56241,"cache_read":0.02375,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-1-6"},"doubao-seed-1-6-flash-250828":{"id":"doubao-seed-1-6-flash-250828","name":"Seed 1.6 Flash","description":"Low-latency ByteDance Seed model for high-throughput chat, extraction, and lightweight tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2025-08-28","last_updated":"2025-08-28","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000},"status":"deprecated","cost":{"input":0.02227,"output":0.22265,"cache_read":0.00445,"tiers":[{"input":0.04453,"output":0.4453,"cache_read":0.00445,"tier":{"type":"context","size":32000}},{"input":0.08906,"output":0.8906,"cache_read":0.00445,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-1-6-flash"},"glm-5-2-260617":{"id":"glm-5-2-260617","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.18747,"output":4.15615,"cache_read":0.29687},"canonical_model_id":"zhipuai/glm-5.2"},"doubao-seed-2-0-lite-260428":{"id":"doubao-seed-2-0-lite-260428","name":"Seed 2.0 Lite","description":"Cost-efficient ByteDance Seed 2.0 model for production chat, analysis, and structured generation","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":131072},"cost":{"input":0.08906,"output":0.53436,"cache_read":0.01781,"tiers":[{"input":0.13359,"output":0.80154,"cache_read":0.02672,"tier":{"type":"context","size":32000}},{"input":0.26718,"output":1.60308,"cache_read":0.05344,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-lite"},"glm-5-3-flash-260828":{"id":"glm-5-3-flash-260828","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.11875,"output":0.41563,"cache_read":0.03414},"canonical_model_id":"zhipuai/glm-5.3-flash"},"doubao-seed-1-8-251228":{"id":"doubao-seed-1-8-251228","name":"Seed 1.8","description":"ByteDance Seed model for multimodal reasoning, long-context analysis, and agent workflows","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2025-12-28","last_updated":"2025-12-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":64000},"status":"deprecated","cost":{"input":0.11875,"output":1.18747,"cache_read":0.02375,"tiers":[{"input":0.17812,"output":2.37494,"cache_read":0.02375,"tier":{"type":"context","size":32000}},{"input":0.35624,"output":3.56241,"cache_read":0.02375,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-1-8"},"doubao-seed-1-6-vision-250815":{"id":"doubao-seed-1-6-vision-250815","name":"Seed 1.6 Vision","description":"ByteDance Seed multimodal model for image understanding, visual reasoning, and tool-assisted tasks","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2025-08-15","last_updated":"2025-08-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000},"status":"deprecated","cost":{"input":0.11875,"output":1.18747,"cache_read":0.02375,"tiers":[{"input":0.17812,"output":2.37494,"cache_read":0.02375,"tier":{"type":"context","size":32000}},{"input":0.35624,"output":3.56241,"cache_read":0.02375,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-1-6-vision"},"doubao-seed-2-0-code-preview-260215":{"id":"doubao-seed-2-0-code-preview-260215","name":"Seed 2.0 Code","description":"ByteDance Seed coding model for multimodal software engineering and long-running agents","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"status":"deprecated","cost":{"input":0.47499,"output":2.37494,"cache_read":0.095,"tiers":[{"input":0.71248,"output":3.56241,"cache_read":0.1425,"tier":{"type":"context","size":32000}},{"input":1.42496,"output":7.12482,"cache_read":0.28499,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-code"},"doubao-seed-evolving":{"id":"doubao-seed-evolving","name":"Seed Evolving","description":"Rolling ByteDance Seed model for rapidly updated reasoning, coding, and agent capabilities","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-23","last_updated":"2026-06-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":0.8906,"output":4.45301,"cache_read":0.17812},"canonical_model_id":"bytedance-seed/seed-evolving"},"doubao-seed-2-1-turbo-260628":{"id":"doubao-seed-2-1-turbo-260628","name":"Seed 2.1 Turbo","description":"Faster ByteDance Seed 2.1 model for multimodal reasoning and latency-sensitive agent workflows","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-23","last_updated":"2026-06-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":0.4453,"output":2.22651,"cache_read":0.08906},"canonical_model_id":"bytedance-seed/seed-2.1-turbo"},"deepseek-v4-pro-ga-260813":{"id":"deepseek-v4-pro-ga-260813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":1.3359,"output":4.00771,"cache_read":0.04453},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"doubao-seed-2-0-pro-260215":{"id":"doubao-seed-2-0-pro-260215","name":"Seed 2.0 Pro","description":"Flagship ByteDance Seed 2.0 model for complex multimodal reasoning and long-horizon agent workflows","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"status":"deprecated","cost":{"input":0.47499,"output":2.37494,"cache_read":0.095,"tiers":[{"input":0.71248,"output":3.56241,"cache_read":0.1425,"tier":{"type":"context","size":32000}},{"input":1.42496,"output":7.12482,"cache_read":0.28499,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-pro"}}},"zhipuai-coding-plan":{"id":"zhipuai-coding-plan","env":["ZHIPU_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://open.bigmodel.cn/api/coding/paas/v4","name":"Zhipu AI Coding Plan","doc":"https://docs.bigmodel.cn/cn/coding-plan/overview","models":{"glm-4.6v":{"id":"glm-4.6v","name":"GLM-4.6V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.6v"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3-flash"},"glm-5.3-highspeed":{"id":"glm-5.3-highspeed","name":"GLM-5.3 Highspeed","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3"}}},"wafer.ai":{"id":"wafer.ai","env":["WAFER_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://pass.wafer.ai/v1","name":"Wafer","doc":"https://docs.wafer.ai/wafer-pass","models":{"GLM-5.2":{"id":"GLM-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.2"},"Kimi-K2.6":{"id":"Kimi-K2.6","name":"Kimi K2.6","description":"Kimi K2.6 sparse MoE model with a 262K context window. Available serverless and not included in standard Wafer Pass. Non-ZDR only: requests with `Wafer-ZDR: required` are rejected.","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"status":"deprecated","cost":{"input":1.14,"output":4.8,"cache_read":0.19,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k2.6"},"GLM-5.1":{"id":"GLM-5.1","name":"GLM-5.1","description":"General Language Model 5.1 — high-quality bilingual (EN/ZH) generation with strong coding and reasoning capabilities.","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"status":"deprecated","cost":{"input":1,"output":3.2,"cache_read":0.1,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.1"},"MiniMax-M3":{"id":"MiniMax-M3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":512000},"status":"deprecated","cost":{"input":0.33,"output":1.32,"cache_read":0.07,"cache_write":0,"tiers":[{"input":0.66,"output":2.64,"cache_read":0.13,"cache_write":0,"tier":{"type":"context","size":512000}}],"context_over_200k":{"input":0.66,"output":2.64,"cache_read":0.13,"cache_write":0}},"canonical_model_id":"minimax/MiniMax-M3"},"glm5.2-fast":{"id":"glm5.2-fast","name":"GLM5.2-Fast","description":"The same model served for high TPS.","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":3,"output":10.25,"cache_read":0.5,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.2"}}},"the-grid-ai":{"id":"the-grid-ai","env":["THEGRID_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.thegrid.ai/v1","name":"The Grid AI","doc":"https://thegrid.ai/docs","models":{"bytedance-pro-latest":{"id":"bytedance-pro-latest","name":"ByteDance Pro Latest","description":"Lab latest market for ByteDance Pro supply. You contract for the latest qualifying route, not a specific model.","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"input":256000,"output":131072}},"code-max":{"id":"code-max","name":"Code Max","description":"Frontier models for complex research, architectural decisions, debugging, and multi-file development. Any model that meets the contract spec can serve your request.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-05-04","last_updated":"2026-07-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":922000,"output":128000},"status":"beta"},"deepseek-pro-latest":{"id":"deepseek-pro-latest","name":"DeepSeek Pro Latest","description":"Lab latest market for DeepSeek Pro supply. You contract for the latest qualifying route, not a specific model.","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":922000,"output":384000}},"gemini-pro-latest":{"id":"gemini-pro-latest","name":"Gemini Pro Latest","description":"Lab latest market for Gemini Pro frontier supply. You contract for the latest qualifying route, not a specific model.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":922000,"output":65536}},"text-prime":{"id":"text-prime","name":"Text Prime","description":"Reliable models for everyday text generation, editing, and analysis across diverse workflows. Any model that meets the contract spec can serve your request.","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-26","last_updated":"2026-07-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":196608,"input":120000,"output":131072}},"gpt-sol-latest":{"id":"gpt-sol-latest","name":"GPT Sol Latest","description":"Lab latest market for GPT frontier supply. You contract for the latest qualifying route, not a specific model.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":922000,"output":128000}},"agent-prime":{"id":"agent-prime","name":"Agent Prime","description":"Reliable models for dependable agentic applications, multi-step tool use, and reasoning workflows. Any model that meets the contract spec can serve your request.","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-05-04","last_updated":"2026-07-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":196608,"input":120000,"output":131072},"status":"beta"},"agent-max":{"id":"agent-max","name":"Agent Max","description":"Frontier models for autonomous research, deep multi-step tool chains, and complex long-horizon tasks. Any model that meets the contract spec can serve your request.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-05-04","last_updated":"2026-07-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":922000,"output":128000},"status":"beta"},"glm-latest":{"id":"glm-latest","name":"GLM Latest","description":"Lab latest market for GLM supply. You contract for the latest qualifying route, not a specific model.","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-06","last_updated":"2026-08-18","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":917504,"output":131072}},"kimi-latest":{"id":"kimi-latest","name":"Kimi Latest","description":"Lab latest market for Kimi supply. You contract for the latest qualifying route, not a specific model.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":922000,"output":943718}},"code-standard":{"id":"code-standard","name":"Code Standard","description":"Price-optimized models for rapid autocomplete, linting, high-frequency suggestions, and batch edits. Any model that meets the contract spec can serve your request.","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-05-04","last_updated":"2026-10-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":120000,"output":65536},"status":"beta"},"text-standard":{"id":"text-standard","name":"Text Standard","description":"Price-optimized models with low-latency, high-throughput and shorter maximum outputs. Any model that meets the contract spec can serve your request.","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-26","last_updated":"2026-10-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":120000,"output":65536}},"claude-opus-latest":{"id":"claude-opus-latest","name":"Claude Opus Latest","description":"Lab latest market for Claude Opus frontier supply. You contract for the latest qualifying route, not a specific model.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-06","last_updated":"2026-07-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":922000,"output":128000}},"minimax-latest":{"id":"minimax-latest","name":"MiniMax Latest","description":"Lab latest market for MiniMax supply. You contract for the latest qualifying route, not a specific model.","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":922000,"output":512000}},"code-prime":{"id":"code-prime","name":"Code Prime","description":"Reliable models for everyday software tasks, code completion, review, and standard debugging. Any model that meets the contract spec can serve your request.","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-05-04","last_updated":"2026-07-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":196608,"input":120000,"output":131072},"status":"beta"},"agent-standard":{"id":"agent-standard","name":"Agent Standard","description":"Price-optimized models for fast tool calls, simple agent loops, high-throughput automation, and orchestration. Any model that meets the contract spec can serve your request.","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-05-04","last_updated":"2026-10-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":120000,"output":65536},"status":"beta"},"text-max":{"id":"text-max","name":"Text Max","description":"Frontier models for deep reasoning, long context, and complex workflows. Any model that meets the contract spec can serve your request.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-02-26","last_updated":"2026-07-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":922000,"output":128000}}}},"inco":{"id":"inco","env":["INCO_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.inco.ai/v1","name":"Inco","doc":"https://platform.inco.ai/docs","models":{"minimax-m3:fast":{"id":"minimax-m3:fast","name":"MiniMax M3 Fast","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":512000},"cost":{"input":0.6,"output":2.4,"cache_read":0.12},"canonical_model_id":"minimax/MiniMax-M3"},"kimi-k3:fast":{"id":"kimi-k3:fast","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":6,"output":30,"cache_read":0.6},"canonical_model_id":"moonshotai/kimi-k3"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"glm-5.3-flash:fast":{"id":"glm-5.3-flash:fast","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.3,"output":1,"cache_read":0.06},"canonical_model_id":"zhipuai/glm-5.3-flash"},"minimax-m3":{"id":"minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":512000},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"},"deepseek-v4.1-flash:fast":{"id":"deepseek-v4.1-flash:fast","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.6,"output":2.4,"cache_read":0.012},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"glm-5.3:fast":{"id":"glm-5.3:fast","name":"GLM-5.3 Fast","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":2.8,"output":8.8,"cache_read":0.52},"canonical_model_id":"zhipuai/glm-5.3"}}},"impossibl":{"id":"impossibl","env":["IMPOSSIBL_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.impossibl.com/v1","name":"Impossibl","doc":"https://impossibl.com/docs/models","models":{"anthropic/claude-opus-4-5":{"id":"anthropic/claude-opus-4-5","name":"Claude Opus 4.5 (latest)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"anthropic/claude-sonnet-5":{"id":"anthropic/claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"anthropic/claude-fable-5":{"id":"anthropic/claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"anthropic/claude-opus-4-6":{"id":"anthropic/claude-opus-4-6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"anthropic/claude-opus-4-8":{"id":"anthropic/claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic/claude-sonnet-4-5":{"id":"anthropic/claude-sonnet-4-5","name":"Claude Sonnet 4.5 (latest)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"anthropic/claude-sonnet-4-6":{"id":"anthropic/claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"anthropic/claude-opus-4-7":{"id":"anthropic/claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"anthropic/claude-haiku-4-5":{"id":"anthropic/claude-haiku-4-5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":1.74,"output":3.48,"cache_read":0.145},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-v4-flash":{"id":"deepseek/deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.19,"output":0.51,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash"},"google/gemini-2.5-flash":{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":0,"max":24576}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"input_audio":1},"canonical_model_id":"google/gemini-2.5-flash"},"google/gemini-2.5-pro":{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.25,"output":10,"cache_read":0.125,"tiers":[{"input":2.5,"output":15,"cache_read":0.25,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":15,"cache_read":0.25}},"canonical_model_id":"google/gemini-2.5-pro"},"google/gemini-3.5-flash":{"id":"google/gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"cache_read":0.15},"canonical_model_id":"google/gemini-3.5-flash"},"google/gemini-3.6-flash":{"id":"google/gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.6-flash"},"google/gemini-3.1-pro-preview":{"id":"google/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"google/gemini-3.1-flash-lite":{"id":"google/gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"input_audio":0.5},"canonical_model_id":"google/gemini-3.1-flash-lite"},"google/gemini-2.5-flash-lite":{"id":"google/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash-Lite","description":"Lean Gemini 2.5 lane for cheap multimodal traffic and quick agents","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":512,"max":24576}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.1,"output":0.4,"cache_read":0.01,"input_audio":0.3},"canonical_model_id":"google/gemini-2.5-flash-lite"},"google/gemini-3.5-flash-lite":{"id":"google/gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03},"canonical_model_id":"google/gemini-3.5-flash-lite"},"qwen/qwen3.8-max-preview":{"id":"qwen/qwen3.8-max-preview","name":"Qwen3.8 Max Preview","description":"Preview Qwen flagship for million-token multimodal reasoning and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-19","last_updated":"2026-07-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"status":"deprecated","cost":{"input":2.5,"output":7.5},"canonical_model_id":"alibaba/qwen3.8-max-preview"},"qwen/qwen3.7-plus":{"id":"qwen/qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.4,"output":1.6,"cache_read":0.08,"tiers":[{"input":1.2,"output":4.8,"cache_read":0.24,"tier":{"type":"context","size":262144}}],"context_over_200k":{"input":1.2,"output":4.8,"cache_read":0.24}},"canonical_model_id":"alibaba/qwen3.7-plus"},"qwen/qwen3.7-max":{"id":"qwen/qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2.5,"output":7.5,"cache_read":0.5},"canonical_model_id":"alibaba/qwen3.7-max"},"qwen/qwen3.6-flash":{"id":"qwen/qwen3.6-flash","name":"Qwen3.6 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.6","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.05,"tiers":[{"input":1,"output":4,"cache_read":0.2,"tier":{"type":"context","size":262144}}],"context_over_200k":{"input":1,"output":4,"cache_read":0.2}},"canonical_model_id":"alibaba/qwen3.6-flash"},"zai/glm-5.2":{"id":"zai/glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"zai/glm-5.1":{"id":"zai/glm-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.1"},"zai/glm-4.5":{"id":"zai/glm-4.5","name":"GLM-4.5","description":"Hybrid-reasoning GLM release that made the 4.5 line broadly useful","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"cost":{"input":0.6,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.5"},"zai/glm-4.7":{"id":"zai/glm-4.7","name":"GLM-4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.7"},"zai/glm-5-turbo":{"id":"zai/glm-5-turbo","name":"GLM-5-Turbo","description":"Faster GLM-5 lane for coding agents that need lower latency","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24},"canonical_model_id":"zhipuai/glm-5-turbo"},"zai/glm-4.5-air":{"id":"zai/glm-4.5-air","name":"GLM-4.5-Air","description":"Lighter GLM-4.5 variant for fast coding assistance and cheaper agents","family":"glm-air","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"cost":{"input":0.2,"output":1.1,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-4.5-air"},"zai/glm-4.6":{"id":"zai/glm-4.6","name":"GLM-4.6","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.6"},"zai/glm-5":{"id":"zai/glm-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":1,"output":3.2,"cache_read":0.2},"canonical_model_id":"zhipuai/glm-5"},"moonshotai/kimi-k3":{"id":"moonshotai/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"groq/gpt-oss-20b":{"id":"groq/gpt-oss-20b","name":"GPT OSS 20B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"status":"deprecated","cost":{"input":0.075,"output":0.3,"cache_read":0.0375},"canonical_model_id":"openai/gpt-oss-20b"},"groq/gpt-oss-120b":{"id":"groq/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"status":"deprecated","cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-oss-120b"},"openai/gpt-5.5":{"id":"openai/gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"openai/gpt-4.1-nano":{"id":"openai/gpt-4.1-nano","name":"GPT-4.1 nano","description":"Tiny GPT-4.1 option for classification, routing, and very high-volume tasks","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.1,"output":0.4,"cache_read":0.025},"canonical_model_id":"openai/gpt-4.1-nano"},"openai/gpt-5.2":{"id":"openai/gpt-5.2","name":"GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"openai/o1":{"id":"openai/o1","name":"o1","description":"O-series reasoning model for hard analysis, math, coding, and planning","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2023-09","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":15,"output":60,"cache_read":7.5},"canonical_model_id":"openai/o1"},"openai/gpt-4.1-mini":{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-4.1-mini"},"openai/o4-mini":{"id":"openai/o4-mini","name":"o4-mini","description":"Fast o-series model for compact reasoning, coding, and tool use","family":"o-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":1.1,"output":4.4,"cache_read":0.275},"canonical_model_id":"openai/o4-mini"},"openai/gpt-5.2-codex":{"id":"openai/gpt-5.2-codex","name":"GPT-5.2 Codex","description":"Code-specialist GPT for repository edits, reviews, and long-running software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2-codex"},"openai/gpt-5.4-mini":{"id":"openai/gpt-5.4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"openai/gpt-5":{"id":"openai/gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"openai/gpt-5.1-codex":{"id":"openai/gpt-5.1-codex","name":"GPT-5.1 Codex","description":"Codex GPT for repository edits, code review, and practical software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1-codex"},"openai/gpt-5.6-sol":{"id":"openai/gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"openai/gpt-4.1":{"id":"openai/gpt-4.1","name":"GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"openai/o3":{"id":"openai/o3","name":"o3","description":"Deliberate o-series reasoner for hard math, coding, and multi-step analysis","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/o3"},"openai/o3-mini":{"id":"openai/o3-mini","name":"o3-mini","description":"Smaller o-series reasoner for economical coding, math, and planning tasks","family":"o-mini","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2024-12-20","last_updated":"2025-01-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":1.1,"output":4.4,"cache_read":0.55},"canonical_model_id":"openai/o3-mini"},"openai/gpt-5-pro":{"id":"openai/gpt-5-pro","name":"GPT-5 Pro","description":"Higher-accuracy GPT-5 tier for tough analysis, coding reviews, and planning","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":272000},"cost":{"input":15,"output":120},"canonical_model_id":"openai/gpt-5-pro"},"openai/gpt-5.3-codex":{"id":"openai/gpt-5.3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"openai/gpt-5.1":{"id":"openai/gpt-5.1","name":"GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1"},"openai/gpt-5-mini":{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"openai/gpt-5.1-codex-mini":{"id":"openai/gpt-5.1-codex-mini","name":"GPT-5.1 Codex mini","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5.1-codex-mini"},"openai/gpt-5.5-pro":{"id":"openai/gpt-5.5-pro","name":"GPT-5.5 Pro","description":"Highest-accuracy GPT-5.5 tier for slower, precision-heavy reasoning and coding","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"cache_read":3,"tiers":[{"input":60,"output":270,"cache_read":3,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270,"cache_read":3}},"canonical_model_id":"openai/gpt-5.5-pro"},"openai/gpt-5.6-luna":{"id":"openai/gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-5.4-pro":{"id":"openai/gpt-5.4-pro","name":"GPT-5.4 Pro","description":"More exact GPT-5.4 tier for demanding professional reasoning and agent tasks","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"cache_read":3,"tiers":[{"input":60,"output":270,"cache_read":3,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270,"cache_read":3}},"canonical_model_id":"openai/gpt-5.4-pro"},"openai/gpt-5-nano":{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-nano"},"openai/gpt-5.4":{"id":"openai/gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5}},"canonical_model_id":"openai/gpt-5.4"},"openai/gpt-3.5-turbo":{"id":"openai/gpt-3.5-turbo","name":"GPT-3.5-turbo","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2021-09-01","release_date":"2023-03-01","last_updated":"2023-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":16385,"output":4096},"cost":{"input":0.5,"output":1.5},"canonical_model_id":"openai/gpt-3.5-turbo"},"openai/gpt-4-turbo":{"id":"openai/gpt-4-turbo","name":"GPT-4 Turbo","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2023-11-06","last_updated":"2024-04-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"cost":{"input":10,"output":30},"canonical_model_id":"openai/gpt-4-turbo"},"openai/gpt-5.4-nano":{"id":"openai/gpt-5.4-nano","name":"GPT-5.4 nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"openai/gpt-4o":{"id":"openai/gpt-4o","name":"GPT-4o","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o"},"openai/gpt-5-codex":{"id":"openai/gpt-5-codex","name":"GPT-5-Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-09-15","last_updated":"2025-09-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5-codex"},"openai/gpt-5.6-terra":{"id":"openai/gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"openai/gpt-4o-mini":{"id":"openai/gpt-4o-mini","name":"GPT-4o mini","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-4o-mini"},"xiaomi/mimo-v2.5":{"id":"xiaomi/mimo-v2.5","name":"MiMo-V2.5","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.14,"output":0.28,"cache_read":0.003},"canonical_model_id":"xiaomi/mimo-v2.5"},"cerebras/gpt-oss-120b":{"id":"cerebras/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"status":"deprecated","cost":{"input":0.35,"output":0.75},"canonical_model_id":"openai/gpt-oss-120b"},"thinkingmachines/inkling":{"id":"thinkingmachines/inkling","name":"Inkling","description":"Multimodal MoE reasoning model (975B total, 41B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":1.87,"output":4.68,"cache_read":0.374},"canonical_model_id":"thinkingmachines/inkling"},"fireworks/glm-5.2":{"id":"fireworks/glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"status":"deprecated","cost":{"input":1.4,"output":4.4,"cache_read":0.14},"canonical_model_id":"zhipuai/glm-5.2"},"fireworks/gpt-oss-20b":{"id":"fireworks/gpt-oss-20b","name":"GPT OSS 20B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"status":"deprecated","cost":{"input":0.07,"output":0.3,"cache_read":0.035},"canonical_model_id":"openai/gpt-oss-20b"},"fireworks/gpt-oss-120b":{"id":"fireworks/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"status":"deprecated","cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"openai/gpt-oss-120b"},"xai/grok-4.20-0309-non-reasoning":{"id":"xai/grok-4.20-0309-non-reasoning","name":"Grok 4.20 (Non-Reasoning)","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.20-0309-non-reasoning"},"xai/grok-4.5":{"id":"xai/grok-4.5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.3,"tiers":[{"input":4,"output":12,"cache_read":0.6,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":0.6}},"canonical_model_id":"xai/grok-4.5"},"xai/grok-4.3":{"id":"xai/grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.3"},"xai/grok-4.20-0309-reasoning":{"id":"xai/grok-4.20-0309-reasoning","name":"Grok 4.20 (Reasoning)","description":"Reasoning Grok for document-heavy analysis and long-horizon tool use","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.20-0309-reasoning"},"xai/grok-build-0.1":{"id":"xai/grok-build-0.1","name":"Grok Build 0.1","description":"Fast Grok coding model tuned for agentic engineering and iterative edits","family":"grok-build","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":1,"output":2,"cache_read":0.2,"tiers":[{"input":2,"output":4,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2,"output":4,"cache_read":0.4}},"canonical_model_id":"xai/grok-build-0.1"}}},"gitlab":{"id":"gitlab","env":["GITLAB_TOKEN"],"npm":"gitlab-ai-provider","name":"GitLab Duo","doc":"https://docs.gitlab.com/user/duo_agent_platform/","models":{"duo-chat-opus-5-5":{"id":"duo-chat-opus-5-5","name":"Agentic Chat (Claude Opus 5.5)","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"anthropic/claude-opus-5-5"},"duo-chat-gpt-5-mini":{"id":"duo-chat-gpt-5-mini","name":"Agentic Chat (GPT-5 Mini)","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-5-mini"},"duo-chat-opus-4-7":{"id":"duo-chat-opus-4-7","name":"Agentic Chat (Claude Opus 4.7)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"anthropic/claude-opus-4-7"},"duo-chat-gpt-5-4-nano":{"id":"duo-chat-gpt-5-4-nano","name":"Agentic Chat (GPT-5.4 Nano)","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-5.4-nano"},"duo-chat-gpt-5-6-terra":{"id":"duo-chat-gpt-5-6-terra","name":"Agentic Chat (GPT-5.6 Terra)","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"openai/gpt-5.6-terra"},"duo-chat-gpt-6-astra":{"id":"duo-chat-gpt-6-astra","name":"Agentic Chat (GPT-6 Astra)","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"openai/gpt-6-astra"},"duo-chat-opus-5":{"id":"duo-chat-opus-5","name":"Agentic Chat (Claude Opus 5)","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"anthropic/claude-opus-5"},"duo-chat-gpt-5-2":{"id":"duo-chat-gpt-5-2","name":"Agentic Chat (GPT-5.2)","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-5.2"},"duo-chat-sonnet-4-5":{"id":"duo-chat-sonnet-4-5","name":"Agentic Chat (Claude Sonnet 4.5)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"anthropic/claude-sonnet-4-5-20250929"},"duo-chat-gpt-5-3-codex":{"id":"duo-chat-gpt-5-3-codex","name":"Agentic Chat (GPT-5.3 Codex)","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-5.3-codex"},"duo-chat-fable-5":{"id":"duo-chat-fable-5","name":"Agentic Chat (Claude Fable 5)","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"anthropic/claude-fable-5"},"duo-chat-gpt-5-6-sol":{"id":"duo-chat-gpt-5-6-sol","name":"Agentic Chat (GPT-5.6 Sol)","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"openai/gpt-5.6-sol"},"duo-chat-gpt-6-sol":{"id":"duo-chat-gpt-6-sol","name":"Agentic Chat (GPT-6 Sol)","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"openai/gpt-6-sol"},"duo-chat-gpt-5-codex":{"id":"duo-chat-gpt-5-codex","name":"Agentic Chat (GPT-5 Codex)","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-09-15","last_updated":"2025-09-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-5-codex"},"duo-chat-gpt-5-2-codex":{"id":"duo-chat-gpt-5-2-codex","name":"Agentic Chat (GPT-5.2 Codex)","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-5.2-codex"},"duo-chat-gpt-5-5":{"id":"duo-chat-gpt-5-5","name":"Agentic Chat (GPT-5.5)","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-5.5"},"duo-chat-opus-4-5":{"id":"duo-chat-opus-4-5","name":"Agentic Chat (Claude Opus 4.5)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"anthropic/claude-opus-4-5-20251101"},"duo-chat-haiku-5-5":{"id":"duo-chat-haiku-5-5","name":"Agentic Chat (Claude Haiku 5.5)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"anthropic/claude-haiku-5-5"},"duo-chat-gpt-6-1-sol":{"id":"duo-chat-gpt-6-1-sol","name":"Agentic Chat (GPT-6.1 Sol)","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"openai/gpt-6.1-sol"},"duo-chat-haiku-4-5":{"id":"duo-chat-haiku-4-5","name":"Agentic Chat (Claude Haiku 4.5)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"duo-chat-opus-4-6":{"id":"duo-chat-opus-4-6","name":"Agentic Chat (Claude Opus 4.6)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"anthropic/claude-opus-4-6"},"duo-chat-gpt-5-4-mini":{"id":"duo-chat-gpt-5-4-mini","name":"Agentic Chat (GPT-5.4 Mini)","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-5.4-mini"},"duo-chat-gpt-5-1":{"id":"duo-chat-gpt-5-1","name":"Agentic Chat (GPT-5.1)","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-5.1"},"duo-chat-opus-4-8":{"id":"duo-chat-opus-4-8","name":"Agentic Chat (Claude Opus 4.8)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"anthropic/claude-opus-4-8"},"duo-chat-sonnet-4-6":{"id":"duo-chat-sonnet-4-6","name":"Agentic Chat (Claude Sonnet 4.6)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"duo-chat-sonnet-5":{"id":"duo-chat-sonnet-5","name":"Agentic Chat (Claude Sonnet 5)","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"anthropic/claude-sonnet-5"},"duo-chat-gpt-5-6-luna":{"id":"duo-chat-gpt-5-6-luna","name":"Agentic Chat (GPT-5.6 Luna)","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"openai/gpt-5.6-luna"},"duo-chat-sonnet-5-5":{"id":"duo-chat-sonnet-5-5","name":"Agentic Chat (Claude Sonnet 5.5)","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"duo-chat-fable-5-1":{"id":"duo-chat-fable-5-1","name":"Agentic Chat (Claude Fable 5.1)","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"anthropic/claude-fable-5-1"},"duo-chat-gpt-5-4":{"id":"duo-chat-gpt-5-4","name":"Agentic Chat (GPT-5.4)","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-5.4"},"duo-chat-gpt-6-luna":{"id":"duo-chat-gpt-6-luna","name":"Agentic Chat (GPT-6 Luna)","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"openai/gpt-6-luna"}}},"cohere":{"id":"cohere","env":["COHERE_API_KEY"],"npm":"@ai-sdk/cohere","name":"Cohere","doc":"https://docs.cohere.com/docs/models","models":{"tiny-aya-global":{"id":"tiny-aya-global","name":"Tiny Aya Global","description":"Compact multilingual model balanced across 70 languages and regions","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-17","last_updated":"2026-02-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8000,"output":8000},"canonical_model_id":"cohere/tiny-aya-global"},"tiny-aya-fire":{"id":"tiny-aya-fire","name":"Tiny Aya Fire","description":"Compact multilingual model specialized for South Asian languages","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-17","last_updated":"2026-02-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8000,"output":8000},"canonical_model_id":"cohere/tiny-aya-fire"},"command-r-plus-08-2024":{"id":"command-r-plus-08-2024","name":"Command R+","description":"Cohere's RAG workhorse for long-context enterprise search and tool use","family":"command-r","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2024-08-30","last_updated":"2024-08-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4000},"cost":{"input":2.5,"output":10},"canonical_model_id":"cohere/command-r-plus-08-2024"},"command-r7b-12-2024":{"id":"command-r7b-12-2024","name":"Command R7B","description":"Cohere retrieval model for long-context chat and enterprise RAG workflows","family":"command-r","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2024-12-13","last_updated":"2024-12-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4000},"cost":{"input":0.0375,"output":0.15},"canonical_model_id":"cohere/command-r7b-12-2024"},"north-mini-code-1-0":{"id":"north-mini-code-1-0","name":"North Mini Code","description":"Cohere coding model for practical software engineering and agentic edits","family":"north","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-09-23","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":64000},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://api.cohere.ai/compatibility/v1"},"cost":{"input":0,"output":0},"canonical_model_id":"cohere/north-mini-code-1-0"},"tiny-aya-water":{"id":"tiny-aya-water","name":"Tiny Aya Water","description":"Compact multilingual model specialized for European and Asia-Pacific languages","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-17","last_updated":"2026-02-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8000,"output":8000},"canonical_model_id":"cohere/tiny-aya-water"},"command-a-reasoning-08-2025":{"id":"command-a-reasoning-08-2025","name":"Command A Reasoning","description":"Cohere reasoning model for multilingual enterprise agents, tools, and complex workflows","family":"command-a","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":32000},"cost":{"input":2.5,"output":10},"canonical_model_id":"cohere/command-a-reasoning-08-2025"},"c4ai-aya-expanse-32b":{"id":"c4ai-aya-expanse-32b","name":"Aya Expanse 32B","description":"Open multilingual model optimized for generation across 23 languages","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2024-10-24","last_updated":"2024-10-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4000},"cost":{"input":0.5,"output":1.5},"canonical_model_id":"cohere/c4ai-aya-expanse-32b"},"command-r-08-2024":{"id":"command-r-08-2024","name":"Command R","description":"Cohere retrieval model for long-context chat and enterprise RAG workflows","family":"command-r","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2024-08-30","last_updated":"2024-08-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4000},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"cohere/command-r-08-2024"},"tiny-aya-earth":{"id":"tiny-aya-earth","name":"Tiny Aya Earth","description":"Compact multilingual model specialized for West Asian and African languages","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-17","last_updated":"2026-02-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8000,"output":8000},"canonical_model_id":"cohere/tiny-aya-earth"},"command-a-03-2025":{"id":"command-a-03-2025","name":"Command A","description":"Cohere command model for multilingual enterprise agents, tools, and chat","family":"command-a","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2025-03-13","last_updated":"2025-03-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":8000},"cost":{"input":2.5,"output":10},"canonical_model_id":"cohere/command-a-03-2025"},"command-a-translate-08-2025":{"id":"command-a-translate-08-2025","name":"Command A Translate","description":"Translation model for multilingual conversion, localization, and cross-language workflows","family":"command-a","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2025-08-28","last_updated":"2025-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8000,"output":8000},"cost":{"input":2.5,"output":10},"canonical_model_id":"cohere/command-a-translate-08-2025"},"command-r7b-arabic-02-2025":{"id":"command-r7b-arabic-02-2025","name":"Command R7B Arabic","description":"Open Command R model optimized for Arabic enterprise chat, RAG, and cultural knowledge","family":"command-r","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2025-02-27","last_updated":"2025-02-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4000},"cost":{"input":0.0375,"output":0.15},"canonical_model_id":"cohere/command-r7b-arabic-02-2025"},"c4ai-aya-vision-32b":{"id":"c4ai-aya-vision-32b","name":"Aya Vision 32B","description":"Open multilingual vision model for OCR, visual reasoning, and image question answering","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-03-04","last_updated":"2025-05-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":16000,"output":4000},"canonical_model_id":"cohere/c4ai-aya-vision-32b"},"north-small-translate-09-2026":{"id":"north-small-translate-09-2026","name":"North Small Translate","description":"Open-weight translation model for more than 50 languages and locale variants","family":"north","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-09-09","last_updated":"2026-09-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":16000},"cost":{"input":0,"output":0},"canonical_model_id":"cohere/north-small-translate-1-0"},"command-a-plus-05-2026":{"id":"command-a-plus-05-2026","name":"Command A Plus","description":"Cohere's stronger command model for multilingual agents and enterprise workflows","family":"command-a","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04-01","release_date":"2026-05-20","last_updated":"2026-06-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":64000},"cost":{"input":2.5,"output":10},"canonical_model_id":"cohere/command-a-plus-05-2026"},"command-a-vision-07-2025":{"id":"command-a-vision-07-2025","name":"Command A Vision","description":"Cohere vision model for multilingual document analysis, OCR, and image understanding","family":"command-a","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2025-07-31","last_updated":"2025-07-31","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8000},"cost":{"input":2.5,"output":10},"canonical_model_id":"cohere/command-a-vision-07-2025"}}},"synthetic":{"id":"synthetic","env":["SYNTHETIC_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.synthetic.new/openai/v1","name":"Synthetic","doc":"https://synthetic.new/pricing","models":{"hf:zai-org/GLM-5.3-Flash":{"id":"hf:zai-org/GLM-5.3-Flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":65536},"cost":{"input":0.15,"output":0.5,"cache_read":0.04},"canonical_model_id":"zhipuai/glm-5.3-flash"},"hf:zai-org/GLM-5.2":{"id":"hf:zai-org/GLM-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":65536},"status":"deprecated","cost":{"input":1.4,"output":4.4,"cache_read":1.4},"canonical_model_id":"zhipuai/glm-5.2"},"hf:zai-org/GLM-4.7-Flash":{"id":"hf:zai-org/GLM-4.7-Flash","name":"GLM-4.7-Flash","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"output":65536},"cost":{"input":0.1,"output":0.5,"cache_read":0.02},"canonical_model_id":"zhipuai/glm-4.7-flash"},"hf:zai-org/GLM-5.3":{"id":"hf:zai-org/GLM-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":65536},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"hf:nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4":{"id":"hf:nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4","name":"Nemotron 3 Super 120B A12B","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.3,"output":1,"cache_read":0.06},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"},"hf:Qwen/Qwen3.6-27B":{"id":"hf:Qwen/Qwen3.6-27B","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"status":"deprecated","cost":{"input":0.45,"output":3.6,"cache_read":0.45},"canonical_model_id":"alibaba/qwen3.6-27b"},"hf:MiniMaxAI/MiniMax-M3":{"id":"hf:MiniMaxAI/MiniMax-M3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":65536},"status":"deprecated","cost":{"input":0.6,"output":1.2,"cache_read":0.6},"canonical_model_id":"minimax/MiniMax-M3"},"hf:openai/gpt-oss-120b":{"id":"hf:openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":65536},"cost":{"input":0.1,"output":0.1,"cache_read":0.02},"canonical_model_id":"openai/gpt-oss-120b"},"hf:moonshotai/Kimi-K3":{"id":"hf:moonshotai/Kimi-K3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":65536},"cost":{"input":3,"output":15,"cache_read":0.45},"canonical_model_id":"moonshotai/kimi-k3"},"hf:moonshotai/Kimi-K2.7-Code":{"id":"hf:moonshotai/Kimi-K2.7-Code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"status":"deprecated","cost":{"input":0.95,"output":4,"cache_read":0.95},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"hf:deepseek-ai/DeepSeek-V4.1-Flash-1017":{"id":"hf:deepseek-ai/DeepSeek-V4.1-Flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","xhigh","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":65536},"cost":{"input":0.6,"output":1.2,"cache_read":0.03},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"hf:deepseek-ai/DeepSeek-V4.1-Flash":{"id":"hf:deepseek-ai/DeepSeek-V4.1-Flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","xhigh","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":65536},"cost":{"input":0.6,"output":1.2,"cache_read":0.03},"canonical_model_id":"deepseek/deepseek-v4.1-flash"}}},"kosmik":{"id":"kosmik","env":["KOSMIK_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.koscompute.com/v1","name":"Kosmik Compute","doc":"https://api.koscompute.com/docs/","models":{"qwen/qwen3.8-27b":{"id":"qwen/qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.35,"output":2.2,"cache_read":0.09},"canonical_model_id":"alibaba/qwen3.8-27b"}}},"bee":{"id":"bee","env":["BEE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.bee.heossi.com/bee","name":"Bee by HEOSSI","doc":"https://bee.heossi.com/docs/sdks","models":{"bee-cell":{"id":"bee-cell","name":"Bee Cell 1.0","description":"Fast hosted AI for chat, coding help, document question answering, image understanding, and lightweight technical reasoning.","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-10","last_updated":"2026-09-28","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":8192},"cost":{"input":0.3,"output":1.2,"cache_read":0.03,"cache_write":0.36}},"bee-comb":{"id":"bee-comb","name":"Bee Comb 2.0","description":"Stronger local/workstation AI for coding, architecture, security reasoning, larger RAG, and domain-specific workflows. The default workhorse for engineers and dev teams.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-10","last_updated":"2026-09-28","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":16384},"cost":{"input":1.25,"output":5,"cache_read":0.125,"cache_write":1.5}},"bee-hive":{"id":"bee-hive","name":"Bee Hive 1.0","description":"Scalable Bee serving with quantum-reasoning routing and multi-base domain-adapter routing for shared knowledge workflows, document intelligence, and lower-cost cloud inference. Domain adapters activate per customer domain after evaluation.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-10","last_updated":"2026-09-28","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"cost":{"input":5,"output":20,"cache_read":0.5,"cache_write":6}},"bee-buzz":{"id":"bee-buzz","name":"Bee Buzz 1.0","description":"Mid-tier production model for tool-using agents, multi-step workflows, and builder/integration work. Bigger context than Comb, deeper planning, faster than Hive on routine tasks.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-10","last_updated":"2026-09-28","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":24576},"cost":{"input":2.5,"output":10,"cache_read":0.25,"cache_write":3}},"bee-brood":{"id":"bee-brood","name":"Bee Brood 1.0","description":"Production multimodal reasoning for image and video analysis, tool-enabled workflows, and multi-step planning at controlled cost.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-10","last_updated":"2026-09-28","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":16384},"cost":{"input":0.6,"output":2.4,"cache_read":0.06,"cache_write":0.72}},"bee-swarm":{"id":"bee-swarm","name":"Bee Swarm 1.0","description":"Premium reasoning, multi-model cloud execution, large-document analysis, and high-value technical work. Includes the evolution engine and stronger eval gates by default.","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":false,"structured_output":false,"release_date":"2026-07-10","last_updated":"2026-09-28","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":25,"output":150,"cache_read":2.5,"cache_write":30}}}},"sensenova":{"id":"sensenova","env":["SENSENOVA_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://token.sensenova.cn/v1","name":"SenseNova (China)","doc":"https://platform.sensenova.cn/docs","models":{"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"zhipuai/glm-5.2"},"sensenova-6.8-flash-lite":{"id":"sensenova-6.8-flash-lite","name":"SenseNova 6.8 Flash Lite","description":"SenseNova lightweight multimodal agent model for real-world complex tasks, data analysis, and complex information presentation","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-11","last_updated":"2026-08-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536},"cost":{"input":0,"output":0,"cache_read":0}},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"moonshotai/kimi-k3"},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash is a high-performance conversational model by DeepSeek, supporting thinking/non-thinking modes, 1M context window, and tool calling.","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":65536},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"deepseek/deepseek-v4-flash"}}},"salad-cloud":{"id":"salad-cloud","env":["SALAD_CLOUD_API_KEY"],"npm":"@saladtechnologies-oss/ai-sdk-provider","name":"SaladCloud AI Gateway","doc":"https://docs.salad.com/ai-gateway/explanation/overview","models":{"qwen3.6-35b-a3b":{"id":"qwen3.6-35b-a3b","name":"Qwen3.6 35B-A3B","description":"Qwen MoE for agentic tasks, complex reasoning, code generation, and instruction following","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.09,"output":0.6},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"}}},"xiaomi":{"id":"xiaomi","env":["XIAOMI_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.xiaomimimo.com/v1","name":"Xiaomi","doc":"https://platform.xiaomimimo.com/#/docs","models":{"mimo-v2.6-pro":{"id":"mimo-v2.6-pro","name":"MiMo-V2.6-Pro","description":"MiMo Pro model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.435,"output":0.87,"cache_read":0.0036},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"mimo-v2.6-pro-ultraspeed":{"id":"mimo-v2.6-pro-ultraspeed","name":"MiMo-V2.6-Pro-UltraSpeed","description":"MiMo pro model for strong multimodal reasoning and agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":4.35,"output":8.7,"cache_read":0.036},"canonical_model_id":"xiaomi/mimo-v2.6-pro-ultraspeed"},"mimo-v2.6-flash":{"id":"mimo-v2.6-flash","name":"MiMo-V2.6-Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"mimo-v2.5":{"id":"mimo-v2.5","name":"MiMo-V2.5","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"xiaomi/mimo-v2.5"},"mimo-v2.5-pro":{"id":"mimo-v2.5-pro","name":"MiMo-V2.5-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":0.435,"output":0.87,"cache_read":0.0036},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"mimo-v2.5-pro-ultraspeed":{"id":"mimo-v2.5-pro-ultraspeed","name":"MiMo-V2.5-Pro-UltraSpeed","description":"MiMo pro model for strong multimodal reasoning and agent execution","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-06-08","last_updated":"2026-06-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":1.305,"output":2.61,"cache_read":0.0108},"canonical_model_id":"xiaomi/mimo-v2.5-pro-ultraspeed"}}},"aihubmix":{"id":"aihubmix","env":["AIHUBMIX_API_KEY"],"npm":"@aihubmix/ai-sdk-provider","name":"AIHubMix","doc":"https://docs.aihubmix.com","models":{"qwen3.6-plus":{"id":"qwen3.6-plus","name":"Qwen3.6 Plus","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":991000,"output":65536},"cost":{"input":0.282,"output":1.692,"cache_read":0.0282,"cache_write":0.3525,"tiers":[{"input":1.128,"output":6.768,"cache_read":0.1128,"cache_write":1.41,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":1.128,"output":6.768,"cache_read":0.1128,"cache_write":1.41}},"canonical_model_id":"alibaba/qwen3.6-plus"},"gpt-5.5":{"id":"gpt-5.5","name":"GPT-5.5","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":12.5,"output":75,"cache_read":1.25},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"coding-minimax-m2.7":{"id":"coding-minimax-m2.7","name":"Coding MiniMax M2.7","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":128100},"cost":{"input":0.2,"output":0.2},"canonical_model_id":"minimax/MiniMax-M2.7"},"deep-deepseek-v4-flash":{"id":"deep-deepseek-v4-flash","name":"DeepSeek V4 Flash (DeepSeek)","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"deprecated","cost":{"input":0.154,"output":0.308,"cache_read":0.0308},"canonical_model_id":"deepseek/deepseek-v4-flash"},"muse-spark-1.3":{"id":"muse-spark-1.3","name":"Muse Spark 1.3","description":"Muse Spark 1.3 is a multimodal reasoning model from Meta for long-running agentic, multi-agent, and coding workflows. It improves long-horizon agent collaboration, instruction following, and coding efficiency relative to Muse Spark 1.2.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.375,"output":4.675,"cache_read":0.165},"canonical_model_id":"meta/muse-spark-1.3"},"claude-opus-4-6-think":{"id":"claude-opus-4-6-think","name":"Claude Opus 4.6 Thinking","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":0,"max":24576}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.499,"cache_read":0.03,"input_audio":0.9999},"canonical_model_id":"google/gemini-2.5-flash"},"gemini-3.1-flash-lite-image":{"id":"gemini-3.1-flash-lite-image","type":"image","name":"Nano Banana 2 Lite","description":"Fastest, most cost-efficient Gemini image model for high-volume 1K generation and editing","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","high"]}],"tool_call":true,"interleaved":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":4096},"cost":{"input":0.25,"output":1.5,"cache_read":0.025},"canonical_model_id":"google/gemini-3.1-flash-lite-image"},"claude-sonnet-5-5":{"id":"claude-sonnet-5-5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"claude-fable-5-1":{"id":"claude-fable-5-1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":11,"output":55,"cache_read":0.275,"cache_write":13.75},"canonical_model_id":"anthropic/claude-fable-5-1"},"gemini-3.8-flash":{"id":"gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"input_audio":0.75},"canonical_model_id":"google/gemini-3.8-flash"},"zai-glm-5.1":{"id":"zai-glm-5.1","name":"GLM-5.1 (Z.ai)","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"status":"deprecated","cost":{"input":0.845,"output":3.38,"cache_read":0.183112},"canonical_model_id":"zhipuai/glm-5.1"},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.1268,"output":3.9438,"cache_read":0.2817},"canonical_model_id":"zhipuai/glm-5.2"},"claude-opus-4-5":{"id":"claude-opus-4-5","name":"Claude Opus 4.5 (latest)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"interleaved":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"coding-glm-5.1":{"id":"coding-glm-5.1","name":"Coding GLM 5.1","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0.06,"output":0.22,"cache_read":0.013},"canonical_model_id":"zhipuai/glm-5.1"},"gpt-5.2":{"id":"gpt-5.2","name":"GPT-5.2","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"grok-4.5":{"id":"grok-4.5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":1000000},"cost":{"input":2.2,"output":6.6,"cache_read":0.55,"tiers":[{"input":4.4,"output":13.2,"cache_read":1.1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4.4,"output":13.2,"cache_read":1.1}},"canonical_model_id":"xai/grok-4.5"},"doubao-seed-2-0-code-preview":{"id":"doubao-seed-2-0-code-preview","name":"Doubao Seed 2.0 Code Preview","description":"Coding model for repository understanding, refactors, and agentic engineering tasks","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"cost":{"input":0.4822,"output":2.411,"cache_read":0.09644,"tiers":[{"input":0.72328,"output":3.6164,"cache_read":0.144656,"tier":{"type":"context","size":32000}},{"input":1.4466,"output":7.233,"cache_read":0.28932,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-code"},"o4-mini":{"id":"o4-mini","name":"o4-mini","description":"Fast o-series model for compact reasoning, coding, and tool use","family":"o-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":1.1,"output":4.4,"cache_read":0.275},"canonical_model_id":"openai/o4-mini"},"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.95,"output":4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"gpt-5.2-codex":{"id":"gpt-5.2-codex","name":"GPT-5.2 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2-codex"},"gpt-5.4-mini":{"id":"gpt-5.4-mini","name":"GPT-5.4 mini","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":1.5,"output":9,"cache_read":0.15},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"grok-4.3":{"id":"grok-4.3","name":"Grok 4.3","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.3"},"qwen3.8-omni-flash":{"id":"qwen3.8-omni-flash","name":"Qwen3.8 Omni Flash","description":"Qwen omni model for text, vision, audio, and multimodal agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-17","last_updated":"2026-09-17","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.1126,"output":0.380025,"cache_read":0.014075,"cache_write":0.1759375},"canonical_model_id":"alibaba/qwen3.8-omni-flash"},"xiaomi-mimo-v2.5-pro-free":{"id":"xiaomi-mimo-v2.5-pro-free","name":"Xiaomi MiMo-V2.5-Pro (free)","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo-v2.5-pro","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-05-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"doubao-seed-2-0-mini-260428":{"id":"doubao-seed-2-0-mini-260428","name":"Doubao Seed 2.0 Mini 260428","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-28","last_updated":"2026-04-28","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"cost":{"input":0.030136,"output":0.30136,"cache_read":0.0060272,"input_audio":0.423,"tiers":[{"input":0.060274,"output":0.60274,"cache_read":0.0120548,"tier":{"type":"context","size":32000}},{"input":0.120548,"output":1.20548,"cache_read":0.0241096,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-mini"},"gpt-image-2.5-flare":{"id":"gpt-image-2.5-flare","type":"image","name":"GPT Image 2.5 Flare","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-09-08","last_updated":"2026-09-08","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":5,"output":30,"cache_read":1.25},"canonical_model_id":"openai/gpt-image-2.5-flare"},"deepseek-v4-flash-0731-fast":{"id":"deepseek-v4-flash-0731-fast","name":"DeepSeek V4 Flash 0731 Fast","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.28,"output":1.4,"cache_read":0.07},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"gpt-5":{"id":"gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"step-5-preview":{"id":"step-5-preview","name":"Step 5 Preview","description":"StepFun's next-generation flagship base model for coding and professional knowledge work, with native text, image, and video input and a 1M-token context window","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":64000},"cost":{"input":1.08,"output":3.0888,"cache_read":0.054},"canonical_model_id":"stepfun/step-5-preview"},"gpt-5.1-codex":{"id":"gpt-5.1-codex","name":"GPT-5.1 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1-codex"},"muse-spark-1.1":{"id":"muse-spark-1.1","name":"Muse Spark 1.1","description":"Muse Spark is a natively multimodal reasoning model with support for tool-use, visual chain of thought, and multi-agent orchestration.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-08","last_updated":"2026-07-09","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.375,"output":4.675},"canonical_model_id":"meta/muse-spark-1.1"},"gemini-2.5-pro":{"id":"gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.25,"output":10,"cache_read":0.125,"tiers":[{"input":2.5,"output":15,"cache_read":0.25,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":15,"cache_read":0.25}},"canonical_model_id":"google/gemini-2.5-pro"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"glm-4.7-flash-free":{"id":"glm-4.7-flash-free","name":"GLM-4.7-Flash (free)","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"zhipuai/glm-4.7-flash"},"gemini-3.5-flash":{"id":"gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"status":"deprecated","cost":{"input":0.75,"output":3.75,"cache_read":0.075,"input_audio":0.75},"canonical_model_id":"google/gemini-3.5-flash"},"claude-sonnet-5":{"id":"claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"o3":{"id":"o3","name":"o3","description":"Deliberate o-series reasoner for hard math, coding, and multi-step analysis","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/o3"},"gemini-3.6-flash":{"id":"gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"input_audio":0.75},"canonical_model_id":"google/gemini-3.6-flash"},"coding-glm-5.3-flash-free":{"id":"coding-glm-5.3-flash-free","name":"GLM-5.3-Flash (Coding, free)","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"zhipuai/glm-5.3-flash"},"gpt-6-luna":{"id":"gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"alicloud-deepseek-v4-flash":{"id":"alicloud-deepseek-v4-flash","name":"DeepSeek V4 Flash (Alibaba Cloud)","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"deprecated","cost":{"input":0.14,"output":0.28,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash"},"grok-4.7":{"id":"grok-4.7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.7"},"claude-sonnet-4-6-think":{"id":"claude-sonnet-4-6-think","name":"Claude Sonnet 4.6 Thinking","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"glm-4.6v":{"id":"glm-4.6v","name":"GLM-4.6V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0.137,"output":0.411,"cache_read":0.0274,"tiers":[{"input":0.274,"output":0.822,"cache_read":0.0548,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-4.6v"},"nemotron-3.5-lightning-free":{"id":"nemotron-3.5-lightning-free","name":"Nemotron 3.5 Lightning 30B A3B (free)","description":"Fast NVIDIA Nemotron MoE for reliable agentic tasks across enterprise workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3.5-lightning"},"claude-sonnet-4-5-think":{"id":"claude-sonnet-4-5-think","name":"Claude Sonnet 4.5 Thinking","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"interleaved":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3.3,"output":16.5,"cache_read":0.33,"cache_write":4.125,"tiers":[{"input":6.6,"output":24.75,"cache_read":0.66,"cache_write":8.25,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":6.6,"output":24.75,"cache_read":0.66,"cache_write":8.25}},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"qwen3.6-max-preview":{"id":"qwen3.6-max-preview","name":"Qwen3.6 Max Preview","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":240000,"output":64000},"status":"deprecated","cost":{"input":1.27,"output":7.61,"cache_read":0.1268,"cache_write":1.585,"tiers":[{"input":2.11,"output":12.67,"cache_read":0.2112,"cache_write":2.64,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3.6-max-preview"},"deepseek-v4-pro-0813":{"id":"deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.6918,"output":2.0754,"cache_read":0.023057694},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"qwen3.5-flash":{"id":"qwen3.5-flash","name":"Qwen3.5 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.0282,"output":0.282,"cache_read":0.00282,"cache_write":0.03525,"tiers":[{"input":0.1126,"output":1.126,"cache_read":0.01126,"cache_write":0.14075,"tier":{"type":"context","size":128000}},{"input":0.169,"output":1.69,"cache_read":0.0169,"cache_write":0.21125,"tier":{"type":"context","size":256000}}]},"canonical_model_id":"alibaba/qwen3.5-flash"},"qwen3.8-flash":{"id":"qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.1126,"output":0.380025,"cache_read":0.014075,"cache_write":0.1759375},"canonical_model_id":"alibaba/qwen3.8-flash"},"kimi-k2.5":{"id":"kimi-k2.5","name":"Kimi K2.5","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.6,"output":3,"cache_read":0.1},"canonical_model_id":"moonshotai/kimi-k2.5"},"gpt-image-2":{"id":"gpt-image-2","type":"image","name":"GPT-Image-2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-21","last_updated":"2026-04-21","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":5,"output":30,"cache_read":1.25},"canonical_model_id":"openai/gpt-image-2"},"nemotron-3-nano-omni-30b-a3b-reasoning-free":{"id":"nemotron-3-nano-omni-30b-a3b-reasoning-free","name":"Nemotron 3 Nano Omni 30B A3B Reasoning (free)","description":"Open Nemotron omni model combining reasoning with text, vision, and audio","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":true,"release_date":"2026-04-28","last_updated":"2026-04-28","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning"},"mimo-v2.6-pro":{"id":"mimo-v2.6-pro","name":"MiMo-V2.6-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.48,"output":0.96,"cache_read":0.00384},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"gemini-3.1-flash-image":{"id":"gemini-3.1-flash-image","type":"image","name":"Nano Banana 2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","high"]}],"tool_call":false,"interleaved":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","video","pdf"],"output":["text","image"]},"open_weights":false,"limit":{"context":131072,"output":32768},"cost":{"input":0.5,"output":3},"canonical_model_id":"google/gemini-3.1-flash-image"},"gemini-3.1-pro-preview-customtools":{"id":"gemini-3.1-pro-preview-customtools","name":"Gemini 3.1 Pro Preview Custom Tools","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview-customtools"},"mimo-v2.6-pro-ultraspeed":{"id":"mimo-v2.6-pro-ultraspeed","name":"MiMo-V2.6-Pro-UltraSpeed","description":"MiMo pro model for strong multimodal reasoning and agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":4.8,"output":9.6,"cache_read":0.0384},"canonical_model_id":"xiaomi/mimo-v2.6-pro-ultraspeed"},"qwen3.5-397b-a17b":{"id":"qwen3.5-397b-a17b","name":"Qwen3.5 397B-A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.1644,"output":0.9864,"tiers":[{"input":0.411,"output":2.466,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"gemini-3.1-pro-preview":{"id":"gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.155,"output":0.62,"cache_read":0.0031},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"gemini-3.1-flash-lite":{"id":"gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"cache_write":1,"input_audio":0.5},"canonical_model_id":"google/gemini-3.1-flash-lite"},"xiaomi-mimo-v2.5":{"id":"xiaomi-mimo-v2.5","name":"Xiaomi MiMo-V2.5","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo-v2.5","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-05-13","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":0.44,"output":2.2,"cache_read":0.088,"tiers":[{"input":0.88,"output":4.4,"cache_read":0.176,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":0.88,"output":4.4,"cache_read":0.176}},"canonical_model_id":"xiaomi/mimo-v2.5"},"deepseek-v4-flash-vision-exp":{"id":"deepseek-v4-flash-vision-exp","name":"DeepSeek V4 Flash Vision Exp","description":"Experimental multimodal DeepSeek V4 Flash model for image understanding, coding, and agentic work","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-21","last_updated":"2026-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"deprecated","cost":{"input":0.155,"output":0.62,"cache_read":0.0031},"canonical_model_id":"deepseek/deepseek-v4-flash-vision-exp"},"glm-4.7":{"id":"glm-4.7","name":"GLM-4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0.273974,"output":1.095896,"cache_read":0.0547948,"tiers":[{"input":0.547946,"output":2.191784,"cache_read":0.1095892,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-4.7"},"gpt-6-sol":{"id":"gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"qwen3.8-max-preview":{"id":"qwen3.8-max-preview","name":"Qwen3.8 Max Preview","description":"Preview Qwen flagship for million-token multimodal reasoning and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-07-19","last_updated":"2026-07-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"status":"deprecated","cost":{"input":0.338,"output":1.014,"cache_read":0.0676,"cache_write":0.4225},"canonical_model_id":"alibaba/qwen3.8-max-preview"},"gemini-2.5-flash-lite":{"id":"gemini-2.5-flash-lite","name":"Gemini 2.5 Flash-Lite","description":"Lean Gemini 2.5 lane for cheap multimodal traffic and quick agents","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":512,"max":24576}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.1,"output":0.4,"cache_read":0.01,"input_audio":0.3},"canonical_model_id":"google/gemini-2.5-flash-lite"},"gpt-image-1.5":{"id":"gpt-image-1.5","type":"image","name":"GPT-Image-1.5","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-11-25","last_updated":"2025-11-25","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":5,"output":32},"canonical_model_id":"openai/gpt-image-1.5"},"coding-xiaomi-mimo-v2.5":{"id":"coding-xiaomi-mimo-v2.5","name":"Coding Xiaomi MiMo-V2.5","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo-v2.5","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-05-13","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.08,"output":0.16,"cache_read":0.0016},"canonical_model_id":"xiaomi/mimo-v2.5"},"doubao-seed-2-0-pro":{"id":"doubao-seed-2-0-pro","name":"Doubao Seed 2.0 Pro","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"cost":{"input":0.4958,"output":2.479,"cache_read":0.09916,"tiers":[{"input":0.7436,"output":3.718,"cache_read":0.14872,"tier":{"type":"context","size":32000}},{"input":1.4872,"output":7.436,"cache_read":0.29744,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-pro"},"gemini-4-argon":{"id":"gemini-4-argon","name":"Gemini 4 Argon","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":10,"cache_read":0.1,"input_audio":2},"canonical_model_id":"google/gemini-4-argon"},"qwen3.8-2.4t-a95b":{"id":"qwen3.8-2.4t-a95b","name":"Qwen3.8 2.4T A95B","description":"Open-weight sparse MoE (2.4T total, 95B active), the open-weight twin of Qwen3.8 Max for coding, research, complex reasoning, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.1268,"output":3.9438,"cache_read":0.2817},"canonical_model_id":"zhipuai/glm-5.3"},"gpt-5.3-codex":{"id":"gpt-5.3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"qwen3.8-max-free":{"id":"qwen3.8-max-free","name":"Qwen3.8 Max (free)","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3.8-max"},"qwen3.5-35b-a3b":{"id":"qwen3.5-35b-a3b","name":"Qwen3.5 35B-A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.0564,"output":0.4512,"tiers":[{"input":0.2254,"output":1.8032,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3.5-35b-a3b"},"coding-glm-5.1-free":{"id":"coding-glm-5.1-free","name":"Coding GLM 5.1 (free)","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"zhipuai/glm-5.1"},"mimo-v2.6-flash":{"id":"mimo-v2.6-flash","name":"MiMo-V2.6-Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.155,"output":0.31,"cache_read":0.0031},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"qwen3.7-plus":{"id":"qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":991000,"output":64000},"cost":{"input":0.282,"output":1.128,"cache_read":0.0564,"cache_write":0.3525,"tiers":[{"input":0.845,"output":3.38,"cache_read":0.169,"cache_write":1.05625,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":0.845,"output":3.38,"cache_read":0.169,"cache_write":1.05625}},"canonical_model_id":"alibaba/qwen3.7-plus"},"claude-fable-5":{"id":"claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":11,"output":55,"cache_read":1.1,"cache_write":13.75},"canonical_model_id":"anthropic/claude-fable-5"},"minimax-m3":{"id":"minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":512000},"cost":{"input":0.288,"output":1.152},"canonical_model_id":"minimax/MiniMax-M3"},"doubao-seed-2-0-lite-260428":{"id":"doubao-seed-2-0-lite-260428","name":"Doubao Seed 2.0 Lite 260428","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-28","last_updated":"2026-04-28","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"cost":{"input":0.09041,"output":0.54246,"cache_read":0.018082,"input_audio":1.35615,"tiers":[{"input":0.135616,"output":0.813696,"cache_read":0.0271232,"tier":{"type":"context","size":32000}},{"input":0.271232,"output":1.627392,"cache_read":0.0542464,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-lite"},"qwen3.7-max":{"id":"qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":991000,"output":131072},"cost":{"input":1.69,"output":5.07,"cache_read":0.169,"cache_write":2.1125},"canonical_model_id":"alibaba/qwen3.7-max"},"longcat-2.0":{"id":"longcat-2.0","name":"LongCat-2.0","description":"Meituan LongCat-2.0, a reasoning model with tool calling and a 1M-token context window","family":"longcat","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.7746,"output":3.0984,"cache_read":0.015492},"canonical_model_id":"meituan/longcat-2.0"},"gpt-6-astra":{"id":"gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.95,"output":3.9995,"cache_read":0.160835},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"coding-glm-5.2-free":{"id":"coding-glm-5.2-free","name":"GLM-5.2 (Coding, free)","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"zhipuai/glm-5.2"},"gpt-5.1":{"id":"gpt-5.1","name":"GPT-5.1","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1"},"gpt-5.1-codex-mini":{"id":"gpt-5.1-codex-mini","name":"GPT-5.1 Codex mini","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5.1-codex-mini"},"gpt-5.5-pro":{"id":"gpt-5.5-pro","name":"GPT-5.5 Pro","description":"Highest-accuracy GPT-5.5 tier for slower, precision-heavy reasoning and coding","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.5-pro"},"qwen3.6-flash":{"id":"qwen3.6-flash","name":"Qwen3.6 Flash","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"qwen3.6","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":991000,"output":65536},"cost":{"input":0.169,"output":1.014,"cache_read":0.0169,"cache_write":0.21125,"tiers":[{"input":0.676,"output":4.056,"cache_read":0.0676,"cache_write":0.845,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":0.676,"output":4.056,"cache_read":0.0676,"cache_write":0.845}},"canonical_model_id":"alibaba/qwen3.6-flash"},"qwen3.7-flash":{"id":"qwen3.7-flash","name":"Qwen3.7 Flash","description":"Lightweight multimodal Qwen model for high-throughput text, image, and video tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":991000,"input":991808,"output":131072},"cost":{"input":0.0282,"output":0.1128,"cache_read":0.00564,"cache_write":0.03525,"tiers":[{"input":0.0845,"output":0.338,"cache_read":0.0169,"cache_write":0.105625,"tier":{"type":"context","size":32000}},{"input":0.169,"output":0.676,"cache_read":0.0338,"cache_write":0.21125,"tier":{"type":"context","size":256000}}]},"canonical_model_id":"alibaba/qwen3.7-flash"},"kimi-k2.7-code-highspeed":{"id":"kimi-k2.7-code-highspeed","name":"Kimi K2.7 Code Highspeed","description":"Lower-latency Kimi Code variant for interactive edits and coding-agent loops","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":1.9,"output":7.999,"cache_read":0.32167},"canonical_model_id":"moonshotai/kimi-k2.7-code-highspeed"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.11268,"output":0.39438,"cache_read":0.02817},"canonical_model_id":"zhipuai/glm-5.3-flash"},"claude-opus-5":{"id":"claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"mimo-v2.5":{"id":"mimo-v2.5","name":"MiMo-V2.5","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":0.155,"output":0.31,"cache_read":0.0031},"canonical_model_id":"xiaomi/mimo-v2.5"},"qwen3-max":{"id":"qwen3-max","name":"Qwen3 Max","description":"Flagship Qwen3 model for coding agents, complex reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536},"status":"deprecated","cost":{"input":0.4508,"output":2.7048,"cache_read":0.09016,"cache_write":0.5635,"tiers":[{"input":0.902,"output":5.412,"cache_read":0.1804,"cache_write":1.1275,"tier":{"type":"context","size":32000}},{"input":1.3522,"output":8.1132,"cache_read":0.27044,"cache_write":1.69025,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3-max"},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"gemini-3.5-flash-lite":{"id":"gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.499999,"cache_read":0.03,"input_audio":0.3},"canonical_model_id":"google/gemini-3.5-flash-lite"},"nemotron-3-ultra-550b-a55b-free":{"id":"nemotron-3-ultra-550b-a55b-free","name":"Nemotron 3 Ultra 550B A55B (free)","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"qwen3.8-flash-free":{"id":"qwen3.8-flash-free","name":"Qwen3.8 Flash (free)","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3.8-flash"},"gpt-6.1-sol":{"id":"gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-sol"},"hy3":{"id":"hy3","name":"Hy3","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":192000,"output":128000},"cost":{"input":0.1562,"output":0.6248,"cache_read":0.03905},"canonical_model_id":"tencent/hy3"},"mimo-v2.5-pro":{"id":"mimo-v2.5-pro","name":"MiMo-V2.5-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":0.48,"output":0.96,"cache_read":0.00384},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"hy4-preview":{"id":"hy4-preview","name":"Hy4 preview","description":"A next-generation productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-28","last_updated":"2026-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1024000,"output":64000},"cost":{"input":0.845,"output":2.535,"cache_read":0.04225},"canonical_model_id":"tencent/hy4-preview"},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":5,"output":30,"cache_read":0.5},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":2.5,"output":15,"cache_read":0.25,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5}},"canonical_model_id":"openai/gpt-5.4"},"gpt-image-2.5-sunburst":{"id":"gpt-image-2.5-sunburst","type":"image","name":"GPT Image 2.5 Sunburst","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-09-08","last_updated":"2026-09-08","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":5,"output":30,"cache_read":1.25},"canonical_model_id":"openai/gpt-image-2.5-sunburst"},"glm-4.6":{"id":"glm-4.6","name":"GLM-4.6","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0.273974,"output":1.095896,"cache_read":0.0547948,"tiers":[{"input":0.547946,"output":2.191784,"cache_read":0.1095892,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-4.6"},"gemini-3-flash-preview":{"id":"gemini-3-flash-preview","name":"Gemini 3 Flash Preview","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.05,"input_audio":1},"canonical_model_id":"google/gemini-3-flash-preview"},"qwen3.6-35b-a3b":{"id":"qwen3.6-35b-a3b","name":"Qwen3.6 35B-A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.254,"output":1.524},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"claude-opus-4-6":{"id":"claude-opus-4-6","name":"Claude Opus 4.6","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"alicloud-deepseek-v4-pro":{"id":"alicloud-deepseek-v4-pro","name":"DeepSeek V4 Pro (Alibaba Cloud)","description":"Flagship DeepSeek model for coding, reasoning, and agentic work","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"deprecated","cost":{"input":1.69,"output":3.38,"cache_read":0.13},"canonical_model_id":"deepseek/deepseek-v4-pro"},"gemini-2.5-flash-image":{"id":"gemini-2.5-flash-image","type":"image","name":"Nano Banana","description":"Nano Banana image model for fast generation, edits, and character-consistent assets","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-26","last_updated":"2025-08-26","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":32768,"output":32768},"cost":{"input":0.3,"output":30,"cache_read":0.03},"canonical_model_id":"google/gemini-2.5-flash-image"},"gpt-5.4-nano":{"id":"gpt-5.4-nano","name":"GPT-5.4 nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"gemini-3-pro-image":{"id":"gemini-3-pro-image","type":"image","name":"Nano Banana Pro","description":"Nano Banana Pro for higher-fidelity image generation and design-heavy edits","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":false,"interleaved":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":32768},"cost":{"input":2,"output":120},"canonical_model_id":"google/gemini-3-pro-image"},"qwen3.5-plus":{"id":"qwen3.5-plus","name":"Qwen3.5 Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2026-02-16","last_updated":"2026-02-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.1096,"output":0.6576,"cache_read":0.01096,"cache_write":0.137,"tiers":[{"input":0.274,"output":1.644,"cache_read":0.0274,"cache_write":0.3425,"tier":{"type":"context","size":128000}},{"input":0.548,"output":3.288,"cache_read":0.0548,"cache_write":0.685,"tier":{"type":"context","size":256000}}]},"canonical_model_id":"alibaba/qwen3.5-plus"},"grok-4.6":{"id":"grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.6"},"claude-opus-4-5-think":{"id":"claude-opus-4-5-think","name":"Claude Opus 4.5 Thinking","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"interleaved":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"glm-4.5v":{"id":"glm-4.5v","name":"GLM-4.5V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-08-11","last_updated":"2025-08-11","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":64000,"output":16384},"cost":{"input":0.274,"output":1.096,"tiers":[{"input":0.548,"output":1.644,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-4.5v"},"coding-xiaomi-mimo-v2.5-pro":{"id":"coding-xiaomi-mimo-v2.5-pro","name":"Coding Xiaomi MiMo-V2.5-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo-v2.5-pro","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-05-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.2,"output":0.4,"cache_read":0.0016},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"coding-minimax-m2.7-highspeed":{"id":"coding-minimax-m2.7-highspeed","name":"Coding MiniMax M2.7 Highspeed","description":"High-speed MiniMax model for low-latency coding and agent workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":128100},"cost":{"input":0.2,"output":0.2},"canonical_model_id":"minimax/MiniMax-M2.7-highspeed"},"coding-glm-5.3-free":{"id":"coding-glm-5.3-free","name":"GLM-5.3 (Coding, free)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"zhipuai/glm-5.3"},"claude-opus-4-8":{"id":"claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"deep-deepseek-v4-pro":{"id":"deep-deepseek-v4-pro","name":"DeepSeek V4 Pro (DeepSeek)","description":"Flagship DeepSeek model for coding, reasoning, and agentic work","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"deprecated","cost":{"input":0.478,"output":0.956,"cache_read":0.004302},"canonical_model_id":"deepseek/deepseek-v4-pro"},"grok-build-0.1":{"id":"grok-build-0.1","name":"Grok Build 0.1","description":"Fast Grok coding model tuned for agentic engineering and iterative edits","family":"grok-build","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":1,"output":2,"cache_read":0.2},"canonical_model_id":"xai/grok-build-0.1"},"deepseek-v4-flash-0731":{"id":"deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.142,"output":0.284,"cache_read":0.0284},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"coding-minimax-m2.7-free":{"id":"coding-minimax-m2.7-free","name":"Coding MiniMax M2.7 (Free)","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":128100},"cost":{"input":0,"output":0},"canonical_model_id":"minimax/MiniMax-M2.7"},"qwen3-vl-plus":{"id":"qwen3-vl-plus","name":"Qwen3-VL Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"cost":{"input":0.137,"output":1.37,"cache_read":0,"tiers":[{"input":0.2054,"output":2.054,"tier":{"type":"context","size":32000}},{"input":0.411,"output":4.11,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3-vl-plus"},"gpt-5.6-terra":{"id":"gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"alicloud-glm-5.1":{"id":"alicloud-glm-5.1","name":"GLM-5.1 (Alibaba Cloud)","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"status":"deprecated","cost":{"input":0.84,"output":3.38,"cache_read":0.169,"cache_write":1.05625},"canonical_model_id":"zhipuai/glm-5.1"},"minimax-m2.7":{"id":"minimax-m2.7","name":"MiniMax M2.7","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":128000},"cost":{"input":0.3,"output":1.2,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.7"},"xiaomi-mimo-v2.5-pro":{"id":"xiaomi-mimo-v2.5-pro","name":"Xiaomi MiMo-V2.5-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo-v2.5-pro","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-05-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":1.1,"output":3.3,"cache_read":0.22,"tiers":[{"input":2.2,"output":6.6,"cache_read":0.44,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":2.2,"output":6.6,"cache_read":0.44}},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"claude-opus-5-5":{"id":"claude-opus-5-5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"qwen3.8-max":{"id":"qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":991000,"output":131072},"cost":{"input":1.69,"output":5.07,"cache_read":0.169,"cache_write":2.1125},"canonical_model_id":"alibaba/qwen3.8-max"},"qwen3.5-27b":{"id":"qwen3.5-27b","name":"Qwen3.5 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.0846,"output":0.6768,"tiers":[{"input":0.2536,"output":2.0288,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3.5-27b"},"claude-opus-4-8-think":{"id":"claude-opus-4-8-think","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"claude-sonnet-4-5":{"id":"claude-sonnet-4-5","name":"Claude Sonnet 4.5 (latest)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"interleaved":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3.3,"output":16.5,"cache_read":0.33,"cache_write":4.125,"tiers":[{"input":6.6,"output":24.75,"cache_read":0.66,"cache_write":8.25,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":6.6,"output":24.75,"cache_read":0.66,"cache_write":8.25}},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"step-3.7-flash":{"id":"step-3.7-flash","name":"Step 3.7 Flash","description":"Newer StepFun flash model for faster agents, coding, and multimodal prompts","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2026-03-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":256000},"cost":{"input":0.22,"output":1.32,"cache_read":0.044},"canonical_model_id":"stepfun/step-3.7-flash"},"xiaomi-mimo-v2.5-free":{"id":"xiaomi-mimo-v2.5-free","name":"Xiaomi MiMo-V2.5 (free)","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo-v2.5","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-05-13","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"xiaomi/mimo-v2.5"},"ling-3.0-flash-free":{"id":"ling-3.0-flash-free","name":"Ling 3.0 Flash (free)","description":"Hybrid-linear MoE reasoning model with 124B total and 5.1B active parameters for efficient agents","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-07-23","last_updated":"2026-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0,"output":0},"canonical_model_id":"inclusionai/ling-3.0-flash"},"glm-5v-turbo":{"id":"glm-5v-turbo","name":"GLM 5 Vision Turbo","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":131072},"cost":{"input":0.7042,"output":3.09848,"cache_read":0.169008,"tiers":[{"input":0.986,"output":3.662004,"cache_read":0.253402,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-5v-turbo"},"claude-haiku-5-5":{"id":"claude-haiku-5-5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"muse-spark-1.2":{"id":"muse-spark-1.2","name":"Muse Spark 1.2","description":"Muse Spark 1.2 is a coding-focused update to Muse Spark 1.1 with improvements in code generation, complex debugging, codebase understanding, and end-to-end developer workflows.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.375,"output":4.675},"canonical_model_id":"meta/muse-spark-1.2"},"claude-opus-4-7":{"id":"claude-opus-4-7","name":"Claude Opus 4.7","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"gemini-3.7-flash":{"id":"gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":0.75,"output":3.75,"cache_read":0.075,"input_audio":0.75},"canonical_model_id":"google/gemini-3.7-flash"},"hy3-preview":{"id":"hy3-preview","name":"Hy3 Preview","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":128000},"status":"deprecated","cost":{"input":0.17,"output":0.566661,"cache_read":0.051},"canonical_model_id":"tencent/hy3-preview"},"nemotron-3-super-120b-a12b-free":{"id":"nemotron-3-super-120b-a12b-free","name":"Nemotron 3 Super 120B A12B (free)","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"},"nemotron-3.5-content-safety-free":{"id":"nemotron-3.5-content-safety-free","name":"Nemotron 3.5 Content Safety (free)","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"interleaved":{"field":"reasoning_details"},"temperature":true,"release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3.5-content-safety"},"qwen3.5-122b-a10b":{"id":"qwen3.5-122b-a10b","name":"Qwen3.5 122B-A10B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.1126,"output":0.9008,"tiers":[{"input":0.2818,"output":2.2544,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"claude-haiku-4-5":{"id":"claude-haiku-4-5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1.1,"output":5.5,"cache_read":0.11,"cache_write":1.375},"canonical_model_id":"anthropic/claude-haiku-4-5"},"claude-opus-4-7-think":{"id":"claude-opus-4-7-think","name":"Claude Opus 4.7 Thinking","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"}}},"klokintegration":{"id":"klokintegration","env":["KLOKINTEGRATION_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api-gw.klok.ipaas.se/proxy/kloker-key/v1","name":"klokintegration.se","doc":"https://klokintegration.se/docs/ai-api","models":{"Kloker-Integration-Architect":{"id":"Kloker-Integration-Architect","name":"Kloker Integration Architect","description":"Knows the customer integration environment and Klok best practices. Opinionated about structure. The gateway runs ecosystem lookup tools server-side and appends a system-prompt injection (data contracts, CloudEvents, event-driven flows). Client system prompts and OpenAI tool calls are preserved.","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-29","last_updated":"2026-08-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":50000},"status":"beta","cost":{"input":0.23,"output":1.16}},"Kloker":{"id":"Kloker","name":"Kloker","description":"Cheap general model with a clean context. Nothing from the customer environment is packed in. It tracks the current best open source model. The Klok team verifies it and upgrades it periodically.","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-29","last_updated":"2026-08-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":50000},"status":"beta","cost":{"input":0.23,"output":1.16}},"Kloker-Integration-Developer":{"id":"Kloker-Integration-Developer","name":"Kloker Integration Developer","description":"Knows the customer integration environment and Klok best practices. Opinionated about implementation. The gateway runs ecosystem lookup tools server-side and appends a system-prompt injection. Client system prompts and OpenAI tool calls are preserved.","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-29","last_updated":"2026-08-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":50000},"status":"beta","cost":{"input":0.23,"output":1.16}}}},"modelis":{"id":"modelis","env":["MODELIS_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://modelishub.com/v1","name":"Modelis","doc":"https://modelishub.com/pricing","models":{"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["minimal","low","medium","high","max"]},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5},"canonical_model_id":"google/gemini-2.5-flash"},"gemini-2.5-pro":{"id":"gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.25,"output":10},"canonical_model_id":"google/gemini-2.5-pro"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.435,"output":0.87},"canonical_model_id":"deepseek/deepseek-v4-pro"},"claude-fable-5":{"id":"claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50},"canonical_model_id":"anthropic/claude-fable-5"},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.0983,"output":0.1966},"canonical_model_id":"deepseek/deepseek-v4-flash"},"claude-opus-4-8":{"id":"claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25},"canonical_model_id":"anthropic/claude-opus-4-8"},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"qwen/qwen3.7-plus":{"id":"qwen/qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.768,"output":3.072},"canonical_model_id":"alibaba/qwen3.7-plus"},"qwen/qwen3.7-max":{"id":"qwen/qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":3,"output":9},"canonical_model_id":"alibaba/qwen3.7-max"}}},"standardcompute":{"id":"standardcompute","env":["STANDARDCOMPUTE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.stdcmpt.com/v1","name":"Standard Compute","doc":"https://docs.standardcompute.com/models","models":{"standardcompute":{"id":"standardcompute","name":"Standard Compute","description":"Flat-rate smart-routing gateway: one model id, each request routed across the customer's enabled models from a curated ~1M-context catalog (Claude, GPT, Gemini, DeepSeek, GLM, Qwen, Kimi, MiniMax, Grok, MiMo) or pinned to a user-selected model","family":"auto","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"release_date":"2026-03-01","last_updated":"2026-10-31","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"}},"anthropic/claude-opus-5.5":{"id":"anthropic/claude-opus-5.5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"anthropic/claude-sonnet-5":{"id":"anthropic/claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"anthropic/claude-fable-5.1":{"id":"anthropic/claude-fable-5.1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"anthropic/claude-fable-5":{"id":"anthropic/claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"anthropic/claude-opus-5":{"id":"anthropic/claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"anthropic/claude-sonnet-5.5":{"id":"anthropic/claude-sonnet-5.5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"anthropic/claude-haiku-5.5":{"id":"anthropic/claude-haiku-5.5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"x-ai/grok-4.3":{"id":"x-ai/grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":850000,"output":30000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.3"},"deepseek/deepseek-v4-pro-0813":{"id":"deepseek/deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":1.122,"output":3.366,"cache_read":0.1122},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"deepseek/deepseek-v4.1-flash":{"id":"deepseek/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":0.14,"output":0.42,"cache_read":0.0042},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":1.044,"output":2.088,"cache_read":0.2088},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-v4-flash":{"id":"deepseek/deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":0.0826,"output":0.1652,"cache_read":0.01652},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek/deepseek-v4-flash-0731":{"id":"deepseek/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":0.44,"output":1.32,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"google/gemini-2.5-flash":{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":0,"max":24576}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"cache_write":0.083333},"canonical_model_id":"google/gemini-2.5-flash"},"google/gemini-3.8-flash":{"id":"google/gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"cache_write":0.041667},"canonical_model_id":"google/gemini-3.8-flash"},"google/gemini-2.5-pro":{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":1.25,"output":10,"cache_read":0.125,"cache_write":0.375,"tiers":[{"input":2.5,"output":15,"cache_read":0.25,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":15,"cache_read":0.25}},"canonical_model_id":"google/gemini-2.5-pro"},"google/gemini-3.1-pro-preview":{"id":"google/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":0.375,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"google/gemini-3.5-flash-lite":{"id":"google/gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"cache_write":0.083333},"canonical_model_id":"google/gemini-3.5-flash-lite"},"qwen/qwen3.8-27b":{"id":"qwen/qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":0.425,"output":2.55,"cache_read":0.085,"cache_write":0.53125},"canonical_model_id":"alibaba/qwen3.8-27b"},"qwen/qwen3.8-flash":{"id":"qwen/qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":0.15,"output":0.47,"cache_read":0.016,"cache_write":0.2},"canonical_model_id":"alibaba/qwen3.8-flash"},"qwen/qwen3.8-max-0902":{"id":"qwen/qwen3.8-max-0902","name":"Qwen3.8 Max 0902","description":"2026-09-02 upgraded snapshot of Qwen3.8 Max with stronger coding, collaborative agents, and multimodal document understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max-0902"},"qwen/qwen3.7-plus":{"id":"qwen/qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":0.32,"output":1.28,"cache_read":0.064,"cache_write":0.4,"tiers":[{"input":0.96,"output":3.84,"cache_read":0.192,"cache_write":1.2,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":0.96,"output":3.84,"cache_read":0.192,"cache_write":1.2}},"canonical_model_id":"alibaba/qwen3.7-plus"},"qwen/qwen3.7-max":{"id":"qwen/qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":1.475,"output":4.425,"cache_read":0.295,"cache_write":1.84375},"canonical_model_id":"alibaba/qwen3.7-max"},"qwen/qwen3.7-flash":{"id":"qwen/qwen3.7-flash","name":"Qwen3.7 Flash","description":"Lightweight multimodal Qwen model for high-throughput text, image, and video tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":0.03,"output":0.13,"cache_read":0.006,"cache_write":0.038,"tiers":[{"input":0.1,"output":0.4,"cache_read":0.02,"cache_write":0.125,"tier":{"type":"context","size":32000}},{"input":0.2,"output":0.8,"cache_read":0.04,"cache_write":0.25,"tier":{"type":"context","size":256000}}]},"canonical_model_id":"alibaba/qwen3.7-flash"},"mistralai/mistral-large-4-0":{"id":"mistralai/mistral-large-4-0","name":"Mistral Large 4","description":"Mistral's 1T-parameter multimodal MoE for reasoning, coding, and agentic work","family":"mistral-large","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":0.68,"output":2.09,"cache_read":0.07},"canonical_model_id":"mistral/mistral-large-4"},"moonshotai/kimi-k3":{"id":"moonshotai/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"openai/gpt-5.6-sol":{"id":"openai/gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"openai/gpt-6-luna":{"id":"openai/gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"openai/gpt-6-astra":{"id":"openai/gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"openai/gpt-5.6-luna":{"id":"openai/gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-5.6-terra":{"id":"openai/gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"xiaomi/mimo-v2.6-pro":{"id":"xiaomi/mimo-v2.6-pro","name":"MiMo-V2.6-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":0.43,"output":0.87,"cache_read":0.0036},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"xiaomi/mimo-v2.6-flash":{"id":"xiaomi/mimo-v2.6-flash","name":"MiMo-V2.6-Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"xiaomi/mimo-v2.5":{"id":"xiaomi/mimo-v2.5","name":"MiMo-V2.5","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"xiaomi/mimo-v2.5"},"xiaomi/mimo-v2.5-pro":{"id":"xiaomi/mimo-v2.5-pro","name":"MiMo-V2.5-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":0.435,"output":0.87,"cache_read":0.0036},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"minimax/minimax-m3":{"id":"minimax/minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"},"z-ai/glm-5.2":{"id":"z-ai/glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":0.5625,"output":1.8,"cache_read":0.105},"canonical_model_id":"zhipuai/glm-5.2"},"z-ai/glm-5.3":{"id":"z-ai/glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"z-ai/glm-5.3-flash":{"id":"z-ai/glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":850000,"output":50000},"provider":{"npm":"@openrouter/ai-sdk-provider"},"cost":{"input":0.08,"output":0.5,"cache_read":0.012},"canonical_model_id":"zhipuai/glm-5.3-flash"}}},"inceptron":{"id":"inceptron","env":["INCEPTRON_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.inceptron.io/v1","name":"Inceptron","doc":"https://docs.inceptron.io","models":{"deepseek-ai/DeepSeek-V4-Flash-0731":{"id":"deepseek-ai/DeepSeek-V4-Flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.13,"output":0.495,"cache_read":0.027,"cache_write":0},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"moonshotai/Kimi-K2.7-Code":{"id":"moonshotai/Kimi-K2.7-Code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.6,"output":3.5,"cache_read":0.16,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"moonshotai/Kimi-K2.6":{"id":"moonshotai/Kimi-K2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.7995,"output":3.75,"cache_read":0.156,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k2.6"},"zai-org/GLM-5.3-Flash":{"id":"zai-org/GLM-5.3-Flash","name":"GLM 5.3 Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.175,"output":0.5,"cache_read":0.03,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai-org/GLM-5.2":{"id":"zai-org/GLM-5.2","name":"GLM 5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":1.4,"output":4.4,"cache_read":0.26,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.2"},"zai-org/GLM-5.3":{"id":"zai-org/GLM-5.3","name":"GLM 5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":1,"output":4.396,"cache_read":0.14,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3"}}},"vancine":{"id":"vancine","env":["VANCINE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://vancine.com/v1","name":"Vancine","doc":"https://vancine.com/docs","models":{"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":2.4,"output":12,"cache_read":0.24},"canonical_model_id":"moonshotai/kimi-k3"},"qwen3.8-flash":{"id":"qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.12,"output":0.38,"cache_read":0.013},"canonical_model_id":"alibaba/qwen3.8-flash"},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.24,"output":0.96,"cache_read":0.0048},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.12,"output":3.52,"cache_read":0.208},"canonical_model_id":"zhipuai/glm-5.3"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.12,"output":0.4,"cache_read":0.024},"canonical_model_id":"zhipuai/glm-5.3-flash"},"MiniMax-M3":{"id":"MiniMax-M3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":512000},"status":"deprecated","cost":{"input":0.24,"output":0.96,"cache_read":0.048},"canonical_model_id":"minimax/MiniMax-M3"},"hy4-preview":{"id":"hy4-preview","name":"Hy4 preview","description":"A next-generation productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-08-28","last_updated":"2026-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1024000,"output":64000},"cost":{"input":0.67,"output":2,"cache_read":0.034},"canonical_model_id":"tencent/hy4-preview"},"qwen3.8-max":{"id":"qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","min":0,"max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":1.6,"output":4.8,"cache_read":0.2},"canonical_model_id":"alibaba/qwen3.8-max"}}},"google-vertex-anthropic":{"id":"google-vertex-anthropic","env":["GOOGLE_VERTEX_PROJECT","GOOGLE_VERTEX_LOCATION","GOOGLE_APPLICATION_CREDENTIALS"],"npm":"@ai-sdk/google-vertex/anthropic","name":"Vertex (Anthropic)","doc":"https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/claude","models":{"claude-opus-4@20250514":{"id":"claude-opus-4@20250514","name":"Claude Opus 4","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"status":"deprecated","cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-20250514"},"claude-opus-5@default":{"id":"claude-opus-5@default","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"claude-sonnet-4-6@default":{"id":"claude-sonnet-4-6@default","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"claude-fable-5-1@default":{"id":"claude-fable-5-1@default","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"claude-opus-4-8@default":{"id":"claude-opus-4-8@default","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"claude-haiku-5-5@default":{"id":"claude-haiku-5-5@default","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"claude-opus-4-1@20250805":{"id":"claude-opus-4-1@20250805","name":"Claude Opus 4.1","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"status":"deprecated","cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-1-20250805"},"claude-opus-4-6@default":{"id":"claude-opus-4-6@default","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"claude-sonnet-5@default":{"id":"claude-sonnet-5@default","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"claude-sonnet-4@20250514":{"id":"claude-sonnet-4@20250514","name":"Claude Sonnet 4","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-20250514"},"claude-opus-4-5@20251101":{"id":"claude-opus-4-5@20251101","name":"Claude Opus 4.5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5-20251101"},"claude-fable-5@default":{"id":"claude-fable-5@default","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"claude-sonnet-4-5@20250929":{"id":"claude-sonnet-4-5@20250929","name":"Claude Sonnet 4.5","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5-20250929"},"claude-fable-5-2@default":{"id":"claude-fable-5-2@default","name":"Claude Fable 5.2","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":16,"output":80,"cache_read":0.4,"cache_write":20},"provider":{"body":{"speed":"fast"}}}}},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"claude-opus-5-5@default":{"id":"claude-opus-5-5@default","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"claude-opus-4-7@default":{"id":"claude-opus-4-7@default","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"claude-haiku-4-5@20251001":{"id":"claude-haiku-4-5@20251001","name":"Claude Haiku 4.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"claude-sonnet-5-5@default":{"id":"claude-sonnet-5-5@default","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"}}},"hpc-ai":{"id":"hpc-ai","env":["HPC_AI_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.hpc-ai.com/inference/v1","name":"HPC-AI","doc":"https://www.hpc-ai.com/doc/docs/quickstart/","models":{"anthropic/claude-opus-4.7":{"id":"anthropic/claude-opus-4.7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5},"canonical_model_id":"anthropic/claude-opus-4-7"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1002000,"output":128000},"cost":{"input":1.74,"output":3.48,"cache_read":0.145},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-v4-flash":{"id":"deepseek/deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":128000},"cost":{"input":0.14,"output":0.28,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash"},"moonshotai/kimi-k2.5":{"id":"moonshotai/kimi-k2.5","name":"Kimi K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.6,"output":3,"cache_read":0.1},"canonical_model_id":"moonshotai/kimi-k2.5"},"moonshotai/kimi-k2.7-code":{"id":"moonshotai/kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"openai/gpt-5.5":{"id":"openai/gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"minimax/minimax-m2.5":{"id":"minimax/minimax-m2.5","name":"MiniMax-M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196000,"output":195000},"cost":{"input":0.3,"output":1.2,"cache_read":0.03},"canonical_model_id":"minimax/MiniMax-M2.5"},"zai-org/glm-5.2":{"id":"zai-org/glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"zai-org/glm-5.1":{"id":"zai-org/glm-5.1","name":"GLM 5.1","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202000,"output":202000},"cost":{"input":0.615,"output":2.46,"cache_read":0.133},"canonical_model_id":"zhipuai/glm-5.1"}}},"cerebras":{"id":"cerebras","env":["CEREBRAS_API_KEY"],"npm":"@ai-sdk/cerebras","name":"Cerebras","doc":"https://inference-docs.cerebras.ai/models/overview","models":{"qwen-3.8-27b":{"id":"qwen-3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":40960},"cost":{"input":0.99,"output":1.49,"cache_read":0.99},"canonical_model_id":"alibaba/qwen3.8-27b"},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":40960},"cost":{"input":0.35,"output":0.75,"cache_read":0.35},"canonical_model_id":"openai/gpt-oss-120b"}}},"perplexity-agent":{"id":"perplexity-agent","env":["PERPLEXITY_API_KEY"],"npm":"@ai-sdk/openai","api":"https://api.perplexity.ai/v1","name":"Perplexity Agent","doc":"https://docs.perplexity.ai/docs/agent-api/models","models":{"anthropic/claude-sonnet-5-5":{"id":"anthropic/claude-sonnet-5-5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"anthropic/claude-fable-5-1":{"id":"anthropic/claude-fable-5-1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"anthropic/claude-opus-4-5":{"id":"anthropic/claude-opus-4-5","name":"Claude Opus 4.5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"anthropic/claude-sonnet-5":{"id":"anthropic/claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"anthropic/claude-fable-5":{"id":"anthropic/claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"anthropic/claude-opus-5":{"id":"anthropic/claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"anthropic/claude-opus-4-6":{"id":"anthropic/claude-opus-4-6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"anthropic/claude-opus-5-5":{"id":"anthropic/claude-opus-5-5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"anthropic/claude-sonnet-4-5":{"id":"anthropic/claude-sonnet-4-5","name":"Claude Sonnet 4.5","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"anthropic/claude-haiku-5-5":{"id":"anthropic/claude-haiku-5-5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"anthropic/claude-sonnet-4-6":{"id":"anthropic/claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"anthropic/claude-opus-4-7":{"id":"anthropic/claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"anthropic/claude-haiku-4-5":{"id":"anthropic/claude-haiku-4-5","name":"Claude Haiku 4.5","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"perplexity/nemotron-3.5-super-120b-a12b":{"id":"perplexity/nemotron-3.5-super-120b-a12b","name":"Nemotron 3.5 Super 120B A12B","description":"NVIDIA Nemotron 3.5 Super reasoning model (120B total, 12B active) served with text-only input","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.2,"output":0.5,"cache_read":0.04},"canonical_model_id":"nvidia/nemotron-3.5-super-120b-a12b"},"perplexity/kimi-k3":{"id":"perplexity/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"perplexity/deepseek-v4-pro-0813":{"id":"perplexity/deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":1.32,"output":3.96,"cache_read":0.044},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"perplexity/sonar":{"id":"perplexity/sonar","name":"Sonar","description":"Fast web-grounded Sonar for current answers, citations, and lightweight retrieval","family":"sonar","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-09-01","release_date":"2024-01-01","last_updated":"2025-09-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"cost":{"input":0.25,"output":2.5,"cache_read":0.0625},"canonical_model_id":"perplexity/sonar"},"perplexity/glm-5.3":{"id":"perplexity/glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"perplexity/glm-5.3-flash":{"id":"perplexity/glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"deepseek/deepseek-v4-flash-0731":{"id":"deepseek/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"deprecated","cost":{"input":0.13,"output":0.26,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"google/gemini-3.8-flash":{"id":"google/gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.8-flash"},"google/gemini-3.6-flash":{"id":"google/gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":7.5,"cache_read":0.15},"canonical_model_id":"google/gemini-3.6-flash"},"google/gemini-3.1-pro-preview":{"id":"google/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"google/gemini-4-argon":{"id":"google/gemini-4-argon","name":"Gemini 4 Argon","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":10,"cache_read":0.1},"canonical_model_id":"google/gemini-4-argon"},"google/gemini-3-flash-preview":{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.05,"tiers":[{"input":0.5,"output":3,"cache_read":0.05,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":0.5,"output":3,"cache_read":0.05}},"canonical_model_id":"google/gemini-3-flash-preview"},"google/gemini-3.7-flash":{"id":"google/gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.7-flash"},"moonshot-ai/kimi-k3":{"id":"moonshot-ai/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"moonshot-ai/kimi-k2.7-code":{"id":"moonshot-ai/kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"openai/gpt-5.5":{"id":"openai/gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"openai/gpt-5.5"},"openai/gpt-5.2":{"id":"openai/gpt-5.2","name":"GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"openai/gpt-5.6-sol":{"id":"openai/gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8}},"canonical_model_id":"openai/gpt-5.6-sol"},"openai/gpt-6-luna":{"id":"openai/gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02}},"canonical_model_id":"openai/gpt-6-luna"},"openai/gpt-6-sol":{"id":"openai/gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4}},"canonical_model_id":"openai/gpt-6-sol"},"openai/gpt-6-astra":{"id":"openai/gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2}},"canonical_model_id":"openai/gpt-6-astra"},"openai/gpt-5.1":{"id":"openai/gpt-5.1","name":"GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1"},"openai/gpt-5-mini":{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"openai/gpt-5.6-luna":{"id":"openai/gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04}},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-6.1-sol":{"id":"openai/gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2}},"canonical_model_id":"openai/gpt-6.1-sol"},"openai/gpt-5.4":{"id":"openai/gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"status":"deprecated","cost":{"input":2.5,"output":15,"cache_read":0.25},"canonical_model_id":"openai/gpt-5.4"},"openai/gpt-5.6-terra":{"id":"openai/gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"openai/gpt-5.6-terra"},"nvidia/nemotron-3-super-120b-a12b":{"id":"nvidia/nemotron-3-super-120b-a12b","name":"Nemotron 3 Super 120B","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"knowledge":"2026-02","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":32000},"status":"deprecated","cost":{"input":0.25,"output":2.5},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"},"xai/grok-4-1-fast-non-reasoning":{"id":"xai/grok-4-1-fast-non-reasoning","name":"Grok 4.1 Fast (Non-Reasoning)","description":"xAI's fast agentic tool-calling model with a 2M context window; non-reasoning variant for low-latency responses","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-07","release_date":"2025-11-19","last_updated":"2025-11-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"status":"deprecated","cost":{"input":0.2,"output":0.5,"cache_read":0.05},"canonical_model_id":"xai/grok-4.1-fast"},"xai/grok-4.5":{"id":"xai/grok-4.5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.3,"tiers":[{"input":4,"output":12,"cache_read":0.6,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":0.6}},"canonical_model_id":"xai/grok-4.5"},"xai/grok-4.7":{"id":"xai/grok-4.7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"cache_write":2,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.7"},"xai/grok-4.6":{"id":"xai/grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.6"}}},"engy":{"id":"engy","env":["ENGY_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.engy.ai/v1","name":"engy","doc":"https://engy.ai/pricing","models":{"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":229376,"output":32768},"cost":{"input":0.68,"output":1.5,"cache_read":0.18},"canonical_model_id":"zhipuai/glm-5.2"},"kimi-k3.1-pro":{"id":"kimi-k3.1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1113088,"input":1047552,"output":65536},"cost":{"input":1.4,"output":7,"cache_read":0.14},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1113088,"input":1047552,"output":65536},"cost":{"input":1.95,"output":9.75,"cache_read":0.195},"canonical_model_id":"moonshotai/kimi-k3"},"qwen3.8-27b":{"id":"qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1001536,"input":936000,"output":65536},"cost":{"input":0.045,"output":0.32,"cache_read":0.015},"canonical_model_id":"alibaba/qwen3.8-27b"},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":983040,"output":65536},"cost":{"input":0.03,"output":0.12,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":327680,"input":294912,"output":32768},"cost":{"input":0.98,"output":3.08,"cache_read":0.18},"canonical_model_id":"zhipuai/glm-5.3"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":327680,"input":294912,"output":32768},"cost":{"input":0.135,"output":0.45,"cache_read":0.027},"canonical_model_id":"zhipuai/glm-5.3-flash"},"qwen3.6-35b-a3b":{"id":"qwen3.6-35b-a3b","name":"Qwen3.6 35B-A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":208192,"input":200000,"output":8192},"cost":{"input":0.045,"output":0.3,"cache_read":0.015},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"deepseek-v4-flash-0731":{"id":"deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":920576,"output":128000},"cost":{"input":0.045,"output":0.09,"cache_read":0.009},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepseek-v4.1-flash-1017":{"id":"deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":983040,"output":65536},"cost":{"input":0.03,"output":0.12,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"}}},"poe":{"id":"poe","env":["POE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.poe.com/v1","name":"Poe","doc":"https://creator.poe.com/docs/external-applications/openai-compatible-api","models":{"anthropic/claude-sonnet-3.7":{"id":"anthropic/claude-sonnet-3.7","name":"Claude-Sonnet-3.7","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2024-10-31","release_date":"2025-02-19","last_updated":"2025-02-19","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":196608,"output":128000},"status":"deprecated","cost":{"input":2.6,"output":13,"cache_read":0.26,"cache_write":3.2},"canonical_model_id":"anthropic/claude-3-7-sonnet-20250219"},"anthropic/claude-opus-4.6":{"id":"anthropic/claude-opus-4.6","name":"Claude-Opus-4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"temperature":false,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":983040,"output":128000},"cost":{"input":4.2929,"output":21.4646,"cache_read":0.4293,"cache_write":5.3662},"canonical_model_id":"anthropic/claude-opus-4-6"},"anthropic/claude-opus-4.7":{"id":"anthropic/claude-opus-4.7","name":"Claude-Opus-4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":128000},"cost":{"input":4.2929,"output":21.4646,"cache_read":0.4293,"cache_write":5.3662},"canonical_model_id":"anthropic/claude-opus-4-7"},"anthropic/claude-opus-4.8":{"id":"anthropic/claude-opus-4.8","name":"Claude-Opus-4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":128000},"cost":{"input":4.2929,"output":21.4646,"cache_read":0.4293,"cache_write":5.3662},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic/claude-haiku-3":{"id":"anthropic/claude-haiku-3","name":"Claude-Haiku-3","description":"Legacy model retained for compatibility with older integrations","family":"claude-haiku","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2023-08-31","release_date":"2024-03-13","last_updated":"2024-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":189096,"output":8192},"status":"deprecated","cost":{"input":0.21,"output":1.1,"cache_read":0.021,"cache_write":0.26},"canonical_model_id":"anthropic/claude-3-haiku-20240307"},"anthropic/claude-opus-4.5":{"id":"anthropic/claude-opus-4.5","name":"Claude-Opus-4.5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":0,"max":63999}],"tool_call":true,"temperature":false,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":196608,"output":64000},"cost":{"input":4.2929,"output":21.4646,"cache_read":0.4293,"cache_write":5.3662},"canonical_model_id":"anthropic/claude-opus-4-5"},"anthropic/claude-haiku-4.5":{"id":"anthropic/claude-haiku-4.5","name":"Claude-Haiku-4.5","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":0,"max":63999}],"tool_call":true,"temperature":false,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":192000,"output":64000},"cost":{"input":0.8586,"output":4.2929,"cache_read":0.0859,"cache_write":1.0732},"canonical_model_id":"anthropic/claude-haiku-4-5"},"anthropic/claude-sonnet-3.5":{"id":"anthropic/claude-sonnet-3.5","name":"Claude-Sonnet-3.5","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2024-04-30","release_date":"2024-10-22","last_updated":"2024-10-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":189096,"output":8192},"status":"deprecated","cost":{"input":2.6,"output":13,"cache_read":0.26,"cache_write":3.2},"canonical_model_id":"anthropic/claude-3-5-sonnet-20241022"},"anthropic/claude-haiku-3.5":{"id":"anthropic/claude-haiku-3.5","name":"Claude-Haiku-3.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2024-07-31","release_date":"2024-10-22","last_updated":"2024-10-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":189096,"output":8192},"status":"deprecated","cost":{"input":0.68,"output":3.4,"cache_read":0.068,"cache_write":0.85},"canonical_model_id":"anthropic/claude-3-5-haiku-20241022"},"anthropic/claude-sonnet-4.5":{"id":"anthropic/claude-sonnet-4.5","name":"Claude-Sonnet-4.5","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":0,"max":31999}],"tool_call":true,"temperature":false,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":983040,"output":32768},"cost":{"input":2.5758,"output":12.8788,"cache_read":0.2576,"cache_write":3.2197},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"anthropic/claude-opus-4.1":{"id":"anthropic/claude-opus-4.1","name":"Claude-Opus-4.1","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":0,"max":31999}],"tool_call":true,"temperature":false,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":196608,"output":32000},"status":"deprecated","cost":{"input":13,"output":64,"cache_read":1.3,"cache_write":16},"canonical_model_id":"anthropic/claude-opus-4-1"},"anthropic/claude-sonnet-4.6":{"id":"anthropic/claude-sonnet-4.6","name":"Claude-Sonnet-4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":983040,"output":128000},"cost":{"input":2.5758,"output":12.8788,"cache_read":0.2576,"cache_write":3.2197},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"anthropic/claude-sonnet-4":{"id":"anthropic/claude-sonnet-4","name":"Claude-Sonnet-4","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2025-03-31","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":983040,"output":64000},"status":"deprecated","cost":{"input":2.6,"output":13,"cache_read":0.26,"cache_write":3.2},"canonical_model_id":"anthropic/claude-sonnet-4-0"},"anthropic/claude-opus-4":{"id":"anthropic/claude-opus-4","name":"Claude-Opus-4","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2025-03-31","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":192512,"output":28672},"status":"deprecated","cost":{"input":13,"output":64,"cache_read":1.3,"cache_write":16},"canonical_model_id":"anthropic/claude-opus-4-0"},"anthropic/claude-sonnet-3.5-june":{"id":"anthropic/claude-sonnet-3.5-june","name":"Claude-Sonnet-3.5-June","description":"Legacy model retained for compatibility with older integrations","family":"claude-sonnet","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2024-11-18","last_updated":"2024-11-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":189096,"output":8192},"status":"deprecated","cost":{"input":2.6,"output":13,"cache_read":0.26,"cache_write":3.2}},"elevenlabs/elevenlabs-v3":{"id":"elevenlabs/elevenlabs-v3","type":"speech","name":"ElevenLabs-v3","description":"Expressive text-to-speech model with inline audio tags across 70+ languages","family":"elevenlabs","attachment":false,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-08-20","last_updated":"2025-08-20","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":128000,"output":0},"canonical_model_id":"elevenlabs/eleven_v3"},"elevenlabs/elevenlabs-music":{"id":"elevenlabs/elevenlabs-music","name":"ElevenLabs-Music","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"elevenlabs","attachment":false,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-08-29","last_updated":"2025-08-29","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":2000,"output":0}},"elevenlabs/elevenlabs-v2.5-turbo":{"id":"elevenlabs/elevenlabs-v2.5-turbo","type":"speech","name":"ElevenLabs-v2.5-Turbo","description":"Low-latency multilingual text-to-speech model, superseded by Flash v2.5","family":"elevenlabs","attachment":false,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2024-07-19","last_updated":"2024-07-19","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":128000,"output":0},"canonical_model_id":"elevenlabs/eleven_turbo_v2_5"},"empiriolabs/deepseek-v4-flash-el":{"id":"empiriolabs/deepseek-v4-flash-el","name":"DeepSeek-V4-Flash-EL","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":384000},"cost":{"input":0.14,"output":0.28},"canonical_model_id":"deepseek/deepseek-v4-flash"},"empiriolabs/deepseek-v4-pro-el":{"id":"empiriolabs/deepseek-v4-pro-el","name":"DeepSeek-V4-Pro-EL","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":384000},"cost":{"input":1.67,"output":3.33},"canonical_model_id":"deepseek/deepseek-v4-pro"},"ideogramai/ideogram-v2a":{"id":"ideogramai/ideogram-v2a","type":"image","name":"Ideogram-v2a","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"ideogram","attachment":false,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-02-27","last_updated":"2025-02-27","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":150,"output":0}},"ideogramai/ideogram-v2a-turbo":{"id":"ideogramai/ideogram-v2a-turbo","type":"image","name":"Ideogram-v2a-Turbo","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"ideogram","attachment":false,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-02-27","last_updated":"2025-02-27","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":150,"output":0}},"ideogramai/ideogram":{"id":"ideogramai/ideogram","type":"image","name":"Ideogram","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"ideogram","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2024-04-03","last_updated":"2024-04-03","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":150,"output":0}},"ideogramai/ideogram-v2":{"id":"ideogramai/ideogram-v2","type":"image","name":"Ideogram-v2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"ideogram","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2024-08-21","last_updated":"2024-08-21","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":150,"output":0}},"fireworks-ai/kimi-k2.5-fw":{"id":"fireworks-ai/kimi-k2.5-fw","name":"Kimi-K2.5-FW","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":245760,"output":16384},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"moonshotai/kimi-k2.5"},"google/gemini-2.0-flash":{"id":"google/gemini-2.0-flash","name":"Gemini-2.0-Flash","description":"Earlier Gemini Flash workhorse for responsive multimodal apps and tool use","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2024-06","release_date":"2024-12-11","last_updated":"2024-12-11","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":990000,"output":8192},"status":"deprecated","cost":{"input":0.1,"output":0.42},"canonical_model_id":"google/gemini-2.0-flash"},"google/imagen-4-ultra":{"id":"google/imagen-4-ultra","type":"image","name":"Imagen-4-Ultra","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"imagen","attachment":false,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-05-24","last_updated":"2025-05-24","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":480,"output":0},"status":"deprecated"},"google/gemini-2.5-flash":{"id":"google/gemini-2.5-flash","name":"Gemini-2.5-Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":0,"max":24576}],"tool_call":true,"temperature":false,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1065535,"output":65535},"status":"deprecated","cost":{"input":0.21,"output":1.8,"cache_read":0.021},"canonical_model_id":"google/gemini-2.5-flash"},"google/gemini-3.8-flash":{"id":"google/gemini-3.8-flash","name":"Gemini-3.8-Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.7576,"output":3.7879,"cache_read":0.0758},"canonical_model_id":"google/gemini-3.8-flash"},"google/gemini-2.0-flash-lite":{"id":"google/gemini-2.0-flash-lite","name":"Gemini-2.0-Flash-Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2024-06","release_date":"2024-12-11","last_updated":"2024-12-11","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":990000,"output":8192},"status":"deprecated","cost":{"input":0.052,"output":0.21},"canonical_model_id":"google/gemini-2.0-flash-lite"},"google/veo-3.1-fast":{"id":"google/veo-3.1-fast","type":"video","name":"Veo-3.1-Fast","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"veo","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image"],"output":["video"]},"open_weights":false,"limit":{"context":480,"output":0}},"google/veo-3":{"id":"google/veo-3","type":"video","name":"Veo-3","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"veo","attachment":false,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-05-21","last_updated":"2025-05-21","modalities":{"input":["text"],"output":["video"]},"open_weights":false,"limit":{"context":480,"output":0},"status":"deprecated"},"google/imagen-3":{"id":"google/imagen-3","type":"image","name":"Imagen-3","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"imagen","attachment":false,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2024-10-15","last_updated":"2024-10-15","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":480,"output":0},"status":"deprecated"},"google/gemma-4-31b":{"id":"google/gemma-4-31b","name":"Gemma-4-31B","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"google/gemma-4-31b-it"},"google/gemini-deep-research":{"id":"google/gemini-deep-research","name":"gemini-deep-research","description":"Legacy model retained for compatibility with older integrations","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":0},"status":"deprecated","cost":{"input":1.6,"output":9.6}},"google/gemini-2.5-pro":{"id":"google/gemini-2.5-pro","name":"Gemini-2.5-Pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":0,"max":32768}],"tool_call":true,"temperature":false,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1065535,"output":65535},"status":"deprecated","cost":{"input":0.87,"output":7,"cache_read":0.087},"canonical_model_id":"google/gemini-2.5-pro"},"google/gemini-3.5-flash":{"id":"google/gemini-3.5-flash","name":"Gemini-3.5-Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5152,"output":9.0909,"cache_read":0.1515},"canonical_model_id":"google/gemini-3.5-flash"},"google/nano-banana":{"id":"google/nano-banana","type":"image","name":"Nano-Banana","description":"Nano Banana image model for fast generation, edits, and character-consistent assets","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2024-06","release_date":"2025-08-26","last_updated":"2025-08-26","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":0},"status":"deprecated","cost":{"input":0.21,"output":1.8,"cache_read":0.021},"canonical_model_id":"google/gemini-2.5-flash-image"},"google/gemini-3.6-flash":{"id":"google/gemini-3.6-flash","name":"Gemini-3.6-Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.7576,"output":3.7879,"cache_read":0.0758},"canonical_model_id":"google/gemini-3.6-flash"},"google/veo-2":{"id":"google/veo-2","type":"video","name":"Veo-2","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"veo","attachment":false,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2024-12-02","last_updated":"2024-12-02","modalities":{"input":["text"],"output":["video"]},"open_weights":false,"limit":{"context":480,"output":0},"status":"deprecated"},"google/nano-banana-pro":{"id":"google/nano-banana-pro","type":"image","name":"Nano-Banana-Pro","description":"Nano Banana Pro for higher-fidelity image generation and design-heavy edits","family":"gemini-pro","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2025-01","release_date":"2025-11-20","last_updated":"2025-11-20","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":65536,"output":0},"cost":{"input":2.0202,"output":12.1212,"cache_read":0.202},"canonical_model_id":"google/gemini-3-pro-image-preview"},"google/veo-3-fast":{"id":"google/veo-3-fast","type":"video","name":"Veo-3-Fast","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"veo","attachment":false,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-10-13","last_updated":"2025-10-13","modalities":{"input":["text"],"output":["video"]},"open_weights":false,"limit":{"context":480,"output":0},"status":"deprecated"},"google/imagen-3-fast":{"id":"google/imagen-3-fast","type":"image","name":"Imagen-3-Fast","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"imagen","attachment":false,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2024-10-17","last_updated":"2024-10-17","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":480,"output":0},"status":"deprecated"},"google/gemini-3.1-flash-lite":{"id":"google/gemini-3.1-flash-lite","name":"Gemini-3.1-Flash-Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.2525,"output":1.5152},"canonical_model_id":"google/gemini-3.1-flash-lite"},"google/gemini-2.5-flash-lite":{"id":"google/gemini-2.5-flash-lite","name":"Gemini-2.5-Flash-Lite","description":"Lean Gemini 2.5 lane for cheap multimodal traffic and quick agents","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":0,"max":24576}],"tool_call":true,"temperature":false,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1024000,"output":64000},"status":"deprecated","cost":{"input":0.07,"output":0.28},"canonical_model_id":"google/gemini-2.5-flash-lite"},"google/imagen-4":{"id":"google/imagen-4","type":"image","name":"Imagen-4","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"imagen","attachment":false,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":480,"output":0}},"google/gemini-3.5-flash-lite":{"id":"google/gemini-3.5-flash-lite","name":"Gemini-3.5-Flash-Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.303,"output":2.5253,"cache_read":0.0303},"canonical_model_id":"google/gemini-3.5-flash-lite"},"google/gemini-3-flash":{"id":"google/gemini-3-flash","name":"Gemini-3-Flash","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.404,"output":2.4242,"cache_read":0.0404},"canonical_model_id":"google/gemini-3-flash-preview"},"google/gemini-omni-1.1-flash":{"id":"google/gemini-omni-1.1-flash","type":"video","name":"Gemini-Omni-1.1-Flash","description":"Video generation and editing model for scene extension, frame interpolation, and reference-guided multimodal control","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":false,"release_date":"2026-08-27","last_updated":"2026-08-27","modalities":{"input":["text","image","video"],"output":["video"]},"open_weights":false,"limit":{"context":131072,"output":57920},"cost":{"input":1.5152,"output":9.0909},"canonical_model_id":"google/gemini-omni-1.1-flash"},"google/imagen-4-fast":{"id":"google/imagen-4-fast","type":"image","name":"Imagen-4-Fast","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"imagen","attachment":false,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-06-25","last_updated":"2025-06-25","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":480,"output":0}},"google/veo-3.1":{"id":"google/veo-3.1","type":"video","name":"Veo-3.1","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"veo","attachment":false,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text"],"output":["video"]},"open_weights":false,"limit":{"context":480,"output":0}},"google/gemini-3.7-flash":{"id":"google/gemini-3.7-flash","name":"Gemini-3.7-Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.7576,"output":3.7879,"cache_read":0.0758},"canonical_model_id":"google/gemini-3.7-flash"},"google/gemini-3.1-pro":{"id":"google/gemini-3.1-pro","name":"Gemini-3.1-Pro","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2.0202,"output":12.1212,"cache_read":0.202},"canonical_model_id":"google/gemini-3.1-pro-preview"},"google/lyria":{"id":"google/lyria","name":"Lyria","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"lyria","attachment":false,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-06-04","last_updated":"2025-06-04","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":0,"output":0}},"runwayml/runway-gen-4-turbo":{"id":"runwayml/runway-gen-4-turbo","type":"video","name":"Runway-Gen-4-Turbo","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"runway","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-05-09","last_updated":"2025-05-09","modalities":{"input":["text","image"],"output":["video"]},"open_weights":false,"limit":{"context":256,"output":0},"status":"deprecated"},"runwayml/runway":{"id":"runwayml/runway","type":"video","name":"Runway","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"runway","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2024-10-11","last_updated":"2024-10-11","modalities":{"input":["text","image"],"output":["video"]},"open_weights":false,"limit":{"context":256,"output":0},"status":"deprecated"},"topazlabs-co/topazlabs":{"id":"topazlabs-co/topazlabs","type":"image","name":"TopazLabs","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"topazlabs","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":204,"output":0}},"poetools/claude-code":{"id":"poetools/claude-code","name":"claude-code","description":"Claude model for careful reasoning, writing, coding, and tool use","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]},{"type":"budget_tokens"}],"tool_call":true,"temperature":false,"release_date":"2025-11-27","last_updated":"2025-11-27","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":0,"output":0}},"openai/gpt-5.2-pro":{"id":"openai/gpt-5.2-pro","name":"GPT-5.2-Pro","description":"Higher-accuracy GPT-5.2 variant for tougher reasoning and review workflows","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":19.0909,"output":152.7273},"canonical_model_id":"openai/gpt-5.2-pro"},"openai/gpt-5.5":{"id":"openai/gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":400000,"input":922000,"output":128000},"cost":{"input":4.5455,"output":27.2727,"cache_read":0.4545},"canonical_model_id":"openai/gpt-5.5"},"openai/o3-deep-research":{"id":"openai/o3-deep-research","name":"o3-deep-research","description":"Research model for long-horizon investigation, synthesis, and analytical reports","family":"o","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-06-26","last_updated":"2025-06-26","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"status":"deprecated","cost":{"input":9,"output":36,"cache_read":2.2},"canonical_model_id":"openai/o3-deep-research"},"openai/gpt-4.1-nano":{"id":"openai/gpt-4.1-nano","name":"GPT-4.1-nano","description":"Tiny GPT-4.1 option for classification, routing, and very high-volume tasks","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"status":"deprecated","cost":{"input":0.09,"output":0.36,"cache_read":0.022},"canonical_model_id":"openai/gpt-4.1-nano"},"openai/gpt-3.5-turbo-instruct":{"id":"openai/gpt-3.5-turbo-instruct","name":"GPT-3.5-Turbo-Instruct","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2023-09-20","last_updated":"2023-09-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":3500,"output":1024},"status":"deprecated","cost":{"input":1.4,"output":1.8}},"openai/gpt-5.2":{"id":"openai/gpt-5.2","name":"GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.5909,"output":12.7273,"cache_read":0.1591},"canonical_model_id":"openai/gpt-5.2"},"openai/o1":{"id":"openai/o1","name":"o1","description":"O-series reasoning model for hard analysis, math, coding, and planning","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2023-09","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"status":"deprecated","cost":{"input":14,"output":54},"canonical_model_id":"openai/o1"},"openai/gpt-4.1-mini":{"id":"openai/gpt-4.1-mini","name":"GPT-4.1-mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.3636,"output":1.4545,"cache_read":0.0909},"canonical_model_id":"openai/gpt-4.1-mini"},"openai/o4-mini":{"id":"openai/o4-mini","name":"o4-mini","description":"Fast o-series model for compact reasoning, coding, and tool use","family":"o-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"status":"deprecated","cost":{"input":0.99,"output":4,"cache_read":0.25},"canonical_model_id":"openai/o4-mini"},"openai/gpt-5.2-codex":{"id":"openai/gpt-5.2-codex","name":"GPT-5.2-Codex","description":"Code-specialist GPT for repository edits, reviews, and long-running software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":1.6,"output":13,"cache_read":0.16},"canonical_model_id":"openai/gpt-5.2-codex"},"openai/gpt-5.4-mini":{"id":"openai/gpt-5.4-mini","name":"GPT-5.4-Mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.6818,"output":4.0909,"cache_read":0.0682},"canonical_model_id":"openai/gpt-5.4-mini"},"openai/o1-pro":{"id":"openai/o1-pro","name":"o1-pro","description":"O-series reasoning model for hard analysis, math, coding, and planning","family":"o-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2023-09","release_date":"2025-03-19","last_updated":"2025-03-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"status":"deprecated","cost":{"input":140,"output":540},"canonical_model_id":"openai/o1-pro"},"openai/gpt-5.3-instant":{"id":"openai/gpt-5.3-instant","name":"GPT-5.3-Instant","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-03","last_updated":"2026-03-03","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":111616,"output":16384},"status":"deprecated","cost":{"input":1.6,"output":13,"cache_read":0.16},"canonical_model_id":"openai/gpt-5.3-chat-latest"},"openai/sora-2-pro":{"id":"openai/sora-2-pro","type":"video","name":"Sora-2-Pro","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"sora","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","image"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"status":"deprecated"},"openai/gpt-4o-aug":{"id":"openai/gpt-4o-aug","name":"GPT-4o-Aug","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2023-09","release_date":"2024-08-06","last_updated":"2024-08-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"cost":{"input":2.2727,"output":9.0909,"cache_read":1.1364},"canonical_model_id":"openai/gpt-4o-2024-08-06"},"openai/gpt-5":{"id":"openai/gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.1364,"output":9.0909,"cache_read":0.1136},"canonical_model_id":"openai/gpt-5"},"openai/sora-2":{"id":"openai/sora-2","type":"video","name":"Sora-2","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"sora","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","image"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"status":"deprecated"},"openai/gpt-5.1-codex-max":{"id":"openai/gpt-5.1-codex-max","name":"GPT-5.1-Codex-Max","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":1.1,"output":9,"cache_read":0.11},"canonical_model_id":"openai/gpt-5.1-codex-max"},"openai/gpt-5.1-codex":{"id":"openai/gpt-5.1-codex","name":"GPT-5.1-Codex","description":"Codex GPT for repository edits, code review, and practical software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":1.1,"output":9,"cache_read":0.11},"canonical_model_id":"openai/gpt-5.1-codex"},"openai/gpt-image-1-mini":{"id":"openai/gpt-image-1-mini","type":"image","name":"GPT-Image-1-Mini","description":"Cost-efficient GPT Image 1 variant for image generation and editing","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"canonical_model_id":"openai/gpt-image-1-mini"},"openai/gpt-5-chat":{"id":"openai/gpt-5-chat","name":"GPT-5-Chat","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":272000,"output":16384},"status":"deprecated","cost":{"input":1.1,"output":9,"cache_read":0.11},"canonical_model_id":"openai/gpt-5-chat-latest"},"openai/gpt-3.5-turbo-raw":{"id":"openai/gpt-3.5-turbo-raw","name":"GPT-3.5-Turbo-Raw","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2021-09-01","release_date":"2023-03-01","last_updated":"2023-11-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":4524,"output":2048},"status":"deprecated","cost":{"input":0.45,"output":1.4},"canonical_model_id":"openai/gpt-3.5-turbo"},"openai/gpt-4.1":{"id":"openai/gpt-4.1","name":"GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":1.8182,"output":7.2727,"cache_read":0.4545},"canonical_model_id":"openai/gpt-4.1"},"openai/o3":{"id":"openai/o3","name":"o3","description":"Deliberate o-series reasoner for hard math, coding, and multi-step analysis","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":1.8182,"output":7.2727,"cache_read":0.4545},"canonical_model_id":"openai/o3"},"openai/gpt-image-2":{"id":"openai/gpt-image-2","type":"image","name":"GPT-Image-2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-21","last_updated":"2026-04-21","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":5.0505,"output":30.303,"cache_read":1.2626},"canonical_model_id":"openai/gpt-image-2"},"openai/o3-mini":{"id":"openai/o3-mini","name":"o3-mini","description":"Smaller o-series reasoner for economical coding, math, and planning tasks","family":"o-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-05","release_date":"2024-12-20","last_updated":"2025-01-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"status":"deprecated","cost":{"input":0.99,"output":4},"canonical_model_id":"openai/o3-mini"},"openai/gpt-5.1-instant":{"id":"openai/gpt-5.1-instant","name":"GPT-5.1-Instant","description":"Chat-tuned GPT-5.1 for polished assistants, writing, and product conversations","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"status":"deprecated","cost":{"input":1.1,"output":9,"cache_read":0.11},"canonical_model_id":"openai/gpt-5.1-chat-latest"},"openai/gpt-5.3-codex-spark":{"id":"openai/gpt-5.3-codex-spark","name":"GPT-5.3-Codex-Spark","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex-spark","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":100000,"output":16384},"cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-5.3-codex-spark"},"openai/gpt-5-pro":{"id":"openai/gpt-5-pro","name":"GPT-5-Pro","description":"Higher-accuracy GPT-5 tier for tough analysis, coding reviews, and planning","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":13.6364,"output":109.0909},"canonical_model_id":"openai/gpt-5-pro"},"openai/gpt-image-1.5":{"id":"openai/gpt-image-1.5","type":"image","name":"gpt-image-1.5","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-11-25","last_updated":"2025-11-25","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":128000,"output":0},"canonical_model_id":"openai/gpt-image-1.5"},"openai/gpt-5.3-codex":{"id":"openai/gpt-5.3-codex","name":"GPT-5.3-Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.5909,"output":12.7273,"cache_read":0.1591},"canonical_model_id":"openai/gpt-5.3-codex"},"openai/chatgpt-4o-latest":{"id":"openai/chatgpt-4o-latest","name":"ChatGPT-4o-Latest","description":"Legacy model retained for compatibility with older integrations","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2024-08-14","last_updated":"2024-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"status":"deprecated","cost":{"input":4.5,"output":14}},"openai/o4-mini-deep-research":{"id":"openai/o4-mini-deep-research","name":"o4-mini-deep-research","description":"Research model for long-horizon investigation, synthesis, and analytical reports","family":"o-mini","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-06-26","last_updated":"2025-06-26","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"status":"deprecated","cost":{"input":1.8,"output":7.2,"cache_read":0.45},"canonical_model_id":"openai/o4-mini-deep-research"},"openai/gpt-5.1":{"id":"openai/gpt-5.1","name":"GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.1364,"output":9.0909,"cache_read":0.1136},"canonical_model_id":"openai/gpt-5.1"},"openai/gpt-5-mini":{"id":"openai/gpt-5-mini","name":"GPT-5-mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2273,"output":1.8182,"cache_read":0.0227},"canonical_model_id":"openai/gpt-5-mini"},"openai/gpt-5.1-codex-mini":{"id":"openai/gpt-5.1-codex-mini","name":"GPT-5.1-Codex-Mini","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":0.22,"output":1.8,"cache_read":0.022},"canonical_model_id":"openai/gpt-5.1-codex-mini"},"openai/gpt-5.5-pro":{"id":"openai/gpt-5.5-pro","name":"GPT-5.5-Pro","description":"Highest-accuracy GPT-5.5 tier for slower, precision-heavy reasoning and coding","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":400000,"input":922000,"output":128000},"cost":{"input":27.2727,"output":163.6364},"canonical_model_id":"openai/gpt-5.5-pro"},"openai/gpt-4o-mini-search":{"id":"openai/gpt-4o-mini-search","name":"GPT-4o-mini-Search","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-mini","attachment":false,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-03-11","last_updated":"2025-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"status":"deprecated","cost":{"input":0.14,"output":0.54}},"openai/o3-mini-high":{"id":"openai/o3-mini-high","name":"o3-mini-high","description":"Smaller o-series reasoner for economical coding, math, and planning tasks","family":"o-mini","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2024-05","release_date":"2024-12-20","last_updated":"2025-01-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"status":"deprecated","cost":{"input":0.99,"output":4},"canonical_model_id":"openai/o3-mini"},"openai/dall-e-3":{"id":"openai/dall-e-3","type":"image","name":"DALL-E-3","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"dall-e","attachment":false,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2023-11-06","last_updated":"2023-11-06","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":800,"output":0},"status":"deprecated"},"openai/gpt-5.4-pro":{"id":"openai/gpt-5.4-pro","name":"GPT-5.4-Pro","description":"More exact GPT-5.4 tier for demanding professional reasoning and agent tasks","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":27.2727,"output":163.6364},"canonical_model_id":"openai/gpt-5.4-pro"},"openai/gpt-5-nano":{"id":"openai/gpt-5-nano","name":"GPT-5-nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.0455,"output":0.3636,"cache_read":0.0045},"canonical_model_id":"openai/gpt-5-nano"},"openai/gpt-5.4":{"id":"openai/gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text","image"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.2727,"output":13.6364,"cache_read":0.2273},"canonical_model_id":"openai/gpt-5.4"},"openai/gpt-3.5-turbo":{"id":"openai/gpt-3.5-turbo","name":"GPT-3.5-Turbo","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2021-09-01","release_date":"2023-03-01","last_updated":"2023-11-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":16384,"output":2048},"status":"deprecated","cost":{"input":0.45,"output":1.4},"canonical_model_id":"openai/gpt-3.5-turbo"},"openai/gpt-4-turbo":{"id":"openai/gpt-4-turbo","name":"GPT-4-Turbo","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2023-12","release_date":"2023-11-06","last_updated":"2024-04-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"status":"deprecated","cost":{"input":9,"output":27},"canonical_model_id":"openai/gpt-4-turbo"},"openai/o3-pro":{"id":"openai/o3-pro","name":"o3-pro","description":"High-effort o3 tier for difficult technical reasoning and careful answers","family":"o-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-06-10","last_updated":"2025-06-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":18.1818,"output":72.7273},"canonical_model_id":"openai/o3-pro"},"openai/gpt-5.4-nano":{"id":"openai/gpt-5.4-nano","name":"GPT-5.4-Nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.1818,"output":1.1364,"cache_read":0.0182},"canonical_model_id":"openai/gpt-5.4-nano"},"openai/gpt-5.2-instant":{"id":"openai/gpt-5.2-instant","name":"GPT-5.2-Instant","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"status":"deprecated","cost":{"input":1.6,"output":13,"cache_read":0.16},"canonical_model_id":"openai/gpt-5.2-chat-latest"},"openai/gpt-4o":{"id":"openai/gpt-4o","name":"GPT-4o","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"canonical_model_id":"openai/gpt-4o"},"openai/gpt-5-codex":{"id":"openai/gpt-5-codex","name":"GPT-5-Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-09-15","last_updated":"2025-09-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":1.1,"output":9},"canonical_model_id":"openai/gpt-5-codex"},"openai/gpt-4o-mini":{"id":"openai/gpt-4o-mini","name":"GPT-4o-mini","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":124096,"output":4096},"cost":{"input":0.1364,"output":0.5455,"cache_read":0.0682},"canonical_model_id":"openai/gpt-4o-mini"},"openai/gpt-image-1":{"id":"openai/gpt-image-1","type":"image","name":"GPT-Image-1","description":"OpenAI image model for production generation, edits, and brand-safe visual workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-04-24","last_updated":"2025-04-24","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":128000,"output":0},"status":"deprecated","canonical_model_id":"openai/gpt-image-1"},"openai/gpt-4o-search":{"id":"openai/gpt-4o-search","name":"GPT-4o-Search","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":false,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-03-11","last_updated":"2025-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"cost":{"input":2.2727,"output":9.0909}},"novita/glm-4.7-n":{"id":"novita/glm-4.7-n","name":"glm-4.7-n","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":false,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":205000,"output":131072},"canonical_model_id":"zhipuai/glm-4.7"},"novita/kimi-k2.6":{"id":"novita/kimi-k2.6","name":"Kimi-K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":262144,"output":262144},"cost":{"input":0.9596,"output":4.0404,"cache_read":0.1616},"canonical_model_id":"moonshotai/kimi-k2.6"},"novita/minimax-m2.1":{"id":"novita/minimax-m2.1","name":"minimax-m2.1","description":"Earlier MiniMax agent model for practical coding and productivity tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":false,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":205000,"output":131072},"cost":{"input":0.303,"output":1.2121,"cache_read":0.1515},"canonical_model_id":"minimax/MiniMax-M2.1"},"novita/glm-4.6v":{"id":"novita/glm-4.6v","name":"glm-4.6v","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":false,"knowledge":"2025-04","release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":32768},"canonical_model_id":"zhipuai/glm-4.6v"},"novita/kimi-k2.5":{"id":"novita/kimi-k2.5","name":"Kimi-K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":262144},"status":"deprecated","cost":{"input":0.6,"output":3,"cache_read":0.1},"canonical_model_id":"moonshotai/kimi-k2.5"},"novita/glm-4.7":{"id":"novita/glm-4.7","name":"glm-4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":205000,"output":131072},"status":"deprecated","canonical_model_id":"zhipuai/glm-4.7"},"novita/kimi-k2-thinking":{"id":"novita/kimi-k2-thinking","name":"kimi-k2-thinking","description":"Thinking Kimi model for slower research passes, planning, and hard technical questions","family":"kimi-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":false,"knowledge":"2024-08","release_date":"2025-11-06","last_updated":"2025-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":0},"status":"deprecated","canonical_model_id":"moonshotai/kimi-k2-thinking"},"novita/glm-4.6":{"id":"novita/glm-4.6","name":"GLM-4.6","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":false,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":0,"output":0},"cost":{"input":0.6061,"output":2.2222,"cache_read":0.1111},"canonical_model_id":"zhipuai/glm-4.6"},"novita/deepseek-v3.2":{"id":"novita/deepseek-v3.2","name":"DeepSeek-V3.2","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes, sparse attention, and tool-use","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":0},"cost":{"input":0.2626,"output":0.3838,"cache_read":0.1313},"canonical_model_id":"deepseek/deepseek-v3.2"},"novita/glm-5":{"id":"novita/glm-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":205000,"output":131072},"cost":{"input":1,"output":3.2,"cache_read":0.2},"canonical_model_id":"zhipuai/glm-5"},"novita/glm-4.7-flash":{"id":"novita/glm-4.7-flash","name":"glm-4.7-flash","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":false,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":65500},"cost":{"input":0.0707,"output":0.404},"canonical_model_id":"zhipuai/glm-4.7-flash"},"cerebras/llama-3.3-70b-cs":{"id":"cerebras/llama-3.3-70b-cs","name":"llama-3.3-70b-cs","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":0,"output":0},"status":"deprecated","canonical_model_id":"meta/llama-3.3-70b-instruct"},"cerebras/llama-3.1-8b-cs":{"id":"cerebras/llama-3.1-8b-cs","name":"Llama-3.1-8B-CS","description":"Compact open Llama model for lightweight chat, drafting, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":0},"cost":{"input":0.1,"output":0.1},"canonical_model_id":"meta/llama-3.1-8b-instruct"},"cerebras/gpt-oss-120b-cs":{"id":"cerebras/gpt-oss-120b-cs","name":"GPT-OSS-120B-CS","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":0},"cost":{"input":0.3535,"output":0.7576},"canonical_model_id":"openai/gpt-oss-120b"},"cerebras/qwen3-235b-2507-cs":{"id":"cerebras/qwen3-235b-2507-cs","name":"qwen3-235b-2507-cs","description":"Updated large open Qwen3 MoE instruct model for multilingual chat, coding, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":0,"output":0},"status":"deprecated","canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"cerebras/qwen3-32b-cs":{"id":"cerebras/qwen3-32b-cs","name":"qwen3-32b-cs","description":"Dense open Qwen model for self-hosted chat, reasoning, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":0,"output":0},"status":"deprecated","canonical_model_id":"alibaba/qwen3-32b"},"stabilityai/stablediffusionxl":{"id":"stabilityai/stablediffusionxl","type":"image","name":"StableDiffusionXL","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"stable-diffusion","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2023-07-09","last_updated":"2023-07-09","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":200,"output":0}},"trytako/tako":{"id":"trytako/tako","name":"Tako","description":"Tool-capable chat model for instruction following and agentic application workflows","family":"tako","attachment":false,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2024-08-15","last_updated":"2024-08-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":2048,"output":0}},"xai/grok-4.1-fast-reasoning":{"id":"xai/grok-4.1-fast-reasoning","name":"Grok-4.1-Fast-Reasoning","description":"xAI's fast agentic tool-calling model with a 2M context window and built-in reasoning","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"release_date":"2025-11-19","last_updated":"2025-11-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"status":"deprecated","canonical_model_id":"xai/grok-4.1-fast-reasoning"},"xai/grok-4-fast-reasoning":{"id":"xai/grok-4-fast-reasoning","name":"Grok-4-Fast-Reasoning","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"release_date":"2025-12-18","last_updated":"2025-12-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":128000},"status":"deprecated","cost":{"input":0.2,"output":0.5,"cache_read":0.05},"canonical_model_id":"xai/grok-4-fast-reasoning"},"xai/grok-4":{"id":"xai/grok-4","name":"Grok-4","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"release_date":"2025-07-10","last_updated":"2025-07-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"status":"deprecated","cost":{"input":3,"output":15,"cache_read":0.75}},"xai/grok-3":{"id":"xai/grok-3","name":"Grok 3","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":false,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-04-11","last_updated":"2025-04-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":8192},"cost":{"input":3,"output":15,"cache_read":0.75}},"xai/grok-4.1-fast-non-reasoning":{"id":"xai/grok-4.1-fast-non-reasoning","name":"Grok-4.1-Fast-Non-Reasoning","description":"xAI's fast agentic tool-calling model with a 2M context window; non-reasoning variant for low-latency responses","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-11-19","last_updated":"2025-11-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"status":"deprecated","canonical_model_id":"xai/grok-4.1-fast"},"xai/grok-code-fast-1":{"id":"xai/grok-code-fast-1","name":"Grok Code Fast 1","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"release_date":"2025-09-02","last_updated":"2025-09-02","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"cost":{"input":0.2,"output":1.5,"cache_read":0.02},"canonical_model_id":"xai/grok-code-fast-1"},"xai/grok-4.20-multi-agent":{"id":"xai/grok-4.20-multi-agent","name":"Grok-4.20-Multi-Agent","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high"]}],"tool_call":true,"temperature":false,"release_date":"2026-03-13","last_updated":"2026-03-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":0},"cost":{"input":1.2626,"output":2.5253,"cache_read":0.202}},"xai/grok-4-fast-non-reasoning":{"id":"xai/grok-4-fast-non-reasoning","name":"Grok-4-Fast-Non-Reasoning","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-12-18","last_updated":"2025-12-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":128000},"status":"deprecated","cost":{"input":0.2,"output":0.5,"cache_read":0.05},"canonical_model_id":"xai/grok-4-fast-non-reasoning"},"xai/grok-3-mini":{"id":"xai/grok-3-mini","name":"Grok 3 Mini","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"release_date":"2025-04-11","last_updated":"2025-04-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":8192},"cost":{"input":0.3,"output":0.5,"cache_read":0.075}},"lumalabs/ray2":{"id":"lumalabs/ray2","type":"video","name":"Ray2","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"ray","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"release_date":"2025-02-20","last_updated":"2025-02-20","modalities":{"input":["text","image"],"output":["video"]},"open_weights":false,"limit":{"context":5000,"output":0}}}},"blueclaw":{"id":"blueclaw","env":["BLUECLAW_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://openai.blueclaw.network/v1","name":"Blue Claw","doc":"https://blueclaw.network","models":{"Qwen3.8-27B":{"id":"Qwen3.8-27B","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"status":"beta","canonical_model_id":"alibaba/qwen3.8-27b"}}},"zai-coding-plan":{"id":"zai-coding-plan","env":["ZHIPU_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.z.ai/api/coding/paas/v4","name":"Z.AI Coding Plan","doc":"https://docs.z.ai/devpack/overview","models":{"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.2"},"glm-5.2-highspeed":{"id":"glm-5.2-highspeed","name":"GLM-5.2 Highspeed","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.2"},"glm-4.7":{"id":"glm-4.7","name":"GLM-4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.7"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3-flash"},"glm-5-turbo":{"id":"glm-5-turbo","name":"GLM-5-Turbo","description":"Faster GLM-5 lane for coding agents that need lower latency","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-5-turbo"},"glm-5.3-highspeed":{"id":"glm-5.3-highspeed","name":"GLM-5.3 Highspeed","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3"}}},"wandb":{"id":"wandb","env":["WANDB_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.inference.wandb.ai/v1","name":"CoreWeave","doc":"https://docs.wandb.ai/inference","models":{"google/gemma-4-31B-it":{"id":"google/gemma-4-31B-it","name":"Gemma 4 31B","description":"Gemma 4 31B Dense is designed for advanced reasoning, agentic workflows, and longer context and is natively trained on 140+ languages.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.1,"output":0.34,"cache_read":0.1},"canonical_model_id":"google/gemma-4-31b-it"},"google/gemma-4-26B-A4B-it":{"id":"google/gemma-4-26B-A4B-it","name":"Gemma 4 26B A4B","description":"Gemma 4 26B A4B is a multimodal MoE model with LoRA support and function calling for agentic workflows.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.1,"output":0.3,"cache_read":0.05},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"MiniMaxAI/MiniMax-M3":{"id":"MiniMaxAI/MiniMax-M3","name":"MiniMax M3","description":"MiniMax M3 is a multimodal MoE model with 23B active parameters optimized for coding and agentic workflows.","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.23,"output":0.96,"cache_read":0.05},"canonical_model_id":"minimax/MiniMax-M3"},"deepseek-ai/DeepSeek-V3.1":{"id":"deepseek-ai/DeepSeek-V3.1","name":"DeepSeek V3.1","description":"A large hybrid model that supports both thinking and non-thinking modes via prompt templates.","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":161000,"output":161000},"cost":{"input":0.5,"output":1.5,"cache_read":0.2},"canonical_model_id":"deepseek/deepseek-v3.1"},"deepseek-ai/DeepSeek-V4.1-Flash-1017":{"id":"deepseek-ai/DeepSeek-V4.1-Flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"DeepSeek V4.1 Flash 1017 is a multimodal MoE model for coding, reasoning, and faster agentic workflows with 1M context.","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"deepseek-ai/DeepSeek-V4-Flash-0731":{"id":"deepseek-ai/DeepSeek-V4-Flash-0731","name":"DeepSeek V4 Flash 0731","description":"DeepSeek V4-Flash-0731 is an MoE model great for coding, reasoning, and agentic workloads.","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.13,"output":0.27,"cache_read":0.05},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepseek-ai/DeepSeek-V4.1-Flash":{"id":"deepseek-ai/DeepSeek-V4.1-Flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash is a multimodal MoE model for coding, reasoning, and agentic workloads with long contexts.","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.13,"output":0.65,"cache_read":0.002},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek-ai/DeepSeek-V4-Pro-0813":{"id":"deepseek-ai/DeepSeek-V4-Pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4-Pro-0813 is a 1.6T-parameter MoE model excelling at advanced reasoning, coding, and complex agentic workloads.","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":1.31,"output":3.96,"cache_read":0.044},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"moonshotai/Kimi-K2.7-Code":{"id":"moonshotai/Kimi-K2.7-Code","name":"Kimi K2.7 Code","description":"Kimi K2.7 Code is a 1T-parameter MoE model with 32B active parameters purpose-built for long-horizon agentic coding and software engineering.","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.6,"output":3,"cache_read":0.12},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"moonshotai/Kimi-K2.6":{"id":"moonshotai/Kimi-K2.6","name":"Kimi K2.6","description":"Kimi K2.6 is a multimodal Mixture-of-Experts language model featuring 32 billion activated parameters and a total of 1 trillion parameters.","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.65,"output":3.41,"cache_read":0.15},"canonical_model_id":"moonshotai/kimi-k2.6"},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"gpt-oss-20b","description":"Lower latency Mixture-of-Experts model trained on OpenAI's Harmony response format with reasoning capabilities.","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.03,"output":0.13,"cache_read":0.03},"canonical_model_id":"openai/gpt-oss-20b"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"gpt-oss-120b","description":"Efficient Mixture-of-Experts model designed for high-reasoning, agentic and general-purpose use cases.","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.03,"output":0.17,"cache_read":0.03},"canonical_model_id":"openai/gpt-oss-120b"},"ibm-granite/granite-4.2-8b":{"id":"ibm-granite/granite-4.2-8b","name":"Granite 4.2 8B","description":"Granite 4.2 8B is an instruct model capable of enhanced tool calling, instruction following, and chat capabilities.","family":"granite","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-25","last_updated":"2026-08-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.06,"output":0.15,"cache_read":0.015},"canonical_model_id":"ibm/granite-4.2-8b"},"reflection/Beam-1.0-501B-A23B":{"id":"reflection/Beam-1.0-501B-A23B","name":"Beam 1.0 501B A23B","description":"Beam is a 501B-parameter MoE model with 23B active parameters built for coding, reasoning, and agentic workflows.","family":"beam","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-06-30","release_date":"2026-10-05","last_updated":"2026-10-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.3,"output":1,"cache_read":0.04},"canonical_model_id":"reflection/beam-1.0-501b-a23b"},"meta-llama/Llama-3.1-8B-Instruct":{"id":"meta-llama/Llama-3.1-8B-Instruct","name":"Llama 3.1 8B","description":"Efficient conversational model optimized for responsive multilingual chatbot interactions.","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.22,"output":0.22,"cache_read":0.22},"canonical_model_id":"meta/llama-3.1-8b-instruct"},"meta-llama/Llama-3.3-70B-Instruct":{"id":"meta-llama/Llama-3.3-70B-Instruct","name":"Llama 3.3 70B","description":"Multilingual model excelling in conversational tasks, detailed instruction-following, and coding.","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"cost":{"input":0.71,"output":0.71,"cache_read":0.71},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"Qwen/Qwen3.8-27B":{"id":"Qwen/Qwen3.8-27B","name":"Qwen3.8 27B","description":"Qwen3.8-27B is a dense multimodal model suited for coding, research, vision, and long-running agent tasks.","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.4,"output":3,"cache_read":0.15},"canonical_model_id":"alibaba/qwen3.8-27b"},"Qwen/Qwen3.6-35B-A3B":{"id":"Qwen/Qwen3.6-35B-A3B","name":"Qwen3.6 35B A3B","description":"Qwen3.6-35B-A3B is an MoE multimodal model with 262K context optimized for agentic coding workflows.","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.1,"output":0.89,"cache_read":0.035},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"zai-org/GLM-5.3-Flash":{"id":"zai-org/GLM-5.3-Flash","name":"GLM 5.3 Flash","description":"GLM-5.3-Flash is a natively multimodal model with 320B total parameters and 18B active parameters.","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.12,"output":0.38,"cache_read":0.02},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai-org/GLM-5.2":{"id":"zai-org/GLM-5.2","name":"GLM 5.2","description":"GLM-5.2 is a Mixture-of-Experts language model featuring 40 billion activated parameters and a total of 744 billion parameters.","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.62,"output":2.42,"cache_read":0.14},"canonical_model_id":"zhipuai/glm-5.2"},"zai-org/GLM-5.3":{"id":"zai-org/GLM-5.3","name":"GLM 5.3","description":"GLM-5.3 is a 744B-parameter MoE model built for advanced reasoning, software engineering, and long-horizon agentic tasks.","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.75,"output":3,"cache_read":0.19},"canonical_model_id":"zhipuai/glm-5.3"},"nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B":{"id":"nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B","name":"Nemotron 3 Ultra","description":"Nemotron 3 Ultra is a powerful MoE model designed for long-running agents across coding, deep research, and enterprise automation.","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.5,"output":2.15,"cache_read":0.1},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B":{"id":"nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B","name":"Nemotron 3.5 Super VL","description":"Nemotron 3.5 Super VL is a multimodal MoE model built for visual understanding, reasoning, and agentic workflows.","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.15,"output":0.47,"cache_read":0.02},"canonical_model_id":"nvidia/nemotron-3.5-super-vl-120b-a12b"},"nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B":{"id":"nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B","name":"Nemotron 3.5 Lightning","description":"Nemotron 3.5 Lightning is an MoE model built for fast, reliable agentic tasks across use cases such as financial services, cybersecurity, telecom, and retail.","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.07,"output":0.2,"cache_read":0.04},"canonical_model_id":"nvidia/nemotron-3.5-lightning"}}},"hopper":{"id":"hopper","env":["HOPPER_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.withhopper.com/v1","name":"Hopper","doc":"https://withhopper.com/agents/deepseek-v4.1-flash-1017","models":{"deepseek-v4.1-flash-1017-abliterated":{"id":"deepseek-v4.1-flash-1017-abliterated","name":"DeepSeek V4.1 Flash 1017 Abliterated","description":"Abliterated variant of DeepSeek V4.1 Flash 1017 hosted by Hopper.","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.3,"output":1.2,"cache_read":0.03},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"deepseek-v4.1-flash-1017":{"id":"deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.09,"output":0.85,"cache_read":0.007},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"}}},"modelscope":{"id":"modelscope","env":["MODELSCOPE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api-inference.modelscope.cn/v1","name":"ModelScope","doc":"https://modelscope.cn/docs/model-service/API-Inference/intro","models":{"ZhipuAI/GLM-4.6":{"id":"ZhipuAI/GLM-4.6","name":"GLM-4.6","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-07","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":98304},"cost":{"input":0,"output":0},"canonical_model_id":"zhipuai/glm-4.6"},"ZhipuAI/GLM-4.5":{"id":"ZhipuAI/GLM-4.5","name":"GLM-4.5","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"cost":{"input":0,"output":0},"canonical_model_id":"zhipuai/glm-4.5"},"Qwen/Qwen3-235B-A22B-Thinking-2507":{"id":"Qwen/Qwen3-235B-A22B-Thinking-2507","name":"Qwen3-235B-A22B-Thinking-2507","description":"Qwen reasoning model for deliberate problem solving, math, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-25","last_updated":"2025-07-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3-235b-a22b-thinking-2507"},"Qwen/Qwen3-30B-A3B-Thinking-2507":{"id":"Qwen/Qwen3-30B-A3B-Thinking-2507","name":"Qwen3 30B A3B Thinking 2507","description":"Qwen reasoning model for deliberate problem solving, math, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-30","last_updated":"2025-07-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0,"output":0}},"Qwen/Qwen3-30B-A3B-Instruct-2507":{"id":"Qwen/Qwen3-30B-A3B-Instruct-2507","name":"Qwen3 30B A3B Instruct 2507","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3-30b-a3b-instruct-2507"},"Qwen/Qwen3-235B-A22B-Instruct-2507":{"id":"Qwen/Qwen3-235B-A22B-Instruct-2507","name":"Qwen3 235B A22B Instruct 2507","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"Qwen/Qwen3-Coder-30B-A3B-Instruct":{"id":"Qwen/Qwen3-Coder-30B-A3B-Instruct","name":"Qwen3 Coder 30B A3B Instruct","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-31","last_updated":"2025-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3-coder-30b-a3b-instruct"}}},"kuae-cloud-coding-plan":{"id":"kuae-cloud-coding-plan","env":["KUAE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://coding-plan-endpoint.kuaecloud.net/v1","name":"KUAE Cloud Coding Plan","doc":"https://docs.mthreads.com/kuaecloud/kuaecloud-doc-online/coding_plan/","models":{"GLM-4.7":{"id":"GLM-4.7","name":"GLM-4.7","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.7"}}},"scaleway":{"id":"scaleway","env":["SCALEWAY_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.scaleway.ai/v1","name":"Scaleway","doc":"https://www.scaleway.com/en/docs/generative-apis/","models":{"whisper-large-v3":{"id":"whisper-large-v3","type":"transcription","name":"Whisper Large v3","description":"Speech transcription model for accurate audio-to-text and captioning workflows","family":"whisper","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2023-09","release_date":"2023-09-01","last_updated":"2026-03-17","modalities":{"input":["audio"],"output":["text"]},"open_weights":true,"limit":{"context":0,"output":8192}},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":16384},"cost":{"input":2.0187,"output":6.16825},"canonical_model_id":"zhipuai/glm-5.2"},"lightonocr-3-0.8b":{"id":"lightonocr-3-0.8b","name":"LightOnOCR-3 0.8B","description":"LightOnOCR-3-0.8B is the lightest model of LightOn's LightOnOCR-3 family, with the same layout and visual understanding features as its larger siblings.","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-10-08","last_updated":"2026-10-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":2.464,"output":0},"canonical_model_id":"lightonai/lightonocr-3-0.8b"},"mistral-medium-3.5-128b":{"id":"mistral-medium-3.5-128b","name":"Mistral Medium 3.5 128B","description":"Balanced Mistral model for enterprise assistants, multilingual work, and tools","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-29","last_updated":"2026-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":16384},"cost":{"input":1.68225,"output":8.41125},"canonical_model_id":"mistral/mistral-medium-2604"},"bge-multilingual-gemma2":{"id":"bge-multilingual-gemma2","type":"embedding","name":"BGE Multilingual Gemma2","description":"Multilingual Gemma 2 based embedding model for retrieval and semantic search","family":"bge","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-07-25","last_updated":"2024-07-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8191,"output":0},"cost":{"input":0.11215,"output":0},"canonical_model_id":"baai/bge-multilingual-gemma2"},"qwen3.8-27b":{"id":"qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"status":"beta","cost":{"input":0.684,"output":3.762,"reasoning":3.762,"cache_read":0.137},"canonical_model_id":"alibaba/qwen3.8-27b"},"mistral-small-3.2-24b-instruct-2506":{"id":"mistral-small-3.2-24b-instruct-2506","name":"Mistral Small 3.2 24B Instruct (2506)","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-03","release_date":"2025-06-20","last_updated":"2025-06-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0.168225,"output":0.392525},"canonical_model_id":"mistral/mistral-small-2506"},"qwen3-235b-a22b-instruct-2507":{"id":"qwen3-235b-a22b-instruct-2507","name":"Qwen3 235B A22B Instruct 2507","description":"Updated large open Qwen3 MoE instruct model for multilingual chat, coding, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":260000,"output":16384},"cost":{"input":0.841125,"output":2.523375},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"qwen3.5-397b-a17b":{"id":"qwen3.5-397b-a17b","name":"Qwen3.5 397B A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":16384},"cost":{"input":0.6729,"output":4.0374},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":16384},"status":"beta","cost":{"input":2.01,"output":6.15},"canonical_model_id":"zhipuai/glm-5.3"},"qwen3-embedding-8b":{"id":"qwen3-embedding-8b","type":"embedding","name":"Qwen3 Embedding 8B","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-06-05","last_updated":"2025-06-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":0},"cost":{"input":0.11215,"output":0},"canonical_model_id":"alibaba/qwen3-embedding-8b"},"llama-3.3-70b-instruct":{"id":"llama-3.3-70b-instruct","name":"Llama-3.3-70B-Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":100000,"output":16384},"cost":{"input":1.00935,"output":1.00935},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"qwen3.6-35b-a3b":{"id":"qwen3.6-35b-a3b","name":"Qwen3.6 35B A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"status":"beta","cost":{"input":0.280375,"output":1.68225},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"gemma-4-26b-a4b-it":{"id":"gemma-4-26b-a4b-it","name":"Gemma 4 26B A4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":16384},"status":"beta","cost":{"input":0.280375,"output":0.56075},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"deepseek-v4-flash-0731":{"id":"deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":32768},"status":"beta","cost":{"input":0.468,"output":0.936,"reasoning":0.936,"cache_read":0.0936},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"GPT-OSS 120B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0.168225,"output":0.6729},"canonical_model_id":"openai/gpt-oss-120b"},"deepseek-v4.1-flash-1017":{"id":"deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":32768},"status":"beta","cost":{"input":0.672,"output":2.016,"reasoning":2.016,"cache_read":0.134},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"}}},"minimax":{"id":"minimax","env":["MINIMAX_API_KEY"],"npm":"@ai-sdk/anthropic","api":"https://api.minimax.io/anthropic/v1","name":"MiniMax (minimax.io)","doc":"https://platform.minimax.io/docs/guides/quickstart","models":{"MiniMax-M2.1":{"id":"MiniMax-M2.1","name":"MiniMax-M2.1","description":"Earlier MiniMax agent model for practical coding and productivity tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0.3,"output":1.2,"cache_read":0.03,"cache_write":0.375}},"MiniMax-M2.5":{"id":"MiniMax-M2.5","name":"MiniMax-M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0.3,"output":1.2,"cache_read":0.03,"cache_write":0.375}},"MiniMax-M2.7":{"id":"MiniMax-M2.7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0.3,"output":1.2,"cache_read":0.06,"cache_write":0.375}},"MiniMax-M2.5-highspeed":{"id":"MiniMax-M2.5-highspeed","name":"MiniMax-M2.5-highspeed","description":"High-speed MiniMax model for low-latency coding and agent workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-02-13","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0.6,"output":2.4,"cache_read":0.03,"cache_write":0.375}},"MiniMax-M3":{"id":"MiniMax-M3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-25","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":524288},"cost":{"input":0.3,"output":1.2,"cache_read":0.06,"tiers":[{"input":0.6,"output":2.4,"cache_read":0.12,"tier":{"type":"context","size":512000}}],"context_over_200k":{"input":0.6,"output":2.4,"cache_read":0.12}}},"MiniMax-M2.7-highspeed":{"id":"MiniMax-M2.7-highspeed","name":"MiniMax-M2.7-highspeed","description":"Low-latency M2.7 variant for interactive coding plans and agent loops","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0.6,"output":2.4,"cache_read":0.06,"cache_write":0.375}},"MiniMax-M3.1-Flash":{"id":"MiniMax-M3.1-Flash","name":"MiniMax-M3.1-Flash","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":524288},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"MiniMax-M2":{"id":"MiniMax-M2","name":"MiniMax-M2","description":"Efficient open MiniMax model built for coding agents and tool-heavy workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-10-27","last_updated":"2025-10-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0.3,"output":1.2}}}},"requesty":{"id":"requesty","env":["REQUESTY_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://router.requesty.ai/v1","name":"Requesty","doc":"https://requesty.ai/solution/llm-routing/models","models":{"qwen3.6-plus":{"id":"qwen3.6-plus","name":"Qwen3.6 Plus","description":"Earlier Qwen multimodal workhorse for million-token agent and document tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.05,"cache_write":0.625},"canonical_model_id":"alibaba/qwen3.6-plus"},"glm-5.2-fast":{"id":"glm-5.2-fast","name":"glm-5.2-fast","description":"GLM-5.2 introduces a robust 1M-token context and advanced, multi-effort coding capabilities to significantly enhance performance on long-horizon tasks. Its new IndexShare architecture and improved MTP layer simultaneously boost efficiency by reducing per-token FLOPs and increasing speculative decoding lengths. A 743B-parameter model in Zhipu AI's GLM series, designed to plan, execute, and iterate autonomously on extended, engineering-grade tasks.","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"release_date":"2026-07-13","last_updated":"2026-07-13","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2.1,"output":6.6,"cache_read":0.21}},"gpt-5.5":{"id":"gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5.5,"output":33,"cache_read":0.55},"canonical_model_id":"openai/gpt-5.5"},"muse-spark-1.3":{"id":"muse-spark-1.3","name":"Muse Spark 1.3","description":"Muse Spark 1.3 is a multimodal reasoning model from Meta for long-running agentic, multi-agent, and coding workflows. It improves long-horizon agent collaboration, instruction following, and coding efficiency relative to Muse Spark 1.2.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.3"},"nemotron-3-nano-omni":{"id":"nemotron-3-nano-omni","name":"nemotron-3-nano-omni","description":"The most open, efficient, and accurate omni modal reasoning model for agentic AI.","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-05-20","last_updated":"2026-05-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":300000},"cost":{"input":0.06,"output":0.24,"cache_read":0.06}},"claude-opus-5-5@eu":{"id":"claude-opus-5-5@eu","name":"Claude Opus 5.5 (EU)","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4.4,"output":22,"cache_read":0.22,"cache_write":5.5},"canonical_model_id":"anthropic/claude-opus-5-5"},"claude-opus-4-7@eu":{"id":"claude-opus-4-7@eu","name":"Claude Opus 4.7 (EU)","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-4-7"},"gpt-4.1@eu":{"id":"gpt-4.1@eu","name":"GPT-4.1 (EU)","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":2.2,"output":8.8,"cache_read":0.55},"canonical_model_id":"openai/gpt-4.1"},"claude-sonnet-5-5":{"id":"claude-sonnet-5-5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"nemotron-3-ultra-550b-a55b":{"id":"nemotron-3-ultra-550b-a55b","name":"Nemotron 3 Ultra 550B A55B","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"gemini-3.8-flash":{"id":"gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.8-flash"},"glm-5.3-flash@eu":{"id":"glm-5.3-flash@eu","name":"GLM-5.3-Flash (EU)","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":262144},"cost":{"input":0.2,"output":0.6,"cache_read":0.07},"canonical_model_id":"zhipuai/glm-5.3-flash"},"ling-3.0-tiny":{"id":"ling-3.0-tiny","name":"ling-3.0-tiny","description":"Ling-3.0-tiny is an efficient 7.9B parameter MoE model from inclusionAI with only 1.3B active parameters per token. Built for responsive agents, reliable instruction following and multi turn conversation, with a 256K context window, native function calling, prompt caching and switchable Thinking and Instant modes.","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"cost":{"input":0,"output":0}},"kimi-k3.1-pro-highspeed":{"id":"kimi-k3.1-pro-highspeed","name":"Kimi K3.1 Pro Highspeed","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":4},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.8,"output":2.55,"cache_read":0.16},"canonical_model_id":"zhipuai/glm-5.2"},"claude-opus-4-5":{"id":"claude-opus-4-5","name":"Claude Opus 4.5 (latest)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"grok-4.5":{"id":"grok-4.5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"cache_write":2,"tiers":[{"input":4,"output":12,"cache_read":1,"cache_write":4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1,"cache_write":4}},"canonical_model_id":"xai/grok-4.5"},"mistral-small-2603@eu":{"id":"mistral-small-2603@eu","name":"Mistral Small 4 (EU)","description":"Fast Mistral production model for chat, extraction, and cost-sensitive agents","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.165,"output":0.66,"cache_read":0.165},"canonical_model_id":"mistral/mistral-small-2603"},"nemotron-3.5-lightning-30b-a3b":{"id":"nemotron-3.5-lightning-30b-a3b","name":"Nemotron 3.5 Lightning 30B A3B","description":"Fast NVIDIA Nemotron MoE for reliable agentic tasks across enterprise workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-09","release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3.5-lightning"},"kimi-k2.6@eu":{"id":"kimi-k2.6@eu","name":"Kimi K2.6 (EU)","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":128000},"cost":{"input":0.95,"output":4,"cache_read":0.95},"canonical_model_id":"moonshotai/kimi-k2.6"},"kat-coder-pro":{"id":"kat-coder-pro","name":"kat-coder-pro","description":"KAT-Coder-Pro V2 by KwaiKAT is a non-reasoning model optimized for agentic coding. It delivers strong performance on reasoning-style tasks while requiring significantly fewer output tokens than peer models. With the 1210 release, it achieved a score of 64 on the Artificial Analysis Intelligence Index, placing it in the global Top 10 and ranking first among all non-reasoning models.","family":"kat-coder","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"release_date":"2026-03-27","last_updated":"2026-03-27","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":0.3,"output":1.2}},"nemotron-lightning-3.5-30b-a3b":{"id":"nemotron-lightning-3.5-30b-a3b","name":"nemotron-lightning-3.5-30b-a3b","description":"Nemotron-Lightning-3.5-30B-A3B is a 30B-parameter Mixture-of-Experts language model (3B active) from NVIDIA's Nemotron-H family, built on a hybrid Mamba-Transformer architecture for efficient long-context inference. Like other models in the family, it responds to queries by first generating a reasoning trace and then concluding with a final response, with reasoning behavior configurable through a flag in the chat template. It includes a multi-token prediction (MTP) speculative decoding head for low-latency serving.","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-08-15","last_updated":"2026-08-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":262144},"cost":{"input":0.05,"output":0.2,"cache_read":0.01}},"gpt-4.1-mini@eu":{"id":"gpt-4.1-mini@eu","name":"GPT-4.1 mini (EU)","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.44,"output":1.76,"cache_read":0.11},"canonical_model_id":"openai/gpt-4.1-mini"},"kimi-k3.1-pro":{"id":"kimi-k3.1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"gpt-5-mini@eu":{"id":"gpt-5-mini@eu","name":"GPT-5 Mini (EU)","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":0.275,"output":2.2,"cache_read":0.0275},"canonical_model_id":"openai/gpt-5-mini"},"nvidia-nemotron-3-super-120b-a12b":{"id":"nvidia-nemotron-3-super-120b-a12b","name":"Nemotron 3 Super 120B A12B","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.1,"output":0.5},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"},"gpt-5.4-mini":{"id":"gpt-5.4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"claude-fable-5.1@eu":{"id":"claude-fable-5.1@eu","name":"Claude Fable 5.1 (EU)","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":11,"output":55,"cache_read":0.275,"cache_write":13.75},"canonical_model_id":"anthropic/claude-fable-5-1"},"claude-fable-5@eu":{"id":"claude-fable-5@eu","name":"Claude Fable 5 (EU)","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":11,"output":55,"cache_read":1.1,"cache_write":13.75},"canonical_model_id":"anthropic/claude-fable-5"},"deepseek-v4-pro@eu":{"id":"deepseek-v4-pro@eu","name":"DeepSeek V4 Pro (EU)","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":1.75,"output":3.5,"cache_read":0.44},"canonical_model_id":"deepseek/deepseek-v4-pro"},"grok-4.3":{"id":"grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"cache_write":1.25,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"cache_write":2.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4,"cache_write":2.5}},"canonical_model_id":"xai/grok-4.3"},"gemini-4-argon@eu":{"id":"gemini-4-argon@eu","name":"Gemini 4 Argon (EU)","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2.2,"output":11,"cache_read":0.11},"canonical_model_id":"google/gemini-4-argon"},"gemini-3.1-flash-lite@eu":{"id":"gemini-3.1-flash-lite@eu","name":"Gemini 3.1 Flash Lite (EU)","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.275,"output":1.65,"cache_read":0.0275,"cache_write":0.091663},"canonical_model_id":"google/gemini-3.1-flash-lite"},"nemotron-3-nano-omni@eu":{"id":"nemotron-3-nano-omni@eu","name":"nemotron-3-nano-omni@eu","description":"The most open, efficient, and accurate omni modal reasoning model for agentic AI.","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-05-20","last_updated":"2026-05-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":300000},"cost":{"input":0.06,"output":0.24,"cache_read":0.06}},"gpt-5@eu":{"id":"gpt-5@eu","name":"GPT-5 (EU)","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.375,"output":11,"cache_read":0.1375},"canonical_model_id":"openai/gpt-5"},"grok-4.2-beta":{"id":"grok-4.2-beta","name":"Grok 4.20 (Reasoning)","description":"Reasoning Grok for document-heavy analysis and long-horizon tool use","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"cost":{"input":2,"output":6,"cache_read":0.2,"cache_write":2,"tiers":[{"input":4,"output":12,"cache_read":0.4,"cache_write":4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":0.4,"cache_write":4}},"canonical_model_id":"xai/grok-4.20-0309-reasoning"},"nvidia-nemotron-3-ultra":{"id":"nvidia-nemotron-3-ultra","name":"Nemotron 3 Ultra 550B A55B","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0.5,"output":2.5},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"gpt-6.1-sol@eu":{"id":"gpt-6.1-sol@eu","name":"GPT-6.1 Sol (EU)","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.4,"output":12,"cache_read":0.12,"cache_write":3,"tiers":[{"input":4.8,"output":18,"cache_read":0.24,"cache_write":6,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4.8,"output":18,"cache_read":0.24,"cache_write":6}},"canonical_model_id":"openai/gpt-6.1-sol"},"gpt-5.1@eu":{"id":"gpt-5.1@eu","name":"GPT-5.1 (EU)","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.375,"output":11,"cache_read":0.1375},"canonical_model_id":"openai/gpt-5.1"},"gpt-5.6-luna@eu":{"id":"gpt-5.6-luna@eu","name":"GPT-5.6 Luna (EU)","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.22,"output":1.32,"cache_read":0.022,"cache_write":0.275,"tiers":[{"input":0.44,"output":1.98,"cache_read":0.044,"cache_write":0.55,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.44,"output":1.98,"cache_read":0.044,"cache_write":0.55}},"canonical_model_id":"openai/gpt-5.6-luna"},"ring-2.6-1t":{"id":"ring-2.6-1t","name":"ring-2.6-1t","description":"Inclusion AI ring-2.6-1t","family":"ring","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"release_date":"2026-05-08","last_updated":"2026-05-08","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":262144},"cost":{"input":0.3,"output":2.5}},"laguna-m.1":{"id":"laguna-m.1","name":"Laguna M.1","description":"Poolside's open-weight model for agentic coding and long-horizon work","family":"laguna","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-04-28","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32768},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"poolside/laguna-m.1"},"glm-5.3@eu":{"id":"glm-5.3@eu","name":"GLM-5.3 (EU)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":1.2,"output":4.2,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"minimax-m3.1-flash@eu":{"id":"minimax-m3.1-flash@eu","name":"MiniMax-M3.1-Flash (EU)","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.3,"output":1.2,"cache_read":0.07},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"step-5-preview":{"id":"step-5-preview","name":"Step 5 Preview","description":"StepFun's next-generation flagship base model for coding and professional knowledge work, with native text, image, and video input and a 1M-token context window","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536},"cost":{"input":1,"output":2.7,"cache_read":0.05},"canonical_model_id":"stepfun/step-5-preview"},"inkling-256k":{"id":"inkling-256k","name":"Inkling 256K","description":"Multimodal MoE reasoning model (975B total, 41B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":1.87,"output":4.68,"cache_read":0.374},"canonical_model_id":"thinkingmachines/inkling"},"mistral-medium-3-5":{"id":"mistral-medium-3-5","name":"Mistral Medium 3.5","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-30","last_updated":"2026-04-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":209715},"cost":{"input":1.65,"output":8.25,"cache_read":1.65},"canonical_model_id":"mistral/mistral-medium-3-5"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":262144},"cost":{"input":3,"output":15,"cache_read":0.45},"canonical_model_id":"moonshotai/kimi-k3"},"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"gemini-3.5-flash":{"id":"gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":1.5,"output":9,"cache_read":0.15,"cache_write":1.583},"canonical_model_id":"google/gemini-3.5-flash"},"claude-sonnet-5":{"id":"claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"claude-opus-4-5@eu":{"id":"claude-opus-4-5@eu","name":"Claude Opus 4.5 (latest) (EU)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-4-5"},"gpt-6.1-terra":{"id":"gpt-6.1-terra","name":"GPT-6.1 Terra","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25,"tiers":[{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5}},"canonical_model_id":"openai/gpt-6.1-terra"},"mistral-medium-3-5@eu":{"id":"mistral-medium-3-5@eu","name":"Mistral Medium 3.5 (EU)","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-30","last_updated":"2026-04-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":209715},"cost":{"input":1.65,"output":8.25,"cache_read":1.65},"canonical_model_id":"mistral/mistral-medium-3-5"},"gemini-3.6-flash":{"id":"gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":1.5,"output":7,"cache_read":0.15},"canonical_model_id":"google/gemini-3.6-flash"},"deepseek-v4-pro-0813@eu":{"id":"deepseek-v4-pro-0813@eu","name":"DeepSeek V4 Pro 0813 (EU)","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536},"cost":{"input":1.75,"output":3.5,"cache_read":0.44},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"gemini-3.5-flash@eu":{"id":"gemini-3.5-flash@eu","name":"Gemini 3.5 Flash (EU)","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":1.65,"output":9.9,"cache_read":0.165,"cache_write":1.7413},"canonical_model_id":"google/gemini-3.5-flash"},"gpt-5.4@eu":{"id":"gpt-5.4@eu","name":"GPT-5.4 (EU)","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.75,"output":16.5,"cache_read":0.275,"tiers":[{"input":5.5,"output":24.75,"cache_read":0.55,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5.5,"output":24.75,"cache_read":0.55}},"canonical_model_id":"openai/gpt-5.4"},"gpt-6-luna":{"id":"gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"deepseek-v4.1-flash@eu":{"id":"deepseek-v4.1-flash@eu","name":"DeepSeek V4.1 Flash (EU)","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.5,"output":1.5,"cache_read":0.05},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"grok-4.7":{"id":"grok-4.7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"cache_write":2},"canonical_model_id":"xai/grok-4.7"},"leanstral-1-5":{"id":"leanstral-1-5","name":"leanstral-1-5","description":"Leanstral 1.5 is an updated Lean 4 formal proof engineering model from Mistral AI, optimized for automated theorem proving and autoformalization. It has 119B total parameters with 6.5B active and supports a 256K token context window. It supports native function calling and structured output.","family":"leanstral","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-05-27","last_updated":"2026-05-27","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"cost":{"input":0,"output":0}},"qwen3.8-flash-next":{"id":"qwen3.8-flash-next","name":"Qwen3.8 Flash Next","description":"Open-weight experimental preview of the Qwen4 architecture: hybrid-attention MoE (125B total, 6B active) with vision encoder for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-27","last_updated":"2026-08-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.2,"output":0.5,"cache_read":0.05,"cache_write":0.2},"canonical_model_id":"alibaba/qwen3.8-flash-next"},"seed-2.0-code":{"id":"seed-2.0-code","name":"Seed 2.0 Code","description":"ByteDance Seed coding model for multimodal software engineering and long-running agents","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":131072},"cost":{"input":0.5,"output":3,"cache_read":0.1},"canonical_model_id":"bytedance-seed/seed-2.0-code"},"deepseek-v4-pro-0813":{"id":"deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.32,"output":3.96,"cache_read":0.044},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"kimi-k2.7-code@eu":{"id":"kimi-k2.7-code@eu","name":"Kimi K2.7 Code (EU)","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.25,"output":4.5,"cache_read":0.31},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"deepseek-v4-flash-0731@eu":{"id":"deepseek-v4-flash-0731@eu","name":"DeepSeek V4 Flash 0731 (EU)","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.28,"output":0.56,"cache_read":0.07},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"qwen3.8-flash":{"id":"qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.16,"output":0.47,"cache_read":0.016,"cache_write":0.2},"canonical_model_id":"alibaba/qwen3.8-flash"},"glm-5.1":{"id":"glm-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.1"},"gemini-3.8-flash@eu":{"id":"gemini-3.8-flash@eu","name":"Gemini 3.8 Flash (EU)","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.825,"output":4.125,"cache_read":0.0825},"canonical_model_id":"google/gemini-3.8-flash"},"devstral-latest@eu":{"id":"devstral-latest@eu","name":"devstral-latest@eu","description":"An enterprise grade text model, that excels at using tools to explore codebases, editing multiple files and power software engineering agents.","family":"devstral","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-05-27","last_updated":"2026-05-27","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":0.44,"output":2.2,"cache_read":0.44}},"mimo-v2.6-pro":{"id":"mimo-v2.6-pro","name":"MiMo-V2.6-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.43,"output":0.87,"cache_read":0.0036},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"gemini-3.1-flash-image":{"id":"gemini-3.1-flash-image","type":"image","name":"Nano Banana 2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","video","pdf"],"output":["text","image"]},"open_weights":false,"limit":{"context":131072,"output":32768},"cost":{"input":0.5,"output":2},"canonical_model_id":"google/gemini-3.1-flash-image"},"nemotron-3-nano-omni-30b-a3b-reasoning":{"id":"nemotron-3-nano-omni-30b-a3b-reasoning","name":"Nemotron 3 Nano Omni 30B A3B Reasoning","description":"Open Nemotron omni model combining reasoning with text, vision, and audio","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-28","last_updated":"2026-04-28","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":20480},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning"},"deepseek-v4.1-flash-1017@eu":{"id":"deepseek-v4.1-flash-1017@eu","name":"DeepSeek V4.1 Flash 1017 (EU)","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.5,"output":1.5,"cache_read":0.05},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"glm-5.2@eu":{"id":"glm-5.2@eu","name":"GLM-5.2 (EU)","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":1.2,"output":4.2,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"o4-mini@eu":{"id":"o4-mini@eu","name":"o4-mini (EU)","description":"Fast o-series model for compact reasoning, coding, and tool use","family":"o-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":1.21,"output":4.84,"cache_read":0.3025},"canonical_model_id":"openai/o4-mini"},"gpt-5.6-sol@eu":{"id":"gpt-5.6-sol@eu","name":"GPT-5.6 Sol (EU)","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4.4,"output":22,"cache_read":0.44,"cache_write":5.5,"tiers":[{"input":8.8,"output":33,"cache_read":0.88,"cache_write":11,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8.8,"output":33,"cache_read":0.88,"cache_write":11}},"canonical_model_id":"openai/gpt-5.6-sol"},"gemini-3.1-pro-preview":{"id":"gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":4.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":9,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":9}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.5,"output":1.5,"cache_read":0.05},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"claude-fable-5.1":{"id":"claude-fable-5.1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"minimax-m3@eu":{"id":"minimax-m3@eu","name":"MiniMax-M3 (EU)","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.4,"output":2,"cache_read":0.1},"canonical_model_id":"minimax/MiniMax-M3"},"mistral-small-2603":{"id":"mistral-small-2603","name":"Mistral Small 4","description":"Fast Mistral production model for chat, extraction, and cost-sensitive agents","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.165,"output":0.66,"cache_read":0.165},"canonical_model_id":"mistral/mistral-small-2603"},"gemini-3.1-flash-lite":{"id":"gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"cache_write":0.08333},"canonical_model_id":"google/gemini-3.1-flash-lite"},"leanstral-1-5@eu":{"id":"leanstral-1-5@eu","name":"leanstral-1-5@eu","description":"Leanstral 1.5 is an updated Lean 4 formal proof engineering model from Mistral AI, optimized for automated theorem proving and autoformalization. It has 119B total parameters with 6.5B active and supports a 256K token context window. It supports native function calling and structured output.","family":"leanstral","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-05-27","last_updated":"2026-05-27","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"cost":{"input":0,"output":0}},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.32,"output":3.96,"cache_read":0.044},"canonical_model_id":"deepseek/deepseek-v4-pro"},"seed-2.0-mini":{"id":"seed-2.0-mini","name":"Seed 2.0 Mini","description":"Lightweight ByteDance Seed 2.0 model for low-latency multimodal reasoning and high-volume tasks","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000},"cost":{"input":0.1,"output":0.4,"cache_read":0.02},"canonical_model_id":"bytedance-seed/seed-2.0-mini"},"gpt-6-sol@eu":{"id":"gpt-6-sol@eu","name":"GPT-6 Sol (EU)","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.4,"output":12,"cache_read":0.24,"cache_write":3,"tiers":[{"input":4.8,"output":18,"cache_read":0.48,"cache_write":6,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4.8,"output":18,"cache_read":0.48,"cache_write":6}},"canonical_model_id":"openai/gpt-6-sol"},"gpt-5-nano@eu":{"id":"gpt-5-nano@eu","name":"GPT-5 Nano (EU)","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":0.055,"output":0.44,"cache_read":0.0055},"canonical_model_id":"openai/gpt-5-nano"},"seed-2.0-pro":{"id":"seed-2.0-pro","name":"Seed 2.0 Pro","description":"Flagship ByteDance Seed 2.0 model for complex multimodal reasoning and long-horizon agent workflows","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"cost":{"input":0.5,"output":3,"cache_read":0.1},"canonical_model_id":"bytedance-seed/seed-2.0-pro"},"gpt-6-sol":{"id":"gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"qwen3.8-2.4T-A95B":{"id":"qwen3.8-2.4T-A95B","name":"Qwen3.8 2.4T A95B","description":"Open-weight sparse MoE (2.4T total, 95B active), the open-weight twin of Qwen3.8 Max for coding, research, complex reasoning, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":2,"output":6,"cache_read":0.2},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"qwen3.8-2.4T-A95B@eu":{"id":"qwen3.8-2.4T-A95B@eu","name":"Qwen3.8 2.4T A95B (EU)","description":"Open-weight sparse MoE (2.4T total, 95B active), the open-weight twin of Qwen3.8 Max for coding, research, complex reasoning, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":262144},"cost":{"input":2.5,"output":6,"cache_read":0.63,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"gpt-4.1-nano@eu":{"id":"gpt-4.1-nano@eu","name":"GPT-4.1 nano (EU)","description":"Tiny GPT-4.1 option for classification, routing, and very high-volume tasks","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.11,"output":0.44,"cache_read":0.0275},"canonical_model_id":"openai/gpt-4.1-nano"},"gemini-4-argon":{"id":"gemini-4-argon","name":"Gemini 4 Argon","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":10,"cache_read":0.1},"canonical_model_id":"google/gemini-4-argon"},"muse-wonder-1.0":{"id":"muse-wonder-1.0","name":"Muse Wonder","description":"Muse Wonder is a frontier multimodal reasoning model from Meta for personal and professional agents, long-horizon coding, and computer use. It combines Active Memory, which carries relevant context across conversations, with Active Focus, which keeps it working through blockers toward a goal.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-12","last_updated":"2026-10-12","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":4,"output":20,"cache_read":0.2},"canonical_model_id":"meta/muse-wonder-1.0"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":1.2,"output":4.2,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"gpt-5.3-codex":{"id":"gpt-5.3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"qwen3.5-35b-a3b":{"id":"qwen3.5-35b-a3b","name":"Qwen3.5 35B-A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.14,"output":1,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3.5-35b-a3b"},"minimax-m3.1-flash":{"id":"minimax-m3.1-flash","name":"MiniMax-M3.1-Flash","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"gpt-6.1-terra@eu":{"id":"gpt-6.1-terra@eu","name":"GPT-6.1 Terra (EU)","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1.2,"output":6,"cache_read":0.06,"cache_write":1.5,"tiers":[{"input":2.4,"output":9,"cache_read":0.12,"cache_write":3,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":2.4,"output":9,"cache_read":0.12,"cache_write":3}},"canonical_model_id":"openai/gpt-6.1-terra"},"mimo-v2.6-flash":{"id":"mimo-v2.6-flash","name":"MiMo-V2.6-Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.14,"output":0.28,"cache_read":0.0027},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"qwen3.7-plus":{"id":"qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.32,"output":1.28,"cache_read":0.032,"cache_write":0.4},"canonical_model_id":"alibaba/qwen3.7-plus"},"claude-haiku-4-5@eu":{"id":"claude-haiku-4-5@eu","name":"Claude Haiku 4.5 (latest) (EU)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1.1,"output":5.5,"cache_read":0.11,"cache_write":1.375},"canonical_model_id":"anthropic/claude-haiku-4-5"},"claude-fable-5":{"id":"claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":11,"output":55,"cache_read":1.1,"cache_write":13.75},"canonical_model_id":"anthropic/claude-fable-5"},"muse-spark-open":{"id":"muse-spark-open","name":"Muse Spark Open","description":"Muse Spark Open is an 816B total / 42B active open-weight multimodal reasoning model from Meta for coding and long-horizon agentic work, with 1M-token context.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-open"},"minimax-m3":{"id":"minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"},"qwen3.7-max":{"id":"qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":2.5,"output":7.5,"cache_read":0.25,"cache_write":3.125},"canonical_model_id":"alibaba/qwen3.7-max"},"gpt-6-astra":{"id":"gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"mistral-large-4@eu":{"id":"mistral-large-4@eu","name":"Mistral Large 4 (EU)","description":"Mistral's 1T-parameter multimodal MoE for reasoning, coding, and agentic work","family":"mistral-large","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"output":262144},"cost":{"input":0.68,"output":2.09,"cache_read":0.07},"canonical_model_id":"mistral/mistral-large-4"},"seed-1.8":{"id":"seed-1.8","name":"Seed 1.8","description":"ByteDance Seed model for multimodal reasoning, long-context analysis, and agent workflows","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-28","last_updated":"2025-12-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":64000},"cost":{"input":0.25,"output":2,"cache_read":0.05},"canonical_model_id":"bytedance-seed/seed-1-8"},"claude-sonnet-4-5@eu":{"id":"claude-sonnet-4-5@eu","name":"Claude Sonnet 4.5 (latest) (EU)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3.3,"output":16.5,"cache_read":0.3,"cache_write":4.125,"tiers":[{"input":6.6,"output":24.75,"cache_read":0.6,"cache_write":8.25,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":6.6,"output":24.75,"cache_read":0.6,"cache_write":8.25}},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"gpt-5.5-pro":{"id":"gpt-5.5-pro","name":"GPT-5.5 Pro","description":"Highest-accuracy GPT-5.5 tier for slower, precision-heavy reasoning and coding","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180},"canonical_model_id":"openai/gpt-5.5-pro"},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.28,"output":0.56,"cache_read":0.07},"canonical_model_id":"deepseek/deepseek-v4-flash"},"claude-sonnet-4-6@eu":{"id":"claude-sonnet-4-6@eu","name":"Claude Sonnet 4.6 (EU)","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3.3,"output":16.5,"cache_read":0.3,"cache_write":4.125},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"claude-sonnet-5-5@eu":{"id":"claude-sonnet-5-5@eu","name":"Claude Sonnet 5.5 (EU)","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2.2,"output":11,"cache_read":0.22,"cache_write":2.75},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"qwen3.8-flash-next@eu":{"id":"qwen3.8-flash-next@eu","name":"Qwen3.8 Flash Next (EU)","description":"Open-weight experimental preview of the Qwen4 architecture: hybrid-attention MoE (125B total, 6B active) with vision encoder for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-27","last_updated":"2026-08-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.2,"output":0.5,"cache_read":0.05,"cache_write":0.2},"canonical_model_id":"alibaba/qwen3.8-flash-next"},"gemini-2.5-pro@eu":{"id":"gemini-2.5-pro@eu","name":"Gemini 2.5 Pro (EU)","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":1.25,"output":10,"cache_read":0.31,"cache_write":2.375,"tiers":[{"input":2.5,"output":15,"cache_read":0.62,"cache_write":4.75,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":15,"cache_read":0.62,"cache_write":4.75}},"canonical_model_id":"google/gemini-2.5-pro"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":262144},"cost":{"input":0.2,"output":0.6,"cache_read":0.07},"canonical_model_id":"zhipuai/glm-5.3-flash"},"gpt-4o-mini@eu":{"id":"gpt-4o-mini@eu","name":"GPT-4o mini (EU)","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16000},"cost":{"input":0.165,"output":0.66,"cache_read":0.0825},"canonical_model_id":"openai/gpt-4o-mini"},"claude-opus-5":{"id":"claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"mimo-v2.5":{"id":"mimo-v2.5","name":"MiMo-V2.5","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"xiaomi/mimo-v2.5"},"mistral-medium-latest@eu":{"id":"mistral-medium-latest@eu","name":"Mistral Medium (latest) (EU)","description":"Balanced Mistral model for enterprise assistants, multilingual work, and tools","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-29","last_updated":"2026-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.44,"output":2.2,"cache_read":0.44},"canonical_model_id":"mistral/mistral-medium-latest"},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"gemini-3.5-flash-lite":{"id":"gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.3,"output":2.5,"cache_read":0.03},"canonical_model_id":"google/gemini-3.5-flash-lite"},"gemma-4-31b-it":{"id":"gemma-4-31b-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"google/gemma-4-31b-it"},"nemotron-3-ultra-nvfp4":{"id":"nemotron-3-ultra-nvfp4","name":"nemotron-3-ultra-nvfp4","description":"Nemotron-3-Ultra-550B-A55B-NVFP4 is a frontier-scale large language model (LLM) trained by NVIDIA, designed to deliver strong agentic, reasoning, and conversational capabilities. It is optimized for the most demanding workloads, including complex multi-step agents, long-context analysis, and high-accuracy reasoning over code, math, and science. The model employs a hybrid Latent Mixture-of-Experts (LatentMoE) architecture, utilizing interleaved Mamba-2 and MoE layers, along with select Attention layers. Like the Super model, the Ultra model incorporates Multi-Token Prediction (MTP) layers for faster text generation and improved quality, and it is trained using an NVFP4 pre-training recipe to maximize compute efficiency. The model has 55B active parameters and 550B parameters in total.","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":262144},"cost":{"input":0.6,"output":2.4,"cache_read":0.12}},"gpt-6.1-sol":{"id":"gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-sol"},"gpt-5.4-pro":{"id":"gpt-5.4-pro","name":"GPT-5.4 Pro","description":"More exact GPT-5.4 tier for demanding professional reasoning and agent tasks","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"cache_read":30},"canonical_model_id":"openai/gpt-5.4-pro"},"hy3":{"id":"hy3","name":"Hy3","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.14,"output":0.58,"cache_read":0.035},"canonical_model_id":"tencent/hy3"},"gpt-6-luna@eu":{"id":"gpt-6-luna@eu","name":"GPT-6 Luna (EU)","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.12,"output":0.6,"cache_read":0.012,"cache_write":0.15,"tiers":[{"input":0.24,"output":0.9,"cache_read":0.024,"cache_write":0.3,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.24,"output":0.9,"cache_read":0.024,"cache_write":0.3}},"canonical_model_id":"openai/gpt-6-luna"},"mimo-v2.5-pro":{"id":"mimo-v2.5-pro","name":"MiMo-V2.5-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.435,"output":0.87,"cache_read":0.0036},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"gemini-2.5-flash@eu":{"id":"gemini-2.5-flash@eu","name":"Gemini 2.5 Flash (EU)","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.3,"output":2.5,"cache_read":0.075,"cache_write":0.55},"canonical_model_id":"google/gemini-2.5-flash"},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.75,"output":16.5,"cache_read":0.275},"canonical_model_id":"openai/gpt-5.4"},"claude-opus-4-6":{"id":"claude-opus-4-6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"gemma-4-26b-a4b-it":{"id":"gemma-4-26b-a4b-it","name":"Gemma 4 26B A4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.07,"output":0.34,"cache_read":0.07},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"gpt-5.4-nano":{"id":"gpt-5.4-nano","name":"GPT-5.4 nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"inkling":{"id":"inkling","name":"Inkling","description":"Multimodal MoE reasoning model (975B total, 41B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":32768},"cost":{"input":1.87,"output":4.68,"cache_read":0.374},"canonical_model_id":"thinkingmachines/inkling"},"gemini-3-pro-image":{"id":"gemini-3-pro-image","type":"image","name":"Nano Banana Pro","description":"Nano Banana Pro for higher-fidelity image generation and design-heavy edits","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":1048576,"output":32768},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":4.5},"canonical_model_id":"google/gemini-3-pro-image"},"grok-4.6":{"id":"grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"cache_write":2,"tiers":[{"input":4,"output":12,"cache_read":1,"cache_write":4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1,"cache_write":4}},"canonical_model_id":"xai/grok-4.6"},"claude-opus-5@eu":{"id":"claude-opus-5@eu","name":"Claude Opus 5 (EU)","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-5"},"mistral-medium-latest":{"id":"mistral-medium-latest","name":"Mistral Medium (latest)","description":"Balanced Mistral model for enterprise assistants, multilingual work, and tools","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-29","last_updated":"2026-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.44,"output":2.2,"cache_read":0.44},"canonical_model_id":"mistral/mistral-medium-latest"},"gemini-3.7-flash@eu":{"id":"gemini-3.7-flash@eu","name":"Gemini 3.7 Flash (EU)","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.825,"output":4.125,"cache_read":0.0825},"canonical_model_id":"google/gemini-3.7-flash"},"devstral-latest":{"id":"devstral-latest","name":"devstral-latest","description":"An enterprise grade text model, that excels at using tools to explore codebases, editing multiple files and power software engineering agents.","family":"devstral","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"release_date":"2026-05-27","last_updated":"2026-05-27","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":0.44,"output":2.2,"cache_read":0.44}},"minimax-m2.7-highspeed":{"id":"minimax-m2.7-highspeed","name":"MiniMax-M2.7-highspeed","description":"Low-latency M2.7 variant for interactive coding plans and agent loops","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.6,"output":2.4,"cache_read":0.06,"cache_write":1.2},"canonical_model_id":"minimax/MiniMax-M2.7-highspeed"},"gpt-5.6-terra@eu":{"id":"gpt-5.6-terra@eu","name":"GPT-5.6 Terra (EU)","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.2,"output":13.2,"cache_read":0.22,"cache_write":2.75,"tiers":[{"input":4.4,"output":19.8,"cache_read":0.44,"cache_write":5.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4.4,"output":19.8,"cache_read":0.44,"cache_write":5.5}},"canonical_model_id":"openai/gpt-5.6-terra"},"muse-glimmer-30b":{"id":"muse-glimmer-30b","name":"Muse Glimmer 30B","description":"Muse Glimmer is a 30-billion-parameter open-weight multimodal model from Meta Superintelligence Labs, distilled from Muse Spark for always-on local agents, tool use, coding, and image understanding.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-08-10","last_updated":"2026-08-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":20480},"cost":{"input":0,"output":0},"canonical_model_id":"meta/muse-glimmer-30b"},"claude-opus-4-8":{"id":"claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"nemotron-3-super-120b-a12b":{"id":"nemotron-3-super-120b-a12b","name":"Nemotron 3 Super 120B A12B","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"},"grok-build-0.1":{"id":"grok-build-0.1","name":"Grok Build 0.1","description":"Fast Grok coding model tuned for agentic engineering and iterative edits","family":"grok-build","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":1,"output":2,"cache_read":0.1},"canonical_model_id":"xai/grok-build-0.1"},"deepseek-v4-flash-0731":{"id":"deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.28,"output":0.56,"cache_read":0.07},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"claude-opus-4-6@eu":{"id":"claude-opus-4-6@eu","name":"Claude Opus 4.6 (EU)","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-4-6"},"claude-opus-4-8@eu":{"id":"claude-opus-4-8@eu","name":"Claude Opus 4.8 (EU)","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-4-8"},"fugu-ultra":{"id":"fugu-ultra","name":"Fugu Ultra","description":"Quality-first multi-agent model for hard research, analysis, and competitions","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"release_date":"2026-06-15","last_updated":"2026-06-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"sakana/fugu-ultra"},"gpt-5.6-terra":{"id":"gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"minimax-m2.7":{"id":"minimax-m2.7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.3,"output":1.2,"cache_read":0.06,"cache_write":1.2},"canonical_model_id":"minimax/MiniMax-M2.7"},"claude-opus-5-5":{"id":"claude-opus-5-5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"qwen3.8-max":{"id":"qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max"},"qwen3.5-27b":{"id":"qwen3.5-27b","name":"Qwen3.5 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.26,"output":2.6},"canonical_model_id":"alibaba/qwen3.5-27b"},"mistral-large-4":{"id":"mistral-large-4","name":"Mistral Large 4","description":"Mistral's 1T-parameter multimodal MoE for reasoning, coding, and agentic work","family":"mistral-large","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"output":262144},"cost":{"input":0.68,"output":2.09,"cache_read":0.07},"canonical_model_id":"mistral/mistral-large-4"},"glm-5.1@eu":{"id":"glm-5.1@eu","name":"GLM-5.1 (EU)","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":1.4},"canonical_model_id":"zhipuai/glm-5.1"},"gemini-2.5-flash-lite@eu":{"id":"gemini-2.5-flash-lite@eu","name":"Gemini 2.5 Flash-Lite (EU)","description":"Lean Gemini 2.5 lane for cheap multimodal traffic and quick agents","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.1,"output":0.4,"cache_read":0.01,"cache_write":0.18333},"canonical_model_id":"google/gemini-2.5-flash-lite"},"claude-sonnet-4-5":{"id":"claude-sonnet-4-5","name":"Claude Sonnet 4.5 (latest)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75,"tiers":[{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5}},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"step-3.7-flash":{"id":"step-3.7-flash","name":"Step 3.7 Flash","description":"Newer StepFun flash model for faster agents, coding, and multimodal prompts","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"cost":{"input":0.2,"output":1.15,"cache_read":0.04},"canonical_model_id":"stepfun/step-3.7-flash"},"deepseek-v4.1-flash-1017":{"id":"deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.5,"output":1.5,"cache_read":0.05},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"nemotron-3.5-content-safety":{"id":"nemotron-3.5-content-safety","name":"Nemotron 3.5 Content Safety","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3.5-content-safety"},"kimi-k2.5@eu":{"id":"kimi-k2.5@eu","name":"Kimi K2.5 (EU)","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16000},"cost":{"input":0.72,"output":3.6,"cache_read":0.72,"cache_write":0.72},"canonical_model_id":"moonshotai/kimi-k2.5"},"claude-opus-4-1":{"id":"claude-opus-4-1","name":"Claude Opus 4.1 (latest)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-1"},"claude-haiku-5-5":{"id":"claude-haiku-5-5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.13,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.63,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"claude-sonnet-4@eu":{"id":"claude-sonnet-4@eu","name":"Claude Sonnet 4 (latest) (EU)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"status":"deprecated","cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75,"tiers":[{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5}},"canonical_model_id":"anthropic/claude-sonnet-4-0"},"kimi-k3@eu":{"id":"kimi-k3@eu","name":"Kimi K3 (EU)","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":262144},"cost":{"input":3,"output":15,"cache_read":0.45},"canonical_model_id":"moonshotai/kimi-k3"},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"claude-sonnet-5@eu":{"id":"claude-sonnet-5@eu","name":"Claude Sonnet 5 (EU)","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2.2,"output":11,"cache_read":0.22,"cache_write":2.75},"canonical_model_id":"anthropic/claude-sonnet-5"},"laguna-xs.2":{"id":"laguna-xs.2","name":"Laguna XS.2","description":"Agentic coding model from Poolside in the XS size class for local deployment","family":"laguna","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-04-28","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32768},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"poolside/laguna-xs.2"},"ling-2.6-1t":{"id":"ling-2.6-1t","name":"ling-2.6-1t","description":"Inclusion AI ling-2.6-1t","family":"ling","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":262144},"cost":{"input":0.3,"output":2.5}},"ling-2.6-flash":{"id":"ling-2.6-flash","name":"ling-2.6-flash","description":"Inclusion AI ling-2.6-flash","family":"ling","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"release_date":"2026-04-21","last_updated":"2026-04-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":262144},"cost":{"input":0.1,"output":0.3}},"claude-opus-4-7":{"id":"claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"gemini-3.7-flash":{"id":"gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.7-flash"},"qwen3.5-2b":{"id":"qwen3.5-2b","name":"Qwen3.5 2B","description":"Compact Qwen3.5 multimodal model for fast chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-02","last_updated":"2026-03-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":81920},"cost":{"input":0.02,"output":0.1},"canonical_model_id":"alibaba/qwen3.5-2b"},"gpt-5.5@eu":{"id":"gpt-5.5@eu","name":"GPT-5.5 (EU)","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5.5,"output":33,"cache_read":0.55,"tiers":[{"input":11,"output":49.5,"cache_read":1.1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":11,"output":49.5,"cache_read":1.1}},"canonical_model_id":"openai/gpt-5.5"},"gemini-3.5-flash-lite@eu":{"id":"gemini-3.5-flash-lite@eu","name":"Gemini 3.5 Flash Lite (EU)","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.33,"output":2.75,"cache_read":0.033},"canonical_model_id":"google/gemini-3.5-flash-lite"},"claude-haiku-5-5@eu":{"id":"claude-haiku-5-5@eu","name":"Claude Haiku 5.5 (EU)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.11,"output":0.55,"cache_read":0.02,"cache_write":0.14,"tiers":[{"input":0.55,"output":2.75,"cache_read":0.06,"cache_write":0.69,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"claude-haiku-4-5":{"id":"claude-haiku-4-5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"}}},"siliconflow-cn":{"id":"siliconflow-cn","env":["SILICONFLOW_CN_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.siliconflow.cn/v1","name":"SiliconFlow (China)","doc":"https://cloud.siliconflow.com/models","models":{"Pro/deepseek-ai/DeepSeek-V3.2":{"id":"Pro/deepseek-ai/DeepSeek-V3.2","name":"Pro/deepseek-ai/DeepSeek-V3.2","description":"Flagship DeepSeek model for coding, reasoning, and agentic work","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":164000,"output":164000},"cost":{"input":0.59778991,"output":0.89668487,"cache_read":0.05977899},"canonical_model_id":"deepseek/deepseek-v3.2"},"Pro/deepseek-ai/DeepSeek-V3.1-Terminus":{"id":"Pro/deepseek-ai/DeepSeek-V3.1-Terminus","name":"Pro/deepseek-ai/DeepSeek-V3.1-Terminus","description":"Flagship DeepSeek model for coding, reasoning, and agentic work","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-09-29","last_updated":"2025-11-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":164000,"output":164000},"cost":{"input":0.59778991,"output":1.79336973,"cache_read":0.05977899}},"Pro/deepseek-ai/DeepSeek-V3":{"id":"Pro/deepseek-ai/DeepSeek-V3","name":"Pro/deepseek-ai/DeepSeek-V3","description":"Flagship DeepSeek model for coding, reasoning, and agentic work","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-03-24","last_updated":"2025-03-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":164000,"output":164000},"cost":{"input":0.29889496,"output":1.19557982,"cache_read":0.0298895},"canonical_model_id":"deepseek/deepseek-v3-0324"},"Pro/deepseek-ai/DeepSeek-R1":{"id":"Pro/deepseek-ai/DeepSeek-R1","name":"Pro/deepseek-ai/DeepSeek-R1","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-05-28","last_updated":"2025-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":164000,"output":164000},"cost":{"input":0.59778991,"output":2.39115964,"cache_read":0.05977899},"canonical_model_id":"deepseek/deepseek-r1-0528"},"Pro/moonshotai/Kimi-K2.5":{"id":"Pro/moonshotai/Kimi-K2.5","name":"Pro/moonshotai/Kimi-K2.5","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"status":"deprecated","cost":{"input":0.45,"output":2.25,"cache_read":0.07},"canonical_model_id":"moonshotai/kimi-k2.5"},"Pro/moonshotai/Kimi-K2.6":{"id":"Pro/moonshotai/Kimi-K2.6","name":"Pro/moonshotai/Kimi-K2.6","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.97140861,"output":4.0350819,"cache_read":0.16439223},"canonical_model_id":"moonshotai/kimi-k2.6"},"Pro/zai-org/GLM-5":{"id":"Pro/zai-org/GLM-5","name":"Pro/zai-org/GLM-5","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":205000,"output":205000},"status":"deprecated","cost":{"input":1,"output":3.2},"canonical_model_id":"zhipuai/glm-5"},"Pro/zai-org/GLM-5.1":{"id":"Pro/zai-org/GLM-5.1","name":"Pro/zai-org/GLM-5.1","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":205000,"output":205000},"cost":{"input":0.89668487,"output":3.58673947,"cache_read":0.19428172,"cache_write":0,"tiers":[{"input":1.19557982,"output":4.18452938,"cache_read":0.29889496,"cache_write":0,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-5.1"},"ByteDance-Seed/Seed-OSS-36B-Instruct":{"id":"ByteDance-Seed/Seed-OSS-36B-Instruct","name":"ByteDance-Seed/Seed-OSS-36B-Instruct","description":"Tool-capable chat model for instruction following and agentic application workflows","family":"seed","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-09-04","last_updated":"2025-11-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.22417122,"output":0.59778991}},"deepseek-ai/DeepSeek-V3.2":{"id":"deepseek-ai/DeepSeek-V3.2","name":"deepseek-ai/DeepSeek-V3.2","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":164000,"output":164000},"cost":{"input":0.59778991,"output":0.89668487,"cache_read":0.05977899},"canonical_model_id":"deepseek/deepseek-v3.2"},"deepseek-ai/DeepSeek-V4-Flash":{"id":"deepseek-ai/DeepSeek-V4-Flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.44834243,"output":1.3450273,"cache_read":0.04483424},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek-ai/DeepSeek-V3.1-Terminus":{"id":"deepseek-ai/DeepSeek-V3.1-Terminus","name":"deepseek-ai/DeepSeek-V3.1-Terminus","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-09-29","last_updated":"2025-11-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":164000,"output":164000},"cost":{"input":0.59778991,"output":1.79336973,"cache_read":0.05977899}},"deepseek-ai/DeepSeek-OCR":{"id":"deepseek-ai/DeepSeek-OCR","name":"deepseek-ai/DeepSeek-OCR","description":"OCR model for extracting structured text from documents and screenshots","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-10-20","last_updated":"2025-10-20","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":8192},"cost":{"input":0,"output":0}},"deepseek-ai/DeepSeek-V3":{"id":"deepseek-ai/DeepSeek-V3","name":"deepseek-ai/DeepSeek-V3","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-03-24","last_updated":"2025-03-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":164000,"output":164000},"cost":{"input":0.29889496,"output":1.19557982,"cache_read":0.0298895},"canonical_model_id":"deepseek/deepseek-v3-0324"},"deepseek-ai/DeepSeek-V4-Pro":{"id":"deepseek-ai/DeepSeek-V4-Pro","name":"deepseek-ai/DeepSeek-V4-Pro","description":"Flagship DeepSeek model for coding, reasoning, and agentic work","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1049000,"output":393000},"cost":{"input":1.79336973,"output":3.58673947,"cache_read":0.14944748},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek-ai/DeepSeek-R1":{"id":"deepseek-ai/DeepSeek-R1","name":"deepseek-ai/DeepSeek-R1","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-05-28","last_updated":"2025-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":164000,"output":164000},"cost":{"input":0.59778991,"output":2.39115964,"cache_read":0.05977899},"canonical_model_id":"deepseek/deepseek-r1-0528"},"tencent/Hunyuan-A13B-Instruct":{"id":"tencent/Hunyuan-A13B-Instruct","name":"tencent/Hunyuan-A13B-Instruct","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"hunyuan","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-06-30","last_updated":"2025-11-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":131000},"cost":{"input":0.14944748,"output":0.59778991}},"PaddlePaddle/PaddleOCR-VL-1.5":{"id":"PaddlePaddle/PaddleOCR-VL-1.5","name":"PaddlePaddle/PaddleOCR-VL-1.5","description":"Multimodal model for analyzing text, images, documents, and rich media","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-01-29","last_updated":"2026-01-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"output":16384},"cost":{"input":0,"output":0}},"inclusionAI/Ling-flash-2.0":{"id":"inclusionAI/Ling-flash-2.0","name":"inclusionAI/Ling-flash-2.0","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"ling","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-09-18","last_updated":"2025-11-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":131000},"cost":{"input":0.14944748,"output":0.59778991}},"Qwen/Qwen3-VL-30B-A3B-Instruct":{"id":"Qwen/Qwen3-VL-30B-A3B-Instruct","name":"Qwen/Qwen3-VL-30B-A3B-Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-04","last_updated":"2025-10-04","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.10461323,"output":0.41845294},"canonical_model_id":"alibaba/qwen3-vl-30b-a3b-instruct"},"Qwen/Qwen2.5-72B-Instruct":{"id":"Qwen/Qwen2.5-72B-Instruct","name":"Qwen/Qwen2.5-72B-Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2024-09-18","last_updated":"2025-11-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":33000,"output":4000},"cost":{"input":0.61721808,"output":0.61721808}},"Qwen/Qwen3-32B":{"id":"Qwen/Qwen3-32B","name":"Qwen/Qwen3-32B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":131000},"cost":{"input":0.14944748,"output":0.59778991},"canonical_model_id":"alibaba/qwen3-32b"},"Qwen/Qwen3-VL-30B-A3B-Thinking":{"id":"Qwen/Qwen3-VL-30B-A3B-Thinking","name":"Qwen/Qwen3-VL-30B-A3B-Thinking","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-11","last_updated":"2025-11-25","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.10461323,"output":0.41845294}},"Qwen/Qwen3.5-27B":{"id":"Qwen/Qwen3.5-27B","name":"Qwen/Qwen3.5-27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.08966849,"output":0.71734789,"tiers":[{"input":0.26900546,"output":2.15204368,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3.5-27b"},"Qwen/Qwen3.6-27B":{"id":"Qwen/Qwen3.6-27B","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.44980438,"output":2.69882628},"canonical_model_id":"alibaba/qwen3.6-27b"},"Qwen/Qwen3-VL-32B-Thinking":{"id":"Qwen/Qwen3-VL-32B-Thinking","name":"Qwen/Qwen3-VL-32B-Thinking","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-21","last_updated":"2025-11-25","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.14944748,"output":1.49447478}},"Qwen/Qwen3.5-122B-A10B":{"id":"Qwen/Qwen3.5-122B-A10B","name":"Qwen/Qwen3.5-122B-A10B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.11955798,"output":0.95646386,"tiers":[{"input":0.29889496,"output":2.39115964,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"Qwen/Qwen3-VL-32B-Instruct":{"id":"Qwen/Qwen3-VL-32B-Instruct","name":"Qwen/Qwen3-VL-32B-Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-21","last_updated":"2025-11-25","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.14944748,"output":0.59778991}},"Qwen/Qwen3-VL-8B-Instruct":{"id":"Qwen/Qwen3-VL-8B-Instruct","name":"Qwen/Qwen3-VL-8B-Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-15","last_updated":"2025-11-25","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.07472374,"output":0.29889496}},"Qwen/Qwen3.5-9B":{"id":"Qwen/Qwen3.5-9B","name":"Qwen/Qwen3.5-9B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.07472374,"output":0.59778991,"tiers":[{"input":0.22417122,"output":1.79336973,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3.5-9b"},"Qwen/Qwen2.5-7B-Instruct":{"id":"Qwen/Qwen2.5-7B-Instruct","name":"Qwen/Qwen2.5-7B-Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2024-09-19","last_updated":"2024-09-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":33000,"output":4000},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen2.5-7b-instruct"},"Qwen/Qwen3-14B":{"id":"Qwen/Qwen3-14B","name":"Qwen/Qwen3-14B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-04-30","last_updated":"2025-11-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":131000},"cost":{"input":0.07472374,"output":0.29889496}},"Qwen/Qwen3.8-27B":{"id":"Qwen/Qwen3.8-27B","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.44980438,"output":1.79921752},"canonical_model_id":"alibaba/qwen3.8-27b"},"Qwen/Qwen3-30B-A3B-Instruct-2507":{"id":"Qwen/Qwen3-30B-A3B-Instruct-2507","name":"Qwen/Qwen3-30B-A3B-Instruct-2507","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.10461323,"output":0.41845294},"canonical_model_id":"alibaba/qwen3-30b-a3b-instruct-2507"},"Qwen/Qwen3-Coder-30B-A3B-Instruct":{"id":"Qwen/Qwen3-Coder-30B-A3B-Instruct","name":"Qwen/Qwen3-Coder-30B-A3B-Instruct","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-31","last_updated":"2025-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.10461323,"output":0.41845294},"canonical_model_id":"alibaba/qwen3-coder-30b-a3b-instruct"},"Qwen/Qwen3-8B":{"id":"Qwen/Qwen3-8B","name":"Qwen/Qwen3-8B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-04-29","last_updated":"2025-04-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":131000},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3-8b"},"Qwen/Qwen3.5-35B-A3B":{"id":"Qwen/Qwen3.5-35B-A3B","name":"Qwen/Qwen3.5-35B-A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.05977899,"output":0.47823193,"tiers":[{"input":0.23911596,"output":1.91292771,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3.5-35b-a3b"},"Qwen/Qwen3.5-4B":{"id":"Qwen/Qwen3.5-4B","name":"Qwen/Qwen3.5-4B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-03-02","last_updated":"2026-03-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3.5-4b"},"Qwen/Qwen3.6-35B-A3B":{"id":"Qwen/Qwen3.6-35B-A3B","name":"Qwen/Qwen3.6-35B-A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.26900546,"output":1.61403276},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"zai-org/GLM-5.3-Flash":{"id":"zai-org/GLM-5.3-Flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.11994783,"output":0.41981742,"cache_read":0.034485},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai-org/GLM-5.2":{"id":"zai-org/GLM-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1049000,"output":262000},"cost":{"input":1.19557982,"output":4.18452938,"cache_read":0.29889496,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.2"},"zai-org/GLM-5.3":{"id":"zai-org/GLM-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.19947835,"output":4.19817421,"cache_read":0.29986959},"canonical_model_id":"zhipuai/glm-5.3"},"zai-org/GLM-4.5-Air":{"id":"zai-org/GLM-4.5-Air","name":"zai-org/GLM-4.5-Air","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-air","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":131000},"cost":{"input":0.14944748,"output":0.89668487},"canonical_model_id":"zhipuai/glm-4.5-air"},"zai-org/GLM-4.5V":{"id":"zai-org/GLM-4.5V","name":"GLM-4.5V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-08-11","last_updated":"2025-08-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":16384},"cost":{"input":0.14993479,"output":0.89960876},"canonical_model_id":"zhipuai/glm-4.5v"},"stepfun-ai/Step-3.5-Flash":{"id":"stepfun-ai/Step-3.5-Flash","name":"stepfun-ai/Step-3.5-Flash","description":"StepFun flash model for efficient multimodal reasoning, coding, and tool use","family":"step","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-29","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.10461323,"output":0.3138397},"canonical_model_id":"stepfun/step-3.5-flash"}}},"thinkingmachines":{"id":"thinkingmachines","env":["TINKER_API_KEY"],"npm":"@ai-sdk/anthropic","api":"https://tinker.thinkingmachines.dev/services/tinker-prod/anthropic/api/v1","name":"Thinking Machines","doc":"https://tinker-docs.thinkingmachines.ai/tinker/compatible-apis/anthropic/","models":{"deepseek-ai/DeepSeek-V3.1":{"id":"deepseek-ai/DeepSeek-V3.1","name":"DeepSeek-V3.1","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32768},"cost":{"input":1.695,"output":4.215,"cache_read":0.339},"canonical_model_id":"deepseek/deepseek-v3.1"},"deepseek-ai/DeepSeek-V4.1-Flash-1017:peft:262144":{"id":"deepseek-ai/DeepSeek-V4.1-Flash-1017:peft:262144","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.6,"output":3.6,"cache_read":0.12},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"deepseek-ai/DeepSeek-V4.1-Flash:peft:262144":{"id":"deepseek-ai/DeepSeek-V4.1-Flash:peft:262144","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.6,"output":3.6,"cache_read":0.12},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"moonshotai/Kimi-K2.6:peft:131072":{"id":"moonshotai/Kimi-K2.6:peft:131072","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":2.205,"output":5.49,"cache_read":0.441},"canonical_model_id":"moonshotai/kimi-k2.6"},"moonshotai/Kimi-K2.6":{"id":"moonshotai/Kimi-K2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32768},"cost":{"input":2.205,"output":5.49,"cache_read":0.441},"canonical_model_id":"moonshotai/kimi-k2.6"},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT OSS 20B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32768},"cost":{"input":0.18,"output":0.45,"cache_read":0.036},"canonical_model_id":"openai/gpt-oss-20b"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32768},"cost":{"input":0.33,"output":0.84,"cache_read":0.066},"canonical_model_id":"openai/gpt-oss-120b"},"openai/gpt-oss-120b:peft:131072":{"id":"openai/gpt-oss-120b:peft:131072","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.33,"output":0.84,"cache_read":0.066},"canonical_model_id":"openai/gpt-oss-120b"},"thinkingmachines/Inkling:peft:262144":{"id":"thinkingmachines/Inkling:peft:262144","name":"Inkling (256K)","description":"Multimodal MoE reasoning model (975B total, 41B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.87,"output":4.68,"cache_read":0.374},"canonical_model_id":"thinkingmachines/inkling"},"thinkingmachines/Inkling-Small:peft:262144:sampling-nvfp4":{"id":"thinkingmachines/Inkling-Small:peft:262144:sampling-nvfp4","name":"Inkling Small","description":"Multimodal MoE reasoning model (276B total, 12B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-30","last_updated":"2026-07-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"thinkingmachines/inkling-small"},"thinkingmachines/Inkling:peft:262144:sampling-nvfp4":{"id":"thinkingmachines/Inkling:peft:262144:sampling-nvfp4","name":"Inkling","description":"Multimodal MoE reasoning model (975B total, 41B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1,"output":4.05,"cache_read":0.17},"canonical_model_id":"thinkingmachines/inkling"},"thinkingmachines/Inkling-Small:peft:262144":{"id":"thinkingmachines/Inkling-Small:peft:262144","name":"Inkling Small","description":"Multimodal MoE reasoning model (276B total, 12B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-30","last_updated":"2026-07-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.58,"output":1.44,"cache_read":0.116},"canonical_model_id":"thinkingmachines/inkling-small"},"thinkingmachines/Inkling-Small":{"id":"thinkingmachines/Inkling-Small","name":"Inkling Small","description":"Multimodal MoE reasoning model (276B total, 12B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-30","last_updated":"2026-07-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":0.58,"output":1.44,"cache_read":0.116},"canonical_model_id":"thinkingmachines/inkling-small"},"thinkingmachines/Inkling":{"id":"thinkingmachines/Inkling","name":"Inkling","description":"Multimodal MoE reasoning model (975B total, 41B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":1.87,"output":4.68,"cache_read":0.374},"canonical_model_id":"thinkingmachines/inkling"},"Qwen/Qwen3.5-397B-A17B":{"id":"Qwen/Qwen3.5-397B-A17B","name":"Qwen3.5 397B-A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":1.65,"output":7.5,"cache_read":0.33},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"Qwen/Qwen3.6-27B":{"id":"Qwen/Qwen3.6-27B","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":1.86,"output":5.595,"cache_read":0.372},"canonical_model_id":"alibaba/qwen3.6-27b"},"Qwen/Qwen3.8-27B:peft:262144":{"id":"Qwen/Qwen3.8-27B:peft:262144","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.6975,"output":5.595,"cache_read":0.1395},"canonical_model_id":"alibaba/qwen3.8-27b"},"Qwen/Qwen3.5-9B":{"id":"Qwen/Qwen3.5-9B","name":"Qwen3.5 9B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":0.3,"output":0.807,"cache_read":0.06},"canonical_model_id":"alibaba/qwen3.5-9b"},"Qwen/Qwen3.5-9B-Base":{"id":"Qwen/Qwen3.5-9B-Base","name":"Qwen3.5 9B Base","description":"Pre-trained Qwen3.5 base checkpoint for fine-tuning and research, without instruction tuning","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-02-26","last_updated":"2026-02-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":0.3,"output":0.807,"cache_read":0.06},"canonical_model_id":"alibaba/qwen3.5-9b-base"},"Qwen/Qwen3.5-35B-A3B-Base":{"id":"Qwen/Qwen3.5-35B-A3B-Base","name":"Qwen3.5 35B-A3B Base","description":"Pre-trained Qwen3.5 base checkpoint for fine-tuning and research, without instruction tuning","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-02-24","last_updated":"2026-02-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":0.54,"output":1.335,"cache_read":0.108},"canonical_model_id":"alibaba/qwen3.5-35b-a3b-base"},"Qwen/Qwen3.8-27B":{"id":"Qwen/Qwen3.8-27B","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":0.6975,"output":5.595,"cache_read":0.1395},"canonical_model_id":"alibaba/qwen3.8-27b"},"Qwen/Qwen3.6-35B-A3B:peft:262144":{"id":"Qwen/Qwen3.6-35B-A3B:peft:262144","name":"Qwen3.6 35B-A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.45,"output":1.335,"cache_read":0.09},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"Qwen/Qwen3-8B":{"id":"Qwen/Qwen3-8B","name":"Qwen3 8B","description":"Dense 8B Qwen3 model with switchable thinking for chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2025-04-29","last_updated":"2025-04-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32768},"cost":{"input":0.195,"output":0.6,"cache_read":0.039},"canonical_model_id":"alibaba/qwen3-8b"},"Qwen/Qwen3.5-4B":{"id":"Qwen/Qwen3.5-4B","name":"Qwen3.5 4B","description":"Small Qwen3.5 multimodal model for low-cost chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-03-02","last_updated":"2026-03-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":0.33,"output":1.005,"cache_read":0.066},"canonical_model_id":"alibaba/qwen3.5-4b"},"Qwen/Qwen3.5-4B:peft:262144":{"id":"Qwen/Qwen3.5-4B:peft:262144","name":"Qwen3.5 4B","description":"Small Qwen3.5 multimodal model for low-cost chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-03-02","last_updated":"2026-03-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.33,"output":1.005,"cache_read":0.066},"canonical_model_id":"alibaba/qwen3.5-4b"},"Qwen/Qwen3.5-397B-A17B:peft:262144":{"id":"Qwen/Qwen3.5-397B-A17B:peft:262144","name":"Qwen3.5 397B-A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.65,"output":7.5,"cache_read":0.33},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"Qwen/Qwen3.6-35B-A3B":{"id":"Qwen/Qwen3.6-35B-A3B","name":"Qwen3.6 35B-A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":0.45,"output":1.335,"cache_read":0.09},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"zai-org/GLM-5.3-Flash:peft:262144":{"id":"zai-org/GLM-5.3-Flash:peft:262144","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.84,"output":2.11,"cache_read":0.168},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai-org/GLM-5.3:peft:262144":{"id":"zai-org/GLM-5.3:peft:262144","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":3.78,"output":12.15,"cache_read":0.756},"canonical_model_id":"zhipuai/glm-5.3"},"nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16":{"id":"nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16","name":"Nemotron 3.5 Lightning 30B A3B","description":"Fast NVIDIA Nemotron MoE for reliable agentic tasks across enterprise workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":0.184,"output":0.495,"cache_read":0.0368},"canonical_model_id":"nvidia/nemotron-3.5-lightning"},"nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16:peft:262144":{"id":"nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16:peft:262144","name":"Nemotron 3 Super 120B A12B","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.57,"output":1.44,"cache_read":0.114},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"},"nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16":{"id":"nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16","name":"Nemotron 3 Nano 30B A3B","description":"Small Nemotron 3 MoE for efficient coding, math, and long-context agents","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-06-25","release_date":"2025-12-15","last_updated":"2025-12-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":0.195,"output":0.495,"cache_read":0.039},"canonical_model_id":"nvidia/nemotron-3-nano-30b-a3b"},"nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-BF16":{"id":"nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-BF16","name":"Nemotron 3 Ultra 550B A55B","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":1.8,"output":6.225,"cache_read":0.36},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-BF16:peft:262144":{"id":"nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-BF16:peft:262144","name":"Nemotron 3.5 Super VL 120B A12B","description":"NVIDIA vision-language reasoning model for text, image, and video understanding and agentic tool use","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.57,"output":1.44,"cache_read":0.114},"canonical_model_id":"nvidia/nemotron-3.5-super-vl-120b-a12b"},"nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-BF16:peft:262144":{"id":"nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-BF16:peft:262144","name":"Nemotron 3 Ultra 550B A55B","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.8,"output":6.225,"cache_read":0.36},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-BF16":{"id":"nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-BF16","name":"Nemotron 3.5 Super VL 120B A12B","description":"NVIDIA vision-language reasoning model for text, image, and video understanding and agentic tool use","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":0.57,"output":1.44,"cache_read":0.114},"canonical_model_id":"nvidia/nemotron-3.5-super-vl-120b-a12b"},"nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16:peft:262144":{"id":"nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16:peft:262144","name":"Nemotron 3.5 Lightning 30B A3B","description":"Fast NVIDIA Nemotron MoE for reliable agentic tasks across enterprise workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.184,"output":0.495,"cache_read":0.0368},"canonical_model_id":"nvidia/nemotron-3.5-lightning"},"nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16":{"id":"nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16","name":"Nemotron 3 Super 120B A12B","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":0.57,"output":1.44,"cache_read":0.114},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"}}},"moonshotai-cn":{"id":"moonshotai-cn","env":["MOONSHOT_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.moonshot.cn/v1","name":"Moonshot AI (China)","doc":"https://platform.moonshot.cn/docs/api/chat","models":{"kimi-k3.1-pro-highspeed":{"id":"kimi-k3.1-pro-highspeed","name":"Kimi K3.1 Pro Highspeed","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":3.8874,"output":20.3342,"cache_read":0.1944,"cache_write":3.8874},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"kimi-k3.1-pro":{"id":"kimi-k3.1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":1.9437,"output":10.1671,"cache_read":0.1944,"cache_write":1.9437},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.9711,"output":4.0337,"cache_read":0.1643},"canonical_model_id":"moonshotai/kimi-k2.6"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":2.9879,"output":14.9395,"cache_read":0.2988,"cache_write":2.9879},"canonical_model_id":"moonshotai/kimi-k3"},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.9711,"output":4.0337,"cache_read":0.1942},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"kimi-k2.7-code-highspeed":{"id":"kimi-k2.7-code-highspeed","name":"Kimi K2.7 Code HighSpeed","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.9421,"output":8.0673,"cache_read":0.3884},"canonical_model_id":"moonshotai/kimi-k2.7-code"}}},"opencode-go":{"id":"opencode-go","env":["OPENCODE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://opencode.ai/inference/go/openai/v1","name":"OpenCode Go","doc":"https://opencode.ai/v2/docs/console/go/","models":{"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"kimi-k3.1-pro":{"id":"kimi-k3.1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"gemini-4-argon-contributor":{"id":"gemini-4-argon-contributor","name":"Gemini 4 Argon Contributor","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","provider":{"npm":"@ai-sdk/google","api":"https://opencode.ai/inference/go/google/v1beta"},"cost":{"input":4,"output":20,"cache_read":0.2,"input_audio":4},"canonical_model_id":"google/gemini-4-argon"},"iceman-contributor-free":{"id":"iceman-contributor-free","name":"Iceman Contributor Free","description":"Stealth model, free for a limited time","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"release_date":"2026-10-24","last_updated":"2026-10-24","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0}},"step-5-preview":{"id":"step-5-preview","name":"Step 5 Preview","description":"StepFun's next-generation flagship base model for coding and professional knowledge work, with native text, image, and video input and a 1M-token context window","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":65536},"provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":1,"output":2.7,"cache_read":0.1},"canonical_model_id":"stepfun/step-5-preview"},"cat-jam-free":{"id":"cat-jam-free","name":"Cat Jam Free","description":"A text-only reasoning model for coding and agentic workflows, with tool calling and structured JSON outputs.","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-10-12","last_updated":"2026-10-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0}},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3},"canonical_model_id":"moonshotai/kimi-k3"},"hy4":{"id":"hy4","name":"Hy4","description":"A next-generation multimodal productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-11-04","last_updated":"2026-11-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":983010,"output":65536},"provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0.834,"output":2.501,"cache_read":0.042},"canonical_model_id":"tencent/hy4"},"gpt-6-luna":{"id":"gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"grok-4.7":{"id":"grok-4.7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.7"},"qwen3.8-flash":{"id":"qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/go/anthropic/v1"},"cost":{"input":0.15,"output":0.47,"cache_read":0.016,"cache_write":0.2},"canonical_model_id":"alibaba/qwen3.8-flash"},"mimo-v2.6-pro":{"id":"mimo-v2.6-pro","name":"MiMo-V2.6-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0.435,"output":0.87,"cache_read":0.003625},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"beam-free":{"id":"beam-free","name":"Beam Free","description":"Sparse mixture-of-experts reasoning model with 23B active parameters for coding and agentic workflows","family":"beam","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-06-30","release_date":"2026-10-05","last_updated":"2026-10-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"reflection/beam-1.0-501b-a23b"},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Flagship DeepSeek model for coding, reasoning, and agentic work","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0.66,"output":1.98,"cache_read":0.022},"canonical_model_id":"deepseek/deepseek-v4-pro"},"gemini-4-argon":{"id":"gemini-4-argon","name":"Gemini 4 Argon","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"provider":{"npm":"@ai-sdk/google","api":"https://opencode.ai/inference/go/google/v1beta"},"cost":{"input":2,"output":10,"cache_read":0.1,"input_audio":2},"canonical_model_id":"google/gemini-4-argon"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"minimax-m3.1-flash":{"id":"minimax-m3.1-flash","name":"MiniMax M3.1 Flash","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":512000},"provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"mimo-v2.6-flash":{"id":"mimo-v2.6-flash","name":"MiMo-V2.6-Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"qwen3.7-plus":{"id":"qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"qwen3.7-plus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":262144}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/go/anthropic/v1"},"cost":{"input":0.4,"output":1.6,"cache_read":0.04,"cache_write":0.5,"tiers":[{"input":1.2,"output":4.8,"cache_read":0.12,"cache_write":1.5,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":1.2,"output":4.8,"cache_read":0.12,"cache_write":1.5}},"canonical_model_id":"alibaba/qwen3.7-plus"},"muse-spark-1.2-contributor":{"id":"muse-spark-1.2-contributor","name":"Muse Spark 1.2 Contributor","description":"Muse Spark 1.2 is a coding-focused update to Muse Spark 1.1 with improvements in code generation, complex debugging, codebase understanding, and end-to-end developer workflows.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0.1,"output":0.2,"cache_read":0.002},"canonical_model_id":"meta/muse-spark-1.2"},"minimax-m3":{"id":"minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal coding model for long-context reasoning and agent tasks","family":"minimax-m3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/go/anthropic/v1"},"cost":{"input":0.3,"output":1.2,"cache_read":0.06,"tiers":[{"input":0.6,"output":2.4,"cache_read":0.12,"tier":{"type":"context","size":512000}}],"context_over_200k":{"input":0.6,"output":2.4,"cache_read":0.12}},"canonical_model_id":"minimax/MiniMax-M3"},"longcat-2.0":{"id":"longcat-2.0","name":"LongCat-2.0","description":"Meituan LongCat-2.0, a reasoning model with tool calling and a 1M-token context window","family":"longcat","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"meituan/longcat-2.0"},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"longcat-2.5-free":{"id":"longcat-2.5-free","name":"LongCat 2.5 Free","description":"Meituan's multimodal reasoning model for long-horizon coding and agent tasks, with visual understanding and a 1M-token context window","family":"longcat","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":false,"release_date":"2026-11-02","last_updated":"2026-11-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":262144},"provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"meituan/longcat-2.5"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"mimo-v2.5":{"id":"mimo-v2.5","name":"MiMo V2.5","description":"MiMo omni model for text, image, video, audio, and agents","family":"mimo-v2.5","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"xiaomi/mimo-v2.5"},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"space-bunny":{"id":"space-bunny","name":"Space Bunny","description":"Anonymous preview reasoning model for coding, agentic tasks, tool use, and multimodal input","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"release_date":"2026-09-23","last_updated":"2026-09-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":524288,"output":524288},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0.15,"output":0.6,"cache_read":0.03,"cache_write":0}},"hy3":{"id":"hy3","name":"Hy3","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":192000,"output":128000},"provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0.14,"output":0.58,"cache_read":0.035},"canonical_model_id":"tencent/hy3"},"mimo-v2.5-pro":{"id":"mimo-v2.5-pro","name":"MiMo V2.5 Pro","description":"MiMo pro model for strong multimodal reasoning and agent execution","family":"mimo-v2.5-pro","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":128000},"provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0.435,"output":0.87,"cache_read":0.003625},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"hy4-preview":{"id":"hy4-preview","name":"Hy4 preview","description":"A next-generation productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-08-28","last_updated":"2026-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1024000,"output":64000},"provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0.834,"output":2.501,"cache_read":0.042},"canonical_model_id":"tencent/hy4-preview"},"step-5-preview-free":{"id":"step-5-preview-free","name":"Step 5 Preview Free","description":"StepFun's next-generation flagship base model for coding and professional knowledge work, with native text, image, and video input and a 1M-token context window","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":65536},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"stepfun/step-5-preview"},"crouton-alpha-free":{"id":"crouton-alpha-free","name":"Crouton Alpha Free","description":"Stealth reasoning model with text, image, video and PDF input and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-03","last_updated":"2026-11-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":270000},"status":"deprecated","provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0}},"minimax-m3.1-flash-free":{"id":"minimax-m3.1-flash-free","name":"MiniMax M3.1 Flash Free","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":512000},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"minimax-m2.7":{"id":"minimax-m2.7","name":"MiniMax-M2.7","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/go/anthropic/v1"},"cost":{"input":0.3,"output":1.2,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.7"},"qwen3.8-max":{"id":"qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter multimodal flagship for coding, professional work, and long-horizon agentic workflows","family":"qwen3.8-max","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","max":262144}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/go/anthropic/v1"},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max"},"longcat-2.5-preview-free":{"id":"longcat-2.5-preview-free","name":"LongCat 2.5 Preview Free","description":"Meituan's multimodal reasoning model for coding and agent tasks, with image understanding and a 1M-token context window","family":"longcat","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":false,"release_date":"2026-09-25","last_updated":"2026-09-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"status":"deprecated","provider":{"api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"meituan/longcat-2.5-preview"},"claude-haiku-5-5":{"id":"claude-haiku-5-5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://opencode.ai/inference/go/anthropic/v1"},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"muse-spark-1.3-contributor":{"id":"muse-spark-1.3-contributor","name":"Muse Spark 1.3 Contributor","description":"Muse Spark 1.3 is a multimodal reasoning model from Meta for coding and agentic workflows.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"provider":{"npm":"@ai-sdk/openai","api":"https://opencode.ai/inference/go/openai/v1"},"cost":{"input":0.1,"output":0.2,"cache_read":0.002},"canonical_model_id":"meta/muse-spark-1.3"}}},"alibaba-token-plan":{"id":"alibaba-token-plan","env":["ALIBABA_TOKEN_PLAN_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1","name":"Alibaba Token Plan","doc":"https://www.alibabacloud.com/help/en/model-studio/token-plan-overview","models":{"qwen3.6-plus":{"id":"qwen3.6-plus","name":"Qwen3.6 Plus","description":"Earlier Qwen multimodal workhorse for million-token agent and document tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":131072}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"alibaba/qwen3.6-plus"},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.2"},"happyhorse-1.1-r2v":{"id":"happyhorse-1.1-r2v","type":"video","name":"HappyHorse 1.1 Reference-to-Video","description":"Video model for reference-guided video generation","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-07-17","last_updated":"2026-07-17","modalities":{"input":["image","text"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/alibaba","api":"https://token-plan.ap-southeast-1.maas.aliyuncs.com"},"cost":{"input":0,"output":0}},"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k2.6"},"qwen-image-2.0":{"id":"qwen-image-2.0","type":"image","name":"Qwen Image 2.0","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-03-03","last_updated":"2026-03-03","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":8192,"output":0},"provider":{"api":"https://token-plan.ap-southeast-1.maas.aliyuncs.com/api/v1"},"cost":{"input":0,"output":0}},"MiniMax-M2.5":{"id":"MiniMax-M2.5","name":"MiniMax-M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"input":196601,"output":32768},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"minimax/MiniMax-M2.5"},"qwen-image-2.0-pro":{"id":"qwen-image-2.0-pro","type":"image","name":"Qwen Image 2.0 Pro","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-03-03","last_updated":"2026-03-03","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":8192,"output":0},"provider":{"api":"https://token-plan.ap-southeast-1.maas.aliyuncs.com/api/v1"},"cost":{"input":0,"output":0}},"deepseek-v4-pro-0813":{"id":"deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"qwen3.8-flash":{"id":"qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"alibaba/qwen3.8-flash"},"glm-5.1":{"id":"glm-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":128000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.1"},"kimi-k2.5":{"id":"kimi-k2.5","name":"Kimi K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":98304},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k2.5"},"happyhorse-1.1-i2v":{"id":"happyhorse-1.1-i2v","type":"video","name":"HappyHorse 1.1 Image-to-Video","description":"Video model for image-to-video generation","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-07-17","last_updated":"2026-07-17","modalities":{"input":["image","text"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/alibaba","api":"https://token-plan.ap-southeast-1.maas.aliyuncs.com"},"cost":{"input":0,"output":0}},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"deepseek/deepseek-v4-pro"},"qwen3.8-max-preview":{"id":"qwen3.8-max-preview","name":"Qwen3.8 Max Preview","description":"Preview Qwen flagship for million-token multimodal reasoning and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","min":0,"max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-07-19","last_updated":"2026-07-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"alibaba/qwen3.8-max-preview"},"happyhorse-1.1-t2v":{"id":"happyhorse-1.1-t2v","type":"video","name":"HappyHorse 1.1 Text-to-Video","description":"Video model for prompt-driven text-to-video generation","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-07-17","last_updated":"2026-07-17","modalities":{"input":["text"],"output":["video"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/alibaba","api":"https://token-plan.ap-southeast-1.maas.aliyuncs.com"},"cost":{"input":0,"output":0}},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3"},"qwen3.7-plus":{"id":"qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"alibaba/qwen3.7-plus"},"qwen3.7-max":{"id":"qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"alibaba/qwen3.7-max"},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"deepseek/deepseek-v4-flash"},"qwen3.6-flash":{"id":"qwen3.6-flash","name":"Qwen3.6 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.6","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":131072}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"alibaba/qwen3.6-flash"},"wan2.7-image":{"id":"wan2.7-image","type":"image","name":"Wan2.7 Image","description":"Image model for prompt-driven generation, editing, and visual design workflows","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":8192,"output":0},"provider":{"api":"https://token-plan.ap-southeast-1.maas.aliyuncs.com/api/v1"},"cost":{"input":0,"output":0}},"deepseek-v3.2":{"id":"deepseek-v3.2","name":"DeepSeek V3.2","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-03","last_updated":"2025-12-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":65536},"status":"deprecated","cost":{"input":0,"output":0}},"deepseek-v4-flash-0731":{"id":"deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"qwen3.8-max":{"id":"qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","min":0,"max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"alibaba/qwen3.8-max"},"deepseek-v4.1-flash-1017":{"id":"deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"wan2.7-image-pro":{"id":"wan2.7-image-pro","type":"image","name":"Wan2.7 Image Pro","description":"Image model for prompt-driven generation, editing, and visual design workflows","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":8192,"output":0},"provider":{"api":"https://token-plan.ap-southeast-1.maas.aliyuncs.com/api/v1"},"cost":{"input":0,"output":0}},"glm-5":{"id":"glm-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":202752,"output":16384},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-5"}}},"reflection":{"id":"reflection","env":["REFLECTION_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.reflection.ai/openai/v1","name":"Reflection","doc":"https://developers.reflection.ai/models","models":{"Beam-1.0-501B-A23B":{"id":"Beam-1.0-501B-A23B","name":"Beam 1.0 501B A23B","description":"Sparse mixture-of-experts reasoning model with 23B active parameters for coding and agentic workflows","family":"beam","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-06-30","release_date":"2026-10-05","last_updated":"2026-10-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"reflection/beam-1.0-501b-a23b"}}},"helicone":{"id":"helicone","env":["HELICONE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://ai-gateway.helicone.ai/v1","name":"Helicone","doc":"https://helicone.ai/models","models":{"grok-4-1-fast-non-reasoning":{"id":"grok-4-1-fast-non-reasoning","name":"xAI Grok 4.1 Fast Non-Reasoning","description":"xAI's fast agentic tool-calling model with a 2M context window; non-reasoning variant for low-latency responses","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-11","release_date":"2025-11-19","last_updated":"2025-11-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"canonical_model_id":"xai/grok-4.1-fast"},"sonar-reasoning":{"id":"sonar-reasoning","name":"Perplexity Sonar Reasoning","description":"Web-grounded reasoning model for multi-step research and cited answers","family":"sonar-reasoning","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-01-27","last_updated":"2025-01-27","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":127000,"output":4096},"cost":{"input":1,"output":5}},"claude-3.5-sonnet-v2":{"id":"claude-3.5-sonnet-v2","name":"Anthropic: Claude 3.5 Sonnet v2","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-10-22","last_updated":"2024-10-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8192},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-3-5-sonnet-20241022"},"qwen3-coder-30b-a3b-instruct":{"id":"qwen3-coder-30b-a3b-instruct","name":"Qwen3 Coder 30B A3B Instruct","description":"Smaller Qwen coder for efficient local agents and repo-level fixes","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-07","release_date":"2025-07-31","last_updated":"2025-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.1,"output":0.3},"canonical_model_id":"alibaba/qwen3-coder-30b-a3b-instruct"},"qwen3-30b-a3b":{"id":"qwen3-30b-a3b","name":"Qwen3 30B A3B","description":"Sparse MoE Qwen model with 3B active parameters for efficient chat and reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":41000,"output":41000},"cost":{"input":0.08,"output":0.29},"canonical_model_id":"alibaba/qwen3-30b-a3b"},"qwen3-vl-235b-a22b-instruct":{"id":"qwen3-vl-235b-a22b-instruct","name":"Qwen3 VL 235B A22B Instruct","description":"Qwen vision-language instruct model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":16384},"cost":{"input":0.3,"output":1.5},"canonical_model_id":"alibaba/qwen3-vl-235b-a22b-instruct"},"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"Google Gemini 2.5 Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":0,"max":24576}],"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.3,"output":2.5,"cache_read":0.075,"cache_write":0.3},"canonical_model_id":"google/gemini-2.5-flash"},"gpt-4.1-nano":{"id":"gpt-4.1-nano","name":"OpenAI GPT-4.1 Nano","description":"Tiny GPT-4.1 option for classification, routing, and very high-volume tasks","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.1,"output":0.4,"cache_read":0.025},"canonical_model_id":"openai/gpt-4.1-nano"},"claude-4.5-haiku":{"id":"claude-4.5-haiku","name":"Anthropic: Claude 4.5 Haiku","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-10","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8192},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"o1":{"id":"o1","name":"OpenAI: o1","description":"O-series reasoning model for hard analysis, math, coding, and planning","family":"o","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":false,"temperature":false,"knowledge":"2025-01","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":15,"output":60,"cache_read":7.5},"canonical_model_id":"openai/o1"},"gpt-4.1-mini":{"id":"gpt-4.1-mini","name":"OpenAI GPT-4.1 Mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-4.1-mini"},"o4-mini":{"id":"o4-mini","name":"OpenAI o4 Mini","description":"Fast o-series model for compact reasoning, coding, and tool use","family":"o-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-06","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":1.1,"output":4.4,"cache_read":0.275},"canonical_model_id":"openai/o4-mini"},"llama-prompt-guard-2-86m":{"id":"llama-prompt-guard-2-86m","name":"Meta Llama Prompt Guard 2 86M","description":"86M-parameter (mDeBERTa-base) multilingual classifier that detects prompt injection and jailbreak attempts","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-10","release_date":"2025-04-29","last_updated":"2025-04-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":512,"output":2},"cost":{"input":0.01,"output":0.01},"canonical_model_id":"meta/llama-prompt-guard-2-86m"},"kimi-k2-0905":{"id":"kimi-k2-0905","name":"Kimi K2 (09/05)","description":"September 2025 Kimi K2 instruction update with a 256K context and improved agentic coding","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2025-09-05","last_updated":"2025-09-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0.5,"output":2,"cache_read":0.4},"canonical_model_id":"moonshotai/kimi-k2-0905"},"llama-prompt-guard-2-22m":{"id":"llama-prompt-guard-2-22m","name":"Meta Llama Prompt Guard 2 22M","description":"22M-parameter (DeBERTa-xsmall) English classifier that detects prompt injection and jailbreak attempts","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-10","release_date":"2025-04-29","last_updated":"2025-04-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":512,"output":2},"cost":{"input":0.01,"output":0.01},"canonical_model_id":"meta/llama-prompt-guard-2-22m"},"grok-4-fast-reasoning":{"id":"grok-4-fast-reasoning","name":"xAI: Grok 4 Fast Reasoning","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2025-12-18","last_updated":"2025-12-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":2000000},"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"canonical_model_id":"xai/grok-4-fast-reasoning"},"claude-4.5-opus":{"id":"claude-4.5-opus","name":"Anthropic: Claude Opus 4.5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"temperature":true,"knowledge":"2025-11","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"mistral-large-2411":{"id":"mistral-large-2411","name":"Mistral-Large","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2024-11-18","last_updated":"2024-11-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":2,"output":6},"canonical_model_id":"mistral/mistral-large-2411"},"gpt-5":{"id":"gpt-5","name":"OpenAI GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2025-01","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"llama-3.1-8b-instant":{"id":"llama-3.1-8b-instant","name":"Meta Llama 3.1 8B Instant","description":"Compact open Llama model for lightweight chat, drafting, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32678},"cost":{"input":0.05,"output":0.08},"canonical_model_id":"meta/llama-3.1-8b-instruct"},"qwen3-coder":{"id":"qwen3-coder","name":"Qwen3 Coder 480B A35B Instruct Turbo","description":"Open Qwen coding heavyweight for repository reasoning and agentic engineering","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-07","release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0.22,"output":0.95},"canonical_model_id":"alibaba/qwen3-coder-480b-a35b-instruct"},"gpt-5.1-codex":{"id":"gpt-5.1-codex","name":"OpenAI: GPT-5.1 Codex","description":"Codex GPT for repository edits, code review, and practical software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2025-01","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1-codex"},"qwen2.5-coder-7b-fast":{"id":"qwen2.5-coder-7b-fast","name":"Qwen2.5 Coder 7B fast","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-09","release_date":"2024-09-15","last_updated":"2024-09-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":8192},"cost":{"input":0.03,"output":0.09}},"gemini-2.5-pro":{"id":"gemini-2.5-pro","name":"Google Gemini 2.5 Pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.25,"output":10,"cache_read":0.3125,"cache_write":1.25},"canonical_model_id":"google/gemini-2.5-pro"},"sonar-pro":{"id":"sonar-pro","name":"Perplexity Sonar Pro","description":"Deeper Sonar search model with broader retrieval and stronger synthesis","family":"sonar-pro","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2024-01-01","last_updated":"2025-09-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":4096},"cost":{"input":3,"output":15},"canonical_model_id":"perplexity/sonar-pro"},"claude-3-haiku-20240307":{"id":"claude-3-haiku-20240307","name":"Anthropic: Claude 3 Haiku","description":"Legacy model retained for compatibility with older integrations","family":"claude-haiku","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-03","release_date":"2024-03-13","last_updated":"2024-03-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":4096},"cost":{"input":0.25,"output":1.25,"cache_read":0.03,"cache_write":0.3},"canonical_model_id":"anthropic/claude-3-haiku-20240307"},"gpt-4.1-mini-2025-04-14":{"id":"gpt-4.1-mini-2025-04-14","name":"OpenAI GPT-4.1 Mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-4.1-mini"},"llama-4-maverick":{"id":"llama-4-maverick","name":"Meta Llama 4 Maverick 17B 128E","description":"Open multimodal Llama for strong reasoning with efficient everyday serving","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"meta/llama-4-maverick-17b-instruct"},"gpt-4.1":{"id":"gpt-4.1","name":"OpenAI GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"o3":{"id":"o3","name":"OpenAI o3","description":"Deliberate o-series reasoner for hard math, coding, and multi-step analysis","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-06","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/o3"},"grok-4":{"id":"grok-4","name":"xAI Grok 4","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2024-07-09","last_updated":"2024-07-09","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":3,"output":15,"cache_read":0.75}},"deepseek-reasoner":{"id":"deepseek-reasoner","name":"DeepSeek Reasoner","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-01","last_updated":"2026-02-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":64000},"cost":{"input":0.56,"output":1.68,"cache_read":0.07},"canonical_model_id":"deepseek/deepseek-reasoner"},"sonar":{"id":"sonar","name":"Perplexity Sonar","description":"Fast web-grounded Sonar for current answers, citations, and lightweight retrieval","family":"sonar","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2024-01-01","last_updated":"2025-09-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":127000,"output":4096},"cost":{"input":1,"output":1},"canonical_model_id":"perplexity/sonar"},"gemini-3-pro-preview":{"id":"gemini-3-pro-preview","name":"Google Gemini 3 Pro Preview","description":"Preview Gemini flagship for complex reasoning, coding, and rich multimodal prompts","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-11","release_date":"2025-11-18","last_updated":"2025-11-18","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2},"canonical_model_id":"google/gemini-3-pro-preview"},"claude-3.5-haiku":{"id":"claude-3.5-haiku","name":"Anthropic: Claude 3.5 Haiku","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-10-22","last_updated":"2024-10-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8192},"cost":{"input":0.8,"output":4,"cache_read":0.08,"cache_write":1},"canonical_model_id":"anthropic/claude-3-5-haiku-20241022"},"gpt-oss-20b":{"id":"gpt-oss-20b","name":"OpenAI GPT-OSS 20b","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.05,"output":0.2},"canonical_model_id":"openai/gpt-oss-20b"},"o3-mini":{"id":"o3-mini","name":"OpenAI o3 Mini","description":"Smaller o-series reasoner for economical coding, math, and planning tasks","family":"o-mini","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2023-10","release_date":"2024-12-20","last_updated":"2025-01-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":1.1,"output":4.4,"cache_read":0.55},"canonical_model_id":"openai/o3-mini"},"gpt-5.1-chat-latest":{"id":"gpt-5.1-chat-latest","name":"OpenAI GPT-5.1 Chat","description":"Chat-tuned GPT-5.1 for polished assistants, writing, and product conversations","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2025-01","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1-chat-latest"},"deepseek-tng-r1t2-chimera":{"id":"deepseek-tng-r1t2-chimera","name":"DeepSeek TNG R1T2 Chimera","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek-thinking","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-07","release_date":"2025-07-02","last_updated":"2025-07-02","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":130000,"output":163840},"cost":{"input":0.3,"output":1.2}},"llama-3.1-8b-instruct":{"id":"llama-3.1-8b-instruct","name":"Meta Llama 3.1 8B Instruct","description":"Compact open Llama model for lightweight chat, drafting, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"output":16384},"cost":{"input":0.02,"output":0.05},"canonical_model_id":"meta/llama-3.1-8b-instruct"},"o1-mini":{"id":"o1-mini","name":"OpenAI: o1-mini","description":"O-series reasoning model for hard analysis, math, coding, and planning","family":"o-mini","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":false,"knowledge":"2025-01","release_date":"2025-01-01","last_updated":"2025-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":65536},"cost":{"input":1.1,"output":4.4,"cache_read":0.55}},"deepseek-v3":{"id":"deepseek-v3","name":"DeepSeek V3","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2024-12-26","last_updated":"2024-12-26","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"cost":{"input":0.56,"output":1.68,"cache_read":0.07}},"deepseek-v3.1-terminus":{"id":"deepseek-v3.1-terminus","name":"DeepSeek V3.1 Terminus","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2025-09-22","last_updated":"2025-09-22","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.27,"output":1,"cache_read":0.216}},"gpt-5-pro":{"id":"gpt-5-pro","name":"OpenAI: GPT-5 Pro","description":"Higher-accuracy GPT-5 tier for tough analysis, coding reviews, and planning","family":"gpt-pro","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"temperature":false,"knowledge":"2025-01","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":272000,"output":32768},"cost":{"input":15,"output":120},"canonical_model_id":"openai/gpt-5-pro"},"claude-sonnet-4-5-20250929":{"id":"claude-sonnet-4-5-20250929","name":"Anthropic: Claude Sonnet 4.5 (20250929)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5-20250929"},"sonar-reasoning-pro":{"id":"sonar-reasoning-pro","name":"Perplexity Sonar Reasoning Pro","description":"Web-grounded Sonar for multi-step research questions that need cited reasoning","family":"sonar-reasoning","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2024-01-01","last_updated":"2025-09-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":127000,"output":4096},"cost":{"input":2,"output":8},"canonical_model_id":"perplexity/sonar-reasoning-pro"},"kimi-k2-0711":{"id":"kimi-k2-0711","name":"Kimi K2 (07/11)","description":"Kimi model for long-context chat, coding, and agentic reasoning","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-07-11","last_updated":"2025-07-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.57,"output":2.3},"canonical_model_id":"moonshotai/kimi-k2"},"gemini-2.5-flash-lite":{"id":"gemini-2.5-flash-lite","name":"Google Gemini 2.5 Flash Lite","description":"Lean Gemini 2.5 lane for cheap multimodal traffic and quick agents","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":512,"max":24576}],"tool_call":true,"temperature":true,"knowledge":"2025-07","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.1,"output":0.4,"cache_read":0.025,"cache_write":0.1},"canonical_model_id":"google/gemini-2.5-flash-lite"},"grok-3":{"id":"grok-3","name":"xAI Grok 3","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-06","release_date":"2024-06-01","last_updated":"2024-06-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.75}},"chatgpt-4o-latest":{"id":"chatgpt-4o-latest","name":"OpenAI ChatGPT-4o","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-08","release_date":"2024-08-14","last_updated":"2024-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":5,"output":20,"cache_read":2.5}},"claude-opus-4-1-20250805":{"id":"claude-opus-4-1-20250805","name":"Anthropic: Claude Opus 4.1 (20250805)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024,"max":31999}],"tool_call":true,"temperature":true,"knowledge":"2025-08","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-1-20250805"},"ernie-4.5-21b-a3b-thinking":{"id":"ernie-4.5-21b-a3b-thinking","name":"Baidu Ernie 4.5 21B A3B Thinking","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"ernie","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"knowledge":"2025-03","release_date":"2025-03-16","last_updated":"2025-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8000},"cost":{"input":0.07,"output":0.28}},"hermes-2-pro-llama-3-8b":{"id":"hermes-2-pro-llama-3-8b","name":"Hermes 2 Pro Llama 3 8B","description":"Llama 3 fine-tune optimized for function calling, structured JSON responses, and dialogue","family":"hermes","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-05","release_date":"2024-04-30","last_updated":"2024-04-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.14,"output":0.14},"canonical_model_id":"nousresearch/hermes-2-pro-llama-3-8b"},"claude-sonnet-4":{"id":"claude-sonnet-4","name":"Anthropic: Claude Sonnet 4","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-0"},"grok-4-1-fast-reasoning":{"id":"grok-4-1-fast-reasoning","name":"xAI Grok 4.1 Fast Reasoning","description":"xAI's fast agentic tool-calling model with a 2M context window and built-in reasoning","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-11","release_date":"2025-11-19","last_updated":"2025-11-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":2000000},"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"canonical_model_id":"xai/grok-4.1-fast-reasoning"},"gpt-5.1":{"id":"gpt-5.1","name":"OpenAI GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2025-01","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1"},"claude-haiku-4-5-20251001":{"id":"claude-haiku-4-5-20251001","name":"Anthropic: Claude 4.5 Haiku (20251001)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-10","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8192},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"llama-3.3-70b-versatile":{"id":"llama-3.3-70b-versatile","name":"Meta Llama 3.3 70B Versatile","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32678},"cost":{"input":0.59,"output":0.79},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"gpt-5-mini":{"id":"gpt-5-mini","name":"OpenAI GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2025-01","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"gpt-5.1-codex-mini":{"id":"gpt-5.1-codex-mini","name":"OpenAI: GPT-5.1 Codex Mini","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2025-01","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5.1-codex-mini"},"llama-3.3-70b-instruct":{"id":"llama-3.3-70b-instruct","name":"Meta Llama 3.3 70B Instruct","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16400},"cost":{"input":0.13,"output":0.39},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"llama-4-scout":{"id":"llama-4-scout","name":"Meta Llama 4 Scout 17B 16E","description":"Open Llama with long-context vision for efficient multimodal agents","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"cost":{"input":0.08,"output":0.3},"canonical_model_id":"meta/llama-4-scout-17b-instruct"},"kimi-k2-thinking":{"id":"kimi-k2-thinking","name":"Kimi K2 Thinking","description":"Thinking Kimi model for slower research passes, planning, and hard technical questions","family":"kimi-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-11","release_date":"2025-11-06","last_updated":"2025-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":262144},"cost":{"input":0.48,"output":2},"canonical_model_id":"moonshotai/kimi-k2-thinking"},"claude-opus-4":{"id":"claude-opus-4","name":"Anthropic: Claude Opus 4","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024,"max":31999}],"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-0"},"mistral-nemo":{"id":"mistral-nemo","name":"Mistral Nemo","description":"Efficient Mistral-NVIDIA open model for multilingual chat and local deployment","family":"mistral-nemo","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-07","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16400},"cost":{"input":20,"output":40},"canonical_model_id":"mistral/mistral-nemo"},"llama-guard-4":{"id":"llama-guard-4","name":"Meta Llama Guard 4 12B","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"llama","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-01-01","last_updated":"2025-01-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":1024},"cost":{"input":0.21,"output":0.21}},"gpt-5-nano":{"id":"gpt-5-nano","name":"OpenAI GPT-5 Nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2025-01","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-nano"},"glm-4.6":{"id":"glm-4.6","name":"Zai GLM-4.6","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.45,"output":1.5},"canonical_model_id":"zhipuai/glm-4.6"},"o3-pro":{"id":"o3-pro","name":"OpenAI o3 Pro","description":"High-effort o3 tier for difficult technical reasoning and careful answers","family":"o-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-06","release_date":"2025-06-10","last_updated":"2025-06-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":20,"output":80},"canonical_model_id":"openai/o3-pro"},"deepseek-r1-distill-llama-70b":{"id":"deepseek-r1-distill-llama-70b","name":"DeepSeek R1 Distill Llama 70B","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-01-20","last_updated":"2025-01-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"cost":{"input":0.03,"output":0.13}},"grok-code-fast-1":{"id":"grok-code-fast-1","name":"xAI Grok Code Fast 1","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-09-02","last_updated":"2025-09-02","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":10000},"cost":{"input":0.2,"output":1.5,"cache_read":0.02},"canonical_model_id":"xai/grok-code-fast-1"},"gemma2-9b-it":{"id":"gemma2-9b-it","name":"Google Gemma 2","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-06","release_date":"2024-06-25","last_updated":"2024-06-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":8192},"cost":{"input":0.01,"output":0.03}},"gpt-4o":{"id":"gpt-4o","name":"OpenAI GPT-4o","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-05","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o"},"qwen3-next-80b-a3b-instruct":{"id":"qwen3-next-80b-a3b-instruct","name":"Qwen3 Next 80B A3B Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":16384},"cost":{"input":0.14,"output":1.4},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-instruct"},"qwen3-32b":{"id":"qwen3-32b","name":"Qwen3 32B","description":"Dense open Qwen model for self-hosted chat, reasoning, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":40960},"cost":{"input":0.29,"output":0.59},"canonical_model_id":"alibaba/qwen3-32b"},"gpt-5-codex":{"id":"gpt-5-codex","name":"OpenAI: GPT-5 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2025-01","release_date":"2025-09-15","last_updated":"2025-09-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5-codex"},"deepseek-v3.2":{"id":"deepseek-v3.2","name":"DeepSeek V3.2","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes, sparse attention, and tool-use","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":65536},"cost":{"input":0.27,"output":0.41},"canonical_model_id":"deepseek/deepseek-v3.2"},"qwen3-235b-a22b-thinking":{"id":"qwen3-235b-a22b-thinking","name":"Qwen3 235B A22B Thinking","description":"Updated large open Qwen3 MoE thinking model for reasoning, math, coding, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"knowledge":"2025-07","release_date":"2025-07-25","last_updated":"2025-07-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":81920},"cost":{"input":0.3,"output":2.9},"canonical_model_id":"alibaba/qwen3-235b-a22b-thinking-2507"},"claude-3.7-sonnet":{"id":"claude-3.7-sonnet","name":"Anthropic: Claude 3.7 Sonnet","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-02","release_date":"2025-02-19","last_updated":"2025-02-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-3-7-sonnet-20250219"},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"OpenAI GPT-OSS 120b","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.04,"output":0.16},"canonical_model_id":"openai/gpt-oss-120b"},"gemma-3-12b-it":{"id":"gemma-3-12b-it","name":"Google Gemma 3 12B","description":"Open multimodal Gemma instruction model for multilingual text generation and image understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-12","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"cost":{"input":0.05,"output":0.1},"canonical_model_id":"google/gemma-3-12b-it"},"mistral-small":{"id":"mistral-small","name":"Mistral Small 3.2","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-03","release_date":"2025-06-20","last_updated":"2025-06-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.075,"output":0.2},"canonical_model_id":"mistral/mistral-small-2506"},"gpt-5-chat-latest":{"id":"gpt-5-chat-latest","name":"OpenAI GPT-5 Chat Latest","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":false,"knowledge":"2024-09","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":272000,"output":16384},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5-chat-latest"},"grok-4-fast-non-reasoning":{"id":"grok-4-fast-non-reasoning","name":"xAI Grok 4 Fast Non-Reasoning","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2025-12-18","last_updated":"2025-12-18","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":2000000},"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"canonical_model_id":"xai/grok-4-fast-non-reasoning"},"llama-3.1-8b-instruct-turbo":{"id":"llama-3.1-8b-instruct-turbo","name":"Meta Llama 3.1 8B Instruct Turbo","description":"Compact open Llama model for lightweight chat, drafting, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"cost":{"input":0.02,"output":0.03},"canonical_model_id":"meta/llama-3.1-8b-instruct"},"grok-3-mini":{"id":"grok-3-mini","name":"xAI Grok 3 Mini","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-06","release_date":"2024-06-01","last_updated":"2024-06-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":131072},"cost":{"input":0.3,"output":0.5,"cache_read":0.075}},"claude-4.5-sonnet":{"id":"claude-4.5-sonnet","name":"Anthropic: Claude Sonnet 4.5","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"gpt-4o-mini":{"id":"gpt-4o-mini","name":"OpenAI GPT-4o-mini","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-4o-mini"},"claude-opus-4-1":{"id":"claude-opus-4-1","name":"Anthropic: Claude Opus 4.1","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024,"max":31999}],"tool_call":true,"temperature":true,"knowledge":"2025-08","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-1"},"sonar-deep-research":{"id":"sonar-deep-research","name":"Perplexity Sonar Deep Research","description":"Sonar search model for autonomous research and citation-backed long-form reports","family":"sonar","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-02-01","last_updated":"2025-09-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":127000,"output":4096},"cost":{"input":2,"output":8},"canonical_model_id":"perplexity/sonar-deep-research"}}},"upstage":{"id":"upstage","env":["UPSTAGE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.upstage.ai/v1/solar","name":"Upstage","doc":"https://developers.upstage.ai/docs/apis/chat","models":{"solar-pro4":{"id":"solar-pro4","name":"Solar Pro 4","description":"Upstage's flagship model, specialized for agentic use","family":"solar-pro","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02","release_date":"2026-08-06","last_updated":"2026-08-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"upstage/solar-pro4"},"solar-pro2":{"id":"solar-pro2","name":"solar-pro2","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"solar-pro","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-03","release_date":"2025-05-20","last_updated":"2025-05-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":65536,"output":8192},"cost":{"input":0.25,"output":0.25},"canonical_model_id":"upstage/solar-pro2"},"solar-mini":{"id":"solar-mini","name":"solar-mini","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"solar-mini","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-09","release_date":"2024-06-12","last_updated":"2025-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":4096},"cost":{"input":0.15,"output":0.15}},"solar-mini4":{"id":"solar-mini4","name":"Solar Mini 4","description":"Upstage's compact, cost-efficient model for agentic use","family":"solar-mini","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"output":131072},"cost":{"input":0.1,"output":0.4,"cache_read":0.01},"canonical_model_id":"upstage/solar-mini4"},"solar-pro3":{"id":"solar-pro3","name":"solar-pro3","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"solar-pro","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-03","release_date":"2026-01-26","last_updated":"2026-03-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":8192},"cost":{"input":0.25,"output":0.25},"canonical_model_id":"upstage/solar-pro3"}}},"inferx":{"id":"inferx","env":["INFERX_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://model.inferx.net/endpoints/v1","name":"InferX","doc":"https://model.inferx.net/endpoints","models":{"Qwen3-Coder-Next-FP8-no-thinking":{"id":"Qwen3-Coder-Next-FP8-no-thinking","name":"Qwen3-Coder-Next-FP8-no-thinking","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-03","last_updated":"2026-02-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":260000,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3-coder-next"},"mimo-v25":{"id":"mimo-v25","name":"mimo-v25","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":100000},"cost":{"input":0,"output":0},"canonical_model_id":"xiaomi/mimo-v2.5"},"Qwen3-Coder-Next-FP8":{"id":"Qwen3-Coder-Next-FP8","name":"Qwen3 Coder Next FP8","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-03","last_updated":"2026-02-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256144,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3-coder-next"},"Qwen3.6-35B-A3B-FP8":{"id":"Qwen3.6-35B-A3B-FP8","name":"Qwen3.6 35B A3B FP8","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"Qwen3.6-27B-FP8":{"id":"Qwen3.6-27B-FP8","name":"Qwen3.6 27B FP8","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3.6-27b"},"Ornith-1.0-35B-FP8":{"id":"Ornith-1.0-35B-FP8","name":"Ornith-1.0-35B-FP8","description":"Large coding-reasoning model for agentic software tasks and RL search","family":"ornith","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-06-25","last_updated":"2026-06-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":100000},"cost":{"input":0,"output":0},"canonical_model_id":"deepreinforce/ornith-1.0-35b"},"Devstral-2-123B-Instruct-2512-int4-AutoRound":{"id":"Devstral-2-123B-Instruct-2512-int4-AutoRound","name":"Devstral-2-123B-Instruct-2512-int4-AutoRound","description":"Mistral's coding-agent model for repository work, terminal tasks, and software fixes","family":"devstral","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-12","release_date":"2025-12-09","last_updated":"2025-12-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"cost":{"input":0,"output":0},"canonical_model_id":"mistral/devstral-2512"},"Agents-A1":{"id":"Agents-A1","name":"Agents-A1","description":"35B MoE agentic model built for long-horizon search, engineering, and scientific reasoning tasks","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"release_date":"2026-06-26","last_updated":"2026-06-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":100000},"cost":{"input":0,"output":0}},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"deepseek-v4-flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":100000},"cost":{"input":0,"output":0},"canonical_model_id":"deepseek/deepseek-v4-flash"},"gemma-4-31B-it-fp8":{"id":"gemma-4-31B-it-fp8","name":"Gemma 4 31B IT FP8","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0,"output":0},"canonical_model_id":"google/gemma-4-31b-it"},"Qwen3.6-35B-A3B-fp8-no-thinking":{"id":"Qwen3.6-35B-A3B-fp8-no-thinking","name":"Qwen3.6-35B-A3B-fp8-no-thinking","description":"Qwen3.6-35B-A3B-fp8 disable thinking","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"Qwen3-Embedding-8B":{"id":"Qwen3-Embedding-8B","type":"embedding","name":"Qwen3-Embedding-8B","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-06-05","last_updated":"2025-06-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":0},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3-embedding-8b"}}},"lynkr":{"id":"lynkr","env":["LYNKR_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"http://127.0.0.1:8081/v1","name":"Lynkr","doc":"https://github.com/Fast-Editor/Lynkr","models":{"lynkr-auto":{"id":"lynkr-auto","name":"Lynkr Auto (complexity routing)","description":"Virtual model: Lynkr scores each request on complexity and routes it to the tier model the user configured (local Ollama/llama.cpp for simple requests, configured cloud providers for complex ones).","family":"auto","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-12-03","last_updated":"2026-07-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"cost":{"input":0,"output":0}}}},"alibaba-cn":{"id":"alibaba-cn","env":["DASHSCOPE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://dashscope.aliyuncs.com/compatible-mode/v1","name":"Alibaba (China)","doc":"https://www.alibabacloud.com/help/en/model-studio/models","models":{"qwen3.6-plus":{"id":"qwen3.6-plus","name":"Qwen3.6 Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":81920}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.276,"output":1.651,"cache_read":0.0276,"cache_write":0.345,"tiers":[{"input":1.101,"output":6.602,"cache_read":0.1101,"cache_write":1.37625,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":1.101,"output":6.602,"cache_read":0.1101,"cache_write":1.37625}}},"qwen3-coder-30b-a3b-instruct":{"id":"qwen3-coder-30b-a3b-instruct","name":"Qwen3-Coder 30B-A3B Instruct","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04","last_updated":"2025-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"status":"deprecated","cost":{"input":0.216,"output":0.861,"tiers":[{"input":0.323,"output":1.291,"tier":{"type":"context","size":32000}},{"input":0.538,"output":2.151,"tier":{"type":"context","size":128000}}]}},"deepseek-v3-2-exp":{"id":"deepseek-v3-2-exp","name":"DeepSeek V3.2 Exp","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-01-01","last_updated":"2025-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":65536},"status":"deprecated","cost":{"input":0.287,"output":0.431}},"deepseek-r1-0528":{"id":"deepseek-r1-0528","name":"DeepSeek R1 0528","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-05-28","last_updated":"2025-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":16384},"status":"deprecated","cost":{"input":0.574,"output":2.294}},"deepseek-r1-distill-qwen-7b":{"id":"deepseek-r1-distill-qwen-7b","name":"DeepSeek R1 Distill Qwen 7B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-01-01","last_updated":"2025-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":16384},"status":"deprecated","cost":{"input":0.072,"output":0.144}},"deepseek-r1-distill-qwen-32b":{"id":"deepseek-r1-distill-qwen-32b","name":"DeepSeek R1 Distill Qwen 32B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-01-01","last_updated":"2025-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":16384},"status":"deprecated","cost":{"input":0.287,"output":0.861}},"qwen-vl-plus":{"id":"qwen-vl-plus","name":"Qwen-VL Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-01-25","last_updated":"2025-08-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":8192},"status":"deprecated","cost":{"input":0.115,"output":0.287}},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":1.1,"output":3.851,"cache_read":0.275,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.2"},"deepseek-r1-distill-qwen-14b":{"id":"deepseek-r1-distill-qwen-14b","name":"DeepSeek R1 Distill Qwen 14B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-01-01","last_updated":"2025-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":16384},"status":"deprecated","cost":{"input":0.144,"output":0.431}},"kimi-k2.6":{"id":"kimi-k2.6","name":"Moonshot Kimi K2.6","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":81920}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-21","last_updated":"2026-04-21","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0.929,"output":3.858,"cache_read":0.1858,"cache_write":1.16125}},"tongyi-intent-detect-v3":{"id":"tongyi-intent-detect-v3","name":"Tongyi Intent Detect V3","description":"General-purpose chat model for instruction following, writing, and analysis","family":"yi","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-04","release_date":"2024-01","last_updated":"2024-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":1024},"cost":{"input":0.058,"output":0.144}},"deepseek-v3-1":{"id":"deepseek-v3-1","name":"DeepSeek V3.1","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-01-01","last_updated":"2025-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":65536},"status":"deprecated","cost":{"input":0.574,"output":1.721}},"qwen3.8-omni-flash":{"id":"qwen3.8-omni-flash","name":"Qwen3.8 Omni Flash","description":"Qwen omni model for text, vision, audio, and multimodal agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-17","last_updated":"2026-09-17","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.113,"output":0.382,"cache_read":0.014},"canonical_model_id":"alibaba/qwen3.8-omni-flash"},"qwen-plus-character":{"id":"qwen-plus-character","name":"Qwen Plus Character","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-04","release_date":"2024-01","last_updated":"2024-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":4096},"cost":{"input":0.115,"output":0.287}},"qwen3-coder-480b-a35b-instruct":{"id":"qwen3-coder-480b-a35b-instruct","name":"Qwen3-Coder 480B-A35B Instruct","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04","last_updated":"2025-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"status":"deprecated","cost":{"input":0.861,"output":3.441,"tiers":[{"input":1.291,"output":5.161,"tier":{"type":"context","size":32000}},{"input":2.151,"output":8.602,"tier":{"type":"context","size":128000}}]}},"moonshot-kimi-k2-instruct":{"id":"moonshot-kimi-k2-instruct","name":"Moonshot Kimi K2 Instruct","description":"Kimi model for long-context chat, coding, and agentic reasoning","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-01-01","last_updated":"2025-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"status":"deprecated","cost":{"input":0.574,"output":2.294}},"MiniMax-M2.5":{"id":"MiniMax-M2.5","name":"MiniMax-M2.5","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2}},"qwen2-5-omni-7b":{"id":"qwen2-5-omni-7b","name":"Qwen2.5-Omni 7B","description":"Qwen omni model for text, vision, audio, and multimodal agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-12","last_updated":"2024-12","modalities":{"input":["text","image","audio","video"],"output":["text","audio"]},"open_weights":true,"limit":{"context":32768,"output":2048},"status":"deprecated","cost":{"input":0.087,"output":0.345,"input_audio":5.448}},"qwen-max":{"id":"qwen-max","name":"Qwen Max","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-04-03","last_updated":"2025-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":8192},"cost":{"input":0.345,"output":1.377}},"qwen3-coder-plus":{"id":"qwen3-coder-plus","name":"Qwen3 Coder Plus","description":"Hosted Qwen coder for software agents, repo edits, and long-context code","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-23","last_updated":"2026-09-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":0.574,"output":2.296,"tiers":[{"input":0.861,"output":3.444,"tier":{"type":"context","size":32000}},{"input":1.435,"output":5.74,"tier":{"type":"context","size":128000}},{"input":2.87,"output":28.7,"tier":{"type":"context","size":256000}}]}},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":2.827,"output":14.133,"cache_read":0.283},"canonical_model_id":"moonshotai/kimi-k3"},"qwen3-14b":{"id":"qwen3-14b","name":"Qwen3 14B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":38912}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04","last_updated":"2025-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"status":"deprecated","cost":{"input":0.144,"output":0.574,"reasoning":1.434}},"deepseek-r1-distill-qwen-1-5b":{"id":"deepseek-r1-distill-qwen-1-5b","name":"DeepSeek R1 Distill Qwen 1.5B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"release_date":"2025-01-01","last_updated":"2025-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":16384},"cost":{"input":0,"output":0}},"qwen3-omni-flash-realtime":{"id":"qwen3-omni-flash-realtime","type":"realtime","name":"Qwen3-Omni Flash Realtime","description":"Qwen omni model for text, vision, audio, and multimodal agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-09-15","last_updated":"2025-09-15","modalities":{"input":["text","image","audio"],"output":["text","audio"]},"open_weights":false,"limit":{"context":65536,"output":16384},"status":"deprecated","provider":{"api":"wss://dashscope.aliyuncs.com/api-ws/v1/realtime"},"cost":{"input":0.23,"output":0.918,"input_audio":3.584,"output_audio":7.168}},"qwen3.6-max-preview":{"id":"qwen3.6-max-preview","name":"Qwen3.6 Max Preview","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":131072}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-20","last_updated":"2026-04-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":245800,"output":65536},"status":"deprecated","cost":{"input":1.32,"output":7.9,"cache_read":0.132}},"deepseek-r1":{"id":"deepseek-r1","name":"DeepSeek R1","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-01-01","last_updated":"2025-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":16384},"status":"deprecated","cost":{"input":0.574,"output":2.294}},"qwen3.5-flash":{"id":"qwen3.5-flash","name":"Qwen3.5 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":81920}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-23","last_updated":"2026-09-22","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.029,"output":0.287,"reasoning":0.287,"tiers":[{"input":0.115,"output":1.147,"reasoning":1.147,"tier":{"type":"context","size":128000}},{"input":0.172,"output":1.72,"reasoning":1.72,"tier":{"type":"context","size":256000}}]}},"deepseek-r1-distill-llama-8b":{"id":"deepseek-r1-distill-llama-8b","name":"DeepSeek R1 Distill Llama 8B","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-01-01","last_updated":"2025-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":16384},"status":"deprecated","cost":{"input":0,"output":0}},"qwen-plus":{"id":"qwen-plus","name":"Qwen Plus","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":81920}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-01-25","last_updated":"2025-09-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":0.115,"output":0.287,"reasoning":1.147,"cache_read":0.023,"cache_write":0.144,"tiers":[{"input":0.345,"output":2.868,"reasoning":3.441,"cache_read":0.069,"cache_write":0.43125,"tier":{"type":"context","size":128000}},{"input":0.689,"output":6.881,"reasoning":9.175,"cache_read":0.1378,"cache_write":0.86125,"tier":{"type":"context","size":256000}}]}},"qwen3.8-flash":{"id":"qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.11875,"output":0.40073,"cache_read":0.014844,"cache_write":0.185547},"canonical_model_id":"alibaba/qwen3.8-flash"},"glm-5.1":{"id":"glm-5.1","name":"GLM-5.1","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":131072}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-14","last_updated":"2026-04-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":128000},"cost":{"input":0.825,"output":3.301,"cache_read":0.165,"cache_write":1.03125,"tiers":[{"input":1.1,"output":3.851,"cache_read":0.22,"cache_write":1.375,"tier":{"type":"context","size":32000}}]}},"kimi-k2.5":{"id":"kimi-k2.5","name":"Moonshot Kimi K2.5","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":81920}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.574,"output":3.011,"cache_read":0.1148,"cache_write":0.7175}},"qwen-doc-turbo":{"id":"qwen-doc-turbo","name":"Qwen Doc Turbo","description":"Efficient Qwen model for fast chat, extraction, and high-volume workloads","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-01","last_updated":"2024-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":8192},"cost":{"input":0.087,"output":0.144}},"qwen3-next-80b-a3b-thinking":{"id":"qwen3-next-80b-a3b-thinking","name":"Qwen3-Next 80B-A3B (Thinking)","description":"Qwen reasoning model for deliberate problem solving, math, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"status":"deprecated","cost":{"input":0.144,"output":1.434}},"qwen3-omni-flash":{"id":"qwen3-omni-flash","name":"Qwen3-Omni Flash","description":"Qwen omni model for text, vision, audio, and multimodal agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-09-15","last_updated":"2025-09-15","modalities":{"input":["text","image","audio","video"],"output":["text","audio"]},"open_weights":false,"limit":{"context":65536,"output":16384},"cost":{"input":0.258,"output":0.989,"input_audio":2.265,"output_audio":8.974}},"qwen3.5-397b-a17b":{"id":"qwen3.5-397b-a17b","name":"Qwen3.5 397B-A17B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":81920}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-16","last_updated":"2026-02-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.172,"output":1.032,"reasoning":1.032,"tiers":[{"input":0.43,"output":2.58,"reasoning":2.58,"tier":{"type":"context","size":128000}}]}},"qwen-mt-plus":{"id":"qwen-mt-plus","name":"Qwen-MT Plus","description":"Translation model for multilingual conversion, localization, and cross-language workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-04","release_date":"2025-01","last_updated":"2025-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":16384,"output":8192},"cost":{"input":0.259,"output":0.775}},"qwen3-vl-30b-a3b":{"id":"qwen3-vl-30b-a3b","name":"Qwen3-VL 30B-A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04","last_updated":"2025-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"status":"deprecated","cost":{"input":0.108,"output":0.431,"reasoning":1.076}},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.29754,"output":1.19015,"cache_read":0.01488},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"qwen-long":{"id":"qwen-long","name":"Qwen Long","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-01-25","last_updated":"2025-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":10000000,"output":8192},"cost":{"input":0.072,"output":0.287}},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":1.65,"output":3.301},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek-v3":{"id":"deepseek-v3","name":"DeepSeek V3","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2024-12-01","last_updated":"2024-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":65536,"output":8192},"status":"deprecated","cost":{"input":0.287,"output":1.147}},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.1,"output":3.851,"cache_read":0.275,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3"},"qwen-math-plus":{"id":"qwen-math-plus","name":"Qwen Math Plus","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-08-16","last_updated":"2024-09-19","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":4096,"output":3072},"status":"deprecated","cost":{"input":0.574,"output":1.721}},"qwen3.7-plus":{"id":"qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":262144}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.276,"output":1.101,"cache_read":0.0552,"cache_write":0.345,"tiers":[{"input":0.826,"output":3.301,"cache_read":0.1652,"cache_write":1.0325,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":0.826,"output":3.301,"cache_read":0.1652,"cache_write":1.0325}},"canonical_model_id":"alibaba/qwen3.7-plus"},"qwen3.7-max":{"id":"qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":262144}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":1.65,"output":4.951,"cache_read":0.33,"cache_write":2.0625},"canonical_model_id":"alibaba/qwen3.7-max"},"qwen3-asr-flash":{"id":"qwen3-asr-flash","type":"transcription","name":"Qwen3-ASR Flash","description":"Speech transcription model for accurate audio-to-text and captioning workflows","family":"qwen","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2024-04","release_date":"2025-09-08","last_updated":"2025-09-08","modalities":{"input":["audio"],"output":["text"]},"open_weights":false,"limit":{"context":53248,"output":4096}},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"deprecated","cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"deepseek/deepseek-v4-flash"},"qwen3.6-flash":{"id":"qwen3.6-flash","name":"Qwen3.6 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.6","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":131072}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.165,"output":0.99,"cache_read":0.0165,"cache_write":0.20625,"tiers":[{"input":0.66,"output":3.961,"cache_read":0.066,"cache_write":0.825,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":0.66,"output":3.961,"cache_read":0.066,"cache_write":0.825}},"canonical_model_id":"alibaba/qwen3.6-flash"},"qwen3.7-flash":{"id":"qwen3.7-flash","name":"Qwen3.7 Flash","description":"Lightweight multimodal Qwen model for high-throughput text, image, and video tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":262144}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":991808,"output":131072},"cost":{"input":0.02962,"output":0.1185,"cache_read":0.005924,"cache_write":0.03703,"tiers":[{"input":0.08887,"output":0.35549,"cache_read":0.017774,"cache_write":0.11109,"tier":{"type":"context","size":32000}},{"input":0.17774,"output":0.71098,"cache_read":0.035548,"cache_write":0.22218,"tier":{"type":"context","size":256000}}]},"canonical_model_id":"alibaba/qwen3.7-flash"},"qwen3-max":{"id":"qwen3-max","name":"Qwen3 Max","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":81920}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-23","last_updated":"2026-09-22","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536},"status":"deprecated","cost":{"input":0.359,"output":1.434,"reasoning":1.434,"tiers":[{"input":0.574,"output":2.294,"reasoning":2.294,"tier":{"type":"context","size":32000}},{"input":1.004,"output":4.014,"reasoning":4.014,"tier":{"type":"context","size":128000}}]}},"qwen-mt-turbo":{"id":"qwen-mt-turbo","name":"Qwen-MT Turbo","description":"Translation model for multilingual conversion, localization, and cross-language workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-04","release_date":"2025-01","last_updated":"2025-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":16384,"output":8192},"status":"deprecated","cost":{"input":0.101,"output":0.28}},"qwen-omni-turbo":{"id":"qwen-omni-turbo","name":"Qwen-Omni Turbo","description":"Qwen omni model for text, vision, audio, and multimodal agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-01-19","last_updated":"2025-03-26","modalities":{"input":["text","image","audio","video"],"output":["text","audio"]},"open_weights":false,"limit":{"context":32768,"output":2048},"status":"deprecated","cost":{"input":0.058,"output":0.23,"input_audio":3.584,"output_audio":7.168}},"kimi-k2-thinking":{"id":"kimi-k2-thinking","name":"Moonshot Kimi K2 Thinking","description":"Kimi reasoning model for long-horizon research, planning, and tool use","family":"kimi-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2025-11-06","last_updated":"2025-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"status":"deprecated","cost":{"input":0.574,"output":2.294}},"qwen-turbo":{"id":"qwen-turbo","name":"Qwen Turbo","description":"Efficient Qwen model for fast chat, extraction, and high-volume workloads","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":38912}],"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-11-01","last_updated":"2025-07-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":16384},"status":"deprecated","cost":{"input":0.044,"output":0.087,"reasoning":0.431}},"qwen3-vl-235b-a22b":{"id":"qwen3-vl-235b-a22b","name":"Qwen3-VL 235B-A22B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04","last_updated":"2025-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"status":"deprecated","cost":{"input":0.286705,"output":1.14682,"reasoning":2.867051}},"deepseek-r1-distill-llama-70b":{"id":"deepseek-r1-distill-llama-70b","name":"DeepSeek R1 Distill Llama 70B","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"release_date":"2025-01-01","last_updated":"2025-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":16384},"cost":{"input":0.287,"output":0.861}},"qwen3.5-plus":{"id":"qwen3.5-plus","name":"Qwen3.5 Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":81920}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-16","last_updated":"2026-09-22","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.115,"output":0.688,"reasoning":0.688,"tiers":[{"input":0.287,"output":1.72,"reasoning":1.72,"tier":{"type":"context","size":128000}},{"input":0.573,"output":3.44,"reasoning":3.44,"tier":{"type":"context","size":256000}}]}},"qwq-plus":{"id":"qwq-plus","name":"QwQ Plus","description":"Qwen reasoning model for deliberate problem solving, math, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-03-05","last_updated":"2025-03-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":8192},"status":"deprecated","cost":{"input":0.23,"output":0.574}},"qwen-flash":{"id":"qwen-flash","name":"Qwen Flash","description":"Efficient Qwen model for fast chat, extraction, and high-volume workloads","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":81920}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":0.022,"output":0.216,"cache_read":0.0044,"cache_write":0.0275,"tiers":[{"input":0.087,"output":0.861,"cache_read":0.0174,"cache_write":0.10875,"tier":{"type":"context","size":128000}},{"input":0.173,"output":1.721,"cache_read":0.0346,"cache_write":0.21625,"tier":{"type":"context","size":256000}}]}},"qwen3-next-80b-a3b-instruct":{"id":"qwen3-next-80b-a3b-instruct","name":"Qwen3-Next 80B-A3B Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"status":"deprecated","cost":{"input":0.144,"output":0.574}},"qwen3-32b":{"id":"qwen3-32b","name":"Qwen3 32B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":38912}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04","last_updated":"2025-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"status":"deprecated","cost":{"input":0.287,"output":1.147,"reasoning":2.868}},"qwen3-8b":{"id":"qwen3-8b","name":"Qwen3 8B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":38912}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04","last_updated":"2025-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"status":"deprecated","cost":{"input":0.072,"output":0.287,"reasoning":0.717}},"qwen-omni-turbo-realtime":{"id":"qwen-omni-turbo-realtime","type":"realtime","name":"Qwen-Omni Turbo Realtime","description":"Qwen omni model for text, vision, audio, and multimodal agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-05-08","last_updated":"2025-05-08","modalities":{"input":["text","image","audio"],"output":["text","audio"]},"open_weights":false,"limit":{"context":32768,"output":2048},"status":"deprecated","provider":{"api":"wss://dashscope.aliyuncs.com/api-ws/v1/realtime"},"cost":{"input":0.23,"output":0.918,"input_audio":3.584,"output_audio":7.168}},"qwen3-235b-a22b":{"id":"qwen3-235b-a22b","name":"Qwen3 235B-A22B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":38912}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04","last_updated":"2025-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"status":"deprecated","cost":{"input":0.287,"output":1.147,"reasoning":2.868}},"qwen3-vl-plus":{"id":"qwen3-vl-plus","name":"Qwen3-VL Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":81920}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"cost":{"input":0.143353,"output":1.433525,"cache_read":0.028671,"cache_write":0.179191,"tiers":[{"input":0.215,"output":2.15,"cache_read":0.043,"cache_write":0.26875,"tier":{"type":"context","size":32000}},{"input":0.43,"output":4.301,"cache_read":0.086,"cache_write":0.5375,"tier":{"type":"context","size":128000}}]}},"qwen-vl-max":{"id":"qwen-vl-max","name":"Qwen-VL Max","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-04-08","last_updated":"2025-08-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":8192},"status":"deprecated","cost":{"input":0.23,"output":0.574}},"qwen-math-turbo":{"id":"qwen-math-turbo","name":"Qwen Math Turbo","description":"Efficient Qwen model for fast chat, extraction, and high-volume workloads","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-09-19","last_updated":"2024-09-19","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":4096,"output":3072},"status":"deprecated","cost":{"input":0.287,"output":0.861}},"qwen3.8-max":{"id":"qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","min":0,"max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":1.77744,"output":5.33231,"cache_read":0.22218,"cache_write":2.22179},"canonical_model_id":"alibaba/qwen3.8-max"},"qwen-deep-research":{"id":"qwen-deep-research","name":"Qwen Deep Research","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-01","last_updated":"2024-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":7.742,"output":23.367}},"qwen3-coder-flash":{"id":"qwen3-coder-flash","name":"Qwen3 Coder Flash","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.144,"output":0.574,"cache_read":0.0288,"cache_write":0.18,"tiers":[{"input":0.216,"output":0.861,"cache_read":0.0432,"cache_write":0.27,"tier":{"type":"context","size":32000}},{"input":0.359,"output":1.434,"cache_read":0.0718,"cache_write":0.44875,"tier":{"type":"context","size":128000}},{"input":0.717,"output":3.584,"cache_read":0.1434,"cache_write":0.89625,"tier":{"type":"context","size":256000}}]}},"glm-5":{"id":"glm-5","name":"GLM-5","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","max":32768}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-11","last_updated":"2026-02-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":202752,"output":16384},"cost":{"input":0.573,"output":2.58,"tiers":[{"input":0.86,"output":3.154,"tier":{"type":"context","size":32000}}]}},"qwen-vl-ocr":{"id":"qwen-vl-ocr","name":"Qwen-VL OCR","description":"OCR model for extracting structured text from documents and screenshots","family":"qwen","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-04","release_date":"2024-10-28","last_updated":"2026-09-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":34096,"output":4096},"cost":{"input":0.043,"output":0.072}},"qvq-max":{"id":"qvq-max","name":"QVQ Max","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"qvq","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-03-25","last_updated":"2025-03-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":8192},"status":"deprecated","cost":{"input":1.147,"output":4.588}},"MiniMax/MiniMax-M2.7":{"id":"MiniMax/MiniMax-M2.7","name":"MiniMax-M2.7","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.06,"cache_write":0.375}},"siliconflow/deepseek-r1-0528":{"id":"siliconflow/deepseek-r1-0528","name":"siliconflow/deepseek-r1-0528","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-05-28","last_updated":"2025-11-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":163840,"output":32768},"cost":{"input":0.5,"output":2.18}},"siliconflow/deepseek-v3.1-terminus":{"id":"siliconflow/deepseek-v3.1-terminus","name":"siliconflow/deepseek-v3.1-terminus","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-09-29","last_updated":"2025-11-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":163840,"output":65536},"cost":{"input":0.27,"output":1}},"siliconflow/deepseek-v3.2":{"id":"siliconflow/deepseek-v3.2","name":"siliconflow/deepseek-v3.2","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-03","last_updated":"2025-12-03","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":163840,"output":65536},"cost":{"input":0.27,"output":0.42}},"siliconflow/deepseek-v3-0324":{"id":"siliconflow/deepseek-v3-0324","name":"siliconflow/deepseek-v3-0324","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2024-12-26","last_updated":"2025-11-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":163840,"output":163840},"cost":{"input":0.25,"output":1}},"kimi/kimi-k2.5":{"id":"kimi/kimi-k2.5","name":"kimi/kimi-k2.5","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.6,"output":3,"cache_read":0.1}}}},"io-net":{"id":"io-net","env":["IOINTELLIGENCE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.intelligence.io.solutions/api/v1","name":"IO.NET","doc":"https://io.net/docs/guides/intelligence/io-intelligence","models":{"deepseek-ai/DeepSeek-R1-0528":{"id":"deepseek-ai/DeepSeek-R1-0528","name":"DeepSeek R1","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-05-28","last_updated":"2025-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"cost":{"input":0.523667,"output":2.205333,"cache_read":0.261834},"canonical_model_id":"deepseek/deepseek-r1-0528"},"mistralai/Devstral-Small-2505":{"id":"mistralai/Devstral-Small-2505","name":"Devstral Small 2505","description":"Mistral coding agent model for repository tasks and software engineering workflows","family":"devstral","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2025-05-01","last_updated":"2025-05-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"status":"deprecated","cost":{"input":0.05,"output":0.22,"cache_read":0.025,"cache_write":0.1}},"mistralai/Magistral-Small-2506":{"id":"mistralai/Magistral-Small-2506","name":"Magistral Small 2506","description":"Mistral reasoning model for transparent analysis, math, and complex decisions","family":"magistral","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-10","last_updated":"2025-06-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"status":"deprecated","cost":{"input":0.5,"output":1.5,"cache_read":0.25,"cache_write":1},"canonical_model_id":"mistral/magistral-small-2506"},"mistralai/Mistral-Nemo-Instruct-2407":{"id":"mistralai/Mistral-Nemo-Instruct-2407","name":"Mistral Nemo Instruct 2407","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-nemo","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-05","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"cost":{"input":0.0514,"output":0.082,"cache_read":0.0257},"canonical_model_id":"mistral/mistral-nemo"},"mistralai/Mistral-Large-Instruct-2411":{"id":"mistralai/Mistral-Large-Instruct-2411","name":"Mistral Large Instruct 2411","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-11-18","last_updated":"2024-11-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"status":"deprecated","cost":{"input":2,"output":6,"cache_read":1,"cache_write":4},"canonical_model_id":"mistral/mistral-large-2411"},"moonshotai/Kimi-K2-Instruct-0905":{"id":"moonshotai/Kimi-K2-Instruct-0905","name":"Kimi K2 Instruct","description":"Kimi model for long-context chat, coding, and agentic reasoning","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-09-05","last_updated":"2025-09-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":4096},"cost":{"input":0.57,"output":2.3,"cache_read":0.285},"canonical_model_id":"moonshotai/kimi-k2-0905"},"moonshotai/Kimi-K2-Thinking":{"id":"moonshotai/Kimi-K2-Thinking","name":"Kimi K2 Thinking","description":"Kimi reasoning model for long-horizon research, planning, and tool use","family":"kimi-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-11-06","last_updated":"2025-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":4096},"cost":{"input":0.6,"output":2.5,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k2-thinking"},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT-OSS 20B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":64000,"output":4096},"cost":{"input":0.055,"output":0.194,"cache_read":0.0275},"canonical_model_id":"openai/gpt-oss-20b"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT-OSS 120B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":4096},"cost":{"input":0.188,"output":0.7,"cache_read":0.094},"canonical_model_id":"openai/gpt-oss-120b"},"meta-llama/Llama-3.2-90B-Vision-Instruct":{"id":"meta-llama/Llama-3.2-90B-Vision-Instruct","name":"Llama 3.2 90B Vision Instruct","description":"Open Llama multimodal model for image understanding and text reasoning","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":16000,"output":4096},"status":"deprecated","cost":{"input":0.35,"output":0.4,"cache_read":0.175,"cache_write":0.7}},"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8":{"id":"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8","name":"Llama 4 Maverick 17B 128E Instruct","description":"Open multimodal Llama model for strong reasoning and fast responses","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":430000,"output":4096},"cost":{"input":0.26875,"output":0.82625,"cache_read":0.134375},"canonical_model_id":"meta/llama-4-maverick-17b-instruct"},"meta-llama/Llama-3.3-70B-Instruct":{"id":"meta-llama/Llama-3.3-70B-Instruct","name":"Llama 3.3 70B Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"cost":{"input":0.5466,"output":1.0226,"cache_read":0.2733},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"Intel/Qwen3-Coder-480B-A35B-Instruct-int4-mixed-ar":{"id":"Intel/Qwen3-Coder-480B-A35B-Instruct-int4-mixed-ar","name":"Qwen 3 Coder 480B","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":106000,"output":4096},"cost":{"input":0.46125,"output":2.29375,"cache_read":0.230625},"canonical_model_id":"alibaba/qwen3-coder-480b-a35b-instruct"},"Qwen/Qwen3-235B-A22B-Thinking-2507":{"id":"Qwen/Qwen3-235B-A22B-Thinking-2507","name":"Qwen 3 235B Thinking","description":"Qwen reasoning model for deliberate problem solving, math, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2025-07-25","last_updated":"2025-07-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":4096},"status":"deprecated","cost":{"input":0.11,"output":0.6,"cache_read":0.055,"cache_write":0.22},"canonical_model_id":"alibaba/qwen3-235b-a22b-thinking-2507"},"Qwen/Qwen3-Next-80B-A3B-Instruct":{"id":"Qwen/Qwen3-Next-80B-A3B-Instruct","name":"Qwen 3 Next 80B Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":4096},"cost":{"input":0.11875,"output":1.2625,"cache_read":0.059375},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-instruct"},"Qwen/Qwen2.5-VL-32B-Instruct":{"id":"Qwen/Qwen2.5-VL-32B-Instruct","name":"Qwen 2.5 VL 32B Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-09","release_date":"2024-11-01","last_updated":"2024-11-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":4096},"status":"deprecated","cost":{"input":0.05,"output":0.22,"cache_read":0.025,"cache_write":0.1}},"zai-org/GLM-4.6":{"id":"zai-org/GLM-4.6","name":"GLM 4.6","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":4096},"cost":{"input":0.52,"output":2.0375,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-4.6"}}},"neosmith":{"id":"neosmith","env":["NEOSMITH_API_KEY"],"npm":"@ai-sdk/openai","api":"https://router.neosmith.ai/v1","name":"NeoSmith","doc":"https://neosmith.ai/docs","models":{"neosmith.intelligent-basic":{"id":"neosmith.intelligent-basic","name":"NeoSmith Basic","description":"Cost-capped tier. Intelligent routing with a Claude Sonnet ceiling — Opus is never invoked.","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-26","last_updated":"2026-08-03","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":1.17,"output":4.37,"cache_read":0.22,"cache_write":0}},"neosmith.intelligent-pro":{"id":"neosmith.intelligent-pro","name":"NeoSmith Pro","description":"Default production tier. Intelligent NeoSmith routing with a Claude Opus ceiling on escalation.","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-26","last_updated":"2026-07-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":1.81,"output":8.39,"cache_read":0.3,"cache_write":0}},"neosmith.intelligent-maestro":{"id":"neosmith.intelligent-maestro","name":"NeoSmith Maestro","description":"Highest-accuracy coding tier. Hard, self-contained problems run NeoSmith's premium multi-model solver; everything else gets the strongest intelligence tier.","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2.4,"output":12,"cache_read":0.35,"cache_write":0}},"neosmith.neolite":{"id":"neosmith.neolite","name":"NeoSmith NeoLite","description":"Sealed single-model budget tier. 512K context, text and images, tool use, and no escalation of any kind.","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-06-20","last_updated":"2026-08-03","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":512000,"output":64000},"cost":{"input":0.6,"output":2.4,"cache_read":0.08,"cache_write":0}}}},"meta":{"id":"meta","env":["META_MODEL_API_KEY"],"npm":"@ai-sdk/openai","api":"https://api.meta.ai/v1","name":"Meta","doc":"https://dev.meta.ai/docs","models":{"muse-spark-1.3":{"id":"muse-spark-1.3","name":"Muse Spark 1.3","description":"Muse Spark 1.3 is a multimodal reasoning model from Meta for long-running agentic, multi-agent, and coding workflows. It improves long-horizon agent collaboration, instruction following, and coding efficiency relative to Muse Spark 1.2.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.3"},"muse-spark-1.1":{"id":"muse-spark-1.1","name":"Muse Spark 1.1","description":"Muse Spark is a natively multimodal reasoning model with support for tool-use, visual chain of thought, and multi-agent orchestration.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-08","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.1"},"muse-wonder-1.0":{"id":"muse-wonder-1.0","name":"Muse Wonder","description":"Muse Wonder is a frontier multimodal reasoning model from Meta for personal and professional agents, long-horizon coding, and computer use. It combines Active Memory, which carries relevant context across conversations, with Active Focus, which keeps it working through blockers toward a goal.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-12","last_updated":"2026-10-12","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":4,"output":20,"cache_read":0.2},"canonical_model_id":"meta/muse-wonder-1.0"},"muse-spark-1.2-contributor":{"id":"muse-spark-1.2-contributor","name":"Muse Spark 1.2 Contributor","description":"Muse Spark 1.2 is a coding-focused update to Muse Spark 1.1 with improvements in code generation, complex debugging, codebase understanding, and end-to-end developer workflows.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.1,"output":0.2,"cache_read":0.002},"canonical_model_id":"meta/muse-spark-1.2"},"muse-ember-1.0":{"id":"muse-ember-1.0","name":"Muse Ember","description":"Muse Ember is Meta's smallest and most efficient reasoning model, built for the work agents repeat all day: tool calls, coding subtasks, routing, extraction, and long-document parsing. It pairs with Muse Wonder or Muse Spark, which plan while Muse Ember handles the volume.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":524288},"cost":{"input":0.1,"output":0.5,"cache_read":0.004,"tiers":[{"input":0.3,"output":1.5,"cache_read":0.012,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":0.3,"output":1.5,"cache_read":0.012}},"canonical_model_id":"meta/muse-ember-1.0"},"muse-spark-1.2":{"id":"muse-spark-1.2","name":"Muse Spark 1.2","description":"Muse Spark 1.2 is a coding-focused update to Muse Spark 1.1 with improvements in code generation, complex debugging, codebase understanding, and end-to-end developer workflows.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.2"},"muse-spark-1.3-contributor":{"id":"muse-spark-1.3-contributor","name":"Muse Spark 1.3 Contributor","description":"Muse Spark 1.3 is a multimodal reasoning model from Meta for long-running agentic, multi-agent, and coding workflows. It improves long-horizon agent collaboration, instruction following, and coding efficiency relative to Muse Spark 1.2.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.1,"output":0.2,"cache_read":0.002},"canonical_model_id":"meta/muse-spark-1.3"}}},"deepinfra":{"id":"deepinfra","env":["DEEPINFRA_API_KEY"],"npm":"@ai-sdk/deepinfra","name":"Deep Infra","doc":"https://deepinfra.com/models","models":{"anthropic/claude-fable-5":{"id":"anthropic/claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50},"canonical_model_id":"anthropic/claude-fable-5"},"XiaomiMiMo/MiMo-V2.5":{"id":"XiaomiMiMo/MiMo-V2.5","name":"MiMo-V2.5","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"status":"deprecated","cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"xiaomi/mimo-v2.5"},"XiaomiMiMo/MiMo-V2.5-Pro":{"id":"XiaomiMiMo/MiMo-V2.5-Pro","name":"MiMo-V2.5-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":16384},"status":"deprecated","cost":{"input":1,"output":3,"cache_read":0.2},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"XiaomiMiMo/MiMo-V2.6-Pro":{"id":"XiaomiMiMo/MiMo-V2.6-Pro","name":"MiMo-V2.6-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.43,"output":0.87,"cache_read":0.0036},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"XiaomiMiMo/MiMo-V2.6-Flash":{"id":"XiaomiMiMo/MiMo-V2.6-Flash","name":"MiMo-V2.6-Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"google/gemma-4-31B-it":{"id":"google/gemma-4-31B-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.2,"output":0.4},"canonical_model_id":"google/gemma-4-31b-it"},"google/gemma-4-26B-A4B-it":{"id":"google/gemma-4-26B-A4B-it","name":"Gemma 4 26B A4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.07,"output":0.34},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"google/gemma-3-27b-it":{"id":"google/gemma-3-27b-it","name":"Gemma 3 27B IT","description":"Largest open Gemma 3 instruction model for multilingual text generation and visual understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.08,"output":0.16},"canonical_model_id":"google/gemma-3-27b-it"},"google/gemma-3-4b-it":{"id":"google/gemma-3-4b-it","name":"Gemma 3 4B IT","description":"Open multimodal Gemma instruction model for efficient text generation and image understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.05,"output":0.1},"canonical_model_id":"google/gemma-3-4b-it"},"google/gemma-4-E4B-it":{"id":"google/gemma-4-E4B-it","name":"Gemma 4 E4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"status":"deprecated","cost":{"input":0.02,"output":0.1},"canonical_model_id":"google/gemma-4-E4B-it"},"google/gemma-3-12b-it":{"id":"google/gemma-3-12b-it","name":"Gemma 3 12B IT","description":"Open multimodal Gemma instruction model for multilingual text generation and image understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.05,"output":0.15},"canonical_model_id":"google/gemma-3-12b-it"},"MiniMaxAI/MiniMax-M2.5":{"id":"MiniMaxAI/MiniMax-M2.5","name":"MiniMax M2.5","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-06","release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"output":131072},"status":"deprecated","cost":{"input":0.15,"output":1.15,"cache_read":0.03},"canonical_model_id":"minimax/MiniMax-M2.5"},"MiniMaxAI/MiniMax-M2.7":{"id":"MiniMaxAI/MiniMax-M2.7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"output":131072},"status":"deprecated","cost":{"input":0.25,"output":1,"cache_read":0.05},"canonical_model_id":"minimax/MiniMax-M2.7"},"MiniMaxAI/MiniMax-M3":{"id":"MiniMaxAI/MiniMax-M3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":512000},"cost":{"input":0.28,"output":1.1,"cache_read":0.056},"canonical_model_id":"minimax/MiniMax-M3"},"deepseek-ai/DeepSeek-V3.2":{"id":"deepseek-ai/DeepSeek-V3.2","name":"DeepSeek-V3.2","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":64000},"cost":{"input":0.26,"output":0.38,"cache_read":0.13},"canonical_model_id":"deepseek/deepseek-v3.2"},"deepseek-ai/DeepSeek-V4-Flash":{"id":"deepseek-ai/DeepSeek-V4-Flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":16384},"cost":{"input":0.09,"output":0.18,"cache_read":0.018,"cache_write":0.1125},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek-ai/DeepSeek-V3.1":{"id":"deepseek-ai/DeepSeek-V3.1","name":"DeepSeek-V3.1","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":8192},"cost":{"input":0.25,"output":0.95,"cache_read":0.13},"canonical_model_id":"deepseek/deepseek-v3.1"},"deepseek-ai/DeepSeek-V4.1-Flash-1017":{"id":"deepseek-ai/DeepSeek-V4.1-Flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.2,"output":0.6,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"deepseek-ai/DeepSeek-V4-Flash-0731":{"id":"deepseek-ai/DeepSeek-V4-Flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.06,"output":0.18,"cache_read":0.015},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepseek-ai/DeepSeek-V4-Flash-Vision-Exp":{"id":"deepseek-ai/DeepSeek-V4-Flash-Vision-Exp","name":"DeepSeek V4 Flash Vision Exp","description":"Experimental multimodal DeepSeek V4 Flash model for image understanding, coding, and agentic work","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-21","last_updated":"2026-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.44,"output":1.32,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4-flash-vision-exp"},"deepseek-ai/DeepSeek-V3":{"id":"deepseek-ai/DeepSeek-V3","name":"DeepSeek-V3","description":"Open DeepSeek MoE chat model for coding, math, and general reasoning","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2024-12-26","last_updated":"2024-12-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":8192},"cost":{"input":0.32,"output":0.89},"canonical_model_id":"deepseek/deepseek-v3"},"deepseek-ai/DeepSeek-V3-0324":{"id":"deepseek-ai/DeepSeek-V3-0324","name":"DeepSeek V3 0324","description":"March 2025 checkpoint of DeepSeek-V3 with improved reasoning and coding","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-03-24","last_updated":"2025-03-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":163840},"status":"deprecated","cost":{"input":0.24,"output":0.9,"cache_read":0.135},"canonical_model_id":"deepseek/deepseek-v3-0324"},"deepseek-ai/DeepSeek-V4-Pro":{"id":"deepseek-ai/DeepSeek-V4-Pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":16384},"cost":{"input":1.3,"output":2.6,"cache_read":0.1},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek-ai/DeepSeek-V4.1-Flash":{"id":"deepseek-ai/DeepSeek-V4.1-Flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.2,"output":0.6,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek-ai/DeepSeek-R1-0528":{"id":"deepseek-ai/DeepSeek-R1-0528","name":"DeepSeek-R1-0528","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-05-28","last_updated":"2025-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":64000},"cost":{"input":0.5,"output":2.15,"cache_read":0.35},"canonical_model_id":"deepseek/deepseek-r1-0528"},"deepseek-ai/DeepSeek-V4-Pro-0813":{"id":"deepseek-ai/DeepSeek-V4-Pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":1.3,"output":2.6,"cache_read":0.1},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"tencent/Hy4-preview":{"id":"tencent/Hy4-preview","name":"Hy4 preview","description":"A next-generation productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-28","last_updated":"2026-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":64000},"cost":{"input":0.834,"output":2.501,"cache_read":0.042},"canonical_model_id":"tencent/hy4-preview"},"tencent/Hy3":{"id":"tencent/Hy3","name":"Hy3","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":192000,"output":128000},"status":"deprecated","cost":{"input":0.13,"output":0.53,"cache_read":0.033},"canonical_model_id":"tencent/hy3"},"mistralai/Mistral-Small-24B-Instruct-2501":{"id":"mistralai/Mistral-Small-24B-Instruct-2501","name":"Mistral Small 3","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2023-10-31","release_date":"2025-01-30","last_updated":"2025-01-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":16384},"cost":{"input":0.05,"output":0.08},"canonical_model_id":"mistral/mistral-small-24b-instruct-2501"},"moonshotai/Kimi-K3":{"id":"moonshotai/Kimi-K3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":2.85,"output":14.25,"cache_read":0.285,"cache_write":3.5625},"canonical_model_id":"moonshotai/kimi-k3"},"moonshotai/Kimi-K3.1-Pro":{"id":"moonshotai/Kimi-K3.1-Pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":2,"output":10,"cache_read":0.2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"moonshotai/Kimi-K2.7-Code":{"id":"moonshotai/Kimi-K2.7-Code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0.68,"output":3.4,"cache_read":0.136,"cache_write":0.85},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"moonshotai/Kimi-K2.5":{"id":"moonshotai/Kimi-K2.5","name":"Kimi K2.5","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"status":"deprecated","cost":{"input":0.45,"output":2.25,"cache_read":0.07},"canonical_model_id":"moonshotai/kimi-k2.5"},"moonshotai/Kimi-K2.6":{"id":"moonshotai/Kimi-K2.6","name":"Kimi K2.6","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0.75,"output":3.5,"cache_read":0.15},"canonical_model_id":"moonshotai/kimi-k2.6"},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT OSS 20B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.03,"output":0.14},"canonical_model_id":"openai/gpt-oss-20b"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.037,"output":0.17},"canonical_model_id":"openai/gpt-oss-120b"},"ByteDance/Seed-2.0-mini":{"id":"ByteDance/Seed-2.0-mini","name":"Seed 2.0 Mini","description":"Lightweight ByteDance Seed 2.0 model for low-latency multimodal reasoning and high-volume tasks","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000},"cost":{"input":0.1,"output":0.4,"cache_read":0.02,"tiers":[{"input":0.2,"output":0.8,"cache_read":0.2,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-mini"},"ByteDance/Seed-2.0-pro":{"id":"ByteDance/Seed-2.0-pro","name":"Seed 2.0 Pro","description":"Flagship ByteDance Seed 2.0 model for complex multimodal reasoning and long-horizon agent workflows","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"cost":{"input":0.5,"output":3,"cache_read":0.1,"tiers":[{"input":1,"output":6,"cache_read":0.2,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-pro"},"ByteDance/Seed-2.0-code":{"id":"ByteDance/Seed-2.0-code","name":"Seed 2.0 Code","description":"ByteDance Seed coding model for multimodal software engineering and long-running agents","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":131072},"cost":{"input":0.5,"output":3,"cache_read":0.1,"tiers":[{"input":1,"output":6,"cache_read":0.2,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-code"},"thinkingmachines/Inkling-Small":{"id":"thinkingmachines/Inkling-Small","name":"Inkling Small","description":"Multimodal MoE reasoning model (276B total, 12B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-30","last_updated":"2026-07-30","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":1048576},"cost":{"input":0.45,"output":1.2,"cache_read":0.1},"canonical_model_id":"thinkingmachines/inkling-small"},"thinkingmachines/Inkling":{"id":"thinkingmachines/Inkling","name":"Inkling","description":"Multimodal MoE reasoning model (975B total, 41B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":1048576},"status":"deprecated","cost":{"input":0.95,"output":4.05,"cache_read":0.16},"canonical_model_id":"thinkingmachines/inkling"},"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8":{"id":"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8","name":"Llama 4 Maverick 17B FP8","description":"Open multimodal Llama model for strong reasoning and fast responses","family":"llama","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":16384},"status":"deprecated","cost":{"input":0.2,"output":0.8},"canonical_model_id":"meta/llama-4-maverick-17b-instruct"},"meta-llama/Llama-Guard-4-12B":{"id":"meta-llama/Llama-Guard-4-12B","name":"Llama Guard 4 12B","description":"Multimodal Llama 4-based safety classifier for moderating prompts and responses","family":"llama","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-04-29","last_updated":"2025-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":163840},"cost":{"input":0.18,"output":0.18},"canonical_model_id":"meta/llama-guard-4-12b"},"meta-llama/Llama-4-Scout-17B-16E-Instruct":{"id":"meta-llama/Llama-4-Scout-17B-16E-Instruct","name":"Llama 4 Scout 17B","description":"Open multimodal Llama model for long-context analysis and efficient agents","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":327680,"output":16384},"cost":{"input":0.1,"output":0.3},"canonical_model_id":"meta/llama-4-scout-17b-instruct"},"meta-llama/Llama-3.3-70B-Instruct-Turbo":{"id":"meta-llama/Llama-3.3-70B-Instruct-Turbo","name":"Llama 3.3 70B Turbo","description":"Compact Llama instruction model for fast chat and local deployment","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.1,"output":0.32},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"Qwen/Qwen3-VL-30B-A3B-Instruct":{"id":"Qwen/Qwen3-VL-30B-A3B-Instruct","name":"Qwen3 VL 30B A3B Instruct","description":"Open vision-language MoE model for image and video understanding, documents, and visual agents","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-04","last_updated":"2025-10-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"alibaba/qwen3-vl-30b-a3b-instruct"},"Qwen/Qwen3.5-397B-A17B":{"id":"Qwen/Qwen3.5-397B-A17B","name":"Qwen 3.5 397B A17B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":81920},"cost":{"input":0.45,"output":3,"cache_read":0.22},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"Qwen/Qwen3-32B":{"id":"Qwen/Qwen3-32B","name":"Qwen3 32B","description":"Dense open Qwen model for self-hosted chat, reasoning, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":40960,"output":16384},"cost":{"input":0.08,"output":0.28},"canonical_model_id":"alibaba/qwen3-32b"},"Qwen/Qwen3.5-27B":{"id":"Qwen/Qwen3.5-27B","name":"Qwen3.5 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.26,"output":2.6},"canonical_model_id":"alibaba/qwen3.5-27b"},"Qwen/Qwen3-VL-235B-A22B-Instruct":{"id":"Qwen/Qwen3-VL-235B-A22B-Instruct","name":"Qwen3 VL 235B A22B Instruct","description":"Qwen vision-language instruct model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.2,"output":0.88,"cache_read":0.11},"canonical_model_id":"alibaba/qwen3-vl-235b-a22b-instruct"},"Qwen/Qwen3.6-27B":{"id":"Qwen/Qwen3.6-27B","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.32,"output":3.2},"canonical_model_id":"alibaba/qwen3.6-27b"},"Qwen/Qwen3-Next-80B-A3B-Instruct":{"id":"Qwen/Qwen3-Next-80B-A3B-Instruct","name":"Qwen3-Next 80B-A3B Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.09,"output":1.1},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-instruct"},"Qwen/Qwen3-Max":{"id":"Qwen/Qwen3-Max","name":"Qwen3 Max","description":"Flagship Qwen3 model for coding agents, complex reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":65536},"status":"deprecated","cost":{"input":1.2,"output":6,"cache_read":0.24,"tiers":[{"input":2.4,"output":12,"cache_read":0.48,"tier":{"type":"context","size":32000}},{"input":3,"output":15,"cache_read":0.6,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3-max"},"Qwen/Qwen3.5-122B-A10B":{"id":"Qwen/Qwen3.5-122B-A10B","name":"Qwen3.5 122B-A10B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"status":"deprecated","cost":{"input":0.29,"output":2.4},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"Qwen/Qwen3.8-2.4T-A95B":{"id":"Qwen/Qwen3.8-2.4T-A95B","name":"Qwen3.8 2.4T A95B","description":"Open-weight sparse MoE (2.4T total, 95B active), the open-weight twin of Qwen3.8 Max for coding, research, complex reasoning, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"status":"deprecated","cost":{"input":2,"output":6,"cache_read":0.2},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"Qwen/Qwen3.8-Flash":{"id":"Qwen/Qwen3.8-Flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.113,"output":0.382,"cache_read":0.0141},"canonical_model_id":"alibaba/qwen3.8-flash"},"Qwen/Qwen3.7-Max":{"id":"Qwen/Qwen3.7-Max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":131072},"cost":{"input":2.5,"output":7.5,"cache_read":0.5,"tiers":[{"input":5,"output":15,"cache_read":1,"tier":{"type":"context","size":32000}},{"input":6.25,"output":18.5,"cache_read":1.25,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3.7-max"},"Qwen/Qwen3.5-9B":{"id":"Qwen/Qwen3.5-9B","name":"Qwen3.5 9B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.1,"output":0.15},"canonical_model_id":"alibaba/qwen3.5-9b"},"Qwen/Qwen3-30B-A3B":{"id":"Qwen/Qwen3-30B-A3B","name":"Qwen3 30B A3B","description":"Sparse MoE Qwen model with 3B active parameters for efficient chat and reasoning","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":40960,"output":16384},"cost":{"input":0.12,"output":0.5},"canonical_model_id":"alibaba/qwen3-30b-a3b"},"Qwen/Qwen3.8-Max":{"id":"Qwen/Qwen3.8-Max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":131072},"cost":{"input":1.65,"output":4.951,"cache_read":0.206},"canonical_model_id":"alibaba/qwen3.8-max"},"Qwen/Qwen3.8-27B":{"id":"Qwen/Qwen3.8-27B","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.2,"output":2.5,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3.8-27b"},"Qwen/Qwen3-235B-A22B-Instruct-2507":{"id":"Qwen/Qwen3-235B-A22B-Instruct-2507","name":"Qwen3 235B-A22B Instruct 2507","description":"Updated large open Qwen3 MoE instruct model for multilingual chat, coding, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0.09,"output":0.55},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"Qwen/Qwen3.5-35B-A3B":{"id":"Qwen/Qwen3.5-35B-A3B","name":"Qwen 3.5 35B A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":81920},"cost":{"input":0.14,"output":1,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3.5-35b-a3b"},"Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo":{"id":"Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo","name":"Qwen3 Coder 480B A35B Instruct Turbo","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":66536},"cost":{"input":0.3,"output":1,"cache_read":0.1},"canonical_model_id":"alibaba/qwen3-coder-480b-a35b-instruct"},"Qwen/Qwen3.6-35B-A3B":{"id":"Qwen/Qwen3.6-35B-A3B","name":"Qwen3.6 35B A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":81920},"cost":{"input":0.1,"output":0.95,"cache_read":0.1},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"zai-org/GLM-5.3-Flash":{"id":"zai-org/GLM-5.3-Flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai-org/GLM-5.2":{"id":"zai-org/GLM-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":32768},"cost":{"input":0.75,"output":2.4,"cache_read":0.14,"cache_write":0.9375},"canonical_model_id":"zhipuai/glm-5.2"},"zai-org/GLM-4.7-Flash":{"id":"zai-org/GLM-4.7-Flash","name":"GLM-4.7-Flash","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":16384},"status":"deprecated","cost":{"input":0.06,"output":0.4,"cache_read":0.01},"canonical_model_id":"zhipuai/glm-4.7-flash"},"zai-org/GLM-5.3":{"id":"zai-org/GLM-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.9,"output":4,"cache_read":0.2},"canonical_model_id":"zhipuai/glm-5.3"},"zai-org/GLM-4.6":{"id":"zai-org/GLM-4.6","name":"GLM-4.6","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":0.5,"output":2,"cache_read":0.1},"canonical_model_id":"zhipuai/glm-4.6"},"zai-org/GLM-4.7":{"id":"zai-org/GLM-4.7","name":"GLM-4.7","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":16384},"cost":{"input":0.4,"output":1.75,"cache_read":0.08},"canonical_model_id":"zhipuai/glm-4.7"},"zai-org/GLM-5":{"id":"zai-org/GLM-5","name":"GLM-5","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-12","release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":16384},"status":"deprecated","cost":{"input":0.6,"output":2.08,"cache_read":0.12},"canonical_model_id":"zhipuai/glm-5"},"zai-org/GLM-5.1":{"id":"zai-org/GLM-5.1","name":"GLM-5.1","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":16384},"status":"deprecated","cost":{"input":1.05,"output":3.5,"cache_read":0.205},"canonical_model_id":"zhipuai/glm-5.1"},"nvidia/Nemotron-3-Nano-30B-A3B":{"id":"nvidia/Nemotron-3-Nano-30B-A3B","name":"Nemotron 3 Nano 30B A3B","description":"Small Nemotron 3 MoE for efficient coding, math, and long-context agents","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-06-25","release_date":"2025-12-15","last_updated":"2025-12-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0.05,"output":0.2,"cache_read":0.025},"canonical_model_id":"nvidia/nemotron-3-nano-30b-a3b"},"nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning":{"id":"nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning","name":"Nemotron 3 Nano Omni 30B A3B Reasoning","description":"Open Nemotron omni model combining reasoning with text, vision, and audio","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-28","last_updated":"2026-04-28","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"status":"deprecated","cost":{"input":0.2,"output":0.8},"canonical_model_id":"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning"},"nvidia/Llama-3.3-Nemotron-Super-49B-v1.5":{"id":"nvidia/Llama-3.3-Nemotron-Super-49B-v1.5","name":"Llama 3.3 Nemotron Super 49B v1.5","description":"Nemotron model for efficient reasoning, coding, and specialized AI agents","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-25","last_updated":"2025-07-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"status":"deprecated","cost":{"input":0.4,"output":0.4},"canonical_model_id":"nvidia/llama-3.3-nemotron-super-49b-v1.5"},"stepfun-ai/Step-5-Preview":{"id":"stepfun-ai/Step-5-Preview","name":"Step 5 Preview","description":"StepFun's next-generation flagship base model for coding and professional knowledge work, with native text, image, and video input and a 1M-token context window","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1000000},"status":"deprecated","cost":{"input":1,"output":2.7,"cache_read":0.1},"canonical_model_id":"stepfun/step-5-preview"},"stepfun-ai/Step-3.7-Flash":{"id":"stepfun-ai/Step-3.7-Flash","name":"Step 3.7 Flash","description":"Newer StepFun flash model for faster agents, coding, and multimodal prompts","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2026-03-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"status":"deprecated","cost":{"input":0.2,"output":1.15,"cache_read":0.04},"canonical_model_id":"stepfun/step-3.7-flash"}}},"azure":{"id":"azure","env":["AZURE_RESOURCE_NAME","AZURE_API_KEY"],"npm":"@ai-sdk/azure","name":"Azure","doc":"https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models","models":{"grok-4-1-fast-non-reasoning":{"id":"grok-4-1-fast-non-reasoning","name":"Grok 4.1 Fast (Non-Reasoning)","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-06-27","last_updated":"2025-06-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":128000,"output":8192},"provider":{"shape":"completions"},"cost":{"input":0.2,"output":0.5,"cache_read":0.05}},"gpt-5.5":{"id":"gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":12.5,"output":75,"cache_read":1.25},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"gpt-3.5-turbo-1106":{"id":"gpt-3.5-turbo-1106","name":"GPT-3.5 Turbo 1106","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2021-08","release_date":"2023-11-06","last_updated":"2023-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":16384,"output":4096},"status":"deprecated","provider":{"shape":"completions"},"cost":{"input":1,"output":2}},"text-embedding-ada-002":{"id":"text-embedding-ada-002","type":"embedding","name":"text-embedding-ada-002","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"text-embedding","attachment":false,"reasoning":false,"tool_call":false,"release_date":"2022-12-15","last_updated":"2022-12-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":1536},"cost":{"input":0.1,"output":0}},"claude-sonnet-5-5":{"id":"claude-sonnet-5-5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"cohere-embed-v-4-0":{"id":"cohere-embed-v-4-0","type":"embedding","name":"Embed v4","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"cohere-embed","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-04-15","last_updated":"2025-04-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":1536},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/models"},"cost":{"input":0.12,"output":0}},"claude-fable-5-1":{"id":"claude-fable-5-1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"codex-mini":{"id":"codex-mini","name":"Codex Mini","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-04","release_date":"2025-05-16","last_updated":"2025-05-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"status":"deprecated","cost":{"input":1.5,"output":6,"cache_read":0.375}},"gpt-4.1-nano":{"id":"gpt-4.1-nano","name":"GPT-4.1 nano","description":"Tiny GPT-4.1 option for classification, routing, and very high-volume tasks","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"status":"deprecated","cost":{"input":0.1,"output":0.4,"cache_read":0.025},"canonical_model_id":"openai/gpt-4.1-nano"},"gpt-4-turbo-vision":{"id":"gpt-4-turbo-vision","name":"GPT-4 Turbo Vision","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-11","release_date":"2023-11-06","last_updated":"2024-04-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"status":"deprecated","provider":{"shape":"completions"},"cost":{"input":10,"output":30}},"gpt-3.5-turbo-instruct":{"id":"gpt-3.5-turbo-instruct","name":"GPT-3.5 Turbo Instruct","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2021-08","release_date":"2023-09-21","last_updated":"2023-09-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":4096,"output":4096},"status":"deprecated","cost":{"input":1.5,"output":2}},"claude-opus-4-5":{"id":"claude-opus-4-5","name":"Claude Opus 4.5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-11-24","last_updated":"2025-08-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25}},"gpt-5.2":{"id":"gpt-5.2","name":"GPT-5.2","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":3.5,"output":28,"cache_read":0.35},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":1.75,"output":14,"cache_read":0.175}},"o1":{"id":"o1","name":"o1","description":"O-series reasoning model for hard analysis, math, coding, and planning","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2023-09","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"status":"deprecated","cost":{"input":15,"output":60,"cache_read":7.5}},"gpt-4.1-mini":{"id":"gpt-4.1-mini","name":"GPT-4.1 mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"status":"deprecated","cost":{"input":0.4,"output":1.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-4.1-mini"},"o4-mini":{"id":"o4-mini","name":"o4-mini","description":"Fast o-series model for compact reasoning, coding, and tool use","family":"o-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"status":"deprecated","cost":{"input":1.1,"output":4.4,"cache_read":0.275},"canonical_model_id":"openai/o4-mini"},"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/models"},"cost":{"input":0.95,"output":4},"canonical_model_id":"moonshotai/kimi-k2.6"},"gpt-5.2-codex":{"id":"gpt-5.2-codex","name":"GPT-5.2 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-01-14","last_updated":"2026-01-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175}},"gpt-5.4-mini":{"id":"gpt-5.4-mini","name":"GPT-5.4 Mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":1.5,"output":9,"cache_read":0.15},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"model-router":{"id":"model-router","name":"Model Router","description":"Automatic model router for matching prompts to suitable backends and budgets","family":"model-router","attachment":true,"reasoning":false,"tool_call":true,"release_date":"2025-05-19","last_updated":"2025-11-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":16384},"provider":{"npm":"@ai-sdk/azure","shape":"completions"},"cost":{"input":0.14,"output":0}},"phi-4-mini":{"id":"phi-4-mini","name":"Phi-4-mini","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"phi","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-10","release_date":"2024-12-11","last_updated":"2024-12-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"provider":{"shape":"completions"},"cost":{"input":0.075,"output":0.3}},"mistral-medium-2505":{"id":"mistral-medium-2505","name":"Mistral Medium 3","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-05-07","last_updated":"2025-05-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":128000},"provider":{"shape":"completions"},"cost":{"input":0.4,"output":2}},"grok-4-20-reasoning":{"id":"grok-4-20-reasoning","name":"Grok 4.20 (Reasoning)","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-04-08","last_updated":"2026-04-08","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262000,"output":8192},"status":"beta","provider":{"shape":"completions"},"cost":{"input":2,"output":6}},"mistral-small-2503":{"id":"mistral-small-2503","name":"Mistral Small 3.1","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-09","release_date":"2025-03-01","last_updated":"2025-03-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32768},"provider":{"shape":"completions"},"cost":{"input":0.1,"output":0.3}},"gpt-image-2.5-flare":{"id":"gpt-image-2.5-flare","type":"image","name":"GPT Image 2.5 Flare","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-09-08","last_updated":"2026-09-08","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":5,"output":30,"cache_read":1.25},"canonical_model_id":"openai/gpt-image-2.5-flare"},"text-embedding-3-large":{"id":"text-embedding-3-large","type":"embedding","name":"text-embedding-3-large","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"text-embedding","attachment":false,"reasoning":false,"tool_call":false,"release_date":"2024-01-25","last_updated":"2024-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":3072},"cost":{"input":0.13,"output":0}},"gpt-5":{"id":"gpt-5","name":"GPT-5","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125}},"gpt-5.1-codex-max":{"id":"gpt-5.1-codex-max","name":"GPT-5.1 Codex Max","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1-codex-max"},"gpt-5.1-codex":{"id":"gpt-5.1-codex","name":"GPT-5.1 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-14","last_updated":"2025-11-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125}},"gpt-chat-latest":{"id":"gpt-chat-latest","name":"GPT Chat Latest","description":"Compact GPT model for low-latency assistance and high-volume workloads","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-05-05","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"beta","cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"openai/gpt-5.5-instant"},"cohere-command-a":{"id":"cohere-command-a","name":"Command A","description":"Cohere command model for multilingual enterprise agents, tools, and chat","family":"command-a","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2025-03-13","last_updated":"2025-03-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"provider":{"shape":"completions"},"cost":{"input":2.5,"output":10}},"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":8,"output":40,"cache_read":0.8,"cache_write":10},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"claude-sonnet-5":{"id":"claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"gpt-6.1-terra":{"id":"gpt-6.1-terra","name":"GPT-6.1 Terra","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25,"tiers":[{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5}},"canonical_model_id":"openai/gpt-6.1-terra"},"gpt-4.1":{"id":"gpt-4.1","name":"GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"status":"deprecated","cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"o3":{"id":"o3","name":"o3","description":"Deliberate o-series reasoner for hard math, coding, and multi-step analysis","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/o3"},"claude-fable-5-2":{"id":"claude-fable-5-2","name":"Claude Fable 5.2","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"gpt-6-luna":{"id":"gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"grok-4.7":{"id":"grok-4.7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"status":"beta","provider":{"shape":"completions"},"canonical_model_id":"xai/grok-4.7"},"llama-4-scout-17b-16e-instruct":{"id":"llama-4-scout-17b-16e-instruct","name":"Llama 4 Scout 17B 16E Instruct","description":"Open multimodal Llama model for long-context analysis and efficient agents","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"provider":{"shape":"completions"},"cost":{"input":0.2,"output":0.78}},"kimi-k2.5":{"id":"kimi-k2.5","name":"Kimi K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/models"},"cost":{"input":0.6,"output":3},"canonical_model_id":"moonshotai/kimi-k2.5"},"gpt-image-2":{"id":"gpt-image-2","type":"image","name":"GPT-Image-2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-21","last_updated":"2026-04-21","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":5,"output":30,"cache_read":1.25},"canonical_model_id":"openai/gpt-image-2"},"phi-4-multimodal":{"id":"phi-4-multimodal","name":"Phi-4-multimodal","description":"Multimodal model for analyzing text, images, documents, and rich media","family":"phi","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2023-10","release_date":"2024-12-11","last_updated":"2024-12-11","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"provider":{"shape":"completions"},"cost":{"input":0.08,"output":0.32,"input_audio":4}},"text-embedding-3-small":{"id":"text-embedding-3-small","type":"embedding","name":"text-embedding-3-small","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"text-embedding","attachment":false,"reasoning":false,"tool_call":false,"release_date":"2024-01-25","last_updated":"2024-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":1536},"cost":{"input":0.02,"output":0}},"o3-mini":{"id":"o3-mini","name":"o3-mini","description":"Smaller o-series reasoner for economical coding, math, and planning tasks","family":"o-mini","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-05","release_date":"2024-12-20","last_updated":"2025-01-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"status":"deprecated","cost":{"input":1.1,"output":4.4,"cache_read":0.55},"canonical_model_id":"openai/o3-mini"},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek-V4.1-Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"status":"beta","provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/models"},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek-V4-Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/models"},"cost":{"input":1.74,"output":3.48},"canonical_model_id":"deepseek/deepseek-v4-pro"},"gpt-5-pro":{"id":"gpt-5-pro","name":"GPT-5 Pro","description":"Higher-accuracy GPT-5 tier for tough analysis, coding reviews, and planning","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":15,"output":120},"canonical_model_id":"openai/gpt-5-pro"},"gpt-6-sol":{"id":"gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"phi-4":{"id":"phi-4","name":"Phi-4","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","family":"phi","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2023-10","release_date":"2024-12-11","last_updated":"2024-12-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"provider":{"shape":"completions"},"cost":{"input":0.125,"output":0.5}},"gpt-image-1.5":{"id":"gpt-image-1.5","type":"image","name":"GPT-Image-1.5","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-11-25","last_updated":"2025-11-25","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":5,"output":32,"cache_read":1.25},"canonical_model_id":"openai/gpt-image-1.5"},"gpt-5.3-codex":{"id":"gpt-5.3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-02-24","last_updated":"2026-02-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175}},"claude-mythos-5":{"id":"claude-mythos-5","name":"Claude Mythos 5","description":"Restricted Claude model for advanced cybersecurity and biology research workflows","family":"claude-mythos","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"status":"beta","provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-mythos-5"},"phi-4-reasoning":{"id":"phi-4-reasoning","name":"Phi-4-reasoning","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"phi","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"knowledge":"2023-10","release_date":"2024-12-11","last_updated":"2024-12-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":4096},"provider":{"shape":"completions"},"cost":{"input":0.125,"output":0.5}},"claude-fable-5":{"id":"claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"status":"beta","provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"grok-4-1-fast-reasoning":{"id":"grok-4-1-fast-reasoning","name":"Grok 4.1 Fast (Reasoning)","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-06-27","last_updated":"2025-06-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"input":128000,"output":8192},"provider":{"shape":"completions"},"cost":{"input":0.2,"output":0.5,"cache_read":0.05}},"gpt-6-astra":{"id":"gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/models"},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"gpt-5.1":{"id":"gpt-5.1","name":"GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-14","last_updated":"2025-11-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":2.5,"output":20,"cache_read":0.25},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":1.25,"output":10,"cache_read":0.125}},"gpt-5-mini":{"id":"gpt-5-mini","name":"GPT-5 Mini","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025}},"gpt-5.1-codex-mini":{"id":"gpt-5.1-codex-mini","name":"GPT-5.1 Codex Mini","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-14","last_updated":"2025-11-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025}},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek-V4-Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/models"},"cost":{"input":0.19,"output":0.51},"canonical_model_id":"deepseek/deepseek-v4-flash"},"llama-3.3-70b-instruct":{"id":"llama-3.3-70b-instruct","name":"Llama-3.3-70B-Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"provider":{"shape":"completions"},"cost":{"input":0.71,"output":0.71}},"claude-opus-5":{"id":"claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"grok-4-20-non-reasoning":{"id":"grok-4-20-non-reasoning","name":"Grok 4.20 (Non-Reasoning)","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-04-08","last_updated":"2026-04-08","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262000,"output":8192},"status":"beta","provider":{"shape":"completions"},"cost":{"input":2,"output":6}},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"ministral-3b":{"id":"ministral-3b","name":"Ministral 3B","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-03","release_date":"2024-10-22","last_updated":"2024-10-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"provider":{"shape":"completions"},"cost":{"input":0.04,"output":0.04}},"cohere-embed-v3-english":{"id":"cohere-embed-v3-english","type":"embedding","name":"Embed v3 English","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"cohere-embed","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2023-11-07","last_updated":"2023-11-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":512,"output":1024},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/models"},"cost":{"input":0.1,"output":0}},"gpt-6.1-sol":{"id":"gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-sol"},"gpt-5.4-pro":{"id":"gpt-5.4-pro","name":"GPT-5.4 Pro","description":"More exact GPT-5.4 tier for demanding professional reasoning and agent tasks","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.4-pro"},"phi-4-reasoning-plus":{"id":"phi-4-reasoning-plus","name":"Phi-4-reasoning-plus","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"phi","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"knowledge":"2023-10","release_date":"2024-12-11","last_updated":"2024-12-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":4096},"provider":{"shape":"completions"},"cost":{"input":0.125,"output":0.5}},"gpt-5-nano":{"id":"gpt-5-nano","name":"GPT-5 Nano","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.05,"output":0.4,"cache_read":0.005}},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":5,"output":30,"cache_read":0.5},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":2.5,"output":15,"cache_read":0.25,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5}},"canonical_model_id":"openai/gpt-5.4"},"gpt-image-2.5-sunburst":{"id":"gpt-image-2.5-sunburst","type":"image","name":"GPT Image 2.5 Sunburst","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-09-08","last_updated":"2026-09-08","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":5,"output":30,"cache_read":1.25},"canonical_model_id":"openai/gpt-image-2.5-sunburst"},"claude-opus-4-6":{"id":"claude-opus-4-6","name":"Claude Opus 4.6","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-07-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25,"tiers":[{"input":10,"output":37.5,"cache_read":1,"cache_write":12.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":10,"output":37.5,"cache_read":1,"cache_write":12.5}}},"gpt-4-turbo":{"id":"gpt-4-turbo","name":"GPT-4 Turbo","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2023-11-06","last_updated":"2024-04-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"status":"deprecated","provider":{"shape":"completions"},"cost":{"input":10,"output":30},"canonical_model_id":"openai/gpt-4-turbo"},"gpt-5.4-nano":{"id":"gpt-5.4-nano","name":"GPT-5.4 Nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"grok-4.6":{"id":"grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":128000},"status":"beta","provider":{"shape":"completions"},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.6"},"phi-4-mini-reasoning":{"id":"phi-4-mini-reasoning","name":"Phi-4-mini-reasoning","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"phi","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2023-10","release_date":"2024-12-11","last_updated":"2024-12-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"provider":{"shape":"completions"},"cost":{"input":0.075,"output":0.3}},"gpt-4o":{"id":"gpt-4o","name":"GPT-4o","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"status":"deprecated","cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o"},"claude-opus-4-8":{"id":"claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-31","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25,"tiers":[{"input":10,"output":37.5,"cache_read":1,"cache_write":12.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":10,"output":37.5,"cache_read":1,"cache_write":12.5}},"canonical_model_id":"anthropic/claude-opus-4-8"},"gpt-5-codex":{"id":"gpt-5-codex","name":"GPT-5-Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-09-15","last_updated":"2025-09-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125}},"deepseek-v3.2":{"id":"deepseek-v3.2","name":"DeepSeek-V3.2","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"provider":{"shape":"completions"},"cost":{"input":0.58,"output":1.68}},"gpt-5.6-terra":{"id":"gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":4,"output":24,"cache_read":0.4,"cache_write":5},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"cohere-embed-v3-multilingual":{"id":"cohere-embed-v3-multilingual","type":"embedding","name":"Embed v3 Multilingual","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"cohere-embed","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2023-11-07","last_updated":"2023-11-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":512,"output":1024},"provider":{"npm":"@ai-sdk/openai-compatible","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/models"},"cost":{"input":0.1,"output":0}},"gpt-3.5-turbo-0125":{"id":"gpt-3.5-turbo-0125","name":"GPT-3.5 Turbo 0125","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2021-08","release_date":"2024-01-25","last_updated":"2024-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":16384,"output":4096},"status":"deprecated","provider":{"shape":"completions"},"cost":{"input":0.5,"output":1.5}},"claude-opus-5-5":{"id":"claude-opus-5-5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"claude-sonnet-4-5":{"id":"claude-sonnet-4-5","name":"Claude Sonnet 4.5","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-11-18","last_updated":"2025-11-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75}},"codestral-2501":{"id":"codestral-2501","name":"Codestral 25.01","description":"Mistral coding model for code completion, generation, and developer workflows","family":"codestral","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-03","release_date":"2025-01-01","last_updated":"2025-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"provider":{"shape":"completions"},"cost":{"input":0.3,"output":0.9}},"gpt-4o-mini":{"id":"gpt-4o-mini","name":"GPT-4o mini","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"status":"deprecated","cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-4o-mini"},"gpt-image-1":{"id":"gpt-image-1","type":"image","name":"GPT-Image-1","description":"OpenAI image model for production generation, edits, and brand-safe visual workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-04-24","last_updated":"2025-04-24","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":5,"output":40,"cache_read":1.25},"canonical_model_id":"openai/gpt-image-1"},"deepseek-v3.2-speciale":{"id":"deepseek-v3.2-speciale","name":"DeepSeek-V3.2-Speciale","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"provider":{"shape":"completions"},"cost":{"input":0.58,"output":1.68}},"claude-haiku-5-5":{"id":"claude-haiku-5-5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"llama-4-maverick-17b-128e-instruct-fp8":{"id":"llama-4-maverick-17b-128e-instruct-fp8","name":"Llama 4 Maverick 17B 128E Instruct FP8","description":"Open multimodal Llama model for strong reasoning and fast responses","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":16384},"provider":{"shape":"completions"},"cost":{"input":0.25,"output":1}},"claude-opus-4-7":{"id":"claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"claude-haiku-4-5":{"id":"claude-haiku-4-5","name":"Claude Haiku 4.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-11-18","last_updated":"2025-11-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://${AZURE_RESOURCE_NAME}.services.ai.azure.com/anthropic/v1"},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25}}}},"echo":{"id":"echo","env":["ECHO_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://echo.tracerml.ai/v1","name":"Echo","doc":"https://echo.tracerml.ai/docs/api","models":{"echo":{"id":"echo","name":"Echo","description":"Adaptive model for coding, reasoning, and tool-driven agent workflows through one OpenAI-compatible endpoint","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-19","last_updated":"2026-08-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536},"status":"beta","cost":{"input":10,"output":50}}}},"ambient":{"id":"ambient","env":["AMBIENT_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.ambient.xyz/v1","name":"Ambient","doc":"https://ambient.xyz","models":{"qwen/qwen3.8-27b":{"id":"qwen/qwen3.8-27b","name":"Qwen3.8 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":8192},"cost":{"input":0.32,"output":3.2,"cache_read":0.16,"cache_write":0},"canonical_model_id":"alibaba/qwen3.8-27b"},"qwen/qwen3-30b-a3b-instruct-2507":{"id":"qwen/qwen3-30b-a3b-instruct-2507","name":"Qwen3 30B-A3B Instruct 2507","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.09,"output":0.3,"cache_read":0.09,"cache_write":0},"canonical_model_id":"alibaba/qwen3-30b-a3b-instruct-2507"},"qwen/qwen3.6-27b":{"id":"qwen/qwen3.6-27b","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":8192},"cost":{"input":0.32,"output":3.2,"cache_read":0.16,"cache_write":0},"canonical_model_id":"alibaba/qwen3.6-27b"},"qwen/qwen3.6-35b-a3b":{"id":"qwen/qwen3.6-35b-a3b","name":"Qwen3.6 35B-A3B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.15,"output":1,"cache_read":0.15,"cache_write":0},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"minimax/minimax-m3":{"id":"minimax/minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal coding model for long-context reasoning and agent tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131702},"cost":{"input":0.23,"output":0.96,"cache_read":0.05,"cache_write":0},"canonical_model_id":"minimax/MiniMax-M3"},"ambient/small":{"id":"ambient/small","name":"Ambient Small","description":"Efficient model for low-latency assistance, extraction, and routine automation","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":101072,"output":101072},"cost":{"input":0.001,"output":0.001,"cache_read":0,"cache_write":0}},"ambient/large":{"id":"ambient/large","name":"Ambient Large","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":202752},"cost":{"input":0.6,"output":2,"cache_read":0.15,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.2"},"z-ai/glm-5.2":{"id":"z-ai/glm-5.2","name":"GLM-5.2","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":202752},"cost":{"input":0.6,"output":2,"cache_read":0.15,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.2"},"zai-org/GLM-5.2-FP8":{"id":"zai-org/GLM-5.2-FP8","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":202752},"status":"deprecated","cost":{"input":1.2,"output":4.2,"cache_read":0.26,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.2"},"unsloth/qwen3.8-27b-gguf":{"id":"unsloth/qwen3.8-27b-gguf","name":"qwen3.8-27b-4q","description":"Tool-capable chat model for instruction following and agentic application workflows","family":"unsloth","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":101072,"output":101072},"cost":{"input":0.001,"output":0.001,"cache_read":0,"cache_write":0}}}},"scx-ai":{"id":"scx-ai","env":["SCX_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.scx.ai/v1","name":"SCX.ai","doc":"https://platform.scx.ai/docs","models":{"GLM-5.2":{"id":"GLM-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.55,"output":1.784,"cache_read":0.111},"canonical_model_id":"zhipuai/glm-5.2"},"MiniMax-M2.7":{"id":"MiniMax-M2.7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"output":196608},"cost":{"input":0.48,"output":1.79,"cache_read":0.05},"canonical_model_id":"minimax/MiniMax-M2.7"},"Qwen3.8-Max":{"id":"Qwen3.8-Max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":983616,"output":131072},"cost":{"input":1.815,"output":5.4461,"cache_read":0.17,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max"},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.17,"output":0.55},"canonical_model_id":"openai/gpt-oss-120b"}}},"agentrouter":{"id":"agentrouter","env":["AGENTROUTER_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://agentrouter.org/v1","name":"AgentRouter","doc":"https://agentrouter.org/docs/opencode.html","models":{"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://agentrouter.org/v1"},"canonical_model_id":"openai/gpt-5.6-sol"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"canonical_model_id":"zhipuai/glm-5.3"},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"canonical_model_id":"deepseek/deepseek-v4-flash"},"claude-opus-5":{"id":"claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://agentrouter.org/v1"},"canonical_model_id":"anthropic/claude-opus-5"},"claude-opus-4-8":{"id":"claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://agentrouter.org/v1"},"canonical_model_id":"anthropic/claude-opus-4-8"}}},"cortecs":{"id":"cortecs","env":["CORTECS_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.cortecs.ai/v1","name":"Cortecs","doc":"https://api.cortecs.ai/v1/models","models":{"gpt-oss-safeguard-120b":{"id":"gpt-oss-safeguard-120b","name":"GPT OSS Safeguard 120B","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-29","last_updated":"2025-10-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"cost":{"input":0.179,"output":0.697},"canonical_model_id":"openai/gpt-oss-safeguard-120b"},"qwen3-coder-30b-a3b-instruct":{"id":"qwen3-coder-30b-a3b-instruct","name":"Qwen3-Coder 30B-A3B Instruct","description":"Smaller Qwen coder for efficient local agents and repo-level fixes","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-31","last_updated":"2025-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.179,"output":0.697,"cache_read":0.014},"canonical_model_id":"alibaba/qwen3-coder-30b-a3b-instruct"},"mistral-large-4-0":{"id":"mistral-large-4-0","name":"Mistral Large 4","description":"Mistral's 1T-parameter multimodal MoE for reasoning, coding, and agentic work","family":"mistral-large","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":262144},"cost":{"input":0.765,"output":2.351,"cache_read":0.079},"canonical_model_id":"mistral/mistral-large-4"},"claude-opus4-5":{"id":"claude-opus4-5","name":"Claude Opus 4.5 (latest)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5.313,"output":26.568,"cache_read":0.531,"cache_write":6.645},"canonical_model_id":"anthropic/claude-opus-4-5"},"pixtral-large-2502":{"id":"pixtral-large-2502","name":"Pixtral Large (25.02)","description":"Pixtral Large (25.02) is a 124B open-weight multimodal model built on Mistral Large 2, offering advanced image understanding and strong performance across text and code tasks.","family":"pixtral","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2025-04-08","last_updated":"2025-04-08","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":128000},"cost":{"input":1.993,"output":5.978},"canonical_model_id":"mistral/pixtral-large-2502"},"claude-4-6-sonnet":{"id":"claude-4-6-sonnet","name":"Claude Sonnet 4.6","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":3.196,"output":15.94,"cache_read":0.32,"cache_write":3.999},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"qwen2.5-vl-72b-instruct":{"id":"qwen2.5-vl-72b-instruct","name":"qwen2.5-vl-72b-instruct","description":"Qwen2.5-VL is a powerful vision-language model with advanced capabilities in visual understanding, long video reasoning, and structured output generation.","family":"qwen","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":false,"knowledge":"2024-04","release_date":"2025-01-26","last_updated":"2025-01-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":32000},"cost":{"input":1.014,"output":1.014},"canonical_model_id":"alibaba/qwen2-5-vl-72b-instruct"},"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":0,"max":24576}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.299,"output":2.491,"cache_read":0.029,"cache_write":0.097},"canonical_model_id":"google/gemini-2.5-flash"},"codestral-2508":{"id":"codestral-2508","name":"Codestral 25.08","description":"Mistral coding model for code completion, generation, and developer workflows","family":"codestral","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-30","last_updated":"2025-07-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":0.368,"output":1.103,"cache_read":0.037},"canonical_model_id":"mistral/codestral-2508"},"gpt-4.1-nano":{"id":"gpt-4.1-nano","name":"GPT-4.1 nano","description":"Tiny GPT-4.1 option for classification, routing, and very high-volume tasks","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.111,"output":0.434,"cache_read":0.056},"canonical_model_id":"openai/gpt-4.1-nano"},"gemini-3.8-flash":{"id":"gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.825,"output":4.125,"cache_read":0.082,"cache_write":0.084},"canonical_model_id":"google/gemini-3.8-flash"},"voxtral-small-2507":{"id":"voxtral-small-2507","name":"voxtral-small-2507","description":"Voxtral Small is a multimodal model with audio input, combining advanced speech capabilities with strong text performance for transcription, translation, and audio understanding.","family":"voxtral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2025-07-15","last_updated":"2025-07-15","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":32000},"cost":{"input":0.123,"output":0.368,"cache_read":0.012},"canonical_model_id":"mistral/voxtral-small-24b-2507"},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1000000},"cost":{"input":0.9,"output":3.24,"cache_read":0.189},"canonical_model_id":"zhipuai/glm-5.2"},"gemini-4-carbon":{"id":"gemini-4-carbon","name":"Gemini 4 Carbon","description":"Google's most capable reasoning model for complex software engineering, deep math and science, high factual accuracy, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text","image","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":1048576},"cost":{"input":2.229,"output":11.146,"cache_read":0.111},"canonical_model_id":"google/gemini-4-carbon"},"gpt-4.1-mini":{"id":"gpt-4.1-mini","name":"GPT-4.1 mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.434,"output":1.704,"cache_read":0.134},"canonical_model_id":"openai/gpt-4.1-mini"},"kimi-k3.1-pro":{"id":"kimi-k3.1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":500000},"cost":{"input":2.042,"output":10.209,"cache_read":0.204},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","description":"Kimi reasoning model for long-horizon research, planning, and tool use","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.475,"output":2.97,"cache_read":0.1},"canonical_model_id":"moonshotai/kimi-k2.6"},"nova-pro-v1":{"id":"nova-pro-v1","name":"Nova Pro 1.0","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"nova-pro","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-10-31","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":10000},"cost":{"input":0.918,"output":3.671},"canonical_model_id":"amazon/nova-pro-v1"},"mistral-medium-3.5":{"id":"mistral-medium-3.5","name":"mistral-medium-3.5","description":"Mistral Medium 3.5 is a frontier multimodal 128B model combining reasoning, coding, and instruction-following with strong agentic performance and efficient deployment.","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-04-30","last_updated":"2026-04-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":1.532,"output":7.843,"cache_read":0.154},"canonical_model_id":"mistral/mistral-medium-3-5"},"mixtral-8x7B-instruct-v0.1":{"id":"mixtral-8x7B-instruct-v0.1","name":"Mixtral 8x7B Instruct v0.1","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"mistral","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2023-12-11","last_updated":"2023-12-11","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":4096},"cost":{"input":0.488,"output":0.758},"canonical_model_id":"mistral/mixtral-8x7b-instruct-v0.1"},"gemma-3-27b-it":{"id":"gemma-3-27b-it","name":"Gemma 3 27B IT","description":"Gemma 3 is a family of lightweight, multimodal models from Google, supporting text and image inputs, multilingual capabilities, and a 131K context window.","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":true,"temperature":false,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":110000},"cost":{"input":0.099,"output":0.299},"canonical_model_id":"google/gemma-3-27b-it"},"minimax-m2.1":{"id":"minimax-m2.1","name":"MiniMax-M2.1","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196000,"output":196000},"cost":{"input":0.359,"output":1.435},"canonical_model_id":"minimax/MiniMax-M2.1"},"mistral-small-2503":{"id":"mistral-small-2503","name":"mistral-small-2503","description":"Combines advanced text and vision capabilities with 24 billion parameters, supporting multilingual tasks and long contexts up to 131k tokens, making it versatile for various applications without sacrificing performance.","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-06","release_date":"2025-03-17","last_updated":"2025-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"cost":{"input":0.111,"output":0.334},"canonical_model_id":"mistral/mistral-small-3-1-24b-instruct-2503"},"claude-opus-5.5":{"id":"claude-opus-5.5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4.399,"output":21.998,"cache_read":0.219,"cache_write":5.5},"canonical_model_id":"anthropic/claude-opus-5-5"},"gpt-5":{"id":"gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.375,"output":10.96,"cache_read":0.156},"canonical_model_id":"openai/gpt-5"},"qwen3guard-gen-8b":{"id":"qwen3guard-gen-8b","name":"qwen3guard-gen-8b","description":"Qwen3Guard-Gen-8B is a large-scale multilingual safety moderation model designed for high-accuracy prompt and response classification.","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2026-02-04","last_updated":"2026-02-04","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":32000},"cost":{"input":0,"output":0}},"gemini-2.5-pro":{"id":"gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":1.495,"output":9.964,"cache_read":0.242,"cache_write":0.434},"canonical_model_id":"google/gemini-2.5-pro"},"claude-4-5-sonnet":{"id":"claude-4-5-sonnet","name":"Claude Sonnet 4.5 (latest)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":2.989,"output":14.945,"cache_read":0.326,"cache_write":4.078},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"nemotron-nano-v2-12b":{"id":"nemotron-nano-v2-12b","name":"nemotron-nano-v2-12b","description":"NVIDIA Nemotron Nano v2 12B is a 12-billion-parameter multimodal reasoning model designed for advanced video understanding, document intelligence, and visual reasoning, built with a hybrid Transformer-Mamba architecture for high efficiency and low latency.","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2025-10-28","last_updated":"2025-10-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"cost":{"input":0.24,"output":0.707},"canonical_model_id":"nvidia/nemotron-nano-12b-v2-vl"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":3,"output":14.999},"canonical_model_id":"moonshotai/kimi-k3"},"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4.399,"output":21.998,"cache_read":0.44,"cache_write":5.5},"canonical_model_id":"openai/gpt-5.6-sol"},"gemini-3.5-flash":{"id":"gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":1.649,"output":9.899,"cache_read":0.165,"cache_write":1},"canonical_model_id":"google/gemini-3.5-flash"},"claude-sonnet-5":{"id":"claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2.2,"output":11,"cache_read":0.219,"cache_write":2.749},"canonical_model_id":"anthropic/claude-sonnet-5"},"gpt-6.1-terra":{"id":"gpt-6.1-terra","name":"GPT-6.1 Terra","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1.176,"output":5.882,"cache_read":0.059,"cache_write":1.47},"canonical_model_id":"openai/gpt-6.1-terra"},"gpt-4.1":{"id":"gpt-4.1","name":"GPT-4.1","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":2.192,"output":8.769,"cache_read":0.546},"canonical_model_id":"openai/gpt-4.1"},"gemini-3.6-flash":{"id":"gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"cache_write":0.038},"canonical_model_id":"google/gemini-3.6-flash"},"gpt-6-luna":{"id":"gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.12,"output":0.6,"cache_read":0.012,"cache_write":0.15},"canonical_model_id":"openai/gpt-6-luna"},"mistral-large-2512":{"id":"mistral-large-2512","name":"Mistral Large 3","description":"Mistral's largest general model for enterprise agents, coding, and multilingual reasoning","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-11","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.613,"output":1.838,"cache_read":0.061},"canonical_model_id":"mistral/mistral-large-2512"},"qwen3.8-27b":{"id":"qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":500000},"cost":{"input":0.1,"output":0.4,"cache_read":0.04},"canonical_model_id":"alibaba/qwen3.8-27b"},"ministral-3b-2512":{"id":"ministral-3b-2512","name":"Ministral 3 3B 2512","description":"Ministral 3 3B is a compact, efficient multimodal model with strong language, vision capabilities, and ideal for custom fine-tuning.","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.123,"output":0.123,"cache_read":0.012},"canonical_model_id":"mistral/ministral-3b-2512"},"deepseek-v4-pro-0813":{"id":"deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":64000},"cost":{"input":2,"output":3.999,"cache_read":0.5},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"ministral-8b-2512":{"id":"ministral-8b-2512","name":"Ministral 3 8B 2512","description":"Ministral 3 8B is a balanced, efficient multimodal model offering strong text and vision capabilities, optimized for edge and local deployment.","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.179,"output":0.179,"cache_read":0.017},"canonical_model_id":"mistral/ministral-8b-2512"},"mistral-small-3.2-24b-instruct-2506":{"id":"mistral-small-3.2-24b-instruct-2506","name":"mistral-small-3.2-24b-instruct-2506","description":"Mistral-Small-3.2-24B-Instruct-2506 is a 24B parameter instruction-tuned model with enhanced long-context support (128k) and state-of-the-art vision understanding.","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2023-10-31","release_date":"2025-06-20","last_updated":"2025-06-20","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":131000},"cost":{"input":0.1,"output":0.312},"canonical_model_id":"mistral/mistral-small-3.2-24b-instruct"},"qwen3-30b-a3b-instruct-2507":{"id":"qwen3-30b-a3b-instruct-2507","name":"qwen3-30b-a3b-instruct-2507","description":"Qwen3-30B-A3B-Instruct-2507 is an advanced Mixture-of-Experts model optimized for reasoning, coding, and multilingual instruction following.","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.099,"output":0.299},"canonical_model_id":"alibaba/qwen3-30b-a3b-instruct-2507"},"qwen3-235b-a22b-instruct-2507":{"id":"qwen3-235b-a22b-instruct-2507","name":"Qwen3 235B-A22B Instruct 2507","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.199,"output":0.598,"cache_read":0.018},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"gpt-oss-20b":{"id":"gpt-oss-20b","name":"GPT OSS 20B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":131000},"cost":{"input":0.045,"output":0.167},"canonical_model_id":"openai/gpt-oss-20b"},"qwen3.5-397b-a17b":{"id":"qwen3.5-397b-a17b","name":"Qwen3.5 397B-A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.668,"output":4.01},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"minimax-m2.5":{"id":"minimax-m2.5","name":"MiniMax-M2.5","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196000,"output":196000},"cost":{"input":0.348,"output":1.39,"cache_read":0.075},"canonical_model_id":"minimax/MiniMax-M2.5"},"qwen3.5-9b":{"id":"qwen3.5-9b","name":"Qwen3.5 9B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.111,"output":0.167},"canonical_model_id":"alibaba/qwen3.5-9b"},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.3,"output":1.2,"cache_read":0.075},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"mistral-small-2603":{"id":"mistral-small-2603","name":"Mistral Small 4","description":"Fast Mistral production model for chat, extraction, and cost-sensitive agents","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"cost":{"input":0.156,"output":0.625,"cache_read":0.016},"canonical_model_id":"mistral/mistral-small-2603"},"gemini-3.1-flash-lite":{"id":"gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.272,"output":1.631,"cache_read":0.025,"cache_write":0.082},"canonical_model_id":"google/gemini-3.1-flash-lite"},"minimax-m2":{"id":"minimax-m2","name":"MiniMax-M2","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2025-10-27","last_updated":"2025-10-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":400000,"output":196000},"cost":{"input":0.349,"output":1.405},"canonical_model_id":"minimax/MiniMax-M2"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":1.7,"output":3.4,"cache_read":0.15},"canonical_model_id":"deepseek/deepseek-v4-pro"},"gpt-6-sol":{"id":"gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.4,"output":11.999,"cache_read":0.24,"cache_write":3},"canonical_model_id":"openai/gpt-6-sol"},"qwen3guard-gen-0.6b":{"id":"qwen3guard-gen-0.6b","name":"qwen3guard-gen-0.6b","description":"Qwen3Guard-Gen-0.6B is a lightweight multilingual safety moderation model that classifies prompts and responses into safe, controversial, or unsafe categories.","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2026-02-04","last_updated":"2026-02-04","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":32000},"cost":{"input":0,"output":0}},"gemini-4-argon":{"id":"gemini-4-argon","name":"Gemini 4 Argon","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":2.25,"output":11.249,"cache_read":0.113},"canonical_model_id":"google/gemini-4-argon"},"qwen3.8-2.4t-a95b":{"id":"qwen3.8-2.4t-a95b","name":"Qwen3.8 2.4T A95B","description":"Open-weight sparse MoE (2.4T total, 95B active), the open-weight twin of Qwen3.8 Max for coding, research, complex reasoning, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":2.5,"output":6,"cache_read":0.625},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"claude-opus4-6":{"id":"claude-opus4-6","name":"Claude Opus 4.6","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.313,"output":26.561,"cache_read":0.531,"cache_write":6.645},"canonical_model_id":"anthropic/claude-opus-4-6"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.511,"output":2.045,"cache_read":0.154},"canonical_model_id":"zhipuai/glm-5.3"},"minimax-m3.1-flash":{"id":"minimax-m3.1-flash","name":"MiniMax-M3.1-Flash","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":500000},"cost":{"input":0.153,"output":0.613,"cache_read":0.016},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"nova-lite-v1":{"id":"nova-lite-v1","name":"Nova Lite 1.0","description":"Nova Lite is a fast, low-cost multimodal foundation model capable of reasoning over text, images, and video in 200+ languages.","family":"nova-lite","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-10-31","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":10000},"cost":{"input":0.069,"output":0.275},"canonical_model_id":"amazon/nova-lite-v1"},"minimax-m3":{"id":"minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":500000},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"},"gpt-6-astra":{"id":"gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":12.272,"output":61.359,"cache_read":1.228,"cache_write":15.34},"canonical_model_id":"openai/gpt-6-astra"},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.656,"output":3.3,"cache_read":0.18},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"gpt-5.1":{"id":"gpt-5.1","name":"GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.375,"output":10.96,"cache_read":0.156},"canonical_model_id":"openai/gpt-5.1"},"gpt-5-mini":{"id":"gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.279,"output":2.192,"cache_read":0.056},"canonical_model_id":"openai/gpt-5-mini"},"llama-3.3-70b-instruct":{"id":"llama-3.3-70b-instruct","name":"Llama-3.3-70B-Instruct","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":131000},"cost":{"input":0.724,"output":0.724},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.1,"output":0.35,"cache_read":0.018},"canonical_model_id":"zhipuai/glm-5.3-flash"},"claude-opus-5":{"id":"claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.498,"cache_read":0.55,"cache_write":6.874},"canonical_model_id":"anthropic/claude-opus-5"},"hermes-4-405b":{"id":"hermes-4-405b","name":"Hermes 4 405B","description":"Hermes 4 405B is a frontier hybrid-mode reasoning model built on Llama 3.1, optimized for advanced logic, math, coding, and structured output generation.","family":"hermes","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-08-31","release_date":"2025-08-26","last_updated":"2025-08-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"cost":{"input":0.996,"output":2.989},"canonical_model_id":"nousresearch/hermes-4-405b"},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.219,"output":1.32,"cache_read":0.022,"cache_write":0.275},"canonical_model_id":"openai/gpt-5.6-luna"},"gemini-3.5-flash-lite":{"id":"gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.33,"output":2.749,"cache_read":0.033,"cache_write":0.082},"canonical_model_id":"google/gemini-3.5-flash-lite"},"gemma-4-31b-it":{"id":"gemma-4-31b-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.223,"output":0.39},"canonical_model_id":"google/gemma-4-31b-it"},"claude-sonnet-5.5":{"id":"claude-sonnet-5.5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2.25,"output":11.249,"cache_read":0.225,"cache_write":2.813},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"gpt-6.1-sol":{"id":"gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.4,"output":11.999,"cache_read":0.12,"cache_write":3},"canonical_model_id":"openai/gpt-6.1-sol"},"nvidia-nemotron-3-nano-30b-a3b":{"id":"nvidia-nemotron-3-nano-30b-a3b","name":"nvidia-nemotron-3-nano-30b-a3b","description":"Nemotron-Nano-3-30B-A3B is a compact Mixture-of-Experts model optimized for efficient reasoning, chat, and coding, with strong multilingual support and long-context RAG and agent workflows.","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-06-25","release_date":"2025-12-15","last_updated":"2025-12-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.06,"output":0.24},"canonical_model_id":"nvidia/nemotron-3-nano-30b-a3b"},"claude-opus4-8":{"id":"claude-opus4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.437,"output":27.186,"cache_read":0.544,"cache_write":6.797},"canonical_model_id":"anthropic/claude-opus-4-8"},"claude-haiku-5.5":{"id":"claude-haiku-5.5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.113,"output":0.563,"cache_read":0.011,"cache_write":0.14},"canonical_model_id":"anthropic/claude-haiku-5-5"},"qwen3.6-27b":{"id":"qwen3.6-27b","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.446,"output":3.008},"canonical_model_id":"alibaba/qwen3.6-27b"},"gpt-5-nano":{"id":"gpt-5-nano","name":"GPT-5 Nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.06,"output":0.439,"cache_read":0.019},"canonical_model_id":"openai/gpt-5-nano"},"devstral-2512":{"id":"devstral-2512","name":"Devstral 2","description":"Mistral coding agent model for repository tasks and software engineering workflows","family":"devstral","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-12","release_date":"2025-12-09","last_updated":"2025-12-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.478,"output":2.392,"cache_read":0.045},"canonical_model_id":"mistral/devstral-2512"},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":2.898,"output":15.453,"cache_read":0.242},"canonical_model_id":"openai/gpt-5.4"},"qwen3-vl-235b-a22b":{"id":"qwen3-vl-235b-a22b","name":"qwen3-vl-235b-a22b","description":"Qwen3 VL 235B A22B is a 235B-parameter MoE vision-language flagship model (≈22B active) designed for frontier-level multimodal understanding across text, images, documents, and long videos.","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-03-31","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.617,"output":3.119,"cache_read":0.052},"canonical_model_id":"alibaba/qwen3-vl-235b-a22b-instruct"},"qwen3.6-35b-a3b":{"id":"qwen3.6-35b-a3b","name":"Qwen3.6 35B-A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":32768},"cost":{"input":0.279,"output":1.671},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"nova-micro-v1":{"id":"nova-micro-v1","name":"Nova Micro 1.0","description":"Nova Micro is a multilingual text-to-text foundation model with strong reasoning capabilities and broad language coverage across 200+ languages.","family":"nova-micro","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-10-31","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":10000},"cost":{"input":0.04,"output":0.159},"canonical_model_id":"amazon/nova-micro-v1"},"gemma-4-26b-a4b-it":{"id":"gemma-4-26b-a4b-it","name":"Gemma 4 26B A4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":81920},"cost":{"input":0.111,"output":0.557},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"qwen3-coder-next":{"id":"qwen3-coder-next","name":"Qwen3 Coder Next","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-02-03","last_updated":"2026-02-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.167,"output":0.891},"canonical_model_id":"alibaba/qwen3-coder-next"},"gpt-4o":{"id":"gpt-4o","name":"GPT-4o","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16000},"cost":{"input":2.659,"output":10.635,"cache_read":1.33},"canonical_model_id":"openai/gpt-4o"},"claude-opus4-7":{"id":"claude-opus4-7","name":"Claude Opus 4.7","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.437,"output":27.186,"cache_read":0.544,"cache_write":6.797},"canonical_model_id":"anthropic/claude-opus-4-7"},"kolibri-1":{"id":"kolibri-1","name":"kolibri-1","description":"Kolibri-1 is Aleph Alpha’s open-weight English-German MoE language model, designed for enterprise use with efficient inference and advanced reasoning.","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-18","release_date":"2026-10-03","last_updated":"2026-10-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":81920},"cost":{"input":0.167,"output":0.613,"cache_read":0.084},"canonical_model_id":"aleph-alpha/kolibri-1"},"qwen3-32b":{"id":"qwen3-32b","name":"Qwen3 32B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"output":16384},"cost":{"input":0.179,"output":0.697},"canonical_model_id":"alibaba/qwen3-32b"},"deepseek-v3.2":{"id":"deepseek-v3.2","name":"DeepSeek V3.2","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":65536},"cost":{"input":0.5,"output":1.499,"cache_read":0.15},"canonical_model_id":"deepseek/deepseek-v3.2"},"deepseek-v4-flash-0731":{"id":"deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.082,"output":0.413,"cache_read":0.06},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"GPT OSS 120B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":131000},"cost":{"input":0.089,"output":0.446,"cache_read":0.01},"canonical_model_id":"openai/gpt-oss-120b"},"gpt-5.6-terra":{"id":"gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.2,"output":13.199,"cache_read":0.219,"cache_write":2.749},"canonical_model_id":"openai/gpt-5.6-terra"},"nova-2-lite":{"id":"nova-2-lite","name":"Nova 2 Lite","description":"Nova 2 Lite is an advanced multimodal reasoning model that combines efficiency and performance, delivering reliable AI for agentic workflows and enterprise applications.","family":"nova","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-10","release_date":"2025-12-02","last_updated":"2025-12-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65535},"cost":{"input":0.373,"output":3.144},"canonical_model_id":"amazon/nova-2-lite"},"mistral-large-2402":{"id":"mistral-large-2402","name":"mistral-large-2402","description":"Mistral Large (24.02) is Mistral AI’s most advanced language model, built for complex multilingual reasoning, code generation, and deep text understanding.","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2025-05-26","last_updated":"2025-05-26","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":8192},"cost":{"input":4.284,"output":12.952}},"deepseek-v4.1-flash-1017":{"id":"deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.203,"output":0.609,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"gpt-4o-mini":{"id":"gpt-4o-mini","name":"GPT-4o mini","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16000},"cost":{"input":0.159,"output":0.638,"cache_read":0.081},"canonical_model_id":"openai/gpt-4o-mini"},"ministral-14b-2512":{"id":"ministral-14b-2512","name":"Ministral 3 14B 2512","description":"Ministral 3 14B is a frontier-level 14B multimodal model optimized for local deployment, delivering state-of-the-art text and vision reasoning with a 256K context window and strong agentic capabilities.","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.24,"output":0.24,"cache_read":0.022},"canonical_model_id":"mistral/ministral-14b-2512"},"mistral-7b-instruct-v0.2":{"id":"mistral-7b-instruct-v0.2","name":"mistral-7b-instruct-v0.2","description":"Mistral 7B Instruct is a compact, 7B parameter model optimized for fast and efficient text and code generation with a 32K token context window.","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2025-05-26","last_updated":"2025-05-26","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":8192},"cost":{"input":0.159,"output":0.219}},"gemini-3.7-flash":{"id":"gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"cache_write":0.038},"canonical_model_id":"google/gemini-3.7-flash"},"glm-4.7-flash":{"id":"glm-4.7-flash","name":"GLM-4.7-Flash","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":203000,"output":203000},"cost":{"input":0.08,"output":0.478},"canonical_model_id":"zhipuai/glm-4.7-flash"},"claude-haiku-4-5":{"id":"claude-haiku-4-5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":0.996,"output":4.982,"cache_read":0.099,"cache_write":1.186},"canonical_model_id":"anthropic/claude-haiku-4-5"}}},"stepfun":{"id":"stepfun","env":["STEPFUN_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.stepfun.com/v1","name":"StepFun (China)","doc":"https://platform.stepfun.com/docs/zh/overview/concept","models":{"step-tts-2":{"id":"step-tts-2","type":"speech","name":"Step TTS 2","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"step","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-03-01","last_updated":"2026-07-02","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai"}},"step-5-preview":{"id":"step-5-preview","name":"Step 5 Preview","description":"StepFun's next-generation flagship base model for coding and professional knowledge work, with native text, image, and video input and a 1M-token context window","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":65536},"cost":{"input":1.04613,"output":2.98895,"cache_read":0.10461},"canonical_model_id":"stepfun/step-5-preview"},"step-3.5-flash-2603":{"id":"step-3.5-flash-2603","name":"Step 3.5 Flash 2603","description":"StepFun flash model for efficient multimodal reasoning, coding, and tool use","family":"step","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":256000},"cost":{"input":0.10461,"output":0.31384,"cache_read":0.02092},"canonical_model_id":"stepfun/step-3.5-flash-2603"},"stepaudio-2.5-asr":{"id":"stepaudio-2.5-asr","type":"transcription","name":"StepAudio 2.5 ASR","description":"Speech transcription model for accurate audio-to-text and captioning workflows","family":"step","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-24","last_updated":"2026-07-02","modalities":{"input":["audio"],"output":["text"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai"}},"stepaudio-2.5-tts":{"id":"stepaudio-2.5-tts","type":"speech","name":"StepAudio 2.5 TTS","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"step","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-16","last_updated":"2026-07-02","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai"}},"step-3.7-flash":{"id":"step-3.7-flash","name":"Step 3.7 Flash","description":"Newer StepFun flash model for faster agents, coding, and multimodal prompts","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-03-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":256000},"cost":{"input":0.20175,"output":1.21052,"cache_read":0.04035},"canonical_model_id":"stepfun/step-3.7-flash"},"step-3.5-flash":{"id":"step-3.5-flash","name":"Step 3.5 Flash","description":"StepFun flash lane for quick multimodal reasoning and coding assistance","family":"step","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-29","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":256000},"cost":{"input":0.10461,"output":0.31384,"cache_read":0.02092},"canonical_model_id":"stepfun/step-3.5-flash"}}},"daoxe":{"id":"daoxe","env":["DAOXE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://daoxe.com/v1","name":"DaoXE","doc":"https://daoxe.com/pricing","models":{"gpt-5.5":{"id":"gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"openai/gpt-5.5"},"grok-4.5":{"id":"grok-4.5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.5"},"grok-4.3":{"id":"grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2},"canonical_model_id":"xai/grok-4.3"},"kimi-k2.5":{"id":"kimi-k2.5","name":"Kimi K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":4,"output":16,"cache_read":0.8},"canonical_model_id":"moonshotai/kimi-k2.5"},"gemini-3.1-pro-preview":{"id":"gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2},"canonical_model_id":"google/gemini-3.1-pro-preview"},"claude-haiku-4-5-20251001":{"id":"claude-haiku-4-5-20251001","name":"Claude Haiku 4.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":5},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25},"canonical_model_id":"openai/gpt-5.4"},"claude-opus-4-8":{"id":"claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"}}},"lmstudio":{"id":"lmstudio","env":["LMSTUDIO_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"http://127.0.0.1:1234/v1","name":"LMStudio","doc":"https://lmstudio.ai/models","models":{"qwen/qwen3-30b-a3b-2507":{"id":"qwen/qwen3-30b-a3b-2507","name":"Qwen3 30B A3B 2507","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3-30b-a3b-instruct-2507"},"qwen/qwen3-coder-30b":{"id":"qwen/qwen3-coder-30b","name":"Qwen3 Coder 30B","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-31","last_updated":"2025-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3-coder-30b-a3b-instruct"},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT OSS 20B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-oss-20b"}}},"zenmux":{"id":"zenmux","env":["ZENMUX_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://zenmux.ai/api/v1","name":"ZenMux","doc":"https://docs.zenmux.ai","models":{"anthropic/claude-opus-4.6":{"id":"anthropic/claude-opus-4.6","name":"Claude Opus 4.6","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://zenmux.ai/api/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"anthropic/claude-opus-4.7":{"id":"anthropic/claude-opus-4.7","name":"Claude Opus 4.7","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://zenmux.ai/api/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"anthropic/claude-opus-4.8":{"id":"anthropic/claude-opus-4.8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://zenmux.ai/api/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic/claude-opus-4.5":{"id":"anthropic/claude-opus-4.5","name":"Claude Opus 4.5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://zenmux.ai/api/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"anthropic/claude-opus-5.5":{"id":"anthropic/claude-opus-5.5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://zenmux.ai/api/anthropic/v1"},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"anthropic/claude-haiku-4.5":{"id":"anthropic/claude-haiku-4.5","name":"Claude Haiku 4.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://zenmux.ai/api/anthropic/v1"},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"anthropic/claude-sonnet-5":{"id":"anthropic/claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://zenmux.ai/api/anthropic/v1"},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"anthropic/claude-sonnet-4.5":{"id":"anthropic/claude-sonnet-4.5","name":"Claude Sonnet 4.5","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://zenmux.ai/api/anthropic/v1"},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75,"tiers":[{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5}},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"anthropic/claude-fable-5.1":{"id":"anthropic/claude-fable-5.1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://zenmux.ai/api/anthropic/v1"},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"anthropic/claude-opus-4.1":{"id":"anthropic/claude-opus-4.1","name":"Claude Opus 4.1","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://zenmux.ai/api/anthropic/v1"},"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-1"},"anthropic/claude-sonnet-4.6":{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://zenmux.ai/api/anthropic/v1"},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"anthropic/claude-fable-5":{"id":"anthropic/claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://zenmux.ai/api/anthropic/v1"},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"baidu/ernie-5.0-thinking-preview":{"id":"baidu/ernie-5.0-thinking-preview","name":"ERNIE 5.0","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-01-01","release_date":"2026-01-22","last_updated":"2026-01-22","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":64000},"cost":{"input":0.84,"output":3.37,"tiers":[{"input":1.41,"output":5.62,"tier":{"type":"context","size":32000}}]}},"x-ai/grok-4.5":{"id":"x-ai/grok-4.5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.5"},"x-ai/grok-4.3":{"id":"x-ai/grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.3"},"x-ai/grok-4.2-fast-non-reasoning":{"id":"x-ai/grok-4.2-fast-non-reasoning","name":"Grok 4.2 Fast Non Reasoning","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"cost":{"input":2,"output":6,"cache_read":0.2,"tiers":[{"input":4,"output":12,"cache_read":0.2,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"xai/grok-4.20-0309-non-reasoning"},"x-ai/grok-voice-stt-1.0":{"id":"x-ai/grok-voice-stt-1.0","type":"transcription","name":"Grok Voice STT 1.0","description":"Speech-to-text model with word-level timestamps, speaker diarization, multichannel audio, and streaming","family":"grok","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-09-17","last_updated":"2026-09-17","modalities":{"input":["audio"],"output":["text"]},"open_weights":false,"limit":{"context":15000,"output":15000},"canonical_model_id":"xai/grok-voice-transcribe-2.0"},"x-ai/grok-4.2-fast":{"id":"x-ai/grok-4.2-fast","name":"Grok 4.2 Fast","description":"Reasoning Grok for document-heavy analysis and long-horizon tool use","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"cost":{"input":2,"output":6,"cache_read":0.2,"tiers":[{"input":4,"output":12,"cache_read":0.2,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"xai/grok-4.20-0309-reasoning"},"x-ai/grok-4.6":{"id":"x-ai/grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.6"},"x-ai/grok-imagine-image-2.0":{"id":"x-ai/grok-imagine-image-2.0","type":"image","name":"Grok Imagine Image 2.0","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"grok","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-08-07","last_updated":"2026-08-07","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":66000,"output":0},"canonical_model_id":"xai/grok-imagine-image-2.0"},"x-ai/grok-build-0.1":{"id":"x-ai/grok-build-0.1","name":"Grok Build 0.1","description":"Fast Grok coding model tuned for agentic engineering and iterative edits","family":"grok-build","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":1,"output":2,"cache_read":0.2},"canonical_model_id":"xai/grok-build-0.1"},"x-ai/grok-voice-tts-1.0":{"id":"x-ai/grok-voice-tts-1.0","type":"speech","name":"Grok Voice TTS 1.0","description":"Convert text into spoken audio with a single API call. The API supports a rich set of expressive voices, inline speech tags for fine-grained delivery control, and output formats from high-fidelity MP3 to telephony-optimized μ-law.","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":15000,"output":15000},"canonical_model_id":"xai/grok-tts"},"deepseek/deepseek-v3.2-exp":{"id":"deepseek/deepseek-v3.2-exp","name":"DeepSeek-V3.2-Exp","description":"DeepSeek chat model for instruction following, coding, and analysis","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-01-01","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":163000,"output":64000},"status":"deprecated","cost":{"input":0.22,"output":0.33}},"deepseek/deepseek-v4.1-flash":{"id":"deepseek/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.075,"output":0.3,"cache_read":0.0015},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.66,"output":1.98,"cache_read":0.022},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-v4-flash":{"id":"deepseek/deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.22,"output":0.66,"cache_read":0.007},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek/deepseek-v3.2":{"id":"deepseek/deepseek-v3.2","name":"DeepSeek V3.2","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8000},"cost":{"input":0.293,"output":0.4395,"cache_read":0.0293},"canonical_model_id":"deepseek/deepseek-v3.2"},"inclusionai/ring-2.6-1t":{"id":"inclusionai/ring-2.6-1t","name":"inclusionAI: Ring-2.6-1T","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-12-31","release_date":"2026-05-07","last_updated":"2026-05-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":65000},"cost":{"input":0.1318155,"output":1.0984625,"cache_read":0.0263631}},"google/gemini-2.5-flash":{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048000,"output":65535},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"input_audio":1},"canonical_model_id":"google/gemini-2.5-flash"},"google/gemini-2.5-pro":{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048000,"output":65535},"cost":{"input":1.25,"output":10,"cache_read":0.13,"tiers":[{"input":2.5,"output":15,"cache_read":0.25,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":15,"cache_read":0.25}},"canonical_model_id":"google/gemini-2.5-pro"},"google/gemini-3.5-flash":{"id":"google/gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"cache_read":0.15},"canonical_model_id":"google/gemini-3.5-flash"},"google/gemini-3.1-pro-preview":{"id":"google/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048000,"output":65535},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"google/gemini-3.1-flash-lite":{"id":"google/gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"input_audio":0.5},"canonical_model_id":"google/gemini-3.1-flash-lite"},"google/gemini-2.5-flash-lite":{"id":"google/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":512,"max":24576}],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048000,"output":65535},"cost":{"input":0.1,"output":0.4,"cache_read":0.01,"input_audio":0.3},"canonical_model_id":"google/gemini-2.5-flash-lite"},"google/gemini-3-flash-preview":{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048000,"output":65535},"cost":{"input":0.5,"output":3,"cache_read":0.05,"cache_write":1,"input_audio":1},"canonical_model_id":"google/gemini-3-flash-preview"},"qwen/qwen3.6-plus":{"id":"qwen/qwen3.6-plus","name":"Qwen3.6-Plus","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.5,"output":3,"cache_read":0.1,"cache_write":0.625,"tiers":[{"input":2,"output":6,"cache_read":0.4,"cache_write":2.5,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":2,"output":6,"cache_read":0.4,"cache_write":2.5}},"canonical_model_id":"alibaba/qwen3.6-plus"},"qwen/qwen3-coder-plus":{"id":"qwen/qwen3-coder-plus","name":"Qwen3-Coder-Plus","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-23","last_updated":"2025-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"status":"deprecated","cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"alibaba/qwen3-coder-plus"},"qwen/qwen3.5-flash":{"id":"qwen/qwen3.5-flash","name":"Qwen3.5 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-01-01","release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1020000,"output":1020000},"cost":{"input":0.1,"output":0.4,"cache_read":0.02,"cache_write":0.125},"canonical_model_id":"alibaba/qwen3.5-flash"},"qwen/qwen3.7-plus":{"id":"qwen/qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.4,"output":1.6,"cache_read":0.08,"cache_write":0.5,"tiers":[{"input":1.2,"output":4.8,"cache_read":0.24,"cache_write":1.5,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":1.2,"output":4.8,"cache_read":0.24,"cache_write":1.5}},"canonical_model_id":"alibaba/qwen3.7-plus"},"qwen/qwen3.7-max":{"id":"qwen/qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":1.25,"output":3.75,"cache_read":0.25,"cache_write":1.5625},"canonical_model_id":"alibaba/qwen3.7-max"},"qwen/qwen3-max":{"id":"qwen/qwen3-max","name":"Qwen3-Max-Thinking","description":"Qwen reasoning model for deliberate problem solving, math, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":64000},"status":"deprecated","cost":{"input":1.2,"output":6},"canonical_model_id":"alibaba/qwen3-max"},"qwen/qwen3.5-plus":{"id":"qwen/qwen3.5-plus","name":"Qwen3.5 Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-16","last_updated":"2026-02-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.4,"output":2.4,"cache_read":0.08,"cache_write":0.5,"tiers":[{"input":0.5,"output":3,"cache_read":0.1,"cache_write":0.625,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":0.5,"output":3,"cache_read":0.1,"cache_write":0.625}},"canonical_model_id":"alibaba/qwen3.5-plus"},"bytedance/doubao-seed-2.0-code":{"id":"bytedance/doubao-seed-2.0-code","name":"Doubao Seed 2.0 Code","description":"Coding model for repository understanding, refactors, and agentic engineering tasks","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000},"cost":{"input":0.45,"output":2.24,"cache_read":0.09,"tiers":[{"input":0.67,"output":3.36,"cache_read":0.14,"tier":{"type":"context","size":32000}},{"input":1.34,"output":6.71,"cache_read":0.27,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-code"},"bytedance/doubao-seed-2.0-lite":{"id":"bytedance/doubao-seed-2.0-lite","name":"Doubao-Seed-2.0-lite","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000},"cost":{"input":0.09,"output":0.51,"cache_read":0.02,"tiers":[{"input":0.13,"output":0.76,"cache_read":0.03,"tier":{"type":"context","size":32000}},{"input":0.25,"output":1.51,"cache_read":0.05,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-lite"},"bytedance/doubao-seed-code":{"id":"bytedance/doubao-seed-code","name":"Doubao-Seed-Code","description":"Coding model for repository understanding, refactors, and agentic engineering tasks","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2025-11-11","last_updated":"2025-11-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000},"cost":{"input":0.17,"output":1.12,"cache_read":0.034,"tiers":[{"input":0.2,"output":1.69,"cache_read":0.034,"tier":{"type":"context","size":32000}},{"input":0.39,"output":2.25,"cache_read":0.034,"tier":{"type":"context","size":128000}}]}},"bytedance/doubao-seed-2.0-mini":{"id":"bytedance/doubao-seed-2.0-mini","name":"Doubao-Seed-2.0-mini","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000},"cost":{"input":0.03,"output":0.28,"cache_read":0.01,"tiers":[{"input":0.06,"output":0.56,"cache_read":0.02,"tier":{"type":"context","size":32000}},{"input":0.12,"output":1.12,"cache_read":0.03,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-mini"},"bytedance/doubao-seed-2.0-pro":{"id":"bytedance/doubao-seed-2.0-pro","name":"Doubao-Seed-2.0-pro","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"temperature":false,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000},"cost":{"input":0.45,"output":2.24,"cache_read":0.09,"tiers":[{"input":0.67,"output":3.36,"cache_read":0.14,"tier":{"type":"context","size":32000}},{"input":1.34,"output":6.71,"cache_read":0.27,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-pro"},"bytedance/doubao-seed-1.8":{"id":"bytedance/doubao-seed-1.8","name":"Doubao-Seed-1.8","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2025-12-28","last_updated":"2025-12-28","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000},"cost":{"input":0.11,"output":0.28,"cache_read":0.023,"tiers":[{"input":0.17,"output":2.27,"cache_read":0.023,"tier":{"type":"context","size":32000}},{"input":0.34,"output":3.41,"cache_read":0.023,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-1-8"},"moonshotai/kimi-k2.6":{"id":"moonshotai/kimi-k2.6","name":"Kimi K2.6","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":false,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262140,"output":262140},"cost":{"input":0.95,"output":4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"moonshotai/kimi-k3":{"id":"moonshotai/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"moonshotai/kimi-k2.7-code":{"id":"moonshotai/kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"moonshotai/kimi-k2.7-code-highspeed":{"id":"moonshotai/kimi-k2.7-code-highspeed","name":"Kimi K2.7 Code HighSpeed","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.9,"output":8,"cache_read":0.38},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"openai/gpt-5.2-pro":{"id":"openai/gpt-5.2-pro","name":"GPT-5.2-Pro","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://zenmux.ai/api/v1"},"cost":{"input":21,"output":168},"canonical_model_id":"openai/gpt-5.2-pro"},"openai/gpt-5.5":{"id":"openai/gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":12.5,"output":75,"cache_read":1.25},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"openai/gpt-5.2":{"id":"openai/gpt-5.2","name":"GPT-5.2","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["image","text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://zenmux.ai/api/v1"},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"openai/gpt-5.2-codex":{"id":"openai/gpt-5.2-codex","name":"GPT-5.2-Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://zenmux.ai/api/v1"},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2-codex"},"openai/gpt-5.4-mini":{"id":"openai/gpt-5.4-mini","name":"GPT-5.4 Mini","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://zenmux.ai/api/v1"},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"openai/gpt-5":{"id":"openai/gpt-5","name":"GPT-5","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://zenmux.ai/api/v1"},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"openai/gpt-5.1-codex":{"id":"openai/gpt-5.1-codex","name":"GPT-5.1-Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://zenmux.ai/api/v1"},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1-codex"},"openai/gpt-5.6-sol":{"id":"openai/gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"openai/gpt-6-sol":{"id":"openai/gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"openai/gpt-5.3-codex":{"id":"openai/gpt-5.3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://zenmux.ai/api/v1"},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"openai/gpt-6-astra":{"id":"openai/gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"openai/gpt-5.1":{"id":"openai/gpt-5.1","name":"GPT-5.1","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["image","text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://zenmux.ai/api/v1"},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1"},"openai/gpt-5.1-codex-mini":{"id":"openai/gpt-5.1-codex-mini","name":"GPT-5.1-Codex-Mini","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":100000},"provider":{"npm":"@ai-sdk/openai","api":"https://zenmux.ai/api/v1"},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5.1-codex-mini"},"openai/gpt-5.5-pro":{"id":"openai/gpt-5.5-pro","name":"GPT-5.5 Pro","description":"Highest-accuracy GPT-5.5 tier for slower, precision-heavy reasoning and coding","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.5-pro"},"openai/gpt-5.6-luna":{"id":"openai/gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/chat-latest":{"id":"openai/chat-latest","name":"Chat Latest (GPT-5.5 Instant)","description":"Compact GPT model for low-latency assistance and high-volume workloads","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-12-01","release_date":"2026-05-05","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"openai/gpt-5.5-instant"},"openai/gpt-5.4-pro":{"id":"openai/gpt-5.4-pro","name":"GPT-5.4 Pro","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://zenmux.ai/api/v1"},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.4-pro"},"openai/gpt-5.4":{"id":"openai/gpt-5.4","name":"GPT-5.4","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://zenmux.ai/api/v1"},"cost":{"input":2.5,"output":15,"cache_read":0.25,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5}},"canonical_model_id":"openai/gpt-5.4"},"openai/gpt-5.4-nano":{"id":"openai/gpt-5.4-nano","name":"GPT-5.4 Nano","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://zenmux.ai/api/v1"},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"openai/gpt-5-codex":{"id":"openai/gpt-5-codex","name":"GPT-5 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-09-15","last_updated":"2025-09-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://zenmux.ai/api/v1"},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5-codex"},"openai/gpt-5.6-terra":{"id":"openai/gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"volcengine/doubao-seed-2.0-code":{"id":"volcengine/doubao-seed-2.0-code","name":"Doubao Seed 2.0 Code","description":"Coding model for repository understanding, refactors, and agentic engineering tasks","family":"seed","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-01-01","release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000},"status":"deprecated","cost":{"input":0.9,"output":4.48},"canonical_model_id":"bytedance-seed/seed-2.0-code"},"volcengine/doubao-seed-2.0-lite":{"id":"volcengine/doubao-seed-2.0-lite","name":"Doubao-Seed-2.0-lite","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2026-02-14","release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":64000},"status":"deprecated","cost":{"input":0.09,"output":0.51,"cache_read":0.02,"cache_write":0.0024},"canonical_model_id":"bytedance-seed/seed-2.0-lite"},"volcengine/doubao-seed-code":{"id":"volcengine/doubao-seed-code","name":"Doubao-Seed-Code","description":"Coding model for repository understanding, refactors, and agentic engineering tasks","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-01-01","release_date":"2025-11-11","last_updated":"2025-11-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":64000},"status":"deprecated","cost":{"input":0.17,"output":1.12,"cache_read":0.03}},"volcengine/doubao-seed-2.0-mini":{"id":"volcengine/doubao-seed-2.0-mini","name":"Doubao-Seed-2.0-mini","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2026-02-14","release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":64000},"status":"deprecated","cost":{"input":0.03,"output":0.28,"cache_read":0.01,"cache_write":0.0024},"canonical_model_id":"bytedance-seed/seed-2.0-mini"},"volcengine/doubao-seed-2.0-pro":{"id":"volcengine/doubao-seed-2.0-pro","name":"Doubao-Seed-2.0-pro","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2026-02-14","release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":64000},"status":"deprecated","cost":{"input":0.45,"output":2.24,"cache_read":0.09,"cache_write":0.0024},"canonical_model_id":"bytedance-seed/seed-2.0-pro"},"volcengine/doubao-seed-1.8":{"id":"volcengine/doubao-seed-1.8","name":"Doubao-Seed-1.8","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-01-01","release_date":"2025-12-28","last_updated":"2025-12-28","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":64000},"status":"deprecated","cost":{"input":0.11,"output":0.28,"cache_read":0.02,"cache_write":0.0024},"canonical_model_id":"bytedance-seed/seed-1-8"},"xiaomi/mimo-v2.6-pro":{"id":"xiaomi/mimo-v2.6-pro","name":"MiMo-V2.6-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.435,"output":0.87,"cache_read":0.0036},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"xiaomi/mimo-v2.5":{"id":"xiaomi/mimo-v2.5","name":"MiMo-V2.5","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":0.4,"output":2,"cache_read":0.08,"tiers":[{"input":0.8,"output":4,"cache_read":0.16,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":0.8,"output":4,"cache_read":0.16}},"canonical_model_id":"xiaomi/mimo-v2.5"},"xiaomi/mimo-v2.5-pro":{"id":"xiaomi/mimo-v2.5-pro","name":"MiMo-V2.5-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":1,"output":3,"cache_read":0.2,"tiers":[{"input":2,"output":6,"cache_read":0.4,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":2,"output":6,"cache_read":0.4}},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"minimax/minimax-m2.1":{"id":"minimax/minimax-m2.1","name":"MiniMax M2.1","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-01-01","release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204000,"output":131072},"provider":{"npm":"@ai-sdk/anthropic","api":"https://zenmux.ai/api/anthropic/v1"},"cost":{"input":0.3,"output":1.2,"cache_read":0.03,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.1"},"minimax/minimax-m2.5":{"id":"minimax/minimax-m2.5","name":"MiniMax M2.5","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-01-01","release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"provider":{"npm":"@ai-sdk/anthropic","api":"https://zenmux.ai/api/anthropic/v1"},"cost":{"input":0.3,"output":1.2,"cache_read":0.03,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.5"},"minimax/minimax-m2.5-lightning":{"id":"minimax/minimax-m2.5-lightning","name":"MiniMax M2.5 highspeed","description":"High-speed MiniMax model for low-latency coding and agent workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-01-01","release_date":"2026-02-13","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"provider":{"npm":"@ai-sdk/anthropic","api":"https://zenmux.ai/api/anthropic/v1"},"cost":{"input":0.6,"output":2.4,"cache_read":0.03,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.5-highspeed"},"minimax/minimax-m2":{"id":"minimax/minimax-m2","name":"MiniMax M2","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-01-01","release_date":"2025-10-27","last_updated":"2025-10-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://zenmux.ai/api/anthropic/v1"},"cost":{"input":0.3,"output":1.2,"cache_read":0.03,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2"},"minimax/minimax-m3.1-flash":{"id":"minimax/minimax-m3.1-flash","name":"MiniMax-M3.1-Flash","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":512000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://zenmux.ai/api/anthropic/v1"},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"minimax/minimax-m3":{"id":"minimax/minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":512000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://zenmux.ai/api/anthropic/v1"},"cost":{"input":0.3,"output":1.2,"cache_read":0.06,"tiers":[{"input":0.6,"output":2.4,"cache_read":0.12,"tier":{"type":"context","size":512000}}],"context_over_200k":{"input":0.6,"output":2.4,"cache_read":0.12}},"canonical_model_id":"minimax/MiniMax-M3"},"minimax/minimax-m2.7-highspeed":{"id":"minimax/minimax-m2.7-highspeed","name":"MiniMax M2.7 highspeed","description":"High-speed MiniMax model for low-latency coding and agent workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-01-01","release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131070},"provider":{"npm":"@ai-sdk/anthropic","api":"https://zenmux.ai/api/anthropic/v1"},"cost":{"input":0.611,"output":2.4439,"cache_read":0.0611,"cache_write":0.3819},"canonical_model_id":"minimax/MiniMax-M2.7-highspeed"},"minimax/minimax-m2.7":{"id":"minimax/minimax-m2.7","name":"MiniMax M2.7","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-01-01","release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131070},"provider":{"npm":"@ai-sdk/anthropic","api":"https://zenmux.ai/api/anthropic/v1"},"cost":{"input":0.3,"output":1.2,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.7"},"stepfun/step-3.7-flash":{"id":"stepfun/step-3.7-flash","name":"Step 3.7 Flash","description":"Newer StepFun flash model for faster agents, coding, and multimodal prompts","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2026-03-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":256000},"cost":{"input":0.2,"output":1.15,"cache_read":0.04},"canonical_model_id":"stepfun/step-3.7-flash"},"stepfun/step-3.5-flash":{"id":"stepfun/step-3.5-flash","name":"Step 3.5 Flash","description":"StepFun flash model for efficient multimodal reasoning, coding, and tool use","family":"step","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-29","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.1,"output":0.3},"canonical_model_id":"stepfun/step-3.5-flash"},"z-ai/glm-5.2":{"id":"z-ai/glm-5.2","name":"GLM 5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"z-ai/glm-4.6v-flash":{"id":"z-ai/glm-4.6v-flash","name":"GLM 4.6V FlashX","description":"Lightweight GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.0218,"output":0.2184,"cache_read":0.0044,"tiers":[{"input":0.0437,"output":0.4367,"cache_read":0.0044,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-4.6v-flash"},"z-ai/glm-4.7-flash-free":{"id":"z-ai/glm-4.7-flash-free","name":"GLM 4.7 Flash (Free)","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"zhipuai/glm-4.7-flash"},"z-ai/glm-4.6v-flash-free":{"id":"z-ai/glm-4.6v-flash-free","name":"GLM 4.6V Flash (Free)","description":"Lightweight GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0,"output":0,"cache_read":0,"tiers":[{"input":0,"output":0,"cache_read":0,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-4.6v-flash"},"z-ai/glm-4.6v":{"id":"z-ai/glm-4.6v","name":"GLM 4.6V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.1456,"output":0.4367,"cache_read":0.0291,"tiers":[{"input":0.2911,"output":0.8734,"cache_read":0.0582,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-4.6v"},"z-ai/glm-5.1":{"id":"z-ai/glm-5.1","name":"GLM 5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.8781,"output":3.5126,"cache_read":0.1903,"tiers":[{"input":1.1709,"output":4.098,"cache_read":0.2927,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-5.1"},"z-ai/glm-4.5":{"id":"z-ai/glm-4.5","name":"GLM 4.5","description":"Hybrid-reasoning GLM release that made the 4.5 line broadly useful","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":96000},"cost":{"input":0.2911,"output":1.1645,"cache_read":0.0582,"tiers":[{"input":0.5823,"output":2.3291,"cache_read":0.1165,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-4.5"},"z-ai/glm-4.7":{"id":"z-ai/glm-4.7","name":"GLM 4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.2911,"output":1.1645,"cache_read":0.0582,"tiers":[{"input":0.5823,"output":2.3291,"cache_read":0.1165,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-4.7"},"z-ai/glm-5.3":{"id":"z-ai/glm-5.3","name":"GLM 5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"z-ai/glm-image":{"id":"z-ai/glm-image","type":"image","name":"GLM-Image","description":"GLM-Image is an image generation model adopts a hybrid autoregressive + diffusion decoder architecture. In general image generation quality, GLM‑Image aligns with mainstream latent diffusion approaches, but it shows significant advantages in text-rendering and knowledge‑intensive generation scenarios. It performs especially well in tasks requiring precise semantic understanding and complex information expression, while maintaining strong capabilities in high‑fidelity and fine‑grained detail generation. In addition to text‑to‑image generation, GLM‑Image also supports a rich set of image‑to‑image tasks including image editing, style transfer, identity‑preserving generation, and multi‑subject consistency.","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-01-14","last_updated":"2026-01-14","modalities":{"input":["text"],"output":["image"]},"open_weights":true,"limit":{"context":10240,"output":0},"provider":{"api":"https://zenmux.ai/api/vertex-ai"},"canonical_model_id":"zhipuai/glm-image"},"z-ai/glm-5.3-flash":{"id":"z-ai/glm-5.3-flash","name":"GLM 5.3 Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":0.075,"output":0.25,"cache_read":0.015},"canonical_model_id":"zhipuai/glm-5.3-flash"},"z-ai/glm-5-turbo":{"id":"z-ai/glm-5-turbo","name":"GLM 5 Turbo","description":"Faster GLM-5 lane for coding agents that need lower latency","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":128000},"cost":{"input":0.73,"output":3.19,"cache_read":0.174,"tiers":[{"input":1.02,"output":3.77,"cache_read":0.261,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-5-turbo"},"z-ai/glm-4.5-air":{"id":"z-ai/glm-4.5-air","name":"GLM 4.5 Air","description":"Lighter GLM-4.5 variant for fast coding assistance and cheaper agents","family":"glm-air","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":96000},"cost":{"input":0.1165,"output":0.2911,"cache_read":0.0233,"tiers":[{"input":0.1747,"output":1.1645,"cache_read":0.0349,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-4.5-air"},"z-ai/glm-4.6":{"id":"z-ai/glm-4.6","name":"GLM 4.6","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.2911,"output":1.1645,"cache_read":0.0582,"tiers":[{"input":0.5823,"output":2.3291,"cache_read":0.1165,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-4.6"},"z-ai/glm-5.3-flashx":{"id":"z-ai/glm-5.3-flashx","name":"GLM 5.3 FlashX","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":0.375,"output":1.25,"cache_read":0.075},"canonical_model_id":"zhipuai/glm-5.3-flash"},"z-ai/glm-5v-turbo":{"id":"z-ai/glm-5v-turbo","name":"GLM 5V Turbo","description":"Fast GLM vision model for screenshots, documents, and multimodal agent tasks","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":128000},"cost":{"input":0.726,"output":3.1946,"cache_read":0.1743,"tiers":[{"input":1.0165,"output":3.7754,"cache_read":0.2614,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-5v-turbo"},"z-ai/glm-4.7-flashx":{"id":"z-ai/glm-4.7-flashx","name":"GLM 4.7 FlashX","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.0728,"output":0.4367,"cache_read":0.0146},"canonical_model_id":"zhipuai/glm-4.7-flashx"},"z-ai/glm-5":{"id":"z-ai/glm-5","name":"GLM 5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.58,"output":2.6,"cache_read":0.14,"tiers":[{"input":0.87,"output":3.18,"cache_read":0.22,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-5"}}},"siliconflow":{"id":"siliconflow","env":["SILICONFLOW_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.siliconflow.com/v1","name":"SiliconFlow","doc":"https://cloud.siliconflow.com/models","models":{"google/gemma-4-31B-it":{"id":"google/gemma-4-31B-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.75,"output":1,"cache_read":0.25},"canonical_model_id":"google/gemma-4-31b-it"},"google/gemma-4-26B-A4B-it":{"id":"google/gemma-4-26B-A4B-it","name":"Gemma 4 26B A4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.14,"output":0.4,"cache_read":0.05},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"google/gemma-4-12B-it":{"id":"google/gemma-4-12B-it","name":"Gemma 4 12B IT","description":"Compact Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.1,"output":0.3},"canonical_model_id":"google/gemma-4-12b-it"},"ByteDance-Seed/Seed-OSS-36B-Instruct":{"id":"ByteDance-Seed/Seed-OSS-36B-Instruct","name":"ByteDance-Seed/Seed-OSS-36B-Instruct","description":"Tool-capable chat model for instruction following and agentic application workflows","family":"seed","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-09-04","last_updated":"2025-11-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.21,"output":0.57}},"MiniMaxAI/MiniMax-M2.5":{"id":"MiniMaxAI/MiniMax-M2.5","name":"MiniMaxAI/MiniMax-M2.5","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":197000,"output":131000},"status":"deprecated","cost":{"input":0.3,"output":1.2,"cache_read":0.03},"canonical_model_id":"minimax/MiniMax-M2.5"},"MiniMaxAI/MiniMax-M3":{"id":"MiniMaxAI/MiniMax-M3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131000},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"},"deepseek-ai/DeepSeek-V3.2":{"id":"deepseek-ai/DeepSeek-V3.2","name":"deepseek-ai/DeepSeek-V3.2","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":164000,"output":164000},"cost":{"input":0.27,"output":0.42,"cache_read":0.135},"canonical_model_id":"deepseek/deepseek-v3.2"},"deepseek-ai/DeepSeek-V4-Flash":{"id":"deepseek-ai/DeepSeek-V4-Flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.13,"output":0.28,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek-ai/DeepSeek-V3.1":{"id":"deepseek-ai/DeepSeek-V3.1","name":"deepseek-ai/DeepSeek-V3.1","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":164000,"output":164000},"cost":{"input":0.27,"output":1},"canonical_model_id":"deepseek/deepseek-v3.1"},"deepseek-ai/DeepSeek-V3.1-Terminus":{"id":"deepseek-ai/DeepSeek-V3.1-Terminus","name":"deepseek-ai/DeepSeek-V3.1-Terminus","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-09-29","last_updated":"2025-11-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":164000,"output":164000},"cost":{"input":0.27,"output":1}},"deepseek-ai/DeepSeek-V4-Flash-0731":{"id":"deepseek-ai/DeepSeek-V4-Flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.22,"output":0.66,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepseek-ai/DeepSeek-V4-Flash-Vision-Exp":{"id":"deepseek-ai/DeepSeek-V4-Flash-Vision-Exp","name":"DeepSeek V4 Flash Vision Exp","description":"Experimental multimodal DeepSeek V4 Flash model for image understanding, coding, and agentic work","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-21","last_updated":"2026-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.44,"output":1.32,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash-vision-exp"},"deepseek-ai/DeepSeek-V3":{"id":"deepseek-ai/DeepSeek-V3","name":"deepseek-ai/DeepSeek-V3","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-03-24","last_updated":"2025-03-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":164000,"output":164000},"cost":{"input":0.25,"output":1},"canonical_model_id":"deepseek/deepseek-v3-0324"},"deepseek-ai/DeepSeek-V3.2-Exp":{"id":"deepseek-ai/DeepSeek-V3.2-Exp","name":"deepseek-ai/DeepSeek-V3.2-Exp","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-10","last_updated":"2025-11-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":164000,"output":164000},"cost":{"input":0.27,"output":0.41}},"deepseek-ai/DeepSeek-V4-Pro":{"id":"deepseek-ai/DeepSeek-V4-Pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":1.50162,"output":3.135,"cache_read":0.135},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek-ai/DeepSeek-V4-Pro-0813":{"id":"deepseek-ai/DeepSeek-V4-Pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":1.32,"output":3.96,"cache_read":0.044},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"deepseek-ai/DeepSeek-R1":{"id":"deepseek-ai/DeepSeek-R1","name":"deepseek-ai/DeepSeek-R1","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-05-28","last_updated":"2025-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":164000,"output":164000},"cost":{"input":0.5,"output":2.18},"canonical_model_id":"deepseek/deepseek-r1-0528"},"tencent/Hunyuan-A13B-Instruct":{"id":"tencent/Hunyuan-A13B-Instruct","name":"tencent/Hunyuan-A13B-Instruct","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"hunyuan","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":128,"max":32768}],"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-06-30","last_updated":"2025-11-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":131000},"cost":{"input":0.14,"output":0.57}},"tencent/Hy3":{"id":"tencent/Hy3","name":"Hy3","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":192000,"output":262144},"cost":{"input":0.132,"output":0.528,"cache_read":0.033},"canonical_model_id":"tencent/hy3"},"moonshotai/Kimi-K3":{"id":"moonshotai/Kimi-K3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":262000},"cost":{"input":2.7,"output":13.5,"cache_read":0.27},"canonical_model_id":"moonshotai/kimi-k3"},"moonshotai/Kimi-K2.7-Code":{"id":"moonshotai/Kimi-K2.7-Code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.85916,"output":3.8,"cache_read":0.17993},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"moonshotai/Kimi-K2.5":{"id":"moonshotai/Kimi-K2.5","name":"moonshotai/Kimi-K2.5","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.45,"output":2.25,"cache_read":0.07},"canonical_model_id":"moonshotai/kimi-k2.5"},"moonshotai/Kimi-K2.6":{"id":"moonshotai/Kimi-K2.6","name":"moonshotai/Kimi-K2.6","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.77,"output":3.4,"cache_read":0.14},"canonical_model_id":"moonshotai/kimi-k2.6"},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"openai/gpt-oss-20b","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":8000},"cost":{"input":0.04,"output":0.18},"canonical_model_id":"openai/gpt-oss-20b"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"openai/gpt-oss-120b","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":8000},"cost":{"input":0.05,"output":0.45},"canonical_model_id":"openai/gpt-oss-120b"},"inclusionAI/Ling-flash-2.0":{"id":"inclusionAI/Ling-flash-2.0","name":"inclusionAI/Ling-flash-2.0","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"ling","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-09-18","last_updated":"2025-11-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":131000},"cost":{"input":0.14,"output":0.57}},"Qwen/Qwen3-VL-30B-A3B-Instruct":{"id":"Qwen/Qwen3-VL-30B-A3B-Instruct","name":"Qwen/Qwen3-VL-30B-A3B-Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-04","last_updated":"2025-10-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.29,"output":1},"canonical_model_id":"alibaba/qwen3-vl-30b-a3b-instruct"},"Qwen/Qwen2.5-72B-Instruct":{"id":"Qwen/Qwen2.5-72B-Instruct","name":"Qwen/Qwen2.5-72B-Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2024-09-18","last_updated":"2025-11-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":33000,"output":4000},"cost":{"input":0.59,"output":0.59}},"Qwen/Qwen3.5-397B-A17B":{"id":"Qwen/Qwen3.5-397B-A17B","name":"Qwen3.5 397B-A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0.39,"output":2.34},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"Qwen/Qwen3-32B":{"id":"Qwen/Qwen3-32B","name":"Qwen/Qwen3-32B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":131000},"cost":{"input":0.14,"output":0.57},"canonical_model_id":"alibaba/qwen3-32b"},"Qwen/Qwen3-VL-30B-A3B-Thinking":{"id":"Qwen/Qwen3-VL-30B-A3B-Thinking","name":"Qwen/Qwen3-VL-30B-A3B-Thinking","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-11","last_updated":"2025-11-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.29,"output":1}},"Qwen/Qwen3.5-27B":{"id":"Qwen/Qwen3.5-27B","name":"Qwen3.5 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.25,"output":2},"canonical_model_id":"alibaba/qwen3.5-27b"},"Qwen/Qwen3.6-27B":{"id":"Qwen/Qwen3.6-27B","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.3,"output":3.2},"canonical_model_id":"alibaba/qwen3.6-27b"},"Qwen/Qwen3-Coder-480B-A35B-Instruct":{"id":"Qwen/Qwen3-Coder-480B-A35B-Instruct","name":"Qwen/Qwen3-Coder-480B-A35B-Instruct","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.25,"output":1},"canonical_model_id":"alibaba/qwen3-coder-480b-a35b-instruct"},"Qwen/Qwen3-VL-32B-Thinking":{"id":"Qwen/Qwen3-VL-32B-Thinking","name":"Qwen/Qwen3-VL-32B-Thinking","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-21","last_updated":"2025-11-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.2,"output":1.5}},"Qwen/Qwen3.5-122B-A10B":{"id":"Qwen/Qwen3.5-122B-A10B","name":"Qwen3.5 122B-A10B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.26,"output":2.08},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"Qwen/Qwen3-VL-32B-Instruct":{"id":"Qwen/Qwen3-VL-32B-Instruct","name":"Qwen/Qwen3-VL-32B-Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-21","last_updated":"2025-11-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.2,"output":0.6}},"Qwen/Qwen3-VL-8B-Instruct":{"id":"Qwen/Qwen3-VL-8B-Instruct","name":"Qwen/Qwen3-VL-8B-Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-15","last_updated":"2025-11-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.18,"output":0.68}},"Qwen/Qwen3.8-2.4T-A95B":{"id":"Qwen/Qwen3.8-2.4T-A95B","name":"Qwen3.8 2.4T A95B","description":"Open-weight sparse MoE (2.4T total, 95B active), the open-weight twin of Qwen3.8 Max for coding, research, complex reasoning, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1049000,"output":131000},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"Qwen/Qwen3.5-9B":{"id":"Qwen/Qwen3.5-9B","name":"Qwen/Qwen3.5-9B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.1,"output":0.15},"canonical_model_id":"alibaba/qwen3.5-9b"},"Qwen/Qwen2.5-7B-Instruct":{"id":"Qwen/Qwen2.5-7B-Instruct","name":"Qwen/Qwen2.5-7B-Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2024-09-19","last_updated":"2024-09-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":33000,"output":4000},"cost":{"input":0.05,"output":0.05},"canonical_model_id":"alibaba/qwen2.5-7b-instruct"},"Qwen/Qwen3-14B":{"id":"Qwen/Qwen3-14B","name":"Qwen/Qwen3-14B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-04-30","last_updated":"2025-11-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":131000},"cost":{"input":0.07,"output":0.28}},"Qwen/Qwen3-30B-A3B-Instruct-2507":{"id":"Qwen/Qwen3-30B-A3B-Instruct-2507","name":"Qwen/Qwen3-30B-A3B-Instruct-2507","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.09,"output":0.3},"canonical_model_id":"alibaba/qwen3-30b-a3b-instruct-2507"},"Qwen/Qwen3-Coder-30B-A3B-Instruct":{"id":"Qwen/Qwen3-Coder-30B-A3B-Instruct","name":"Qwen/Qwen3-Coder-30B-A3B-Instruct","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-31","last_updated":"2025-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":0.07,"output":0.28},"canonical_model_id":"alibaba/qwen3-coder-30b-a3b-instruct"},"Qwen/Qwen3-8B":{"id":"Qwen/Qwen3-8B","name":"Qwen/Qwen3-8B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-04-29","last_updated":"2025-04-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":131000},"cost":{"input":0.06,"output":0.06},"canonical_model_id":"alibaba/qwen3-8b"},"Qwen/Qwen3.5-35B-A3B":{"id":"Qwen/Qwen3.5-35B-A3B","name":"Qwen3.5 35B-A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.24,"output":1.8,"cache_read":0.15},"canonical_model_id":"alibaba/qwen3.5-35b-a3b"},"Qwen/Qwen3.6-35B-A3B":{"id":"Qwen/Qwen3.6-35B-A3B","name":"Qwen3.6 35B-A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.24,"output":1.8,"cache_read":0.15},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"nex-agi/Nex-N2-Pro":{"id":"nex-agi/Nex-N2-Pro","name":"Nex-N2-Pro","description":"Open agentic MoE model (397B total, 17B active) for coding, tool use, and research workflows","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"status":"deprecated","cost":{"input":0.5,"output":2.5,"cache_read":0.25},"canonical_model_id":"nex-agi/nex-n2-pro"},"meituan-longcat/LongCat-2.0":{"id":"meituan-longcat/LongCat-2.0","name":"LongCat-2.0","description":"Meituan LongCat-2.0, a reasoning model with tool calling and a 1M-token context window","family":"longcat","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1049000,"output":131072},"cost":{"input":0.75,"output":2.95,"cache_read":0.015},"canonical_model_id":"meituan/longcat-2.0"},"zai-org/GLM-5.3-Flash":{"id":"zai-org/GLM-5.3-Flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1049000,"output":262000},"cost":{"input":0.15,"output":0.5,"cache_read":0.03,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai-org/GLM-5.2":{"id":"zai-org/GLM-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1049000,"output":262000},"cost":{"input":1.302,"output":4.092,"cache_read":0.26,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.2"},"zai-org/GLM-5.3":{"id":"zai-org/GLM-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1049000,"output":262000},"cost":{"input":1.4,"output":4.4,"cache_read":0.26,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3"},"zai-org/GLM-4.5-Air":{"id":"zai-org/GLM-4.5-Air","name":"zai-org/GLM-4.5-Air","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-air","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":131000},"cost":{"input":0.14,"output":0.86},"canonical_model_id":"zhipuai/glm-4.5-air"},"zai-org/GLM-5":{"id":"zai-org/GLM-5","name":"zai-org/GLM-5","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":205000,"output":131072},"cost":{"input":0.95,"output":2.55,"cache_read":0.2},"canonical_model_id":"zhipuai/glm-5"},"zai-org/GLM-5.1":{"id":"zai-org/GLM-5.1","name":"zai-org/GLM-5.1","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":205000,"output":131000},"cost":{"input":1.19,"output":3.74,"cache_read":0.6,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.1"},"zai-org/GLM-5V-Turbo":{"id":"zai-org/GLM-5V-Turbo","name":"zai-org/GLM-5V-Turbo","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24,"cache_write":0},"canonical_model_id":"zhipuai/glm-5v-turbo"},"stepfun-ai/Step-3.5-Flash":{"id":"stepfun-ai/Step-3.5-Flash","name":"stepfun-ai/Step-3.5-Flash","description":"StepFun flash model for efficient multimodal reasoning, coding, and tool use","family":"step","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-29","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":66000},"cost":{"input":0.1,"output":0.3},"canonical_model_id":"stepfun/step-3.5-flash"}}},"modular":{"id":"modular","env":["MODULAR_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.modular.com/v1","name":"Modular","doc":"https://docs.modular.com/models","models":{"deepseek/deepseek-v4.1-flash-1017":{"id":"deepseek/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.17,"output":1.2,"cache_read":0.02},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"google/gemma-4-31b-it":{"id":"google/gemma-4-31b-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.25,"output":0.65,"cache_read":0.08},"canonical_model_id":"google/gemma-4-31b-it"},"MiniMaxAI/MiniMax-M3.1-Flash":{"id":"MiniMaxAI/MiniMax-M3.1-Flash","name":"MiniMax-M3.1-Flash","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":512000},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"minimax/minimax-m3":{"id":"minimax/minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":512000},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"}}},"infer":{"id":"infer","env":["INFER_API_KEY"],"npm":"@ai-sdk/openai","api":"https://infer.flow7.org/v1","name":"Infer by Flow7","doc":"https://infer.flow7.org/opencode","models":{"infer/gpt-5.6-sol:official":{"id":"infer/gpt-5.6-sol:official","name":"GPT-5.6 Sol (Official API)","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":271999,"output":128000},"provider":{"shape":"responses"},"cost":{"input":2.5,"output":12.5,"cache_read":0.25,"cache_write":3.125},"canonical_model_id":"openai/gpt-5.6-sol"},"infer/gpt-6-astra:official":{"id":"infer/gpt-6-astra:official","name":"GPT-6 Astra (Official API)","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":271999,"output":128000},"provider":{"shape":"responses"},"cost":{"input":12.5,"output":62.5,"cache_read":1.25,"cache_write":15.625},"canonical_model_id":"openai/gpt-6-astra"}}},"umans-ai-coding-plan":{"id":"umans-ai-coding-plan","env":["UMANS_AI_CODING_PLAN_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.code.umans.ai/v1","name":"Umans AI Coding Plan","doc":"https://app.umans.ai/offers/code/docs","models":{"umans-deepseek-v4.1-flash":{"id":"umans-deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393215},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"umans-glm-5.3":{"id":"umans-glm-5.3","name":"GLM 5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131071},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3"},"umans-deepseek-v4.1-flash-1017":{"id":"umans-deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393215},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"umans-glm-5.3-flash":{"id":"umans-glm-5.3-flash","name":"GLM 5.3 Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131071},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3-flash"},"umans-coder":{"id":"umans-coder","name":"Umans Coder","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131071},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.3-flash"},"umans-flash":{"id":"umans-flash","name":"Umans Flash","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"umans-qwen3.6-35b-a3b":{"id":"umans-qwen3.6-35b-a3b","name":"Qwen3.6 35B A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"umans-kimi-k3":{"id":"umans-kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k3"},"umans-deepseek-v4-flash-0731":{"id":"umans-deepseek-v4-flash-0731","name":"DeepSeek V4 Flash","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393215},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"}}},"neon":{"id":"neon","env":["NEON_AI_GATEWAY_BASE_URL","NEON_AI_GATEWAY_TOKEN"],"npm":"@ai-sdk/openai-compatible","api":"${NEON_AI_GATEWAY_BASE_URL}/v1","name":"Neon","doc":"https://neon.com/docs","models":{"gemini-3-1-flash-lite":{"id":"gemini-3-1-flash-lite","name":"Gemini 3.1 Flash Lite Preview","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-03-03","last_updated":"2026-03-03","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"input_audio":0.5},"canonical_model_id":"google/gemini-3.1-flash-lite-preview"},"gpt-5-6-terra":{"id":"gpt-5-6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"${NEON_AI_GATEWAY_BASE_URL}/openai/v1","shape":"responses"},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"grok-4-6":{"id":"grok-4-6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":524288},"provider":{"npm":"@ai-sdk/openai","api":"${NEON_AI_GATEWAY_BASE_URL}/openai/v1","shape":"responses"},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.6"},"meta-llama-3-3-70b-instruct":{"id":"meta-llama-3-3-70b-instruct","name":"Llama-3.3-70B-Instruct","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0.5,"output":1.5},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"claude-sonnet-5-5":{"id":"claude-sonnet-5-5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"claude-fable-5-1":{"id":"claude-fable-5-1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"claude-opus-4-5":{"id":"claude-opus-4-5","name":"Claude Opus 4.5 (latest)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"gemma-3-12b":{"id":"gemma-3-12b","name":"Gemma 3 12B","description":"Google's open-weight Gemma 3 vision-language model for text and image understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08-31","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"cost":{"input":0.15,"output":0.5},"canonical_model_id":"google/gemma-3-12b-it"},"glm-5-3-flash":{"id":"glm-5-3-flash","name":"GLM-5.3 Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"gpt-5-4":{"id":"gpt-5-4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"${NEON_AI_GATEWAY_BASE_URL}/openai/v1","shape":"responses"},"cost":{"input":2.5,"output":15,"cache_read":0.25,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5}},"canonical_model_id":"openai/gpt-5.4"},"gpt-5-2":{"id":"gpt-5-2","name":"GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"${NEON_AI_GATEWAY_BASE_URL}/openai/v1","shape":"responses"},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"glm-5-2":{"id":"glm-5-2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","minimal","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":65536},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"gpt-5":{"id":"gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"${NEON_AI_GATEWAY_BASE_URL}/openai/v1","shape":"responses"},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"gpt-5-4-mini":{"id":"gpt-5-4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"${NEON_AI_GATEWAY_BASE_URL}/openai/v1","shape":"responses"},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"gpt-5-6-luna":{"id":"gpt-5-6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"${NEON_AI_GATEWAY_BASE_URL}/openai/v1","shape":"responses"},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"gpt-5-6-sol":{"id":"gpt-5-6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"${NEON_AI_GATEWAY_BASE_URL}/openai/v1","shape":"responses"},"cost":{"input":5,"output":30,"cache_read":0.5,"cache_write":6.25,"tiers":[{"input":10,"output":45,"cache_read":1,"cache_write":12.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1,"cache_write":12.5}},"canonical_model_id":"openai/gpt-5.6-sol"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","minimal","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"claude-sonnet-5":{"id":"claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"llama-4-maverick":{"id":"llama-4-maverick","name":"Llama 4 Maverick 17B Instruct","description":"Open multimodal Llama for strong reasoning with efficient everyday serving","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":8192},"cost":{"input":0.5,"output":1.5},"canonical_model_id":"meta/llama-4-maverick-17b-instruct"},"gemini-3-8-flash":{"id":"gemini-3-8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":7.5,"cache_read":0.15},"canonical_model_id":"google/gemini-3.8-flash"},"gpt-6-luna":{"id":"gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"${NEON_AI_GATEWAY_BASE_URL}/openai/v1","shape":"responses"},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"gemini-3-6-flash":{"id":"gemini-3-6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":7.5,"cache_read":0.15,"input_audio":1.5},"canonical_model_id":"google/gemini-3.6-flash"},"grok-4-7":{"id":"grok-4-7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"provider":{"npm":"@ai-sdk/openai","api":"${NEON_AI_GATEWAY_BASE_URL}/openai/v1","shape":"responses"},"cost":{"input":2.5,"output":7.5,"cache_read":0.5},"canonical_model_id":"xai/grok-4.7"},"meta-llama-3-1-8b-instruct":{"id":"meta-llama-3-1-8b-instruct","name":"Llama 3.1 8B Instruct","description":"Meta's compact open-weight Llama 3.1 model for fast, low-cost text generation","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12-31","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"cost":{"input":0.15,"output":0.45},"canonical_model_id":"meta/llama-3.1-8b-instruct"},"gpt-oss-20b":{"id":"gpt-oss-20b","name":"GPT OSS 20B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":25000},"cost":{"input":0.07,"output":0.3},"canonical_model_id":"openai/gpt-oss-20b"},"gpt-5-5":{"id":"gpt-5-5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"${NEON_AI_GATEWAY_BASE_URL}/openai/v1","shape":"responses"},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"gpt-6-sol":{"id":"gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"${NEON_AI_GATEWAY_BASE_URL}/openai/v1","shape":"responses"},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"gemini-4-argon":{"id":"gemini-4-argon","name":"Gemini 4 Argon","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":4,"output":20,"cache_read":0.2},"canonical_model_id":"google/gemini-4-argon"},"claude-fable-5":{"id":"claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"gemini-3-7-flash":{"id":"gemini-3-7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":7.5,"cache_read":0.15},"canonical_model_id":"google/gemini-3.7-flash"},"gpt-6-astra":{"id":"gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"${NEON_AI_GATEWAY_BASE_URL}/openai/v1","shape":"responses"},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"gpt-6-1-sol":{"id":"gpt-6-1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"${NEON_AI_GATEWAY_BASE_URL}/openai/v1","shape":"responses"},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-sol"},"gpt-5-mini":{"id":"gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"${NEON_AI_GATEWAY_BASE_URL}/openai/v1","shape":"responses"},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"deepseek-v4-1-flash":{"id":"deepseek-v4-1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"deprecated","cost":{"input":0.3,"output":1.2,"cache_read":0.03},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"qwen35-122b-a10b":{"id":"qwen35-122b-a10b","name":"Qwen3.5 122B-A10B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":25000},"cost":{"input":0.22,"output":2.2},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"glm-5-3":{"id":"glm-5-3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"claude-opus-5":{"id":"claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"gpt-5-3-codex":{"id":"gpt-5-3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"${NEON_AI_GATEWAY_BASE_URL}/openai/v1","shape":"responses"},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"gpt-5-4-nano":{"id":"gpt-5-4-nano","name":"GPT-5.4 nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"${NEON_AI_GATEWAY_BASE_URL}/openai/v1","shape":"responses"},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"gemini-3-5-flash-lite":{"id":"gemini-3-5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03},"canonical_model_id":"google/gemini-3.5-flash-lite"},"gemini-3-5-flash":{"id":"gemini-3-5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"cache_read":0.15,"input_audio":1.5},"canonical_model_id":"google/gemini-3.5-flash"},"gpt-5-1":{"id":"gpt-5-1","name":"GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"${NEON_AI_GATEWAY_BASE_URL}/openai/v1","shape":"responses"},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1"},"gpt-5-nano":{"id":"gpt-5-nano","name":"GPT-5 Nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"${NEON_AI_GATEWAY_BASE_URL}/openai/v1","shape":"responses"},"cost":{"input":0.05,"output":0.4,"cache_read":0.01},"canonical_model_id":"openai/gpt-5-nano"},"claude-opus-4-6":{"id":"claude-opus-4-6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024,"max":127999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"gemini-3-flash":{"id":"gemini-3-flash","name":"Gemini 3 Flash Preview","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.05,"input_audio":1},"canonical_model_id":"google/gemini-3-flash-preview"},"inkling":{"id":"inkling","name":"Inkling","description":"Multimodal MoE reasoning model (975B total, 41B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","minimal","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":1,"output":4.05,"cache_read":0.17},"canonical_model_id":"thinkingmachines/inkling"},"qwen3-next-80b-a3b-instruct":{"id":"qwen3-next-80b-a3b-instruct","name":"Qwen3-Next 80B-A3B Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":10000},"cost":{"input":0.15,"output":1.2},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-instruct"},"claude-opus-4-8":{"id":"claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":25000},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"openai/gpt-oss-120b"},"claude-opus-5-5":{"id":"claude-opus-5-5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"claude-sonnet-4-5":{"id":"claude-sonnet-4-5","name":"Claude Sonnet 4.5 (latest)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"claude-opus-4-1":{"id":"claude-opus-4-1","name":"Claude Opus 4.1 (latest)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024,"max":31999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-1"},"claude-haiku-5-5":{"id":"claude-haiku-5-5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"gpt-5-5-pro":{"id":"gpt-5-5-pro","name":"GPT-5.5 Pro","description":"Highest-accuracy GPT-5.5 tier for slower, precision-heavy reasoning and coding","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"${NEON_AI_GATEWAY_BASE_URL}/openai/v1","shape":"responses"},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.5-pro"},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"claude-opus-4-7":{"id":"claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"gemini-3-1-pro":{"id":"gemini-3-1-pro","name":"Gemini 3.1 Pro Preview Custom Tools","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview-customtools"},"claude-haiku-4-5":{"id":"claude-haiku-4-5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"}}},"aiand":{"id":"aiand","env":["AIAND_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.aiand.com/v1","name":"ai&","doc":"https://docs.aiand.com/","models":{"google/gemma-4-31b-it":{"id":"google/gemma-4-31b-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"canonical_model_id":"google/gemma-4-31b-it"},"qwen/qwen3.8-27b":{"id":"qwen/qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.4,"output":3,"cache_read":0.2},"canonical_model_id":"alibaba/qwen3.8-27b"},"qwen/qwen3.6-27b":{"id":"qwen/qwen3.6-27b","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.32,"output":3.2,"cache_read":0.2},"canonical_model_id":"alibaba/qwen3.6-27b"},"deepseek-ai/deepseek-v4-pro":{"id":"deepseek-ai/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":1,"output":2.5,"cache_read":0.25},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek-ai/deepseek-v4.1-flash-1017":{"id":"deepseek-ai/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.3,"output":0.6,"cache_read":0.02},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"moonshotai/kimi-k3.1-pro":{"id":"moonshotai/kimi-k3.1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":2,"output":10,"cache_read":0.2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"moonshotai/kimi-k3":{"id":"moonshotai/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":12.5,"cache_read":0.5},"canonical_model_id":"moonshotai/kimi-k3"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.15,"output":0.6,"cache_read":0.08},"canonical_model_id":"openai/gpt-oss-120b"},"meta/muse-spark-open":{"id":"meta/muse-spark-open","name":"Muse Spark Open","description":"Muse Spark Open is an 816B total / 42B active open-weight multimodal reasoning model from Meta for coding and long-horizon agentic work, with 1M-token context.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-open"},"zai-org/glm-5.3":{"id":"zai-org/glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1,"output":4,"cache_read":0.3},"canonical_model_id":"zhipuai/glm-5.3"},"zai-org/glm-5.3-flash":{"id":"zai-org/glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1048550,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"motif-technologies/motif-3":{"id":"motif-technologies/motif-3","name":"Motif 3","description":"Motif 3 is a large-scale, decoder-only Mixture-of-Experts (MoE) language model with 314 billion total parameters and 13.2 billion parameters activated per token.","family":"motif","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-07","last_updated":"2026-08-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.5,"output":2,"cache_read":0.2},"canonical_model_id":"motif-technologies/motif-3"}}},"boundless":{"id":"boundless","env":["BOUNDLESS_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.inference.boundless.network/v1","name":"Boundless","doc":"https://inference.boundless.network/models","models":{"nemotron3-super":{"id":"nemotron3-super","name":"Nemotron 3 Super 120B A12B","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium"]}],"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.12,"output":0.52,"cache_read":0.06},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":0.34,"output":2.3,"cache_read":0.17},"canonical_model_id":"zhipuai/glm-5.2"},"claude-opus-5.5":{"id":"claude-opus-5.5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2},"canonical_model_id":"anthropic/claude-opus-5-5"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":2.3,"output":11.4,"cache_read":0.23},"canonical_model_id":"moonshotai/kimi-k3"},"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":128000},"status":"deprecated","cost":{"input":2,"output":10,"cache_read":0.2},"canonical_model_id":"openai/gpt-5.6-sol"},"gpt-6-luna":{"id":"gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01},"canonical_model_id":"openai/gpt-6-luna"},"deepseek-v4-pro-0813":{"id":"deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":1.04,"output":2.08,"cache_read":0.0352},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"qwen3.8-flash":{"id":"qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.47,"cache_read":0.016},"canonical_model_id":"alibaba/qwen3.8-flash"},"mimo-v2.6-pro":{"id":"mimo-v2.6-pro","name":"MiMo-V2.6-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.435,"output":0.87,"cache_read":0.0036},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.2,"output":1,"cache_read":0.01},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"claude-fable-5.1":{"id":"claude-fable-5.1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25},"canonical_model_id":"anthropic/claude-fable-5-1"},"gpt-6-sol":{"id":"gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2},"canonical_model_id":"openai/gpt-6-sol"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.12,"output":3.52,"cache_read":0.14},"canonical_model_id":"zhipuai/glm-5.3"},"mimo-v2.6-flash":{"id":"mimo-v2.6-flash","name":"MiMo-V2.6-Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"minimax-m3":{"id":"minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":512000},"cost":{"input":0.28,"output":1.1,"cache_read":0.056},"canonical_model_id":"minimax/MiniMax-M3"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.12,"output":0.4,"cache_read":0.024},"canonical_model_id":"zhipuai/glm-5.3-flash"},"claude-opus-5":{"id":"claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":128000},"status":"deprecated","cost":{"input":5,"output":25,"cache_read":0.5},"canonical_model_id":"anthropic/claude-opus-5"},"qwen3.6":{"id":"qwen3.6","name":"Qwen3.6 35B-A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.04,"output":0.35,"cache_read":0.02},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":128000},"status":"deprecated","cost":{"input":0.2,"output":1.2,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.6-luna"},"dsv4":{"id":"dsv4","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.04,"output":0.21,"cache_read":0.02},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"}}},"hyper":{"id":"hyper","env":["HYPER_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://hyper.charm.land/v1","name":"Charm Hyper","doc":"https://hyper.charm.land","models":{"kimi-k3.1-pro":{"id":"kimi-k3.1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":262144},"cost":{"input":2.2,"output":11,"cache_read":0.22},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":16000},"cost":{"input":3.2664,"output":16.332,"cache_read":0.32664},"canonical_model_id":"moonshotai/kimi-k3"},"prism":{"id":"prism","name":"Prism","description":"Multimodal model for analyzing text, images, documents, and rich media","attachment":true,"reasoning":false,"tool_call":true,"release_date":"1970-01-01","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2.2,"output":11,"cache_read":0.22}},"qwen3.8-27b":{"id":"qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":0.5,"output":3,"cache_read":0.1},"canonical_model_id":"alibaba/qwen3.8-27b"},"deepseek-v4-pro-0813":{"id":"deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":262144},"cost":{"input":1.437216,"output":4.311648,"cache_read":0.047907},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"qwen3.8-flash":{"id":"qwen3.8-flash","name":"Qwen3.8 Flash","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.15,"output":0.47,"cache_read":0.016},"canonical_model_id":"alibaba/qwen3.8-flash"},"qwen3.8-2.4t-a95b":{"id":"qwen3.8-2.4t-a95b","name":"Qwen3.8 2.4T A95B","description":"Open-weight sparse MoE (2.4T total, 95B active), the open-weight twin of Qwen3.8 Max for coding, research, complex reasoning, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":1.52432,"output":4.79072,"cache_read":0.283088},"canonical_model_id":"zhipuai/glm-5.3"},"muse-spark-open":{"id":"muse-spark-open","name":"Muse Spark Open","description":"Muse Spark Open is an 816B total / 42B active open-weight multimodal reasoning model from Meta for coding and long-horizon agentic work, with 1M-token context.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":1.4,"output":4.65,"cache_read":0.17},"canonical_model_id":"meta/muse-spark-open"},"minimax-m3":{"id":"minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":512000,"output":512000},"cost":{"input":0.32664,"output":1.30656,"cache_read":0.064239},"canonical_model_id":"minimax/MiniMax-M3"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.16332,"output":0.5444,"cache_read":0.031575},"canonical_model_id":"zhipuai/glm-5.3-flash"},"prism-core":{"id":"prism-core","name":"Prism Core","description":"Multimodal model for analyzing text, images, documents, and rich media","attachment":true,"reasoning":false,"tool_call":true,"release_date":"1970-01-01","last_updated":"2026-11-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":1.52432,"output":4.79072,"cache_read":0.283088}},"gemma-4-26b-a4b-it":{"id":"gemma-4-26b-a4b-it","name":"Gemma 4 26B A4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":25600},"cost":{"input":0.098,"output":0.334,"cache_read":0.049},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"inkling":{"id":"inkling","name":"Inkling","description":"Multimodal MoE reasoning model (975B total, 41B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536},"cost":{"input":1.0888,"output":4.40964,"cache_read":0.185096},"canonical_model_id":"thinkingmachines/inkling"},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":13107},"cost":{"input":0.178,"output":0.68,"cache_read":0.089},"canonical_model_id":"openai/gpt-oss-120b"},"qwen3.8-max":{"id":"qwen3.8-max","name":"Qwen3.8 Max Preview","description":"Preview Qwen flagship for million-token multimodal reasoning and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-07-19","last_updated":"2026-07-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.8-max-preview"},"prism-flash":{"id":"prism-flash","name":"Prism Flash","description":"Efficient model for low-latency assistance, extraction, and routine automation","attachment":true,"reasoning":false,"tool_call":true,"release_date":"1970-01-01","last_updated":"2026-11-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.33,"output":1.31,"cache_read":0.03}},"deepseek-v4.1-flash-1017":{"id":"deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":262144},"cost":{"input":0.33,"output":1.31,"cache_read":0.03},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"}}},"kimi-code-plan-global":{"id":"kimi-code-plan-global","env":["KIMI_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.kimi.ai/coding/v1","name":"Kimi For Coding (kimi.ai)","doc":"https://www.kimi.ai/code/docs/en/kimi-code/models.html","models":{"kimi-for-coding-highspeed":{"id":"kimi-for-coding-highspeed","name":"Kimi For Coding HighSpeed","description":"Lower-latency Kimi Code variant for interactive edits and coding-agent loops","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k2.7-code-highspeed"},"k3.1-pro":{"id":"k3.1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"k3":{"id":"k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k3"},"k3-256k":{"id":"k3-256k","name":"Kimi K3-256K","description":"256K-context version of Kimi K3, reducing token consumption for shorter coding sessions","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k3"},"k3.1-pro-highspeed":{"id":"k3.1-pro-highspeed","name":"Kimi K3.1 Pro Highspeed","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"kimi-for-coding":{"id":"kimi-for-coding","name":"kimi-for-coding","description":"Kimi coding model with more efficient thinking and up to 1M context, available through Kimi Code","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":false,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":32768},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k2.8-preview"}}},"qvac":{"id":"qvac","env":["QVAC_API_KEY"],"npm":"@qvac/ai-sdk-provider","name":"QVAC","doc":"https://www.npmjs.com/package/@qvac/ai-sdk-provider","models":{"qwen3.5-0.8b":{"id":"qwen3.5-0.8b","name":"Qwen3.5 0.8B","description":"Qwen instruction model for multilingual chat and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2026-03-02","last_updated":"2026-03-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3.5-0.8b"},"gpt-oss-20b":{"id":"gpt-oss-20b","name":"GPT OSS 20B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-oss-20b"},"qwen3.5-9b":{"id":"qwen3.5-9b","name":"Qwen3.5 9B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3.5-9b"},"qwen3.6-27b":{"id":"qwen3.6-27b","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3.6-27b"},"qwen3.6-35b-a3b":{"id":"qwen3.6-35b-a3b","name":"Qwen3.6 35B-A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-oss-120b"},"qwen3.5-4b":{"id":"qwen3.5-4b","name":"Qwen3.5 4B","description":"Qwen instruction model for multilingual chat and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2026-03-02","last_updated":"2026-03-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3.5-4b"},"qwen3.5-2b":{"id":"qwen3.5-2b","name":"Qwen3.5 2B","description":"Qwen instruction model for multilingual chat and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2026-03-02","last_updated":"2026-03-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3.5-2b"},"gemma4-31b":{"id":"gemma4-31b","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0,"output":0},"canonical_model_id":"google/gemma-4-31b-it"}}},"openrouter":{"id":"openrouter","env":["OPENROUTER_API_KEY"],"npm":"@openrouter/ai-sdk-provider","api":"https://openrouter.ai/api/v1","name":"OpenRouter","doc":"https://openrouter.ai/models","models":{"anthropic/claude-opus-4.6":{"id":"anthropic/claude-opus-4.6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25,"tiers":[{"input":10,"output":37.5,"cache_read":1,"cache_write":12.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":10,"output":37.5,"cache_read":1,"cache_write":12.5}},"canonical_model_id":"anthropic/claude-opus-4-6"},"anthropic/claude-opus-4.7":{"id":"anthropic/claude-opus-4.7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25,"tiers":[{"input":10,"output":37.5,"cache_read":1,"cache_write":12.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":10,"output":37.5,"cache_read":1,"cache_write":12.5}},"canonical_model_id":"anthropic/claude-opus-4-7"},"anthropic/claude-opus-4.8":{"id":"anthropic/claude-opus-4.8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic/claude-opus-4.5":{"id":"anthropic/claude-opus-4.5","name":"Claude Opus 4.5 (latest)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"anthropic/claude-opus-5.5":{"id":"anthropic/claude-opus-5.5","name":"Claude Opus 5.5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"anthropic/claude-haiku-4.5":{"id":"anthropic/claude-haiku-4.5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"anthropic/claude-sonnet-5":{"id":"anthropic/claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"anthropic/claude-sonnet-4.5":{"id":"anthropic/claude-sonnet-4.5","name":"Claude Sonnet 4.5 (latest)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75,"tiers":[{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5}},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"anthropic/claude-fable-5.2":{"id":"anthropic/claude-fable-5.2","name":"Claude Fable 5.2","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"anthropic/claude-fable-5.1":{"id":"anthropic/claude-fable-5.1","name":"Claude Fable 5.1","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"anthropic/claude-opus-4.1":{"id":"anthropic/claude-opus-4.1","name":"Claude Opus 4.1 (latest)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-1"},"anthropic/claude-sonnet-4.6":{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75,"tiers":[{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5}},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"anthropic/claude-fable-5":{"id":"anthropic/claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"anthropic/claude-opus-5":{"id":"anthropic/claude-opus-5","name":"Claude Opus 5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"anthropic/claude-sonnet-5.5":{"id":"anthropic/claude-sonnet-5.5","name":"Claude Sonnet 5.5","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"anthropic/claude-haiku-5.5":{"id":"anthropic/claude-haiku-5.5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"writer/palmyra-x5":{"id":"writer/palmyra-x5","name":"Palmyra X5","description":"General-purpose chat model for instruction following, writing, and analysis","family":"palmyra","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1040000,"output":8192},"cost":{"input":0.6,"output":6},"canonical_model_id":"writer/palmyra-x5"},"aion-labs/aion-3.0":{"id":"aion-labs/aion-3.0","name":"Aion-3.0","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-05-05","last_updated":"2026-05-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":32768},"cost":{"input":3,"output":6,"cache_read":0.75},"canonical_model_id":"aion-labs/aion-3.0"},"aion-labs/aion-3.5-mini":{"id":"aion-labs/aion-3.5-mini","name":"Aion 3.5 Mini","description":"Efficient model for low-latency assistance, extraction, and routine automation","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-09-23","last_updated":"2026-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"cost":{"input":0.7,"output":1.4,"cache_read":0.18}},"aion-labs/aion-2.0":{"id":"aion-labs/aion-2.0","name":"Aion-2.0","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-21","last_updated":"2025-12-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":32768},"cost":{"input":0.8,"output":1.6,"cache_read":0.2},"canonical_model_id":"aion-labs/aion-2.0"},"aion-labs/aion-3.0-mini":{"id":"aion-labs/aion-3.0-mini","name":"Aion-3.0-Mini","description":"Efficient model for low-latency assistance, extraction, and routine automation","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-05-14","last_updated":"2026-05-14","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":32768},"cost":{"input":0.7,"output":1.4,"cache_read":0.18},"canonical_model_id":"aion-labs/aion-3.0-mini"},"aion-labs/aion-rp-llama-3.1-8b":{"id":"aion-labs/aion-rp-llama-3.1-8b","name":"Aion-RP 1.0 (8B)","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12-31","release_date":"2025-02-04","last_updated":"2025-02-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":29491},"cost":{"input":0.8,"output":1.6},"canonical_model_id":"aion-labs/aion-rp-llama-3.1-8b"},"aion-labs/aion-3.5":{"id":"aion-labs/aion-3.5","name":"Aion 3.5","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-09-23","last_updated":"2026-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"cost":{"input":3,"output":6,"cache_read":0.75}},"anthracite-org/magnum-v4-72b":{"id":"anthracite-org/magnum-v4-72b","name":"Magnum v4 72B","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-06-30","release_date":"2024-10-22","last_updated":"2024-10-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":4096},"cost":{"input":2.5,"output":5,"cache_read":2.5},"canonical_model_id":"anthracite-org/magnum-v4-72b"},"baidu/ernie-5.5-flash-preview:free":{"id":"baidu/ernie-5.5-flash-preview:free","name":"ERNIE-5.5-Flash-Preview (free)","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"ernie","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1024000,"output":921600},"cost":{"input":0,"output":0}},"baidu/ernie-light-dt-1.0-intl":{"id":"baidu/ernie-light-dt-1.0-intl","name":"ERNIE-Light-DT-1.0","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"ernie","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1024000,"output":131072},"cost":{"input":1.13,"output":3.94,"cache_read":0.113}},"amazon/nova-pro-v1":{"id":"amazon/nova-pro-v1","name":"Nova Pro 1.0","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"nova-pro","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10-31","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":5120},"cost":{"input":0.8,"output":3.2},"canonical_model_id":"amazon/nova-pro-v1"},"amazon/nova-premier-v1":{"id":"amazon/nova-premier-v1","name":"Nova Premier 1.0","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"nova","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10","release_date":"2025-04-30","last_updated":"2025-04-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32000},"status":"deprecated","cost":{"input":2.5,"output":12.5,"cache_read":0.625},"canonical_model_id":"amazon/nova-premier"},"amazon/nova-2-lite-v1":{"id":"amazon/nova-2-lite-v1","name":"Nova 2 Lite","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"nova","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-10","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65535},"cost":{"input":0.3,"output":2.5},"canonical_model_id":"amazon/nova-2-lite-v1"},"amazon/nova-lite-v1":{"id":"amazon/nova-lite-v1","name":"Nova Lite 1.0","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-lite","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10-31","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":5120},"cost":{"input":0.06,"output":0.24},"canonical_model_id":"amazon/nova-lite-v1"},"amazon/nova-micro-v1":{"id":"amazon/nova-micro-v1","name":"Nova Micro 1.0","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-micro","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-10-31","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":5120},"cost":{"input":0.035,"output":0.14},"canonical_model_id":"amazon/nova-micro-v1"},"meituan/longcat-2.0":{"id":"meituan/longcat-2.0","name":"LongCat-2.0","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"longcat","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048756,"output":262144},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"meituan/longcat-2.0"},"particle-ai/particle-1":{"id":"particle-ai/particle-1","name":"Particle-1","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-28","last_updated":"2026-10-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.05,"output":0.5,"cache_read":0.003}},"perplexity/sonar-pro":{"id":"perplexity/sonar-pro","name":"Sonar Pro","description":"Advanced Sonar search model for deeper research and cited synthesis","family":"sonar-pro","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-03-07","last_updated":"2025-03-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8000},"cost":{"input":3,"output":15}},"perplexity/sonar":{"id":"perplexity/sonar","name":"Sonar","description":"Sonar search model for current answers, retrieval, and citation-backed chat","family":"sonar","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-01-27","last_updated":"2025-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":127072,"output":114364},"cost":{"input":1,"output":1}},"perplexity/sonar-reasoning-pro":{"id":"perplexity/sonar-reasoning-pro","name":"Sonar Reasoning Pro","description":"Web-grounded reasoning model for multi-step research and cited answers","family":"sonar-reasoning","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-03-07","last_updated":"2025-03-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":115200},"cost":{"input":2,"output":8}},"perplexity/sonar-deep-research":{"id":"perplexity/sonar-deep-research","name":"Sonar Deep Research","description":"Sonar search model for current answers, retrieval, and citation-backed chat","family":"sonar-deep-research","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-03-07","last_updated":"2025-03-07","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":115200},"cost":{"input":2,"output":8,"reasoning":3}},"perplexity/sonar-pro-search":{"id":"perplexity/sonar-pro-search","name":"Sonar Pro Search","description":"Advanced Sonar search model for deeper research and cited synthesis","family":"sonar-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-10-30","last_updated":"2025-10-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8000},"cost":{"input":3,"output":15}},"rekaai/reka-flash-3":{"id":"rekaai/reka-flash-3","name":"Reka Flash 3","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"reka","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-01-31","release_date":"2025-03-10","last_updated":"2025-03-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":58982},"cost":{"input":0.1,"output":0.2},"canonical_model_id":"rekaai/reka-flash-3"},"rekaai/reka-edge":{"id":"rekaai/reka-edge","name":"Reka Edge","description":"Multimodal model for analyzing text, images, documents, and rich media","family":"reka","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["image","text","video"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"output":14745},"cost":{"input":0.1,"output":0.1},"canonical_model_id":"rekaai/reka-edge"},"x-ai/grok-4.5":{"id":"x-ai/grok-4.5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":450000},"cost":{"input":2,"output":6,"cache_read":0.3,"tiers":[{"input":4,"output":12,"cache_read":0.6,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":0.6}},"canonical_model_id":"xai/grok-4.5"},"x-ai/grok-4.3":{"id":"x-ai/grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":900000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.3"},"x-ai/grok-4.7":{"id":"x-ai/grok-4.7","name":"Grok 4.7","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":450000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.7"},"x-ai/grok-4.20":{"id":"x-ai/grok-4.20","name":"Grok 4.20","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09-01","release_date":"2026-03-31","last_updated":"2026-03-31","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":1800000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}}},"x-ai/grok-4.6":{"id":"x-ai/grok-4.6","name":"Grok 4.6","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":450000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.6"},"x-ai/grok-build-0.1":{"id":"x-ai/grok-build-0.1","name":"Grok Build 0.1","description":"Fast Grok coding model tuned for agentic engineering and iterative edits","family":"grok-build","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":230400},"cost":{"input":1,"output":2,"cache_read":0.2,"tiers":[{"input":2,"output":4,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2,"output":4,"cache_read":0.4}},"canonical_model_id":"xai/grok-build-0.1"},"x-ai/grok-4.20-multi-agent":{"id":"x-ai/grok-4.20-multi-agent","name":"Grok 4.20 Multi-Agent","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-09-01","release_date":"2026-03-31","last_updated":"2026-03-31","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":1800000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}}},"deepseek/deepseek-r1-0528":{"id":"deepseek/deepseek-r1-0528","name":"DeepSeek R1 0528","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-05-28","last_updated":"2025-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":32768},"cost":{"input":0.5,"output":2.15,"cache_read":0.35},"canonical_model_id":"deepseek/deepseek-r1-0528"},"deepseek/deepseek-chat-v3-0324":{"id":"deepseek/deepseek-chat-v3-0324","name":"DeepSeek V3 0324","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07-31","release_date":"2025-03-24","last_updated":"2025-03-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":115200},"cost":{"input":0.29,"output":1.14,"cache_read":0.11},"canonical_model_id":"deepseek/deepseek-chat-v3-0324"},"deepseek/deepseek-v3.2-exp":{"id":"deepseek/deepseek-v3.2-exp","name":"DeepSeek V3.2 Exp","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":147456},"cost":{"input":0.27,"output":0.41}},"deepseek/deepseek-v4-pro-0813":{"id":"deepseek/deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":0.111,"output":4.44,"cache_read":0.097},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"deepseek/deepseek-v4.1-flash":{"id":"deepseek/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":0.022,"output":0.4,"cache_read":0.004},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.95526,"output":1.91052,"cache_read":0.079605},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-v3.1-terminus":{"id":"deepseek/deepseek-v3.1-terminus","name":"DeepSeek V3.1 Terminus","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-09-22","last_updated":"2025-09-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":147456},"cost":{"input":0.27,"output":1}},"deepseek/deepseek-v4-flash-vision-exp":{"id":"deepseek/deepseek-v4-flash-vision-exp","name":"DeepSeek V4 Flash Vision Exp","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-21","last_updated":"2026-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943717},"cost":{"input":0.44,"output":1.32,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4-flash-vision-exp"},"deepseek/deepseek-chat":{"id":"deepseek/deepseek-chat","name":"DeepSeek Chat","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2025-12-01","last_updated":"2026-02-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":16384},"cost":{"input":0.32,"output":0.89},"canonical_model_id":"deepseek/deepseek-chat"},"deepseek/deepseek-v4-flash":{"id":"deepseek/deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.09,"output":0.18,"cache_read":0.018},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek/deepseek-chat-v3.1":{"id":"deepseek/deepseek-chat-v3.1","name":"DeepSeek V3.1","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":147456},"cost":{"input":0.25,"output":0.95,"cache_read":0.13},"canonical_model_id":"deepseek/deepseek-chat-v3.1"},"deepseek/deepseek-v3.2":{"id":"deepseek/deepseek-v3.2","name":"DeepSeek V3.2","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":147456},"cost":{"input":0.26,"output":0.38,"cache_read":0.13},"canonical_model_id":"deepseek/deepseek-v3.2"},"deepseek/deepseek-v4-flash-0731":{"id":"deepseek/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":0.0434,"output":0.3,"cache_read":0.035},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepseek/deepseek-v4.1-flash-1017":{"id":"deepseek/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"inclusionai/ling-3.0-flash-vl":{"id":"inclusionai/ling-3.0-flash-vl","name":"Ling 3.0 Flash VL","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.06,"output":0.18,"cache_read":0.012},"canonical_model_id":"inclusionai/ling-3.0-flash-vl"},"inclusionai/ling-3.0-tiny":{"id":"inclusionai/ling-3.0-tiny","name":"Ling 3.0 Tiny","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-06","last_updated":"2026-08-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":250000},"cost":{"input":0.015,"output":0.045,"cache_read":0.003}},"inclusionai/ling-3.0-flash":{"id":"inclusionai/ling-3.0-flash","name":"Ling 3.0 Flash","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-23","last_updated":"2026-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.021,"output":0.063,"cache_read":0.0042},"canonical_model_id":"inclusionai/ling-3.0-flash"},"inclusionai/ling-3.1-flash":{"id":"inclusionai/ling-3.1-flash","name":"Ling 3.1 Flash","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":262144},"cost":{"input":0.045,"output":0.135,"cache_read":0.009},"canonical_model_id":"inclusionai/ling-3.1-flash"},"google/gemini-2.5-flash":{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"status":"deprecated","cost":{"input":0.3,"output":2.5,"reasoning":2.5,"cache_read":0.03,"cache_write":0.083333,"input_audio":1},"canonical_model_id":"google/gemini-2.5-flash"},"google/gemini-3.1-flash-lite-image":{"id":"google/gemini-3.1-flash-lite-image","type":"image","name":"Nano Banana 2 Lite","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","high"]}],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":58982},"cost":{"input":0.25,"output":1.5},"canonical_model_id":"google/gemini-3.1-flash-lite-image"},"google/gemini-3.8-flash":{"id":"google/gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"reasoning":3.75,"cache_read":0.075,"cache_write":0.041667,"input_audio":0.75},"canonical_model_id":"google/gemini-3.8-flash"},"google/gemini-3.1-flash-image-preview":{"id":"google/gemini-3.1-flash-image-preview","type":"image","name":"Nano Banana 2 Preview","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","high"]}],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-26","last_updated":"2026-02-26","modalities":{"input":["image","text"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":58982},"cost":{"input":0.5,"output":3},"canonical_model_id":"google/gemini-3.1-flash-image-preview"},"google/gemini-4-carbon":{"id":"google/gemini-4-carbon","name":"Gemini 4 Carbon","description":"Gemini multimodal model for text, image, audio, video, and document tasks","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":2,"output":10,"reasoning":10,"cache_read":0.1,"cache_write":0.1875,"input_audio":2},"canonical_model_id":"google/gemini-4-carbon"},"google/gemma-3-27b-it":{"id":"google/gemma-3-27b-it","name":"Gemma 3 27B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":117964},"cost":{"input":0.08,"output":0.35,"cache_read":0.04},"canonical_model_id":"google/gemma-3-27b-it"},"google/gemma-2-27b-it":{"id":"google/gemma-2-27b-it","name":"Gemma 2 27B","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-06-30","release_date":"2024-07-13","last_updated":"2024-07-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":2048},"cost":{"input":0.65,"output":0.65},"canonical_model_id":"google/gemma-2-27b-it"},"google/lyria-3-pro-preview":{"id":"google/lyria-3-pro-preview","name":"Lyria 3 Pro Preview","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"lyria","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-03-25","last_updated":"2026-03-25","modalities":{"input":["text","image"],"output":["text","audio"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"google/lyria-3-pro-preview"},"google/gemini-2.5-pro":{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":1.25,"output":10,"reasoning":10,"cache_read":0.125,"cache_write":0.375,"input_audio":1.25,"tiers":[{"input":2.5,"output":15,"cache_read":0.25,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":15,"cache_read":0.25}},"canonical_model_id":"google/gemini-2.5-pro"},"google/gemini-3.5-flash":{"id":"google/gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"reasoning":9,"cache_read":0.15,"cache_write":0.083333,"input_audio":3},"canonical_model_id":"google/gemini-3.5-flash"},"google/gemini-3.6-flash":{"id":"google/gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"reasoning":3.75,"cache_read":0.075,"cache_write":0.041667,"input_audio":0.75},"canonical_model_id":"google/gemini-3.6-flash"},"google/gemma-4-31b-it:free":{"id":"google/gemma-4-31b-it:free","name":"Gemma 4 31B (free)","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["image","text","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0,"output":0},"canonical_model_id":"google/gemma-4-31b-it"},"google/gemini-3.1-flash-image":{"id":"google/gemini-3.1-flash-image","type":"image","name":"Nano Banana 2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","high"]}],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["image","text"],"output":["text","image"]},"open_weights":false,"limit":{"context":131072,"output":32768},"cost":{"input":0.5,"output":3},"canonical_model_id":"google/gemini-3.1-flash-image"},"google/gemini-3.1-pro-preview-customtools":{"id":"google/gemini-3.1-pro-preview-customtools","name":"Gemini 3.1 Pro Preview Custom Tools","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"reasoning":12,"cache_read":0.2,"cache_write":0.375,"input_audio":2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview-customtools"},"google/gemma-3-4b-it":{"id":"google/gemma-3-4b-it","name":"Gemma 3 4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.05,"output":0.1},"canonical_model_id":"google/gemma-3-4b-it"},"google/gemini-3.1-pro-preview":{"id":"google/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"reasoning":12,"cache_read":0.2,"cache_write":0.375,"input_audio":2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"google/gemini-3.1-flash-lite":{"id":"google/gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"reasoning":1.5,"cache_read":0.025,"cache_write":0.083333,"input_audio":0.5},"canonical_model_id":"google/gemini-3.1-flash-lite"},"google/gemini-2.5-flash-lite":{"id":"google/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash-Lite","description":"Lean Gemini 2.5 lane for cheap multimodal traffic and quick agents","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"status":"deprecated","cost":{"input":0.1,"output":0.4,"reasoning":0.4,"cache_read":0.01,"cache_write":0.083333,"input_audio":0.3},"canonical_model_id":"google/gemini-2.5-flash-lite"},"google/gemini-4-argon":{"id":"google/gemini-4-argon","name":"Gemini 4 Argon","description":"Gemini multimodal model for text, image, audio, video, and document tasks","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":2,"output":10,"reasoning":10,"cache_read":0.1,"cache_write":0.1875,"input_audio":2},"canonical_model_id":"google/gemini-4-argon"},"google/gemini-2.5-pro-preview":{"id":"google/gemini-2.5-pro-preview","name":"Gemini 2.5 Pro Preview 06-05","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01-31","release_date":"2025-06-05","last_updated":"2025-06-05","modalities":{"input":["pdf","image","text","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.25,"output":10,"reasoning":10,"cache_read":0.125,"cache_write":0.375,"input_audio":1.25,"tiers":[{"input":2.5,"output":15,"cache_read":0.25,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":15,"cache_read":0.25}},"canonical_model_id":"google/gemini-2.5-pro-preview"},"google/gemini-3.1-flash-lite-preview":{"id":"google/gemini-3.1-flash-lite-preview","name":"Gemini 3.1 Flash Lite Preview","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-03-03","last_updated":"2026-03-03","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"reasoning":1.5,"cache_read":0.025,"cache_write":0.083333,"input_audio":0.5},"canonical_model_id":"google/gemini-3.1-flash-lite-preview"},"google/gemini-3-pro-image-preview":{"id":"google/gemini-3-pro-image-preview","type":"image","name":"Nano Banana Pro Preview","description":"Nano Banana Pro for higher-fidelity image generation and design-heavy edits","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-11-20","last_updated":"2025-11-20","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":32768},"cost":{"input":2,"output":12,"reasoning":12,"cache_read":0.2,"cache_write":0.375,"input_audio":2},"canonical_model_id":"google/gemini-3-pro-image-preview"},"google/gemini-3.5-flash-lite":{"id":"google/gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"reasoning":2.5,"cache_read":0.03,"cache_write":0.083333,"input_audio":0.3},"canonical_model_id":"google/gemini-3.5-flash-lite"},"google/gemma-4-31b-it":{"id":"google/gemma-4-31b-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["image","text","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0.2,"output":0.4},"canonical_model_id":"google/gemma-4-31b-it"},"google/gemini-3-flash-preview":{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.5,"output":3,"reasoning":3,"cache_read":0.05,"cache_write":0.083333,"input_audio":1},"canonical_model_id":"google/gemini-3-flash-preview"},"google/gemini-2.5-flash-image":{"id":"google/gemini-2.5-flash-image","type":"image","name":"Nano Banana","description":"Nano Banana image model for fast generation, edits, and character-consistent assets","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-26","last_updated":"2025-08-26","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":32768,"output":8192},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"cache_write":0.083333,"input_audio":1},"canonical_model_id":"google/gemini-2.5-flash-image"},"google/gemma-4-26b-a4b-it":{"id":"google/gemma-4-26b-a4b-it","name":"Gemma 4 26B A4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["image","text","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":128000},"cost":{"input":0.08,"output":0.1,"cache_read":0.046},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"google/gemini-omni-1.2-flash":{"id":"google/gemini-omni-1.2-flash","type":"video","name":"Gemini Omni 1.2 Flash","description":"Omni-modal model for text, vision, audio, and multimodal agent tasks","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-11-05","last_updated":"2026-11-05","modalities":{"input":["text","image","video"],"output":["text","video"]},"open_weights":false,"limit":{"context":131072,"output":65536},"cost":{"input":1.5,"output":9},"canonical_model_id":"google/gemini-omni-1.2-flash"},"google/gemini-3-pro-image":{"id":"google/gemini-3-pro-image","type":"image","name":"Nano Banana Pro","description":"Nano Banana Pro for higher-fidelity image generation and design-heavy edits","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":131072,"output":32768},"cost":{"input":2,"output":12,"reasoning":12,"cache_read":0.2,"cache_write":0.375,"input_audio":2},"canonical_model_id":"google/gemini-3-pro-image"},"google/gemma-3-12b-it":{"id":"google/gemma-3-12b-it","name":"Gemma 3 12B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.05,"output":0.15},"canonical_model_id":"google/gemma-3-12b-it"},"google/gemini-omni-1.1-flash":{"id":"google/gemini-omni-1.1-flash","type":"video","name":"Gemini Omni 1.1 Flash","description":"Omni-modal model for text, vision, audio, and multimodal agent tasks","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-08-27","last_updated":"2026-08-27","modalities":{"input":["text","image","video"],"output":["text","video"]},"open_weights":false,"limit":{"context":131072,"output":65536},"cost":{"input":1.5,"output":9},"canonical_model_id":"google/gemini-omni-1.1-flash"},"google/lyria-3-clip-preview":{"id":"google/lyria-3-clip-preview","name":"Lyria 3 Clip Preview","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"lyria","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-03-25","last_updated":"2026-03-25","modalities":{"input":["text","image"],"output":["text","audio"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"google/lyria-3-clip-preview"},"google/gemma-4-26b-a4b-it:free":{"id":"google/gemma-4-26b-a4b-it:free","name":"Gemma 4 26B A4B (free)","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["image","text","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0,"output":0},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"google/gemini-3.7-flash":{"id":"google/gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"reasoning":3.75,"cache_read":0.075,"cache_write":0.041667,"input_audio":0.75},"canonical_model_id":"google/gemini-3.7-flash"},"google/gemini-nano-banana-2.1":{"id":"google/gemini-nano-banana-2.1","type":"image","name":"Nano Banana 2.1","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["image","text"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":58982},"cost":{"input":1.5,"output":7.5},"canonical_model_id":"google/gemini-nano-banana-2.1"},"qwen/qwen3.6-plus":{"id":"qwen/qwen3.6-plus","name":"Qwen3.6 Plus","description":"Earlier Qwen multimodal workhorse for million-token agent and document tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.325,"output":1.95,"cache_write":0.40625,"tiers":[{"input":1.3,"output":3.9,"cache_write":1.625,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":1.3,"output":3.9,"cache_write":1.625}},"canonical_model_id":"alibaba/qwen3.6-plus"},"qwen/qwen-2.5-72b-instruct":{"id":"qwen/qwen-2.5-72b-instruct","name":"Qwen2.5 72B Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06-30","release_date":"2024-09-19","last_updated":"2024-09-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":16384},"cost":{"input":0.36,"output":0.4}},"qwen/qwen3-coder-30b-a3b-instruct":{"id":"qwen/qwen3-coder-30b-a3b-instruct","name":"Qwen3-Coder 30B-A3B Instruct","description":"Smaller Qwen coder for efficient local agents and repo-level fixes","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-31","last_updated":"2025-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"alibaba/qwen3-coder-30b-a3b-instruct"},"qwen/qwen3-30b-a3b":{"id":"qwen/qwen3-30b-a3b","name":"Qwen3 30B A3B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":40960,"output":16384},"cost":{"input":0.12,"output":0.5},"canonical_model_id":"alibaba/qwen3-30b-a3b"},"qwen/qwen3-vl-235b-a22b-instruct":{"id":"qwen/qwen3-vl-235b-a22b-instruct","name":"Qwen3 VL 235B A22B Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.21,"output":1.9,"cache_read":0.1},"canonical_model_id":"alibaba/qwen3-vl-235b-a22b-instruct"},"qwen/qwen2.5-vl-72b-instruct":{"id":"qwen/qwen2.5-vl-72b-instruct","name":"Qwen2.5-VL 72B Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-01-26","last_updated":"2025-01-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":115200},"cost":{"input":0.8,"output":1,"cache_read":0.4},"canonical_model_id":"alibaba/qwen2-5-vl-72b-instruct"},"qwen/qwen3-235b-a22b-thinking-2507":{"id":"qwen/qwen3-235b-a22b-thinking-2507","name":"Qwen3 235B-A22B Thinking 2507","description":"Qwen reasoning model for deliberate problem solving, math, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-07-25","last_updated":"2025-07-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.45,"output":3.5},"canonical_model_id":"alibaba/qwen3-235b-a22b-thinking-2507"},"qwen/qwen3.8-omni-flash":{"id":"qwen/qwen3.8-omni-flash","name":"Qwen3.8 Omni Flash","description":"Qwen omni model for text, vision, audio, and multimodal agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-17","last_updated":"2026-09-17","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.47,"cache_read":0.016},"canonical_model_id":"alibaba/qwen3.8-omni-flash"},"qwen/qwen3-vl-8b-instruct":{"id":"qwen/qwen3-vl-8b-instruct","name":"Qwen3 VL 8B Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-14","last_updated":"2025-10-14","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.25,"output":0.75,"cache_read":0.12}},"qwen/qwen3-coder":{"id":"qwen/qwen3-coder","name":"Qwen3 Coder 480B A35B","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.3,"output":1,"cache_read":0.1},"canonical_model_id":"alibaba/qwen3-coder-480b-a35b-instruct"},"qwen/qwen3-14b":{"id":"qwen/qwen3-14b","name":"Qwen3 14B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":40960,"output":36864},"cost":{"input":0.1,"output":0.22}},"qwen/qwen3-vl-30b-a3b-thinking":{"id":"qwen/qwen3-vl-30b-a3b-thinking","name":"Qwen3 VL 30B A3B Thinking","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.29,"output":1}},"qwen/qwen3-vl-30b-a3b-instruct":{"id":"qwen/qwen3-vl-30b-a3b-instruct","name":"Qwen3 VL 30B A3B Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-04","last_updated":"2025-10-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"alibaba/qwen3-vl-30b-a3b-instruct"},"qwen/qwen3.8-27b":{"id":"qwen/qwen3.8-27b","name":"Qwen3.8 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048575,"output":235929},"cost":{"input":0.15,"output":1.875,"cache_read":0.0375},"canonical_model_id":"alibaba/qwen3.8-27b"},"qwen/qwen-plus":{"id":"qwen/qwen-plus","name":"Qwen Plus","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-01-25","last_updated":"2025-09-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":0.26,"output":0.78,"cache_read":0.052,"cache_write":0.325,"tiers":[{"input":0.78,"output":2.34,"cache_read":0.156,"cache_write":0.975,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":0.78,"output":2.34,"cache_read":0.156,"cache_write":0.975}},"canonical_model_id":"alibaba/qwen-plus"},"qwen/qwen3.8-flash":{"id":"qwen/qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.47,"cache_read":0.016},"canonical_model_id":"alibaba/qwen3.8-flash"},"qwen/qwen3-30b-a3b-instruct-2507":{"id":"qwen/qwen3-30b-a3b-instruct-2507","name":"Qwen3 30B-A3B Instruct 2507","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.1,"output":0.3,"cache_read":0.1},"canonical_model_id":"alibaba/qwen3-30b-a3b-instruct-2507"},"qwen/qwen3.5-flash-02-23":{"id":"qwen/qwen3.5-flash-02-23","name":"Qwen3.5-Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-25","last_updated":"2026-02-25","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.065,"output":0.26}},"qwen/qwen3.5-397b-a17b":{"id":"qwen/qwen3.5-397b-a17b","name":"Qwen3.5 397B-A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":64000},"cost":{"input":0.6,"output":3.6,"cache_read":0.12},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"qwen/qwen3.5-9b":{"id":"qwen/qwen3.5-9b","name":"Qwen3.5 9B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":40960},"status":"deprecated","cost":{"input":0.049,"output":0.072,"cache_read":0.044},"canonical_model_id":"alibaba/qwen3.5-9b"},"qwen/qwen3.8-max-prime":{"id":"qwen/qwen3.8-max-prime","name":"Qwen 3.8 Max Prime","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.8-max","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-23","last_updated":"2026-09-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":4,"output":12,"cache_read":0.5},"canonical_model_id":"alibaba/qwen3.8-max-prime"},"qwen/qwen3.8-max-0902":{"id":"qwen/qwen3.8-max-0902","name":"Qwen3.8 Max 0902","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.8-max-0902"},"qwen/qwen3-235b-a22b-2507":{"id":"qwen/qwen3-235b-a22b-2507","name":"Qwen3 235B A22B Instruct 2507","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":117964},"cost":{"input":0.14,"output":0.8,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"qwen/qwen3.8-2.4t-a95b":{"id":"qwen/qwen3.8-2.4t-a95b","name":"Qwen3.8 2.4T A95B","description":"Open-weight sparse MoE (2.4T total, 95B active), the open-weight twin of Qwen3.8 Max for coding, research, complex reasoning, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"qwen/qwen3.5-35b-a3b":{"id":"qwen/qwen3.5-35b-a3b","name":"Qwen3.5 35B-A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":81920},"cost":{"input":0.14,"output":1,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3.5-35b-a3b"},"qwen/qwen3.7-plus":{"id":"qwen/qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.32,"output":1.28,"cache_read":0.064,"cache_write":0.4,"tiers":[{"input":0.96,"output":3.84,"cache_read":0.192,"cache_write":1.2,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":0.96,"output":3.84,"cache_read":0.192,"cache_write":1.2}},"canonical_model_id":"alibaba/qwen3.7-plus"},"qwen/qwen3.7-max":{"id":"qwen/qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":1.475,"output":4.425,"cache_read":0.295,"cache_write":1.84375},"canonical_model_id":"alibaba/qwen3.7-max"},"qwen/qwen3.6-flash":{"id":"qwen/qwen3.6-flash","name":"Qwen3.6 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.6","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.1875,"output":1.125,"cache_write":0.234375,"tiers":[{"input":0.75,"output":3,"cache_write":0.9375,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":0.75,"output":3,"cache_write":0.9375}},"canonical_model_id":"alibaba/qwen3.6-flash"},"qwen/qwen3.7-flash":{"id":"qwen/qwen3.7-flash","name":"Qwen3.7 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":991808,"output":65536},"cost":{"input":0.03,"output":0.13,"cache_read":0.006,"cache_write":0.038,"tiers":[{"input":0.1,"output":0.4,"cache_read":0.02,"cache_write":0.125,"tier":{"type":"context","size":32000}},{"input":0.2,"output":0.8,"cache_read":0.04,"cache_write":0.25,"tier":{"type":"context","size":256000}}]},"canonical_model_id":"alibaba/qwen3.7-flash"},"qwen/qwen3.5-plus-02-15":{"id":"qwen/qwen3.5-plus-02-15","name":"Qwen3.5 Plus 2026-02-15","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-16","last_updated":"2026-02-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.26,"output":1.56,"tiers":[{"input":0.325,"output":1.95,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":0.325,"output":1.95}}},"qwen/qwen3.6-27b":{"id":"qwen/qwen3.6-27b","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":81920},"cost":{"input":0.32,"output":3.2},"canonical_model_id":"alibaba/qwen3.6-27b"},"qwen/qwen3.6-35b-a3b":{"id":"qwen/qwen3.6-35b-a3b","name":"Qwen3.6 35B-A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.1,"output":0.9,"cache_read":0.025},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"qwen/qwen3-coder-next":{"id":"qwen/qwen3-coder-next","name":"Qwen3 Coder Next","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-02-03","last_updated":"2026-02-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.12,"output":0.8,"cache_read":0.07},"canonical_model_id":"alibaba/qwen3-coder-next"},"qwen/qwen3-next-80b-a3b-instruct":{"id":"qwen/qwen3-next-80b-a3b-instruct","name":"Qwen3-Next 80B-A3B Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0.09,"output":1.1},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-instruct"},"qwen/qwen3-32b":{"id":"qwen/qwen3-32b","name":"Qwen3 32B","description":"Dense open Qwen model for self-hosted chat, reasoning, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.08,"output":0.28},"canonical_model_id":"alibaba/qwen3-32b"},"qwen/qwen3.5-27b":{"id":"qwen/qwen3.5-27b","name":"Qwen3.5 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":81920},"cost":{"input":0.26,"output":2.6},"canonical_model_id":"alibaba/qwen3.5-27b"},"qwen/qwen3-coder-flash":{"id":"qwen/qwen3-coder-flash","name":"Qwen3 Coder Flash","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.195,"output":0.975,"cache_read":0.039,"cache_write":0.24375,"tiers":[{"input":0.325,"output":1.625,"cache_read":0.065,"cache_write":0.40625,"tier":{"type":"context","size":32000}},{"input":0.52,"output":2.6,"cache_read":0.104,"cache_write":0.65,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3-coder-flash"},"qwen/qwen3.5-plus-20260420":{"id":"qwen/qwen3.5-plus-20260420","name":"Qwen3.5 Plus 2026-04-20","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.5","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.3,"output":1.8,"cache_write":0.375,"tiers":[{"input":0.375,"output":2.25,"cache_write":0.46875,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":0.375,"output":2.25,"cache_write":0.46875}}},"qwen/qwen-2.5-coder-32b-instruct":{"id":"qwen/qwen-2.5-coder-32b-instruct","name":"Qwen2.5-Coder-32B-Instruct","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2024-11-12","last_updated":"2024-11-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":29491},"cost":{"input":0.66,"output":1},"canonical_model_id":"alibaba/qwen2.5-coder-32b-instruct"},"qwen/qwen3.5-122b-a10b":{"id":"qwen/qwen3.5-122b-a10b","name":"Qwen3.5 122B-A10B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.26,"output":2.08},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"~deepseek/deepseek-pro-latest":{"id":"~deepseek/deepseek-pro-latest","name":"DeepSeek Pro Latest","description":"Flagship DeepSeek model for coding, reasoning, and agentic work","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-14","last_updated":"2026-09-14","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":393216},"cost":{"input":0.0999,"output":8,"cache_read":0.0999}},"~deepseek/deepseek-flash-latest":{"id":"~deepseek/deepseek-flash-latest","name":"DeepSeek Flash Latest","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-14","last_updated":"2026-09-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":0.022,"output":0.4,"cache_read":0.004}},"~deepseek/deepseek-v4-flash-latest":{"id":"~deepseek/deepseek-v4-flash-latest","name":"DeepSeek V4 Flash Latest","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-01","last_updated":"2026-08-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":0.0434,"output":0.3,"cache_read":0.035}},"bytedance/ui-tars-1.5-7b":{"id":"bytedance/ui-tars-1.5-7b","name":"UI-TARS 7B ","description":"Multimodal model for analyzing text, images, documents, and rich media","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-01-31","release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":2048},"cost":{"input":0.1,"output":0.2,"cache_read":0.1}},"~moonshotai/kimi-latest":{"id":"~moonshotai/kimi-latest","name":"Kimi Latest","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":0.1824,"output":11.0055,"cache_read":0.18}},"kt/midm-k-3.0-pro":{"id":"kt/midm-k-3.0-pro","name":"Mi:dm K 3.0 Pro","description":"Flagship model for demanding analysis, coding, and production agent workflows","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-11-05","last_updated":"2026-11-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":261795,"output":235615},"cost":{"input":0.2,"output":0.8,"cache_read":0.04}},"nousresearch/hermes-4-405b":{"id":"nousresearch/hermes-4-405b","name":"Hermes 4 405B","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"hermes","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-08-31","release_date":"2025-08-26","last_updated":"2025-08-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":117964},"cost":{"input":1,"output":3,"cache_read":0.2},"canonical_model_id":"nousresearch/hermes-4-405b"},"~unbiased/pareto-latest":{"id":"~unbiased/pareto-latest","name":"Pareto Latest","description":"Multimodal model for analyzing text, images, documents, and rich media","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.8,"output":3.2,"cache_read":0.03}},"~google/gemini-pro-latest":{"id":"~google/gemini-pro-latest","name":"Gemini Pro Latest","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["audio","pdf","image","text","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":2,"output":10,"reasoning":10,"cache_read":0.1,"cache_write":0.1875,"input_audio":2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}}},"~google/gemini-flash-latest":{"id":"~google/gemini-flash-latest","name":"Gemini Flash Latest","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01-01","release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"reasoning":3.75,"cache_read":0.075,"cache_write":0.041667,"input_audio":0.75}},"thedrummer/unslopnemo-12b":{"id":"thedrummer/unslopnemo-12b","name":"UnslopNemo 12B","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-04-30","release_date":"2024-11-08","last_updated":"2024-11-08","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1024000,"output":819200},"cost":{"input":0.4,"output":0.4},"canonical_model_id":"thedrummer/unslopnemo-12b"},"thedrummer/cydonia-24b-v4.1":{"id":"thedrummer/cydonia-24b-v4.1","name":"Cydonia 24B V4.1","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-04-30","release_date":"2025-09-27","last_updated":"2025-09-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":117964},"cost":{"input":0.3,"output":0.5,"cache_read":0.15},"canonical_model_id":"thedrummer/cydonia-24b-v4.1"},"thedrummer/skyfall-36b-v2":{"id":"thedrummer/skyfall-36b-v2","name":"Skyfall 36B V2","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-06-30","release_date":"2025-03-10","last_updated":"2025-03-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":29491},"cost":{"input":0.55,"output":0.8,"cache_read":0.25},"canonical_model_id":"thedrummer/skyfall-36b-v2"},"tencent/hy-mt2-7b":{"id":"tencent/hy-mt2-7b","name":"Hy-MT2-7B","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":4096},"cost":{"input":0.074,"output":0.295},"canonical_model_id":"tencent/hy-mt2-7b"},"tencent/hy-mt2-30b-a3b":{"id":"tencent/hy-mt2-30b-a3b","name":"Hy-MT2-30B-A3B","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":4096},"cost":{"input":0.074,"output":0.295},"canonical_model_id":"tencent/hy-mt2-30b-a3b"},"tencent/hunyuan-a13b-instruct":{"id":"tencent/hunyuan-a13b-instruct","name":"Hunyuan A13B Instruct","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"hunyuan","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-07-08","last_updated":"2025-07-08","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":117964},"cost":{"input":0.14,"output":0.57}},"tencent/hy4":{"id":"tencent/hy4","name":"Hy4","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-04","last_updated":"2026-11-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":983010,"output":65536},"cost":{"input":0.417,"output":1.2505,"cache_read":0.021},"canonical_model_id":"tencent/hy4"},"tencent/hy3":{"id":"tencent/hy3","name":"Hy3","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":192000,"output":128000},"cost":{"input":0.132,"output":0.528,"cache_read":0.033},"canonical_model_id":"tencent/hy3"},"tencent/hy4-preview":{"id":"tencent/hy4-preview","name":"Hy4 preview","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-28","last_updated":"2026-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":64000},"cost":{"input":0.834,"output":2.501,"cache_read":0.042},"canonical_model_id":"tencent/hy4-preview"},"tencent/hy-mt2-1.8b":{"id":"tencent/hy-mt2-1.8b","name":"Hy-MT2-1.8B","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":4096},"cost":{"input":0.044,"output":0.177},"canonical_model_id":"tencent/hy-mt2-1.8b"},"tencent/hy3-preview":{"id":"tencent/hy3-preview","name":"Hy3 preview","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.18,"output":0.6,"cache_read":0.06},"canonical_model_id":"tencent/hy3-preview"},"mistralai/voxtral-small-24b-2507":{"id":"mistralai/voxtral-small-24b-2507","name":"Voxtral Small 24B 2507","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"voxtral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-15","last_updated":"2025-07-15","modalities":{"input":["text","audio","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":26214},"cost":{"input":0.1,"output":0.3,"cache_read":0.01},"canonical_model_id":"mistral/voxtral-small-24b-2507"},"mistralai/mistral-large-4-0":{"id":"mistralai/mistral-large-4-0","name":"Mistral Large 4","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":262144},"cost":{"input":0.7,"output":2.1,"cache_read":0.07},"canonical_model_id":"mistral/mistral-large-4"},"mistralai/codestral-2508":{"id":"mistralai/codestral-2508","name":"Codestral 25.08","description":"Mistral coding model for code completion, generation, and developer workflows","family":"codestral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-30","last_updated":"2025-07-30","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":204800},"cost":{"input":0.3,"output":0.9,"cache_read":0.03},"canonical_model_id":"mistral/codestral-2508"},"mistralai/mistral-small-3.1-24b-instruct":{"id":"mistralai/mistral-small-3.1-24b-instruct","name":"Mistral Small 3.1 24B","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-10-31","release_date":"2025-03-17","last_updated":"2025-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":102400},"cost":{"input":0.351,"output":0.555},"canonical_model_id":"mistral/mistral-small-3.1-24b-instruct"},"mistralai/mixtral-8x22b-instruct":{"id":"mistralai/mixtral-8x22b-instruct","name":"Mixtral 8x22B Instruct","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-01-31","release_date":"2024-04-17","last_updated":"2024-04-17","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":52428},"cost":{"input":2,"output":6,"cache_read":0.2},"canonical_model_id":"mistral/mixtral-8x22b-instruct"},"mistralai/mistral-medium-3-5":{"id":"mistralai/mistral-medium-3-5","name":"Mistral Medium 3.5","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-30","last_updated":"2026-04-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":209715},"cost":{"input":1.5,"output":7.5},"canonical_model_id":"mistral/mistral-medium-3-5"},"mistralai/mistral-large-2512":{"id":"mistralai/mistral-large-2512","name":"Mistral Large 3","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-11","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":209715},"cost":{"input":0.5,"output":1.5,"cache_read":0.05},"canonical_model_id":"mistral/mistral-large-2512"},"mistralai/ministral-3b-2512":{"id":"mistralai/ministral-3b-2512","name":"Ministral 3 3B 2512","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":104857},"cost":{"input":0.1,"output":0.1,"cache_read":0.01},"canonical_model_id":"mistral/ministral-3b-2512"},"mistralai/ministral-8b-2512":{"id":"mistralai/ministral-8b-2512","name":"Ministral 3 8B 2512","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":209715},"cost":{"input":0.15,"output":0.15,"cache_read":0.015},"canonical_model_id":"mistral/ministral-8b-2512"},"mistralai/mistral-large-2407":{"id":"mistralai/mistral-large-2407","name":"Mistral Large 2407","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-03-31","release_date":"2024-07-24","last_updated":"2024-07-24","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":104857},"cost":{"input":2,"output":6,"cache_read":0.2},"canonical_model_id":"mistral/mistral-large-2407"},"mistralai/mistral-small-24b-instruct-2501":{"id":"mistralai/mistral-small-24b-instruct-2501","name":"Mistral Small 3","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2023-10-31","release_date":"2025-01-30","last_updated":"2025-01-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":16384},"cost":{"input":0.05,"output":0.08},"canonical_model_id":"mistral/mistral-small-24b-instruct-2501"},"mistralai/mistral-small-3.2-24b-instruct":{"id":"mistralai/mistral-small-3.2-24b-instruct","name":"Mistral Small 3.2 24B","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-10-31","release_date":"2025-06-20","last_updated":"2025-06-20","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":26214},"cost":{"input":0.1,"output":0.3,"cache_read":0.01},"canonical_model_id":"mistral/mistral-small-3.2-24b-instruct"},"mistralai/mistral-medium-3.1":{"id":"mistralai/mistral-medium-3.1","name":"Mistral Medium 3.1","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06-30","release_date":"2025-08-12","last_updated":"2025-08-12","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":104857},"cost":{"input":0.4,"output":2,"cache_read":0.04},"canonical_model_id":"mistral/mistral-medium-3.1"},"mistralai/mistral-small-2603":{"id":"mistralai/mistral-small-2603","name":"Mistral Small 4","description":"Fast Mistral production model for chat, extraction, and cost-sensitive agents","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":209715},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"mistral/mistral-small-2603"},"mistralai/mistral-nemo":{"id":"mistralai/mistral-nemo","name":"Mistral Nemo","description":"Efficient Mistral-NVIDIA open model for multilingual chat and local deployment","family":"mistral-nemo","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.029,"output":0.03},"canonical_model_id":"mistral/mistral-nemo"},"mistralai/devstral-2512":{"id":"mistralai/devstral-2512","name":"Devstral 2","description":"Mistral coding agent model for repository tasks and software engineering workflows","family":"devstral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-12","release_date":"2025-12-09","last_updated":"2025-12-09","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":209715},"cost":{"input":0.4,"output":2,"cache_read":0.04},"canonical_model_id":"mistral/devstral-2512"},"mistralai/mistral-saba":{"id":"mistralai/mistral-saba","name":"Saba","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-02-17","last_updated":"2025-02-17","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":26214},"cost":{"input":0.2,"output":0.6,"cache_read":0.02},"canonical_model_id":"mistral/mistral-saba"},"mistralai/mistral-large":{"id":"mistralai/mistral-large","name":"Mistral Large","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-11-30","release_date":"2024-02-26","last_updated":"2024-02-26","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":102400},"cost":{"input":2,"output":6,"cache_read":0.2},"canonical_model_id":"mistral/mistral-large"},"mistralai/mistral-medium-3":{"id":"mistralai/mistral-medium-3","name":"Mistral Medium 3","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-07","last_updated":"2025-05-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":104857},"cost":{"input":0.4,"output":2,"cache_read":0.04},"canonical_model_id":"mistral/mistral-medium-3"},"mistralai/ministral-14b-2512":{"id":"mistralai/ministral-14b-2512","name":"Ministral 3 14B 2512","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":209715},"cost":{"input":0.2,"output":0.2,"cache_read":0.02},"canonical_model_id":"mistral/ministral-14b-2512"},"microsoft/phi-4":{"id":"microsoft/phi-4","name":"Phi 4","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","family":"phi","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-06-30","release_date":"2025-01-10","last_updated":"2025-01-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"output":14745},"cost":{"input":0.07,"output":0.14}},"moonshotai/kimi-k3.1-pro":{"id":"moonshotai/kimi-k3.1-pro","name":"Kimi K3.1 Pro","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":0.2375,"output":8.4085,"cache_read":0.2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"moonshotai/kimi-k2.6":{"id":"moonshotai/kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.65,"output":3.41,"cache_read":0.15},"canonical_model_id":"moonshotai/kimi-k2.6"},"moonshotai/kimi-k2-0905":{"id":"moonshotai/kimi-k2-0905","name":"Kimi K2 Instruct 0905","description":"Kimi model for long-context chat, coding, and agentic reasoning","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-09-05","last_updated":"2025-09-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":98304},"cost":{"input":0.6,"output":2.5},"canonical_model_id":"moonshotai/kimi-k2-0905"},"moonshotai/kimi-k3":{"id":"moonshotai/kimi-k3","name":"Kimi K3","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":0.192,"output":16,"cache_read":0.182},"canonical_model_id":"moonshotai/kimi-k3"},"moonshotai/kimi-k2.5":{"id":"moonshotai/kimi-k2.5","name":"Kimi K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.532,"output":3.325,"cache_read":0.209},"canonical_model_id":"moonshotai/kimi-k2.5"},"moonshotai/kimi-k2":{"id":"moonshotai/kimi-k2","name":"Kimi K2 0711","description":"Kimi model for long-context chat, coding, and agentic reasoning","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-12-31","release_date":"2025-07-11","last_updated":"2025-07-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"cost":{"input":0.57,"output":2.3},"canonical_model_id":"moonshotai/kimi-k2"},"moonshotai/kimi-k2.7-code":{"id":"moonshotai/kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.6,"output":3.5,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"moonshotai/kimi-k2-thinking":{"id":"moonshotai/kimi-k2-thinking","name":"Kimi K2 Thinking","description":"Thinking Kimi model for slower research passes, planning, and hard technical questions","family":"kimi-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-11-06","last_updated":"2025-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":98304},"cost":{"input":0.6,"output":2.5,"cache_read":0.15},"canonical_model_id":"moonshotai/kimi-k2-thinking"},"perceptron/perceptron-mk1":{"id":"perceptron/perceptron-mk1","name":"Perceptron Mk1","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-05-12","last_updated":"2026-05-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":8192},"cost":{"input":0.15,"output":1.5},"canonical_model_id":"perceptron/perceptron-mk1"},"perceptron/perceptron-mk1.5":{"id":"perceptron/perceptron-mk1.5","name":"Perceptron Mk1.5","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-25","last_updated":"2026-09-25","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":36864,"output":8192},"cost":{"input":0.15,"output":1.5}},"openai/gpt-5.2-pro":{"id":"openai/gpt-5.2-pro","name":"GPT-5.2 Pro","description":"Higher-accuracy GPT-5.2 variant for tougher reasoning and review workflows","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["image","text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":21,"output":168},"canonical_model_id":"openai/gpt-5.2-pro"},"openai/gpt-5.5":{"id":"openai/gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"openai/gpt-4.1-nano":{"id":"openai/gpt-4.1-nano","name":"GPT-4.1 nano","description":"Tiny GPT-4.1 option for classification, routing, and very high-volume tasks","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["image","text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":942818},"cost":{"input":0.1,"output":0.4,"cache_read":0.03},"canonical_model_id":"openai/gpt-4.1-nano"},"openai/gpt-5.2":{"id":"openai/gpt-5.2","name":"GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"openai/gpt-4.1-mini":{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-4.1-mini"},"openai/gpt-5.2-codex":{"id":"openai/gpt-5.2-codex","name":"GPT-5.2 Codex","description":"Code-specialist GPT for repository edits, reviews, and long-running software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2-codex"},"openai/gpt-6-sol-pro":{"id":"openai/gpt-6-sol-pro","name":"GPT-6 Sol Pro","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}}},"openai/gpt-5.4-mini":{"id":"openai/gpt-5.4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"openai/gpt-oss-safeguard-20b":{"id":"openai/gpt-oss-safeguard-20b","name":"GPT OSS Safeguard 20B","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-29","last_updated":"2025-10-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":65536},"cost":{"input":0.075,"output":0.3,"cache_read":0.0375},"canonical_model_id":"openai/gpt-oss-safeguard-20b"},"openai/gpt-5-image":{"id":"openai/gpt-5-image","type":"image","name":"GPT-5 Image","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2024-10-01","release_date":"2025-10-14","last_updated":"2025-10-14","modalities":{"input":["image","text","pdf"],"output":["image","text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"cost":{"input":10,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-5-image"},"openai/gpt-5.6-terra-pro":{"id":"openai/gpt-5.6-terra-pro","name":"GPT-5.6 Terra Pro","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"openai/gpt-5":{"id":"openai/gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"openai/gpt-5.1-codex-max":{"id":"openai/gpt-5.1-codex-max","name":"GPT-5.1 Codex Max","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1-codex-max"},"openai/gpt-5.1-codex":{"id":"openai/gpt-5.1-codex","name":"GPT-5.1 Codex","description":"Codex GPT for repository edits, code review, and practical software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.13},"canonical_model_id":"openai/gpt-5.1-codex"},"openai/gpt-chat-latest":{"id":"openai/gpt-chat-latest","name":"GPT Chat Latest","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-05-05","last_updated":"2026-05-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5}},"openai/gpt-5.6-sol":{"id":"openai/gpt-5.6-sol","name":"GPT-5.6 Sol","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"openai/gpt-6.1-terra":{"id":"openai/gpt-6.1-terra","name":"GPT-6.1 Terra","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25,"tiers":[{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5}},"canonical_model_id":"openai/gpt-6.1-terra"},"openai/gpt-4.1":{"id":"openai/gpt-4.1","name":"GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"openai/o3":{"id":"openai/o3","name":"o3","description":"Deliberate o-series reasoner for hard math, coding, and multi-step analysis","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/o3"},"openai/gpt-4o-2024-11-20":{"id":"openai/gpt-4o-2024-11-20","name":"GPT-4o (2024-11-20)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-11-20","last_updated":"2024-11-20","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o-2024-11-20"},"openai/gpt-6-luna-pro":{"id":"openai/gpt-6-luna-pro","name":"GPT-6 Luna Pro","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}}},"openai/gpt-6-luna":{"id":"openai/gpt-6-luna","name":"GPT-6 Luna","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"openai/gpt-3.5-turbo-16k":{"id":"openai/gpt-3.5-turbo-16k","name":"GPT-3.5 Turbo 16k","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2021-09-30","release_date":"2023-08-28","last_updated":"2023-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":16385,"output":4096},"cost":{"input":3,"output":4}},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT OSS 20B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":117964},"cost":{"input":0.03,"output":0.13,"cache_read":0.03},"canonical_model_id":"openai/gpt-oss-20b"},"openai/gpt-6-astra-pro":{"id":"openai/gpt-6-astra-pro","name":"GPT-6 Astra Pro","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}}},"openai/gpt-audio":{"id":"openai/gpt-audio","type":"chat","name":"GPT-Audio","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-10-01","release_date":"2025-08-28","last_updated":"2025-08-28","modalities":{"input":["text","audio"],"output":["text","audio"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"input_audio":32,"output_audio":64},"canonical_model_id":"openai/gpt-audio"},"openai/gpt-4":{"id":"openai/gpt-4","name":"GPT-4","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-11","release_date":"2023-11-06","last_updated":"2024-04-09","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8191,"output":4096},"cost":{"input":30,"output":60},"canonical_model_id":"openai/gpt-4"},"openai/gpt-5-pro":{"id":"openai/gpt-5-pro","name":"GPT-5 Pro","description":"Higher-accuracy GPT-5 tier for tough analysis, coding reviews, and planning","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["image","text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":15,"output":120},"canonical_model_id":"openai/gpt-5-pro"},"openai/gpt-6.1-sol-pro":{"id":"openai/gpt-6.1-sol-pro","name":"GPT-6.1 Sol Pro","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}}},"openai/gpt-6-sol":{"id":"openai/gpt-6-sol","name":"GPT-6 Sol","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"openai/gpt-5.3-codex":{"id":"openai/gpt-5.3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"openai/gpt-4o-mini-2024-07-18":{"id":"openai/gpt-4o-mini-2024-07-18","name":"GPT-4o-mini (2024-07-18)","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-4o-mini"},"openai/gpt-4o-2024-05-13":{"id":"openai/gpt-4o-2024-05-13","name":"GPT-4o (2024-05-13)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-05-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"cost":{"input":5,"output":15},"canonical_model_id":"openai/gpt-4o-2024-05-13"},"openai/gpt-6-astra":{"id":"openai/gpt-6-astra","name":"GPT-6 Astra","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"openai/gpt-5.1":{"id":"openai/gpt-5.1","name":"GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["image","text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1"},"openai/gpt-5-mini":{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"openai/gpt-5.1-codex-mini":{"id":"openai/gpt-5.1-codex-mini","name":"GPT-5.1 Codex mini","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.03},"canonical_model_id":"openai/gpt-5.1-codex-mini"},"openai/gpt-5.5-pro":{"id":"openai/gpt-5.5-pro","name":"GPT-5.5 Pro","description":"Highest-accuracy GPT-5.5 tier for slower, precision-heavy reasoning and coding","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.5-pro"},"openai/gpt-5.6-luna-pro":{"id":"openai/gpt-5.6-luna-pro","name":"GPT-5.6 Luna Pro","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-5.6-luna":{"id":"openai/gpt-5.6-luna","name":"GPT-5.6 Luna","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-6.1-sol":{"id":"openai/gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-sol"},"openai/gpt-6.1-terra-pro":{"id":"openai/gpt-6.1-terra-pro","name":"GPT-6.1 Terra Pro","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25,"tiers":[{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5}}},"openai/gpt-audio-mini":{"id":"openai/gpt-audio-mini","type":"chat","name":"GPT-Audio Mini","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-10-01","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","audio"],"output":["text","audio"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.6,"output":2.4,"input_audio":0.6,"output_audio":2.4},"canonical_model_id":"openai/gpt-audio-mini"},"openai/gpt-5.4-pro":{"id":"openai/gpt-5.4-pro","name":"GPT-5.4 Pro","description":"More exact GPT-5.4 tier for demanding professional reasoning and agent tasks","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.4-pro"},"openai/gpt-5-nano":{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-nano"},"openai/gpt-5.4":{"id":"openai/gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5}},"canonical_model_id":"openai/gpt-5.4"},"openai/gpt-5.4-image-2":{"id":"openai/gpt-5.4-image-2","type":"image","name":"GPT-5.4 Image 2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":false,"structured_output":true,"temperature":false,"release_date":"2026-04-21","last_updated":"2026-04-21","modalities":{"input":["image","text","pdf"],"output":["image","text"]},"open_weights":false,"limit":{"context":272000,"output":128000},"cost":{"input":8,"output":15,"cache_read":2},"canonical_model_id":"openai/gpt-5.4-image-2"},"openai/o3-pro":{"id":"openai/o3-pro","name":"o3-pro","description":"High-effort o3 tier for difficult technical reasoning and careful answers","family":"o-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-06-10","last_updated":"2025-06-10","modalities":{"input":["text","pdf","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":20,"output":80},"canonical_model_id":"openai/o3-pro"},"openai/gpt-4o-2024-08-06":{"id":"openai/gpt-4o-2024-08-06","name":"GPT-4o (2024-08-06)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-08-06","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o-2024-08-06"},"openai/gpt-5.4-nano":{"id":"openai/gpt-5.4-nano","name":"GPT-5.4 nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"openai/gpt-3.5-turbo-0613":{"id":"openai/gpt-3.5-turbo-0613","name":"GPT-3.5 Turbo (older v0613)","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2021-09-30","release_date":"2024-01-25","last_updated":"2024-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":4095,"output":3685},"cost":{"input":1,"output":2}},"openai/gpt-4o":{"id":"openai/gpt-4o","name":"GPT-4o","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":65536},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-oss-120b"},"openai/gpt-5.6-terra":{"id":"openai/gpt-5.6-terra","name":"GPT-5.6 Terra","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"openai/gpt-5-image-mini":{"id":"openai/gpt-5-image-mini","type":"image","name":"GPT-5 Image Mini","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-10-16","last_updated":"2025-10-16","modalities":{"input":["pdf","image","text"],"output":["image","text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"cost":{"input":2.5,"output":2,"cache_read":0.25},"canonical_model_id":"openai/gpt-5-image-mini"},"openai/gpt-4o-mini":{"id":"openai/gpt-4o-mini","name":"GPT-4o mini","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-4o-mini"},"openai/gpt-5.6-sol-pro":{"id":"openai/gpt-5.6-sol-pro","name":"GPT-5.6 Sol Pro","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"elorian/glimpse":{"id":"elorian/glimpse","name":"Glimpse","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":256000},"cost":{"input":0.6,"output":3,"cache_read":0.06}},"cognitivecomputations/dolphin-mistral-24b-venice-edition":{"id":"cognitivecomputations/dolphin-mistral-24b-venice-edition","name":"Uncensored","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-04-30","release_date":"2025-07-09","last_updated":"2025-07-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0.2,"output":0.9},"canonical_model_id":"cognitivecomputations/dolphin-mistral-24b-venice-edition"},"cohere/command-r-plus-08-2024":{"id":"cohere/command-r-plus-08-2024","name":"Command R+","description":"Cohere's RAG workhorse for long-context enterprise search and tool use","family":"command-r","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2024-08-30","last_updated":"2024-08-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4000},"cost":{"input":2.5,"output":10},"canonical_model_id":"cohere/command-r-plus-08-2024"},"cohere/command-r7b-12-2024":{"id":"cohere/command-r7b-12-2024","name":"Command R7B","description":"Cohere retrieval model for long-context chat and enterprise RAG workflows","family":"command-r","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2024-12-13","last_updated":"2024-12-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4000},"cost":{"input":0.0375,"output":0.15},"canonical_model_id":"cohere/command-r7b-12-2024"},"cohere/command-a-plus":{"id":"cohere/command-a-plus","name":"Command A+","description":"Cohere command model for multilingual enterprise agents, tools, and chat","family":"command-a","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04-01","release_date":"2026-05-20","last_updated":"2026-06-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":192000,"output":64000},"cost":{"input":0.3,"output":1.5,"cache_read":0.15},"canonical_model_id":"cohere/command-a-plus-05-2026"},"cohere/command-r-08-2024":{"id":"cohere/command-r-08-2024","name":"Command R","description":"Cohere retrieval model for long-context chat and enterprise RAG workflows","family":"command-r","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2024-08-30","last_updated":"2024-08-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4000},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"cohere/command-r-08-2024"},"cohere/command-a":{"id":"cohere/command-a","name":"Command A","description":"Cohere command model for multilingual enterprise agents, tools, and chat","family":"command-a","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08-31","release_date":"2025-03-13","last_updated":"2025-03-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":8192},"cost":{"input":2.5,"output":10},"canonical_model_id":"cohere/command-a"},"cohere/north-mini-code:free":{"id":"cohere/north-mini-code:free","name":"North Mini Code (free)","description":"Cohere coding model for practical software engineering and agentic edits","family":"north","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-09-23","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":64000},"cost":{"input":0,"output":0},"canonical_model_id":"cohere/north-mini-code-1-0"},"ricursiveai/ripple-65b-preview":{"id":"ricursiveai/ripple-65b-preview","name":"Ripple 65B Preview","description":"Preview model for early access evaluation, prototyping, and compatibility testing","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-04","last_updated":"2026-11-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.2,"output":0.6,"cache_read":0.05}},"xiaomi/mimo-v2.6-pro":{"id":"xiaomi/mimo-v2.6-pro","name":"MiMo-V2.6-Pro","description":"MiMo pro model for strong multimodal reasoning and agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1050000,"output":131072},"cost":{"input":0.435,"output":0.87,"cache_read":0.0036},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"xiaomi/mimo-v2.6-pro-ultraspeed":{"id":"xiaomi/mimo-v2.6-pro-ultraspeed","name":"MiMo-V2.6-Pro-UltraSpeed","description":"MiMo pro model for strong multimodal reasoning and agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":4.35,"output":8.7,"cache_read":0.036},"canonical_model_id":"xiaomi/mimo-v2.6-pro-ultraspeed"},"xiaomi/mimo-v2.6-flash":{"id":"xiaomi/mimo-v2.6-flash","name":"MiMo-V2.6-Flash","description":"MiMo flash model for fast multimodal assistance and agent workflows","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1050000,"output":131072},"cost":{"input":0.14,"output":0.28,"cache_read":0.0028},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"xiaomi/mimo-v2.5":{"id":"xiaomi/mimo-v2.5","name":"MiMo-V2.5","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":65536},"status":"deprecated","cost":{"input":0.4,"output":2,"cache_read":0.08},"canonical_model_id":"xiaomi/mimo-v2.5"},"xiaomi/mimo-v2.5-pro":{"id":"xiaomi/mimo-v2.5-pro","name":"MiMo-V2.5-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1024000,"output":235929},"status":"deprecated","cost":{"input":0.48,"output":1.8,"cache_read":0.096},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"ibm-granite/granite-4.2-8b":{"id":"ibm-granite/granite-4.2-8b","name":"Granite 4.2 8B","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"granite","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-25","last_updated":"2026-08-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":117964},"cost":{"input":0.06,"output":0.15,"cache_read":0.015},"canonical_model_id":"ibm/granite-4.2-8b"},"mancer/weaver":{"id":"mancer/weaver","name":"Weaver (alpha)","description":"General-purpose chat model for instruction following, writing, and analysis","family":"alpha","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-06-30","release_date":"2023-08-02","last_updated":"2023-08-02","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8000,"output":6000},"cost":{"input":0.3,"output":0.5,"cache_read":0.3},"canonical_model_id":"mancer/weaver"},"minimax/minimax-m2.5":{"id":"minimax/minimax-m2.5","name":"MiniMax-M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.27,"output":1.08,"cache_read":0.027},"canonical_model_id":"minimax/MiniMax-M2.5"},"minimax/minimax-m3.1-flash":{"id":"minimax/minimax-m3.1-flash","name":"MiniMax-M3.1-Flash","description":"MiniMax multimodal coding model for long-context reasoning and agent tasks","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":524288},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"minimax/minimax-m3":{"id":"minimax/minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":512000},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"},"minimax/minimax-m2.7":{"id":"minimax/minimax-m2.7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"output":176947},"cost":{"input":0.21,"output":0.84,"cache_read":0.042},"canonical_model_id":"minimax/MiniMax-M2.7"},"thinkingmachines/inkling-small":{"id":"thinkingmachines/inkling-small","name":"Inkling Small","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-30","last_updated":"2026-07-30","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":262144},"cost":{"input":0.45,"output":1.2,"cache_read":0.1},"canonical_model_id":"thinkingmachines/inkling-small"},"thinkingmachines/inkling-2-small:free":{"id":"thinkingmachines/inkling-2-small:free","name":"Inkling 2 Small (free)","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-11-05","last_updated":"2026-11-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"thinkingmachines/inkling-2-small"},"thinkingmachines/inkling":{"id":"thinkingmachines/inkling","name":"Inkling","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":471859},"cost":{"input":1,"output":4.05,"cache_read":0.17},"canonical_model_id":"thinkingmachines/inkling"},"reflection/beam-1.0-501b-a23b":{"id":"reflection/beam-1.0-501b-a23b","name":"Beam 1.0 501B A23B","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"beam","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-06-30","release_date":"2026-10-05","last_updated":"2026-10-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":0.3,"output":1,"cache_read":0.04},"canonical_model_id":"reflection/beam-1.0-501b-a23b"},"upstage/solar-pro4":{"id":"upstage/solar-pro4","name":"Solar Pro 4","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"solar-pro","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02","release_date":"2026-08-06","last_updated":"2026-08-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"output":131072},"cost":{"input":0.15,"output":0.6,"cache_read":0.03},"canonical_model_id":"upstage/solar-pro4"},"upstage/solar-mini4":{"id":"upstage/solar-mini4","name":"Solar Mini 4","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"solar-mini","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"output":131072},"cost":{"input":0.05,"output":0.2,"cache_read":0.005},"canonical_model_id":"upstage/solar-mini4"},"prism-ml/ternary-bonsai-2-27b":{"id":"prism-ml/ternary-bonsai-2-27b","name":"Ternary Bonsai 2 27B","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-18","last_updated":"2026-09-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.075,"output":0.5,"cache_read":0.0375}},"prism-ml/ternary-bonsai-2-9b":{"id":"prism-ml/ternary-bonsai-2-9b","name":"Ternary Bonsai 2 9B","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-16","last_updated":"2026-10-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.08,"output":0.13,"cache_read":0.04}},"meta/muse-spark-1.3":{"id":"meta/muse-spark-1.3","name":"Muse Spark 1.3","description":"Open Llama multimodal model for image understanding and text reasoning","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.3"},"meta/muse-wonder":{"id":"meta/muse-wonder","name":"Muse Wonder","description":"Open Llama multimodal model for image understanding and text reasoning","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-12","last_updated":"2026-10-12","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":4,"output":20,"cache_read":0.2}},"meta/muse-spark-1.1":{"id":"meta/muse-spark-1.1","name":"Muse Spark 1.1","description":"Open Llama multimodal model for image understanding and text reasoning","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-08","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.1"},"meta/muse-spark-1.2-contributor":{"id":"meta/muse-spark-1.2-contributor","name":"Muse Spark 1.2 Contributor","description":"Open Llama multimodal model for image understanding and text reasoning","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-21","last_updated":"2026-08-21","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":0.1,"output":0.2,"cache_read":0.002}},"meta/muse-spark-open":{"id":"meta/muse-spark-open","name":"Muse Spark Open","description":"Open Llama multimodal model for image understanding and text reasoning","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":262144},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-open"},"meta/muse-ember":{"id":"meta/muse-ember","name":"Muse Ember","description":"Open Llama multimodal model for image understanding and text reasoning","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":0.1,"output":0.5,"cache_read":0.004,"cache_write":0.125}},"meta/muse-glimmer-30b":{"id":"meta/muse-glimmer-30b","name":"Muse Glimmer 30B","description":"Muse Glimmer is a 30-billion-parameter open-weight multimodal model from Meta Superintelligence Labs, distilled from Muse Spark for always-on local agents, tool use, coding, and image understanding.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-08-10","last_updated":"2026-08-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.3,"output":1.2,"cache_read":0.04},"canonical_model_id":"meta/muse-glimmer-30b"},"meta/muse-spark-1.2":{"id":"meta/muse-spark-1.2","name":"Muse Spark 1.2","description":"Muse Spark 1.2 is a coding-focused update to Muse Spark 1.1 with improvements in code generation, complex debugging, codebase understanding, and end-to-end developer workflows.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.2"},"meta/muse-spark-1.3-contributor":{"id":"meta/muse-spark-1.3-contributor","name":"Muse Spark 1.3 Contributor","description":"Open Llama multimodal model for image understanding and text reasoning","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":0.1,"output":0.2,"cache_read":0.002}},"~openai/gpt-terra-latest":{"id":"~openai/gpt-terra-latest","name":"GPT Terra Latest","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25,"tiers":[{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5}}},"~openai/gpt-mini-latest":{"id":"~openai/gpt-mini-latest","name":"GPT Mini Latest","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075}},"~openai/gpt-sol-latest":{"id":"~openai/gpt-sol-latest","name":"GPT Sol Latest","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}}},"~openai/gpt-luna-latest":{"id":"~openai/gpt-luna-latest","name":"GPT Luna Latest","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}}},"~openai/gpt-astra-latest":{"id":"~openai/gpt-astra-latest","name":"GPT Astra Latest","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["pdf","image","text"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}}},"stepfun/step-5-preview":{"id":"stepfun/step-5-preview","name":"Step 5 Preview","description":"StepFun flash model for efficient multimodal reasoning, coding, and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":64000},"cost":{"input":1,"output":2.7,"cache_read":0.1},"canonical_model_id":"stepfun/step-5-preview"},"stepfun/step-3.7-flash":{"id":"stepfun/step-3.7-flash","name":"Step 3.7 Flash","description":"Newer StepFun flash model for faster agents, coding, and multimodal prompts","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":256000,"output":230400},"cost":{"input":0.2,"output":1.15,"cache_read":0.04},"canonical_model_id":"stepfun/step-3.7-flash"},"stepfun/step-3.5-flash":{"id":"stepfun/step-3.5-flash","name":"Step 3.5 Flash","description":"StepFun flash lane for quick multimodal reasoning and coding assistance","family":"step","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-29","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.1,"output":0.3},"canonical_model_id":"stepfun/step-3.5-flash"},"fireworks/ember-1":{"id":"fireworks/ember-1","name":"Ember-1","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"fireworks/ember-1"},"recursive/flint-v1.0:free":{"id":"recursive/flint-v1.0:free","name":"Flint (free)","description":"Free provider route for experiments, demos, and cost-sensitive chat workloads","family":"flint","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-21","last_updated":"2026-10-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0,"output":0}},"undi95/remm-slerp-l2-13b":{"id":"undi95/remm-slerp-l2-13b","name":"ReMM SLERP 13B","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2023-06-30","release_date":"2023-07-22","last_updated":"2023-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":6144,"output":5529},"cost":{"input":0.3,"output":0.5,"cache_read":0.2},"canonical_model_id":"undi95/remm-slerp-l2-13b"},"openrouter/pareto-code":{"id":"openrouter/pareto-code","name":"Pareto Code Router","description":"Coding model for repository understanding, refactors, and agentic engineering tasks","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2026-04-21","last_updated":"2026-04-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":200000}},"openrouter/free":{"id":"openrouter/free","name":"Free Models Router","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-01","last_updated":"2026-02-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":200000,"output":8000},"cost":{"input":0,"output":0}},"openrouter/fusion":{"id":"openrouter/fusion","name":"Fusion","description":"General-purpose chat model for instruction following, writing, and analysis","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000}},"openrouter/auto":{"id":"openrouter/auto","name":"Auto Router","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"auto","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2023-11-08","last_updated":"2023-11-08","modalities":{"input":["text","image","audio","pdf","video"],"output":["text","image"]},"open_weights":false,"limit":{"context":2000000,"output":2000000}},"openrouter/bodybuilder":{"id":"openrouter/bodybuilder","name":"Body Builder (beta)","description":"Preview model for early access evaluation, prototyping, and compatibility testing","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2025-12-05","last_updated":"2025-12-05","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":128000}},"~z-ai/glm-latest":{"id":"~z-ai/glm-latest","name":"GLM Latest","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-19","last_updated":"2026-08-19","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":943718},"cost":{"input":0.0699,"output":1.4,"cache_read":0.0689}},"~z-ai/glm-flash-latest":{"id":"~z-ai/glm-flash-latest","name":"GLM Flash Latest","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-27","last_updated":"2026-08-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.0399,"output":0.0784,"cache_read":0.03}},"dots-studio/dots-3-note-preview:free":{"id":"dots-studio/dots-3-note-preview:free","name":"Dots3-Note Preview (free)","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":512000,"output":460800},"status":"deprecated","cost":{"input":0,"output":0}},"unbiased/pareto-26.10-preview":{"id":"unbiased/pareto-26.10-preview","name":"Pareto 26.10 Preview","description":"Preview model for early access evaluation, prototyping, and compatibility testing","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-01","last_updated":"2026-10-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.8,"output":3.2,"cache_read":0.03}},"unbiased/pareto-26.10":{"id":"unbiased/pareto-26.10","name":"Pareto 26.10","description":"Multimodal model for analyzing text, images, documents, and rich media","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.8,"output":3.2,"cache_read":0.03}},"unbiased/pareto-26.9":{"id":"unbiased/pareto-26.9","name":"Pareto 26.9","description":"Multimodal model for analyzing text, images, documents, and rich media","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":2.5,"output":7.5,"cache_read":0.25}},"z-ai/glm-5.2":{"id":"z-ai/glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":0.007,"output":6.8,"cache_read":0.006},"canonical_model_id":"zhipuai/glm-5.2"},"z-ai/glm-4.6v":{"id":"z-ai/glm-4.6v","name":"GLM-4.6V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.3,"output":0.9,"cache_read":0.055},"canonical_model_id":"zhipuai/glm-4.6v"},"z-ai/glm-5.1":{"id":"z-ai/glm-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.1"},"z-ai/glm-5.3-flashx-legal":{"id":"z-ai/glm-5.3-flashx-legal","name":"GLM 5.3 FlashX Legal","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-02","last_updated":"2026-11-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.37,"output":1.25,"cache_read":0.075}},"z-ai/glm-4.5":{"id":"z-ai/glm-4.5","name":"GLM-4.5","description":"Hybrid-reasoning GLM release that made the 4.5 line broadly useful","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"status":"deprecated","cost":{"input":0.6,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.5"},"z-ai/glm-4.7":{"id":"z-ai/glm-4.7","name":"GLM-4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.7"},"z-ai/glm-5.3":{"id":"z-ai/glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":0.0699,"output":1.4,"cache_read":0.0689},"canonical_model_id":"zhipuai/glm-5.3"},"z-ai/glm-5.3-flash":{"id":"z-ai/glm-5.3-flash","name":"GLM-5.3-Flash","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.0399,"output":0.0784,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"z-ai/glm-5-turbo":{"id":"z-ai/glm-5-turbo","name":"GLM-5-Turbo","description":"Faster GLM-5 lane for coding agents that need lower latency","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":202752,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24},"canonical_model_id":"zhipuai/glm-5-turbo"},"z-ai/glm-4.5-air":{"id":"z-ai/glm-4.5-air","name":"GLM-4.5-Air","description":"Lighter GLM-4.5 variant for fast coding assistance and cheaper agents","family":"glm-air","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"cost":{"input":0.2,"output":1.1,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-4.5-air"},"z-ai/glm-4.6":{"id":"z-ai/glm-4.6","name":"GLM-4.6","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.5,"output":2,"cache_read":0.1},"canonical_model_id":"zhipuai/glm-4.6"},"z-ai/glm-4.5v":{"id":"z-ai/glm-4.5v","name":"GLM-4.5V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-08-11","last_updated":"2025-08-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":16384},"cost":{"input":0.6,"output":1.8,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.5v"},"z-ai/glm-5.3-flashx":{"id":"z-ai/glm-5.3-flashx","name":"GLM 5.3 FlashX","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-09-18","last_updated":"2026-09-18","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.37,"output":1.25,"cache_read":0.075}},"z-ai/glm-5.3-prime":{"id":"z-ai/glm-5.3-prime","name":"GLM 5.3 Prime","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-09-23","last_updated":"2026-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2.8,"output":8.8,"cache_read":0.56}},"z-ai/glm-5v-turbo":{"id":"z-ai/glm-5v-turbo","name":"GLM-5V-Turbo","description":"Fast GLM vision model for screenshots, documents, and multimodal agent tasks","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["image","text","video"],"output":["text"]},"open_weights":false,"limit":{"context":202752,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24},"canonical_model_id":"zhipuai/glm-5v-turbo"},"z-ai/glm-5":{"id":"z-ai/glm-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":1,"output":3.2,"cache_read":0.2},"canonical_model_id":"zhipuai/glm-5"},"z-ai/glm-4.7-flash":{"id":"z-ai/glm-4.7-flash","name":"GLM-4.7-Flash","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_details"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":117964},"cost":{"input":0.0605,"output":0.4},"canonical_model_id":"zhipuai/glm-4.7-flash"},"meta-llama/llama-3.2-3b-instruct":{"id":"meta-llama/llama-3.2-3b-instruct","name":"Llama 3.2 3B Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":117964},"cost":{"input":0.05,"output":0.33},"canonical_model_id":"meta/llama-3.2-3b-instruct"},"meta-llama/llama-guard-4-12b":{"id":"meta-llama/llama-guard-4-12b","name":"Llama Guard 4 12B","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"llama","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-04-29","last_updated":"2025-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":16384},"cost":{"input":0.18,"output":0.18},"canonical_model_id":"meta/llama-guard-4-12b"},"meta-llama/llama-4-maverick":{"id":"meta-llama/llama-4-maverick","name":"Llama 4 Maverick","description":"Open multimodal Llama model for strong reasoning and fast responses","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":32768},"cost":{"input":0.35,"output":1,"cache_read":0.17},"canonical_model_id":"meta/llama-4-maverick-17b-instruct"},"meta-llama/llama-3.1-8b-instruct":{"id":"meta-llama/llama-3.1-8b-instruct","name":"Llama-3.1-8B-Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.02,"output":0.04},"canonical_model_id":"meta/llama-3.1-8b-instruct"},"meta-llama/llama-3.1-70b-instruct":{"id":"meta-llama/llama-3.1-70b-instruct","name":"Llama-3.1-70B-Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"cost":{"input":0.72,"output":0.72},"canonical_model_id":"meta/llama-3.1-70b-instruct"},"meta-llama/llama-3.3-70b-instruct":{"id":"meta-llama/llama-3.3-70b-instruct","name":"Llama-3.3-70B-Instruct","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":115200},"cost":{"input":0.71,"output":0.71,"cache_read":0.71},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"meta-llama/llama-4-scout":{"id":"meta-llama/llama-4-scout","name":"Llama 4 Scout","description":"Open multimodal Llama model for long-context analysis and efficient agents","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":327680,"output":16384},"cost":{"input":0.1,"output":0.3},"canonical_model_id":"meta/llama-4-scout-17b-instruct"},"meta-llama/llama-3.2-1b-instruct":{"id":"meta-llama/llama-3.2-1b-instruct","name":"Llama 3.2 1B Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":60000,"output":54000},"cost":{"input":0.027,"output":0.201},"canonical_model_id":"meta/llama-3.2-1b-instruct"},"liquid/lfm-3-1.7b":{"id":"liquid/lfm-3-1.7b","name":"LFM3-1.7B","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"liquid","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-06","last_updated":"2026-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":8192},"cost":{"input":0.08,"output":0.2,"cache_read":0.02}},"liquid/lfm-2.5-24b-a2b":{"id":"liquid/lfm-2.5-24b-a2b","name":"LFM2.5-24B-A2B","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"liquid","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0.05,"output":0.7,"cache_read":0.025}},"liquid/lfm-2.5-2.6b":{"id":"liquid/lfm-2.5-2.6b","name":"LFM2.5-2.6B","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"liquid","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0.35,"output":0.5,"cache_read":0.04}},"liquid/lfm-3-1.7b:free":{"id":"liquid/lfm-3-1.7b:free","name":"LFM3-1.7B (free)","description":"Free provider route for experiments, demos, and cost-sensitive chat workloads","family":"liquid","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-06","last_updated":"2026-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":8192},"cost":{"input":0,"output":0}},"liquid/lfm-2.5-2.6b:free":{"id":"liquid/lfm-2.5-2.6b:free","name":"LFM2.5-2.6B (free)","description":"Free provider route for experiments, demos, and cost-sensitive chat workloads","family":"liquid","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":8192},"cost":{"input":0,"output":0}},"nex-agi/nex-n2.5-pro":{"id":"nex-agi/nex-n2.5-pro","name":"Nex-N2.5-Pro","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"agi","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-08","last_updated":"2026-09-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.075,"output":0.25,"cache_read":0.015}},"nex-agi/nex-n2.5-mini":{"id":"nex-agi/nex-n2.5-mini","name":"Nex-N2.5-Mini","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"agi","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","medium","high"]}],"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-09-08","last_updated":"2026-09-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.025,"output":0.1,"cache_read":0.0025}},"nex-agi/nex-n2.6":{"id":"nex-agi/nex-n2.6","name":"Nex-N2.6","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"agi","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.12,"output":0.4,"cache_read":0.024}},"moondream/moondream3-preview":{"id":"moondream/moondream3-preview","name":"Moondream 3 Preview","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":4096},"cost":{"input":0.3,"output":2.5}},"moondream/moondream3.1-9b-a2b":{"id":"moondream/moondream3.1-9b-a2b","name":"Moondream 3.1","description":"Multimodal reasoning model for visual analysis, planning, and tool use","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":4096},"cost":{"input":0.3,"output":2.5}},"~x-ai/grok-latest":{"id":"~x-ai/grok-latest","name":"Grok Latest","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":450000},"cost":{"input":2,"output":6,"cache_read":0.5,"cache_write":0,"tiers":[{"input":4,"output":12,"cache_read":1,"cache_write":0,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1,"cache_write":0}}},"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free":{"id":"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free","name":"Nemotron 3 Nano Omni (free)","description":"Open Nemotron omni model combining reasoning with text, vision, and audio","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-04-28","last_updated":"2026-04-28","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning"},"nvidia/nemotron-3-ultra-550b-a55b":{"id":"nvidia/nemotron-3-ultra-550b-a55b","name":"Nemotron 3 Ultra 550B A55B","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","medium","high"]},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":182520},"cost":{"input":0.6,"output":2.4,"cache_read":0.12},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"nvidia/nemotron-3-nano-30b-a3b":{"id":"nvidia/nemotron-3-nano-30b-a3b","name":"Nemotron 3 Nano 30B A3B","description":"Small Nemotron 3 MoE for efficient coding, math, and long-context agents","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06-25","release_date":"2025-12-15","last_updated":"2025-12-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.06,"output":0.24,"cache_read":0.012},"canonical_model_id":"nvidia/nemotron-3-nano-30b-a3b"},"nvidia/nemotron-3.5-super-vl":{"id":"nvidia/nemotron-3.5-super-vl","name":"Nemotron 3.5 Super VL","description":"Nemotron multimodal model for visual reasoning and agentic AI workflows","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":943718},"cost":{"input":0.15,"output":0.47,"cache_read":0.02},"canonical_model_id":"nvidia/nemotron-3.5-super-vl-120b-a12b"},"nvidia/nemotron-3.5-super-vl:free":{"id":"nvidia/nemotron-3.5-super-vl:free","name":"Nemotron 3.5 Super VL (free)","description":"Nemotron multimodal model for visual reasoning and agentic AI workflows","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3.5-super-vl-120b-a12b"},"nvidia/nemotron-3.5-lightning":{"id":"nvidia/nemotron-3.5-lightning","name":"Nemotron 3.5 Lightning 30B A3B","description":"Nemotron model for efficient reasoning, coding, and specialized AI agents","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.07,"output":0.2,"cache_read":0.04},"canonical_model_id":"nvidia/nemotron-3.5-lightning"},"nvidia/nemotron-3.5-lightning:free":{"id":"nvidia/nemotron-3.5-lightning:free","name":"Nemotron 3.5 Lightning (free)","description":"Nemotron model for efficient reasoning, coding, and specialized AI agents","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-09","release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3.5-lightning"},"nvidia/nemotron-3-ultra-550b-a55b:free":{"id":"nvidia/nemotron-3-ultra-550b-a55b:free","name":"Nemotron 3 Ultra (free)","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","medium","high"]},{"type":"budget_tokens"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"nvidia/nemotron-3-super-120b-a12b":{"id":"nvidia/nemotron-3-super-120b-a12b","name":"Nemotron 3 Super 120B A12B","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium"]},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0.075,"output":0.4},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"},"nvidia/nemotron-3.5-content-safety":{"id":"nvidia/nemotron-3.5-content-safety","name":"Nemotron 3.5 Content Safety","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":117964},"cost":{"input":0.2,"output":0.2},"canonical_model_id":"nvidia/nemotron-3.5-content-safety"},"~anthropic/claude-sonnet-latest":{"id":"~anthropic/claude-sonnet-latest","name":"Claude Sonnet Latest","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5}},"~anthropic/claude-fable-latest":{"id":"~anthropic/claude-fable-latest","name":"Claude Fable Latest","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10}},"~anthropic/claude-opus-latest":{"id":"~anthropic/claude-opus-latest","name":"Claude Opus Latest","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-04-21","last_updated":"2026-04-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5}},"~anthropic/claude-haiku-latest":{"id":"~anthropic/claude-haiku-latest","name":"Claude Haiku Latest","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]}},"morph/morph-v3-large":{"id":"morph/morph-v3-large","name":"Morph V3 Large","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"morph","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-07-07","last_updated":"2025-07-07","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":0.9,"output":1.9},"canonical_model_id":"morph/morph-v3-large"},"morph/morph-v3-fast":{"id":"morph/morph-v3-fast","name":"Morph V3 Fast","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"morph","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-07-07","last_updated":"2025-07-07","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":0.8,"output":1.2},"canonical_model_id":"morph/morph-v3-fast"},"gryphe/mythomax-l2-13b":{"id":"gryphe/mythomax-l2-13b","name":"MythoMax L2 13B","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2023-08-10","last_updated":"2023-08-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":3686},"cost":{"input":0.08,"output":0.11},"canonical_model_id":"gryphe/mythomax-l2-13b"},"sakana/fugu-max":{"id":"sakana/fugu-max","name":"Fugu Max","description":"Multi-agent model for routing expert agents across complex analytical tasks","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"sakana/fugu-max"},"sakana/fugu-ultra-v2":{"id":"sakana/fugu-ultra-v2","name":"Fugu Ultra v2","description":"Quality-first multi-agent model for hard research, analysis, and competitions","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-08-28","release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"sakana/fugu-ultra-v2"},"sakana/fugu-ultra":{"id":"sakana/fugu-ultra","name":"Fugu Ultra","description":"Quality-first multi-agent model for hard research, analysis, and competitions","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-06-15","last_updated":"2026-06-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"sakana/fugu-ultra"},"sakana/sakana-namazu":{"id":"sakana/sakana-namazu","name":"Sakana Namazu","description":"Multi-agent model for routing expert agents across complex analytical tasks","family":"sakana-namazu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536},"cost":{"input":0.95,"output":4,"cache_read":0.15},"canonical_model_id":"sakana/sakana-namazu"},"scaledown/extract":{"id":"scaledown/extract","name":"Extract","description":"Multimodal model for analyzing text, images, documents, and rich media","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":900000},"cost":{"input":0.04,"output":0}},"scaledown/summarize":{"id":"scaledown/summarize","name":"Summarize","description":"Multimodal model for analyzing text, images, documents, and rich media","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":4000},"cost":{"input":0.04,"output":0}},"sao10k/l3-lunaris-8b":{"id":"sao10k/l3-lunaris-8b","name":"Llama 3 8B Lunaris","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2023-12-31","release_date":"2024-08-13","last_updated":"2024-08-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":7372},"cost":{"input":0.04,"output":0.05},"canonical_model_id":"sao10k/l3-lunaris-8b"},"sao10k/l3.1-euryale-70b":{"id":"sao10k/l3.1-euryale-70b","name":"Llama 3.1 Euryale 70B v2.2","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2023-12-31","release_date":"2024-08-28","last_updated":"2024-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.85,"output":0.85},"canonical_model_id":"sao10k/l3.1-euryale-70b"},"bytedance-seed/seed-2.0-mini":{"id":"bytedance-seed/seed-2.0-mini","name":"Seed 2.0 Mini","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":0.1,"output":0.4,"tiers":[{"input":0.2,"output":0.8,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-mini"},"bytedance-seed/seed-2.0-lite":{"id":"bytedance-seed/seed-2.0-lite","name":"Seed 2.0 Lite","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":0.25,"output":2,"tiers":[{"input":0.5,"output":4,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"bytedance-seed/seed-2.0-lite"},"bytedance-seed/seed-2-1-turbo":{"id":"bytedance-seed/seed-2-1-turbo","name":"Seed 2.1 Turbo","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-23","last_updated":"2026-06-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":235929},"cost":{"input":0.5,"output":2.5},"canonical_model_id":"bytedance-seed/seed-2.1-turbo"},"relace/relace-search":{"id":"relace/relace-search","name":"Relace Search","description":"Tool-capable chat model for instruction following and agentic application workflows","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"cost":{"input":1,"output":3},"canonical_model_id":"relace/relace-search"},"relace/relace-apply-3":{"id":"relace/relace-apply-3","name":"Relace Apply 3","description":"General-purpose chat model for instruction following, writing, and analysis","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2025-09-26","last_updated":"2025-09-26","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"cost":{"input":0.85,"output":1.25},"canonical_model_id":"relace/relace-apply-3"},"motif-technologies/motif-3":{"id":"motif-technologies/motif-3","name":"Motif 3","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"motif","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-11-02","last_updated":"2026-11-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.3,"output":1.2,"cache_read":0.06}},"inference-net/schematron-v2-turbo":{"id":"inference-net/schematron-v2-turbo","name":"Schematron V2 Turbo","description":"Efficient model for low-latency assistance, extraction, and routine automation","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"cost":{"input":0.03,"output":0.15,"cache_read":0.03},"canonical_model_id":"inference-net/schematron-v2-turbo"},"inference-net/schematron-v2-small":{"id":"inference-net/schematron-v2-small","name":"Schematron V2 Small","description":"Efficient model for low-latency assistance, extraction, and routine automation","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"cost":{"input":0.05,"output":0.23,"cache_read":0.05},"canonical_model_id":"inference-net/schematron-v2-small"}}},"volcengine-coding-plan":{"id":"volcengine-coding-plan","env":["ARK_CODING_PLAN_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://ark.cn-beijing.volces.com/api/coding/v3","name":"Volcengine Ark Coding Plan","doc":"https://www.volcengine.com/docs/82379/1928261","models":{"doubao-seed-2.0-lite":{"id":"doubao-seed-2.0-lite","name":"Seed 2.0 Lite","description":"Cost-efficient ByteDance Seed 2.0 model for production chat, analysis, and structured generation","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"bytedance-seed/seed-2.0-lite"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"moonshotai/kimi-k3"},"doubao-seed-2.1-turbo":{"id":"doubao-seed-2.1-turbo","name":"Seed 2.1 Turbo","description":"Faster ByteDance Seed 2.1 model for multimodal reasoning and latency-sensitive agent workflows","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-23","last_updated":"2026-06-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"bytedance-seed/seed-2.1-turbo"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"deepseek/deepseek-v4-pro"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"zhipuai/glm-5.3"},"minimax-m3":{"id":"minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":512000},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"minimax/MiniMax-M3"},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"deepseek/deepseek-v4-flash"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"zhipuai/glm-5.3-flash"},"doubao-seed-evolving":{"id":"doubao-seed-evolving","name":"Seed Evolving","description":"Rolling ByteDance Seed model for rapidly updated reasoning, coding, and agent capabilities","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-23","last_updated":"2026-06-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"bytedance-seed/seed-evolving"}}},"drun":{"id":"drun","env":["DRUN_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://chat.d.run/v1","name":"D.Run (China)","doc":"https://www.d.run","models":{"public/deepseek-r1":{"id":"public/deepseek-r1","name":"DeepSeek R1","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2025-01-20","last_updated":"2025-05-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32000},"cost":{"input":0.55,"output":2.2},"canonical_model_id":"deepseek/deepseek-r1"},"public/deepseek-v3":{"id":"public/deepseek-v3","name":"DeepSeek V3","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2024-12-26","last_updated":"2024-12-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"cost":{"input":0.28,"output":1.1},"canonical_model_id":"deepseek/deepseek-v3"},"public/minimax-m25":{"id":"public/minimax-m25","name":"MiniMax M2.5","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_details"},"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.29,"output":1.16},"canonical_model_id":"minimax/MiniMax-M2.5"}}},"submodel":{"id":"submodel","env":["SUBMODEL_INSTAGEN_ACCESS_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://llm.submodel.ai/v1","name":"submodel","doc":"https://submodel.gitbook.io","models":{"deepseek-ai/DeepSeek-V3.1":{"id":"deepseek-ai/DeepSeek-V3.1","name":"DeepSeek V3.1","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":75000,"output":163840},"cost":{"input":0.2,"output":0.8},"canonical_model_id":"deepseek/deepseek-v3.1"},"deepseek-ai/DeepSeek-V3-0324":{"id":"deepseek-ai/DeepSeek-V3-0324","name":"DeepSeek V3 0324","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-03-24","last_updated":"2025-03-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":75000,"output":163840},"cost":{"input":0.2,"output":0.8},"canonical_model_id":"deepseek/deepseek-v3-0324"},"deepseek-ai/DeepSeek-R1-0528":{"id":"deepseek-ai/DeepSeek-R1-0528","name":"DeepSeek R1 0528","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-05-28","last_updated":"2025-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":75000,"output":163840},"cost":{"input":0.2,"output":0.8},"canonical_model_id":"deepseek/deepseek-r1-0528"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.1,"output":0.5},"canonical_model_id":"openai/gpt-oss-120b"},"Qwen/Qwen3-235B-A22B-Thinking-2507":{"id":"Qwen/Qwen3-235B-A22B-Thinking-2507","name":"Qwen3 235B A22B Thinking 2507","description":"Qwen reasoning model for deliberate problem solving, math, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-07-25","last_updated":"2025-07-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0.2,"output":0.6},"canonical_model_id":"alibaba/qwen3-235b-a22b-thinking-2507"},"Qwen/Qwen3-235B-A22B-Instruct-2507":{"id":"Qwen/Qwen3-235B-A22B-Instruct-2507","name":"Qwen3 235B A22B Instruct 2507","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0.2,"output":0.3},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8":{"id":"Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8","name":"Qwen3 Coder 480B A35B Instruct","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.2,"output":0.8},"canonical_model_id":"alibaba/qwen3-coder-480b-a35b-instruct"},"zai-org/GLM-4.5-FP8":{"id":"zai-org/GLM-4.5-FP8","name":"GLM 4.5 FP8","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.2,"output":0.8},"canonical_model_id":"zhipuai/glm-4.5"},"zai-org/GLM-4.5-Air":{"id":"zai-org/GLM-4.5-Air","name":"GLM 4.5 Air","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-air","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.1,"output":0.5},"canonical_model_id":"zhipuai/glm-4.5-air"}}},"sambanova":{"id":"sambanova","env":["SAMBANOVA_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.sambanova.ai/v1","name":"SambaNova","doc":"https://docs.sambanova.ai/cloud/docs/get-started/supported-models","models":{"DeepSeek-V3.2":{"id":"DeepSeek-V3.2","name":"DeepSeek V3.2","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes, sparse attention, and tool-use","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":7168},"cost":{"input":3,"output":4.5},"canonical_model_id":"deepseek/deepseek-v3.2"},"gemma-4-31B-it":{"id":"gemma-4-31B-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.38,"output":1.15},"canonical_model_id":"google/gemma-4-31b-it"},"DeepSeek-V3.1":{"id":"DeepSeek-V3.1","name":"DeepSeek-V3.1","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":7168},"cost":{"input":3,"output":4.5},"canonical_model_id":"deepseek/deepseek-v3.1"},"Meta-Llama-3.3-70B-Instruct":{"id":"Meta-Llama-3.3-70B-Instruct","name":"Llama-3.3-70B-Instruct","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":3072},"cost":{"input":0.6,"output":1.2},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"MiniMax-M3":{"id":"MiniMax-M3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.6,"output":2.4,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.22,"output":0.59},"canonical_model_id":"openai/gpt-oss-120b"}}},"ainetcafe":{"id":"ainetcafe","env":["AINETCAFE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://microquickjs.com/v1","name":"ainetcafe","doc":"https://ainetcafe.com/k3/guides/","models":{"Kimi-K3":{"id":"Kimi-K3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":2.1,"output":10.5,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"}}},"moark":{"id":"moark","env":["MOARK_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://moark.com/v1","name":"Moark","doc":"https://moark.com/docs/openapi/v1#tag/%E6%96%87%E6%9C%AC%E7%94%9F%E6%88%90","models":{"DeepSeek-V4-Flash":{"id":"DeepSeek-V4-Flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.5,"output":0.5},"canonical_model_id":"deepseek/deepseek-v4-flash"},"MiniMax-M2.1":{"id":"MiniMax-M2.1","name":"MiniMax-M2.1","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0.29,"output":1.2},"canonical_model_id":"minimax/MiniMax-M2.1"},"Qwen3.6-Flash":{"id":"Qwen3.6-Flash","name":"Qwen3.6 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.6","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.18,"output":1.03},"canonical_model_id":"alibaba/qwen3.6-flash"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15},"canonical_model_id":"moonshotai/kimi-k3"},"MiniMax-M2.7":{"id":"MiniMax-M2.7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.29,"output":1.2},"canonical_model_id":"minimax/MiniMax-M2.7"},"GLM-5.3":{"id":"GLM-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.2,"output":4.18},"canonical_model_id":"zhipuai/glm-5.3"},"Kimi-K2.6":{"id":"Kimi-K2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.98,"output":4},"canonical_model_id":"moonshotai/kimi-k2.6"},"GLM-4.7":{"id":"GLM-4.7","name":"GLM-4.7","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"status":"deprecated","cost":{"input":0.42,"output":2.2},"canonical_model_id":"zhipuai/glm-4.7"},"DeepSeek-V4-Pro":{"id":"DeepSeek-V4-Pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":1.8,"output":3.6},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek-v4-flash-0731":{"id":"deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.15,"output":0.3},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"}}},"inception":{"id":"inception","env":["INCEPTION_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.inceptionlabs.ai/v1/","name":"Inception","doc":"https://docs.inceptionlabs.ai/get-started/models","models":{"mercury-2":{"id":"mercury-2","name":"Mercury 2","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"mercury","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01-01","release_date":"2026-02-24","last_updated":"2026-02-24","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":50000},"cost":{"input":0.25,"output":0.75,"cache_read":0.025},"canonical_model_id":"inception/mercury-2"},"mercury-2.5":{"id":"mercury-2.5","name":"Mercury 2.5","description":"Mercury 2.5 is the fastest reasoning LLM, and the latest diffusion LLM (dLLM) from Inception","family":"mercury","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-11-01","release_date":"2026-09-08","last_updated":"2026-09-08","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":260000,"output":65536},"cost":{"input":0.2,"output":0.75,"cache_read":0.02},"canonical_model_id":"inception/mercury-2.5"},"mercury-edit-2":{"id":"mercury-edit-2","name":"Mercury Edit 2","description":"Code editing dLLM for autocomplete (FIM) and next-edit suggestions","family":"mercury","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-03-30","last_updated":"2026-03-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":8192},"cost":{"input":0.25,"output":0.75,"cache_read":0.025},"canonical_model_id":"inception/mercury-edit-2"},"mercury-3":{"id":"mercury-3","name":"Mercury 3","description":"Inception's diffusion reasoning model for chat, multi-step problem solving, and tool use","family":"mercury","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-16","last_updated":"2026-10-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.1,"output":0.35,"cache_read":0.01},"canonical_model_id":"inception/mercury-3"}}},"xiaomi-token-plan-ams":{"id":"xiaomi-token-plan-ams","env":["XIAOMI_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://token-plan-ams.xiaomimimo.com/v1","name":"Xiaomi Token Plan (Europe)","doc":"https://platform.xiaomimimo.com/#/docs","models":{"mimo-v2.6-pro":{"id":"mimo-v2.6-pro","name":"MiMo-V2.6-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"mimo-v2.6-flash":{"id":"mimo-v2.6-flash","name":"MiMo-V2.6-Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"mimo-v2.5-tts":{"id":"mimo-v2.5-tts","type":"speech","name":"MiMo-V2.5-TTS","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"mimo","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":8192,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"xiaomi/mimo-v2.5-tts"},"mimo-v2.5-tts-voicedesign":{"id":"mimo-v2.5-tts-voicedesign","type":"speech","name":"MiMo-V2.5-TTS-VoiceDesign","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"mimo","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":8192,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"xiaomi/mimo-v2.5-tts-voicedesign"},"mimo-v2.5-pro":{"id":"mimo-v2.5-pro","name":"MiMo-V2.5-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"mimo-v2.5":{"id":"mimo-v2.5","name":"MiMo-V2.5","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"xiaomi/mimo-v2.5"},"mimo-v2.5-tts-voiceclone":{"id":"mimo-v2.5-tts-voiceclone","type":"speech","name":"MiMo-V2.5-TTS-VoiceClone","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"mimo","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":8192,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"xiaomi/mimo-v2.5-tts-voiceclone"}}},"berget":{"id":"berget","env":["BERGET_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.berget.ai/v1","name":"Berget.AI","doc":"https://api.berget.ai","models":{"google/gemma-4-31B-it":{"id":"google/gemma-4-31B-it","name":"Gemma 4 31B Instruct","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-12","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["audio","image","text","video"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0.280375,"output":0.56075},"canonical_model_id":"google/gemma-4-31b-it"},"mistralai/Mistral-Small-3.2-24B-Instruct-2506":{"id":"mistralai/Mistral-Small-3.2-24B-Instruct-2506","name":"Mistral Small 3.2 24B Instruct 2506","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2025-06-20","last_updated":"2025-06-20","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":8192},"cost":{"input":0.33645,"output":0.33645},"canonical_model_id":"mistral/mistral-small-3.2-24b-instruct"},"moonshotai/Kimi-K3":{"id":"moonshotai/Kimi-K3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":327680,"output":32768},"cost":{"input":3.3645,"output":16.8225,"cache_read":1.00935},"canonical_model_id":"moonshotai/kimi-k3"},"Qwen/Qwen3.8-27B-FP8":{"id":"Qwen/Qwen3.8-27B-FP8","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.46,"output":3.48},"canonical_model_id":"alibaba/qwen3.8-27b"},"zai-org/GLM-5.3-Flash":{"id":"zai-org/GLM-5.3-Flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":16384},"cost":{"input":0.29,"output":0.58},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai-org/GLM-5.2":{"id":"zai-org/GLM-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":32768},"status":"deprecated","cost":{"input":1.54,"output":4.84},"canonical_model_id":"zhipuai/glm-5.2"}}},"github-copilot":{"id":"github-copilot","env":["GITHUB_TOKEN"],"npm":"@ai-sdk/openai-compatible","api":"https://api.githubcopilot.com","name":"GitHub Copilot","doc":"https://docs.github.com/en/copilot","models":{"gpt-5.5":{"id":"gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"status":"deprecated","provider":{"npm":"@ai-sdk/openai"},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"gemini-3.8-flash":{"id":"gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":936000,"output":64000},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.8-flash"},"gemini-4-carbon":{"id":"gemini-4-carbon","name":"Gemini 4 Carbon","description":"Google's most capable reasoning model for complex software engineering, deep math and science, high factual accuracy, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":10,"cache_read":0.1},"canonical_model_id":"google/gemini-4-carbon"},"grok-4.5":{"id":"grok-4.5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"input":372000,"output":128000},"provider":{"npm":"@ai-sdk/openai"},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.5"},"mai-code-1.1-flash":{"id":"mai-code-1.1-flash","name":"MAI-Code-1.1-Flash","description":"Microsoft coding model with native vision support, optimized for fast and efficient software development","family":"mai","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"input":128000,"output":128000},"provider":{"npm":"@ai-sdk/openai"},"cost":{"input":0.2,"output":1.2,"cache_read":0.02},"canonical_model_id":"microsoft/mai-code-1.1-flash"},"gpt-5.4-mini":{"id":"gpt-5.4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","provider":{"npm":"@ai-sdk/openai"},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"claude-opus-4.7":{"id":"claude-opus-4.7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":168000,"output":32000},"status":"deprecated","experimental":{"modes":{"fast":{"cost":{"input":30,"output":150,"cache_read":3,"cache_write":37.5},"provider":{"body":{"speed":"fast"},"headers":{"anthropic-beta":"fast-mode-2026-02-01"}}}}},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.githubcopilot.com/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"claude-opus-4.8":{"id":"claude-opus-4.8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":168000,"output":64000},"experimental":{"modes":{"fast":{"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"provider":{"body":{"speed":"fast"},"headers":{"anthropic-beta":"fast-mode-2026-02-01"}}}}},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.githubcopilot.com/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"claude-opus-5.5":{"id":"claude-opus-5.5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.githubcopilot.com/v1"},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"claude-haiku-4.5":{"id":"claude-haiku-4.5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024,"max":32000}],"tool_call":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":136000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.githubcopilot.com/v1"},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai"},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"gemini-3.5-flash":{"id":"gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]},{"type":"budget_tokens","min":256,"max":24000}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":128000,"output":64000},"status":"deprecated","cost":{"input":1.5,"output":9,"cache_read":0.15,"input_audio":1.5},"canonical_model_id":"google/gemini-3.5-flash"},"claude-sonnet-5":{"id":"claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.githubcopilot.com/v1"},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"gpt-6.1-terra":{"id":"gpt-6.1-terra","name":"GPT-6.1 Terra","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai"},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25,"tiers":[{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5}},"canonical_model_id":"openai/gpt-6.1-terra"},"gemini-3.6-flash":{"id":"gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]},{"type":"budget_tokens","min":256,"max":32000}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":936000,"output":64000},"status":"deprecated","cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.6-flash"},"gpt-6-luna":{"id":"gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai"},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"grok-4.7":{"id":"grok-4.7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"input":372000,"output":128000},"provider":{"npm":"@ai-sdk/openai"},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.7"},"claude-fable-5.2":{"id":"claude-fable-5.2","name":"Claude Fable 5.2","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.githubcopilot.com/v1"},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"claude-fable-5.1":{"id":"claude-fable-5.1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.githubcopilot.com/v1"},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"gpt-6-sol":{"id":"gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai"},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"gemini-4-argon":{"id":"gemini-4-argon","name":"Gemini 4 Argon","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":10,"cache_read":0.1},"canonical_model_id":"google/gemini-4-argon"},"gpt-5.3-codex":{"id":"gpt-5.3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai"},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"claude-sonnet-4.6":{"id":"claude-sonnet-4.6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024,"max":32000}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"input":168000,"output":32000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.githubcopilot.com/v1"},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"claude-fable-5":{"id":"claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.githubcopilot.com/v1"},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"gpt-6-astra":{"id":"gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai"},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":224000,"output":32000},"status":"deprecated","cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"gpt-5-mini":{"id":"gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":264000,"input":128000,"output":64000},"status":"deprecated","cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"claude-opus-5":{"id":"claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":936000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.githubcopilot.com/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai"},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"claude-sonnet-5.5":{"id":"claude-sonnet-5.5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.githubcopilot.com/v1"},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"gpt-6.1-sol":{"id":"gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai"},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-sol"},"claude-haiku-5.5":{"id":"claude-haiku-5.5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.githubcopilot.com/v1"},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"status":"deprecated","provider":{"npm":"@ai-sdk/openai"},"cost":{"input":2.5,"output":15,"cache_read":0.25,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5}},"canonical_model_id":"openai/gpt-5.4"},"gpt-5.4-nano":{"id":"gpt-5.4-nano","name":"GPT-5.4 nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai"},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"grok-4.6":{"id":"grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"input":372000,"output":128000},"provider":{"npm":"@ai-sdk/openai"},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.6"},"gpt-5.6-terra":{"id":"gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai"},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"gemini-3.7-flash":{"id":"gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":936000,"output":64000},"status":"deprecated","cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.7-flash"}}},"xpersona":{"id":"xpersona","env":["XPERSONA_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://www.xpersona.co/v1","name":"Xpersona","doc":"https://www.xpersona.co/docs","models":{"gpt-5.5":{"id":"gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":1.5,"output":12,"reasoning":12,"cache_read":0.15},"canonical_model_id":"openai/gpt-5.5"},"xpersona-gpt-5.5":{"id":"xpersona-gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-12-30","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"status":"deprecated","cost":{"input":3,"output":18,"reasoning":18,"cache_read":0.3},"canonical_model_id":"openai/gpt-5.5"},"gpt-5.4-mini":{"id":"gpt-5.4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":272000,"output":128000},"cost":{"input":0.375,"output":4,"reasoning":4,"cache_read":0.0375},"canonical_model_id":"openai/gpt-5.4-mini"},"xpersona-frieren-coder":{"id":"xpersona-frieren-coder","name":"Xpersona Frieren 1","description":"Coding model for repository understanding, refactors, and agentic engineering tasks","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-30","release_date":"2026-05-01","last_updated":"2026-05-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":384000},"cost":{"input":1.5,"output":6,"reasoning":6,"cache_read":0.15}},"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":372000,"output":128000},"cost":{"input":1.5,"output":12,"reasoning":12,"cache_read":0.15},"canonical_model_id":"openai/gpt-5.6-sol"},"gemini-3.5-flash":{"id":"gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":1.55,"output":12.2,"reasoning":12.2,"cache_read":0.155},"canonical_model_id":"google/gemini-3.5-flash"},"gpt-5.6":{"id":"gpt-5.6","name":"GPT-5.6","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":372000,"output":128000},"cost":{"input":1.5,"output":12,"reasoning":12,"cache_read":0.15},"canonical_model_id":"openai/gpt-5.6-sol"},"claude-fable-5":{"id":"claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":3,"output":18.5,"reasoning":18.5,"cache_read":0.3},"canonical_model_id":"anthropic/claude-fable-5"},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":0.75,"output":6,"reasoning":6,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4"},"claude-opus-4-8":{"id":"claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":128000},"cost":{"input":1.5,"output":9.25,"reasoning":9.25,"cache_read":0.15},"canonical_model_id":"anthropic/claude-opus-4-8"},"gpt-5.6-terra":{"id":"gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":372000,"output":128000},"cost":{"input":1.5,"output":2,"reasoning":2,"cache_read":0.15},"canonical_model_id":"openai/gpt-5.6-terra"},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":128000},"cost":{"input":0.9,"output":5.55,"reasoning":5.55,"cache_read":0.09},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"claude-haiku-4-5":{"id":"claude-haiku-4-5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":128000},"cost":{"input":0.6,"output":3.7,"reasoning":3.7,"cache_read":0.06},"canonical_model_id":"anthropic/claude-haiku-4-5"}}},"oci":{"id":"oci","env":["OCI_GENAI_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/openai/v1","name":"OCI Generative AI","doc":"https://docs.oracle.com/en-us/iaas/Content/generative-ai/pretrained-models.htm","models":{"xai.grok-4.20-non-reasoning":{"id":"xai.grok-4.20-non-reasoning","name":"Grok 4.20 (Non-Reasoning)","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.20-0309-non-reasoning"},"openai.gpt-oss-120b":{"id":"openai.gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"openai/gpt-oss-120b"},"meta.llama-4-scout-17b-16e-instruct":{"id":"meta.llama-4-scout-17b-16e-instruct","name":"Llama 4 Scout 17B Instruct","description":"Open Llama with long-context vision for efficient multimodal agents","family":"llama","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":192000,"output":16384},"cost":{"input":0.72,"output":0.72},"canonical_model_id":"meta/llama-4-scout-17b-instruct"},"xai.grok-4.6":{"id":"xai.grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.6"},"xai.grok-4.3":{"id":"xai.grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.3"},"meta.llama-4-maverick-17b-128e-instruct-fp8":{"id":"meta.llama-4-maverick-17b-128e-instruct-fp8","name":"Llama 4 Maverick 17B Instruct","description":"Open multimodal Llama for strong reasoning with efficient everyday serving","family":"llama","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":512000,"output":16384},"cost":{"input":0.72,"output":0.72},"canonical_model_id":"meta/llama-4-maverick-17b-instruct"},"openai.gpt-oss-20b":{"id":"openai.gpt-oss-20b","name":"GPT OSS 20B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.07,"output":0.3},"canonical_model_id":"openai/gpt-oss-20b"},"meta.llama-3.3-70b-instruct":{"id":"meta.llama-3.3-70b-instruct","name":"Llama-3.3-70B-Instruct","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"status":"deprecated","cost":{"input":0.72,"output":0.72},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"xai.grok-4.20-reasoning":{"id":"xai.grok-4.20-reasoning","name":"Grok 4.20 (Reasoning)","description":"Reasoning Grok for document-heavy analysis and long-horizon tool use","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.20-0309-reasoning"}}},"opper":{"id":"opper","env":["OPPER_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.opper.ai/v3/compat","name":"Opper","doc":"https://opper.ai/models","models":{"gpt-5.5":{"id":"gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"muse-spark-1.3":{"id":"muse-spark-1.3","name":"Muse Spark 1.3","description":"Muse Spark 1.3 is a multimodal reasoning model from Meta for long-running agentic, multi-agent, and coding workflows. It improves long-horizon agent collaboration, instruction following, and coding efficiency relative to Muse Spark 1.2.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.3"},"claude-fable-5-1":{"id":"claude-fable-5-1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"gemini-3.8-flash":{"id":"gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.825,"output":4.125,"cache_read":0.0825},"canonical_model_id":"google/gemini-3.8-flash"},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.62708,"output":5.811},"canonical_model_id":"zhipuai/glm-5.2"},"claude-opus-4-5":{"id":"claude-opus-4-5","name":"Claude Opus 4.5 (latest)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"grok-4.5":{"id":"grok-4.5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.5"},"gpt-5.4-mini":{"id":"gpt-5.4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"grok-4.3":{"id":"grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2},"canonical_model_id":"xai/grok-4.3"},"sonar-pro":{"id":"sonar-pro","name":"Sonar Pro","description":"Deeper Sonar search model with broader retrieval and stronger synthesis","family":"sonar-pro","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-09-01","release_date":"2024-01-01","last_updated":"2025-09-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8000},"cost":{"input":3,"output":15},"canonical_model_id":"perplexity/sonar-pro"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15},"canonical_model_id":"moonshotai/kimi-k3"},"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"cache_write":6.25,"tiers":[{"input":10,"output":45,"cache_read":1,"cache_write":12.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1,"cache_write":12.5}},"canonical_model_id":"openai/gpt-5.6-sol"},"gemini-3.5-flash":{"id":"gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"cache_read":0.15},"canonical_model_id":"google/gemini-3.5-flash"},"claude-sonnet-5":{"id":"claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":2.2,"output":11,"cache_read":0.22,"cache_write":2.75},"canonical_model_id":"anthropic/claude-sonnet-5"},"mistral-large-2512":{"id":"mistral-large-2512","name":"Mistral Large 3","description":"Mistral's largest general model for enterprise agents, coding, and multilingual reasoning","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-11","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":8192},"cost":{"input":0.5,"output":1.5},"canonical_model_id":"mistral/mistral-large-2512"},"qwen3.8-27b":{"id":"qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.5811,"output":3},"canonical_model_id":"alibaba/qwen3.8-27b"},"sonar":{"id":"sonar","name":"Sonar","description":"Fast web-grounded Sonar for current answers, citations, and lightweight retrieval","family":"sonar","attachment":false,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":true,"knowledge":"2025-09-01","release_date":"2024-01-01","last_updated":"2025-09-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"cost":{"input":1,"output":1},"canonical_model_id":"perplexity/sonar"},"gpt-oss-20b":{"id":"gpt-oss-20b","name":"GPT OSS 20B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0.11622,"output":0.488124},"canonical_model_id":"openai/gpt-oss-20b"},"gemini-3.1-pro-preview":{"id":"gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"mistral-small-2603":{"id":"mistral-small-2603","name":"Mistral Small 4","description":"Fast Mistral production model for chat, extraction, and cost-sensitive agents","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":8192},"cost":{"input":0.5811,"output":2.44062},"canonical_model_id":"mistral/mistral-small-2603"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":65536},"cost":{"input":1.78812,"output":3.57624},"canonical_model_id":"deepseek/deepseek-v4-pro"},"sonar-reasoning-pro":{"id":"sonar-reasoning-pro","name":"Sonar Reasoning Pro","description":"Web-grounded Sonar for multi-step research questions that need cited reasoning","family":"sonar-reasoning","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-09-01","release_date":"2024-01-01","last_updated":"2025-09-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"cost":{"input":2,"output":8},"canonical_model_id":"perplexity/sonar-reasoning-pro"},"qwen3.8-2.4t-a95b":{"id":"qwen3.8-2.4t-a95b","name":"Qwen3.8 2.4T A95B","description":"Open-weight sparse MoE (2.4T total, 95B active), the open-weight twin of Qwen3.8 Max for coding, research, complex reasoning, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":2.5,"output":6,"cache_read":0.63},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.75,"output":4.6488,"cache_read":0.44},"canonical_model_id":"zhipuai/glm-5.3"},"gpt-5.3-codex":{"id":"gpt-5.3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"claude-fable-5":{"id":"claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"minimax-m3":{"id":"minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.6,"output":2.4,"cache_read":0.12,"tiers":[{"input":1.2,"output":4.8,"cache_read":0.24,"tier":{"type":"context","size":524288}}],"context_over_200k":{"input":1.2,"output":4.8,"cache_read":0.24}},"canonical_model_id":"minimax/MiniMax-M3"},"gpt-6-astra":{"id":"gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"gpt-5.5-pro":{"id":"gpt-5.5-pro","name":"GPT-5.5 Pro","description":"Highest-accuracy GPT-5.5 tier for slower, precision-heavy reasoning and coding","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180},"canonical_model_id":"openai/gpt-5.5-pro"},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.25,"output":0.66},"canonical_model_id":"deepseek/deepseek-v4-flash"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":0.2,"output":0.5,"cache_read":0.07},"canonical_model_id":"zhipuai/glm-5.3-flash"},"claude-opus-5":{"id":"claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-5"},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"gemini-3.5-flash-lite":{"id":"gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03},"canonical_model_id":"google/gemini-3.5-flash-lite"},"gemma-4-31b-it":{"id":"gemma-4-31b-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":8192},"cost":{"input":0.46488,"output":2.44062},"canonical_model_id":"google/gemma-4-31b-it"},"gpt-5.4-pro":{"id":"gpt-5.4-pro","name":"GPT-5.4 Pro","description":"More exact GPT-5.4 tier for demanding professional reasoning and agent tasks","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.4-pro"},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5}},"canonical_model_id":"openai/gpt-5.4"},"gemini-3-flash-preview":{"id":"gemini-3-flash-preview","name":"Gemini 3 Flash Preview","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.05},"canonical_model_id":"google/gemini-3-flash-preview"},"qwen3.6-35b-a3b":{"id":"qwen3.6-35b-a3b","name":"Qwen3.6 35B-A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.248,"output":1.485},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"claude-opus-4-6":{"id":"claude-opus-4-6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"gpt-5.4-nano":{"id":"gpt-5.4-nano","name":"GPT-5.4 nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"grok-4.6":{"id":"grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.6"},"qwen3-coder-next":{"id":"qwen3-coder-next","name":"Qwen3 Coder Next","description":"Open-weight Qwen coding model for agents, repository edits, and multi-turn tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-02-03","last_updated":"2026-02-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"status":"deprecated","cost":{"input":0.5811,"output":2.3244},"canonical_model_id":"alibaba/qwen3-coder-next"},"claude-opus-4-8":{"id":"claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"grok-build-0.1":{"id":"grok-build-0.1","name":"Grok Build 0.1","description":"Fast Grok coding model tuned for agentic engineering and iterative edits","family":"grok-build","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":1,"output":2,"cache_read":0.2},"canonical_model_id":"xai/grok-build-0.1"},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":1.1622,"output":4.88124},"canonical_model_id":"openai/gpt-oss-120b"},"gpt-5.6-terra":{"id":"gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"minimax-m2.7":{"id":"minimax-m2.7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"output":131072},"cost":{"input":0.69732,"output":2.78928},"canonical_model_id":"minimax/MiniMax-M2.7"},"qwen3.8-max":{"id":"qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":983616,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.8-max"},"claude-sonnet-4-5":{"id":"claude-sonnet-4-5","name":"Claude Sonnet 4.5 (latest)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3.3,"output":16.5,"cache_read":0.33,"cache_write":4.125,"tiers":[{"input":6.6,"output":24.75,"cache_read":0.66,"cache_write":8.25,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":6.6,"output":24.75,"cache_read":0.66,"cache_write":8.25}},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3.3,"output":16.5,"cache_read":0.33,"cache_write":4.125},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"muse-spark-1.2":{"id":"muse-spark-1.2","name":"Muse Spark 1.2","description":"Muse Spark 1.2 is a coding-focused update to Muse Spark 1.1 with improvements in code generation, complex debugging, codebase understanding, and end-to-end developer workflows.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.2"},"claude-opus-4-7":{"id":"claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":5.5,"output":27.5,"cache_read":0.55,"cache_write":6.875},"canonical_model_id":"anthropic/claude-opus-4-7"},"gemini-3.7-flash":{"id":"gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.7-flash"},"claude-haiku-4-5":{"id":"claude-haiku-4-5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1.1,"output":5.5,"cache_read":0.11,"cache_write":1.375},"canonical_model_id":"anthropic/claude-haiku-4-5"}}},"liquid":{"id":"liquid","env":["LIQUID_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://router.inference.ai.exchange/v1","name":"Liquid Inference","doc":"https://inference.ai.exchange/docs","models":{"liquid.auto":{"id":"liquid.auto","name":"Liquid Auto","description":"Routes each request to the lowest-priced eligible offer on the Liquid Inference exchange","family":"auto","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-20","last_updated":"2026-10-20","modalities":{"input":["text","image","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":10000000,"output":1048576}}}},"fastrouter":{"id":"fastrouter","env":["FASTROUTER_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://go.fastrouter.ai/api/v1","name":"FastRouter","doc":"https://fastrouter.ai/models","models":{"anthropic/claude-opus-4.8":{"id":"anthropic/claude-opus-4.8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic/claude-opus-4.1":{"id":"anthropic/claude-opus-4.1","name":"Claude Opus 4.1","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024,"max":32000}],"tool_call":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-1-20250805"},"anthropic/claude-sonnet-4.6":{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024,"max":32000}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"x-ai/grok-4.3":{"id":"x-ai/grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5}},"canonical_model_id":"xai/grok-4.3"},"x-ai/grok-4":{"id":"x-ai/grok-4","name":"Grok 4","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-07","release_date":"2025-07-09","last_updated":"2025-07-09","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":64000},"status":"deprecated","cost":{"input":3,"output":15,"cache_read":0.75,"cache_write":15}},"x-ai/grok-build-0.1":{"id":"x-ai/grok-build-0.1","name":"Grok Build 0.1","description":"Fast Grok coding model tuned for agentic engineering and iterative edits","family":"grok-build","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":1,"output":2,"cache_read":0.2,"tiers":[{"input":2,"output":4,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2,"output":4,"cache_read":0.4}},"canonical_model_id":"xai/grok-build-0.1"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":1.74,"output":3.48,"cache_read":0.145},"canonical_model_id":"deepseek/deepseek-v4-pro"},"google/veo3.1":{"id":"google/veo3.1","type":"video","name":"Veo 3.1","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"veo","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-10-15","last_updated":"2026-01","modalities":{"input":["text","image"],"output":["video"]},"open_weights":false,"limit":{"context":400000,"output":0},"canonical_model_id":"google/veo-3.1-generate-preview"},"google/gemini-2.5-flash":{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":0,"max":24576}],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"input_audio":1},"canonical_model_id":"google/gemini-2.5-flash"},"google/gemini-3.1-flash-image-preview":{"id":"google/gemini-3.1-flash-image-preview","type":"image","name":"Nano Banana 2 Preview","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-26","last_updated":"2026-02-26","modalities":{"input":["text","image","pdf"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":65536},"cost":{"input":0.5,"output":3},"canonical_model_id":"google/gemini-3.1-flash-image-preview"},"google/veo3.1-fast":{"id":"google/veo3.1-fast","type":"video","name":"Veo 3.1 Fast","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"veo","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-10-15","last_updated":"2026-01-01","modalities":{"input":["text","image"],"output":["video"]},"open_weights":false,"limit":{"context":400000,"output":0},"canonical_model_id":"google/veo-3.1-fast-generate-preview"},"google/gemini-2.5-pro":{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.25,"output":10,"cache_read":0.125,"tiers":[{"input":2.5,"output":15,"cache_read":0.25,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":15,"cache_read":0.25}},"canonical_model_id":"google/gemini-2.5-pro"},"google/gemini-3.5-flash":{"id":"google/gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"cache_read":0.15},"canonical_model_id":"google/gemini-3.5-flash"},"google/veo3.1-lite":{"id":"google/veo3.1-lite","type":"video","name":"Veo 3.1 Lite","description":"Video model for prompt-guided generation, editing, and motion workflows","family":"veo","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-03-31","last_updated":"2026-03-31","modalities":{"input":["text","image"],"output":["video"]},"open_weights":false,"limit":{"context":400000,"output":0},"canonical_model_id":"google/veo-3.1-lite-generate-preview"},"google/gemini-3.1-pro-preview":{"id":"google/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"google/gemini-3-pro-image-preview":{"id":"google/gemini-3-pro-image-preview","type":"image","name":"Nano Banana Pro Preview","description":"Nano Banana Pro for higher-fidelity image generation and design-heavy edits","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-11-20","last_updated":"2025-11-20","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":32768},"cost":{"input":2,"output":12},"canonical_model_id":"google/gemini-3-pro-image-preview"},"google/gemma-4-31b-it":{"id":"google/gemma-4-31b-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.1,"output":0.3},"canonical_model_id":"google/gemma-4-31b-it"},"bytedance/seedance-2":{"id":"bytedance/seedance-2","type":"video","name":"Seedance 2","description":"ByteDance unified multimodal audio-video model supporting text, image, video and audio references, editing, extension and synchronized stereo sound.","family":"seed","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-02-12","last_updated":"2026-10-04","modalities":{"input":["text","image"],"output":["video"]},"open_weights":false,"limit":{"context":4096,"output":0},"canonical_model_id":"bytedance-seed/seedance-2.0"},"leonardo-ai/lucid-realism":{"id":"leonardo-ai/lucid-realism","type":"image","name":"Lucid Realism","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"lucid","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-06-01","last_updated":"2025-06-01","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":4096,"output":0}},"leonardo-ai/lucid-origin":{"id":"leonardo-ai/lucid-origin","type":"image","name":"Lucid Origin","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"lucid","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-06-01","last_updated":"2025-06-01","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":4096,"output":0}},"wanx/wan-v2-6":{"id":"wanx/wan-v2-6","type":"video","name":"Wan 2.6","description":"Video model for text- and image-to-video with audio input and synchronized sound","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-12-03","last_updated":"2025-12-03","modalities":{"input":["text","image"],"output":["video"]},"open_weights":false,"limit":{"context":400000,"output":0},"canonical_model_id":"alibaba/wan2.6"},"moonshotai/kimi-k2.6":{"id":"moonshotai/kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.75,"output":3.5,"cache_read":0.15},"canonical_model_id":"moonshotai/kimi-k2.6"},"openai/gpt-5.5":{"id":"openai/gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"openai/gpt-5.4-mini":{"id":"openai/gpt-5.4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"openai/gpt-5":{"id":"openai/gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2024-10-01","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"openai/gpt-4.1":{"id":"openai/gpt-4.1","name":"GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"openai/gpt-image-2":{"id":"openai/gpt-image-2","type":"image","name":"GPT Image 2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-21","last_updated":"2026-04-21","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":128000,"output":0},"canonical_model_id":"openai/gpt-image-2"},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT OSS 20B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.07,"output":0.25,"cache_read":0.007},"canonical_model_id":"openai/gpt-oss-20b"},"openai/gpt-5.3-codex":{"id":"openai/gpt-5.3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"openai/gpt-5-mini":{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-10-01","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"openai/gpt-5.5-pro":{"id":"openai/gpt-5.5-pro","name":"GPT-5.5 Pro","description":"Highest-accuracy GPT-5.5 tier for slower, precision-heavy reasoning and coding","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.5-pro"},"openai/gpt-5-nano":{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2024-10-01","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-nano"},"openai/gpt-5.4-nano":{"id":"openai/gpt-5.4-nano","name":"GPT-5.4 nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.09,"output":0.36},"canonical_model_id":"openai/gpt-oss-120b"},"minimax/minimax-m2.7-highspeed":{"id":"minimax/minimax-m2.7-highspeed","name":"MiniMax-M2.7-highspeed","description":"Low-latency M2.7 variant for interactive coding plans and agent loops","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.4,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.7-highspeed"},"minimax/minimax-m2.7":{"id":"minimax/minimax-m2.7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.7"},"z-ai/glm-5.1":{"id":"z-ai/glm-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":1.05,"output":3.5,"cache_read":0.205},"canonical_model_id":"zhipuai/glm-5.1"},"z-ai/glm-5":{"id":"z-ai/glm-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.08,"cache_read":0.12},"canonical_model_id":"zhipuai/glm-5"},"sarvam/sarvam-105b":{"id":"sarvam/sarvam-105b","name":"Sarvam 105B","description":"Flagship Indian-language reasoning model for enterprise multilingual applications","family":"sarvam","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-02-18","last_updated":"2026-02-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.04,"output":0.16,"cache_read":0.025},"canonical_model_id":"sarvam/sarvam-105b"}}},"scnet-token-plan":{"id":"scnet-token-plan","env":["SCNET_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.scnet.cn/api/llm/v1","name":"SCNet Token Plan","doc":"https://www.scnet.cn/ac/openapi/doc/2.0/moduleapi/plans/token-plan.html","models":{"Kimi-K3":{"id":"Kimi-K3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"moonshotai/kimi-k3"},"DeepSeek-V4-Flash":{"id":"DeepSeek-V4-Flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"deepseek/deepseek-v4-flash"},"GLM-5.3-Flash":{"id":"GLM-5.3-Flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"zhipuai/glm-5.3-flash"},"Kimi-K2.7-Code":{"id":"Kimi-K2.7-Code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"DeepSeek-V4-Flash-0731":{"id":"DeepSeek-V4-Flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"GLM-5.2":{"id":"GLM-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"zhipuai/glm-5.2"},"MiniMax-M2.5":{"id":"MiniMax-M2.5","name":"MiniMax-M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"minimax/MiniMax-M2.5"},"MiniMax-M2.7":{"id":"MiniMax-M2.7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"minimax/MiniMax-M2.7"},"Kimi-K2.5":{"id":"Kimi-K2.5","name":"Kimi K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"moonshotai/kimi-k2.5"},"GLM-5.3":{"id":"GLM-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"zhipuai/glm-5.3"},"Kimi-K2.6":{"id":"Kimi-K2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"moonshotai/kimi-k2.6"},"Qwen3.8-Flash":{"id":"Qwen3.8-Flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"alibaba/qwen3.8-flash"},"Qwen3.8-Max":{"id":"Qwen3.8-Max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"alibaba/qwen3.8-max"},"GLM-5":{"id":"GLM-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"zhipuai/glm-5"},"GLM-5.1":{"id":"GLM-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"zhipuai/glm-5.1"},"MiniMax-M3":{"id":"MiniMax-M3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":512000},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"minimax/MiniMax-M3"},"DeepSeek-V4-Pro":{"id":"DeepSeek-V4-Pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"deepseek/deepseek-v4-pro"},"DeepSeek-V4.1-Flash":{"id":"DeepSeek-V4.1-Flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"DeepSeek-V4-Pro-0813":{"id":"DeepSeek-V4-Pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"}}},"hetzner":{"id":"hetzner","env":["HETZNER_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://inference.hetzner.com/api/v1","name":"Hetzner","doc":"https://experiments.hetzner.com/docs/inference","models":{"Qwen3.8-27B":{"id":"Qwen3.8-27B","name":"Qwen3.8-27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"beta","cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"alibaba/qwen3.8-27b"},"Qwen/Qwen3.6-35B-A3B-FP8":{"id":"Qwen/Qwen3.6-35B-A3B-FP8","name":"Qwen3.6 35B A3B FP8","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"beta","cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"}}},"sap-ai-core":{"id":"sap-ai-core","env":["AICORE_SERVICE_KEY"],"npm":"@jerome-benoit/sap-ai-provider-v2","name":"SAP AI Core","doc":"https://help.sap.com/docs/sap-ai-core","models":{"amazon--titan-embed-text":{"id":"amazon--titan-embed-text","name":"amazon--titan-embed-text","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-04-30","last_updated":"2024-04-30","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":1536},"cost":{"input":0.02,"output":0}},"gpt-5.5":{"id":"gpt-5.5","name":"gpt-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"openai/gpt-5.5"},"gemini-embedding":{"id":"gemini-embedding","type":"embedding","name":"Gemini Embedding 001","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"gemini","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2025-05","release_date":"2025-05-20","last_updated":"2025-05-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":2048,"output":1},"canonical_model_id":"google/gemini-embedding-001"},"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"gemini-2.5-flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":0,"max":24576}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":0.3,"output":2.5,"cache_read":0.03,"input_audio":1},"canonical_model_id":"google/gemini-2.5-flash"},"gpt-4.1-nano":{"id":"gpt-4.1-nano","name":"gpt-4.1-nano","description":"Tiny GPT-4.1 option for classification, routing, and very high-volume tasks","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"status":"deprecated","cost":{"input":0.1,"output":0.4},"canonical_model_id":"openai/gpt-4.1-nano"},"gemini-3.8-flash":{"id":"gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"canonical_model_id":"google/gemini-3.8-flash"},"amazon--nova-lite":{"id":"amazon--nova-lite","name":"amazon--nova-lite","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"nova","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-10","release_date":"2025-12-02","last_updated":"2025-12-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.3,"output":2.5},"canonical_model_id":"amazon/nova-2-lite"},"anthropic--claude-4.5-haiku":{"id":"anthropic--claude-4.5-haiku","name":"anthropic--claude-4.5-haiku","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"anthropic--claude-3-haiku":{"id":"anthropic--claude-3-haiku","name":"anthropic--claude-3-haiku","description":"Legacy model retained for compatibility with older integrations","family":"claude-haiku","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-08-31","release_date":"2024-03-13","last_updated":"2024-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":4096},"cost":{"input":0.25,"output":1.25,"cache_read":0.03,"cache_write":0.3},"canonical_model_id":"anthropic/claude-3-haiku-20240307"},"gpt-5.2":{"id":"gpt-5.2","name":"gpt-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"gpt-4.1-mini":{"id":"gpt-4.1-mini","name":"gpt-4.1-mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"status":"deprecated","cost":{"input":0.4,"output":1.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-4.1-mini"},"anthropic--claude-4.6-sonnet":{"id":"anthropic--claude-4.6-sonnet","name":"anthropic--claude-4.6-sonnet","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"anthropic--claude-4.5-sonnet":{"id":"anthropic--claude-4.5-sonnet","name":"anthropic--claude-4.5-sonnet","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"text-embedding-3-large":{"id":"text-embedding-3-large","type":"embedding","name":"text-embedding-3-large","description":"Most capable OpenAI embedding model for English and non-English text","family":"text-embedding","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-01-25","last_updated":"2024-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8191,"output":3072},"cost":{"input":0.13,"output":0},"canonical_model_id":"openai/text-embedding-3-large"},"gpt-5":{"id":"gpt-5","name":"gpt-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"nvidia--llama-nemotron-embed-1b":{"id":"nvidia--llama-nemotron-embed-1b","type":"embedding","name":"Llama Nemotron Embed 1B v2","description":"Multilingual text embedding model for retrieval and question answering pipelines","family":"nemotron","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-10-16","last_updated":"2025-10-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":2048},"canonical_model_id":"nvidia/llama-nemotron-embed-1b-v2"},"mistralai--mistral-medium-instruct":{"id":"mistralai--mistral-medium-instruct","name":"mistralai--mistral-medium-instruct","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-05-07","last_updated":"2025-05-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":128000},"status":"deprecated","cost":{"input":0.4,"output":2},"canonical_model_id":"mistral/mistral-medium-2505"},"mistralai--mistral-medium":{"id":"mistralai--mistral-medium","name":"Mistral Medium 3.5","description":"Balanced Mistral model for enterprise assistants, multilingual work, and tools","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-29","last_updated":"2026-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"canonical_model_id":"mistral/mistral-medium-2604"},"gemini-2.5-pro":{"id":"gemini-2.5-pro","name":"gemini-2.5-pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"google/gemini-2.5-pro"},"sonar-pro":{"id":"sonar-pro","name":"sonar-pro","description":"Deeper Sonar search model with broader retrieval and stronger synthesis","family":"sonar-pro","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2025-09-01","release_date":"2024-01-01","last_updated":"2025-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8192},"cost":{"input":3,"output":15},"canonical_model_id":"perplexity/sonar-pro"},"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"gpt-5.6-sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"tiers":[{"input":8,"output":30,"cache_read":0.8,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8}},"canonical_model_id":"openai/gpt-5.6-sol"},"gemini-3.5-flash":{"id":"gemini-3.5-flash","name":"gemini-3.5-flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"cache_read":0.15,"input_audio":1.5},"canonical_model_id":"google/gemini-3.5-flash"},"gpt-4.1":{"id":"gpt-4.1","name":"gpt-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"status":"deprecated","cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"gemini-3.6-flash":{"id":"gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"canonical_model_id":"google/gemini-3.6-flash"},"anthropic--claude-4.6-opus":{"id":"anthropic--claude-4.6-opus","name":"anthropic--claude-4.6-opus","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"gpt-6-luna":{"id":"gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"canonical_model_id":"openai/gpt-6-luna"},"gemini-embedding-2":{"id":"gemini-embedding-2","type":"embedding","name":"Gemini Embedding 2","description":"Multimodal embedding model mapping text, images, video, audio, and PDFs into a unified embedding space","family":"gemini","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2025-11","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":3072},"canonical_model_id":"google/gemini-embedding-2"},"anthropic--claude-4.7-opus":{"id":"anthropic--claude-4.7-opus","name":"anthropic--claude-4.7-opus","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"sonar":{"id":"sonar","name":"sonar","description":"Fast web-grounded Sonar for current answers, citations, and lightweight retrieval","family":"sonar","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2025-09-01","release_date":"2024-01-01","last_updated":"2025-09-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"cost":{"input":1,"output":1},"canonical_model_id":"perplexity/sonar"},"amazon--nova-micro":{"id":"amazon--nova-micro","name":"amazon--nova-micro","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"nova-micro","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8192},"cost":{"input":0.035,"output":0.14},"canonical_model_id":"amazon/nova-micro"},"anthropic--claude-4-opus":{"id":"anthropic--claude-4-opus","name":"anthropic--claude-4-opus","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"status":"deprecated","cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-20250514"},"text-embedding-3-small":{"id":"text-embedding-3-small","type":"embedding","name":"text-embedding-3-small","description":"Small, efficient OpenAI text embedding model","family":"text-embedding","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-01-25","last_updated":"2024-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8191,"output":1536},"cost":{"input":0.02,"output":0},"canonical_model_id":"openai/text-embedding-3-small"},"anthropic--claude-4-sonnet":{"id":"anthropic--claude-4-sonnet","name":"anthropic--claude-4-sonnet","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-20250514"},"cohere--command-a-reasoning":{"id":"cohere--command-a-reasoning","name":"cohere--command-a-reasoning","description":"Cohere reasoning model for multilingual enterprise agents, tools, and complex workflows","family":"command-a","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]},{"type":"budget_tokens","min":1}],"tool_call":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":32000},"status":"deprecated","cost":{"input":2.5,"output":10},"canonical_model_id":"cohere/command-a-reasoning-08-2025"},"gemini-3.1-flash-lite":{"id":"gemini-3.1-flash-lite","name":"gemini-3.1-flash-lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"input_audio":0.5},"canonical_model_id":"google/gemini-3.1-flash-lite"},"gemini-2.5-flash-lite":{"id":"gemini-2.5-flash-lite","name":"gemini-2.5-flash-lite","description":"Lean Gemini 2.5 lane for cheap multimodal traffic and quick agents","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":512,"max":24576}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":0.1,"output":0.4,"cache_read":0.01,"input_audio":0.3},"canonical_model_id":"google/gemini-2.5-flash-lite"},"gpt-6-astra":{"id":"gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"canonical_model_id":"openai/gpt-6-astra"},"mistralai--mistral-small":{"id":"mistralai--mistral-small","name":"mistralai--mistral-small","description":"Fast Mistral production model for chat, extraction, and cost-sensitive agents","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"status":"deprecated","cost":{"input":0.15,"output":0.6},"canonical_model_id":"mistral/mistral-small-2603"},"gpt-5-mini":{"id":"gpt-5-mini","name":"gpt-5-mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"amazon--nova-pro":{"id":"amazon--nova-pro","name":"amazon--nova-pro","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"nova-pro","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-12-03","last_updated":"2024-12-03","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":300000,"output":8192},"cost":{"input":0.8,"output":3.2},"canonical_model_id":"amazon/nova-pro"},"anthropic--claude-4.8-opus":{"id":"anthropic--claude-4.8-opus","name":"anthropic--claude-4.8-opus","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"gpt-5.6-luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04}},"canonical_model_id":"openai/gpt-5.6-luna"},"gemini-3.5-flash-lite":{"id":"gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"canonical_model_id":"google/gemini-3.5-flash-lite"},"gpt-6.1-sol":{"id":"gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"canonical_model_id":"openai/gpt-6.1-sol"},"anthropic--claude-4.5-opus":{"id":"anthropic--claude-4.5-opus","name":"anthropic--claude-4.5-opus","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"gpt-5-nano":{"id":"gpt-5-nano","name":"gpt-5-nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-nano"},"gpt-5.4":{"id":"gpt-5.4","name":"gpt-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25},"canonical_model_id":"openai/gpt-5.4"},"gpt-5.6-terra":{"id":"gpt-5.6-terra","name":"gpt-5.6-terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"openai/gpt-5.6-terra"},"nvidia--llama-3.2-nv-embedqa-1b":{"id":"nvidia--llama-3.2-nv-embedqa-1b","name":"nvidia--llama-3.2-nv-embedqa-1b","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":4096},"status":"deprecated"},"sonar-deep-research":{"id":"sonar-deep-research","name":"sonar-deep-research","description":"Sonar search model for autonomous research and citation-backed long-form reports","family":"sonar","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":false,"temperature":false,"knowledge":"2025-01","release_date":"2025-02-01","last_updated":"2025-09-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32768},"cost":{"input":2,"output":8,"reasoning":3},"canonical_model_id":"perplexity/sonar-deep-research"},"sap-abap-1":{"id":"sap-abap-1","name":"sap-abap-1","description":"SAP-hosted model for ABAP code generation and enterprise development tasks","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-11-26","last_updated":"2025-11-26","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":4096},"status":"deprecated"}}},"umans-ai":{"id":"umans-ai","env":["UMANS_AI_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.code.umans.ai/v1","name":"Umans AI","doc":"https://app.umans.ai/offers/code/docs/orgs","models":{"umans-deepseek-v4.1-flash":{"id":"umans-deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393215},"cost":{"input":0.15,"output":0.6,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"umans-glm-5.3":{"id":"umans-glm-5.3","name":"GLM 5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131071},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"umans-deepseek-v4.1-flash-1017":{"id":"umans-deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393215},"cost":{"input":0.15,"output":0.6,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"umans-glm-5.3-flash":{"id":"umans-glm-5.3-flash","name":"GLM 5.3 Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131071},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"umans-coder":{"id":"umans-coder","name":"Umans Coder","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131071},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"umans-flash":{"id":"umans-flash","name":"Umans Flash","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.15,"output":1,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"umans-kimi-k3":{"id":"umans-kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"umans-deepseek-v4-flash-0731":{"id":"umans-deepseek-v4-flash-0731","name":"DeepSeek V4 Flash","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393215},"cost":{"input":0.14,"output":0.28,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"}}},"lilac":{"id":"lilac","env":["LILAC_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.getlilac.com/v1","name":"Lilac","doc":"https://docs.getlilac.com/inference/models","models":{"minimaxai/minimax-m3":{"id":"minimaxai/minimax-m3","name":"MiniMax M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"status":"deprecated","cost":{"input":0.28,"output":1.1,"cache_read":0.05},"canonical_model_id":"minimax/MiniMax-M3"},"google/gemma-4-31b-it":{"id":"google/gemma-4-31b-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262100,"output":262100},"status":"deprecated","cost":{"input":0.11,"output":0.35},"canonical_model_id":"google/gemma-4-31b-it"},"moonshotai/kimi-k2.6":{"id":"moonshotai/kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0.7,"output":3.5,"cache_read":0.2},"canonical_model_id":"moonshotai/kimi-k2.6"},"zai-org/glm-5.2":{"id":"zai-org/glm-5.2","name":"GLM 5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":524288},"status":"deprecated","cost":{"input":0.9,"output":3,"cache_read":0.27},"canonical_model_id":"zhipuai/glm-5.2"}}},"commandcode":{"id":"commandcode","env":["CMD_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.commandcode.ai/provider/v1","name":"CommandCode","doc":"https://commandcode.ai/docs/provider","models":{"gpt-5.5":{"id":"gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"cache_write":0},"canonical_model_id":"openai/gpt-5.5"},"claude-sonnet-5-5":{"id":"claude-sonnet-5-5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic"},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"claude-fable-5-1":{"id":"claude-fable-5-1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic"},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"gpt-5.4-mini":{"id":"gpt-5.4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075,"cache_write":0},"canonical_model_id":"openai/gpt-5.4-mini"},"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"cache_write":6.25,"tiers":[{"input":10,"output":45,"cache_read":1,"cache_write":12.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1,"cache_write":12.5}},"canonical_model_id":"openai/gpt-5.6-sol"},"claude-sonnet-5":{"id":"claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic"},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"gpt-6.1-terra":{"id":"gpt-6.1-terra","name":"GPT-6.1 Terra","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25,"tiers":[{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5}},"canonical_model_id":"openai/gpt-6.1-terra"},"gpt-6-luna":{"id":"gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"gpt-6-sol":{"id":"gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"gpt-5.3-codex":{"id":"gpt-5.3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":2,"output":8,"cache_read":0.5,"cache_write":0},"canonical_model_id":"openai/gpt-5.3-codex"},"claude-fable-5":{"id":"claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic"},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"gpt-6-astra":{"id":"gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"claude-haiku-4-5-20251001":{"id":"claude-haiku-4-5-20251001","name":"Claude Haiku 4.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic"},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"claude-opus-5":{"id":"claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"gpt-6.1-sol":{"id":"gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-sol"},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25,"cache_write":0},"canonical_model_id":"openai/gpt-5.4"},"claude-opus-4-8":{"id":"claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"gpt-5.6-terra":{"id":"gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"claude-opus-5-5":{"id":"claude-opus-5-5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic"},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"claude-haiku-5-5":{"id":"claude-haiku-5-5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic"},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic"},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"claude-opus-4-7":{"id":"claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"mistral/mistral-large-4":{"id":"mistral/mistral-large-4","name":"Mistral Large 4","description":"Mistral's 1T-parameter multimodal MoE for reasoning, coding, and agentic work","family":"mistral-large","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-06","last_updated":"2026-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"output":262144},"cost":{"input":1.36,"output":4.18,"cache_read":0.14},"canonical_model_id":"mistral/mistral-large-4"},"deepseek/deepseek-v4-flash-fast":{"id":"deepseek/deepseek-v4-flash-fast","name":"DeepSeek V4 Flash Fast","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.28,"output":0.56,"cache_read":0.07},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek/deepseek-v4.1-flash-fast":{"id":"deepseek/deepseek-v4.1-flash-fast","name":"DeepSeek V4.1 Flash Fast","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.16,"output":0.58,"cache_read":0.016},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek/deepseek-v4.1-flash":{"id":"deepseek/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.66,"output":1.98,"cache_read":0.022},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-v4-flash-vision-exp":{"id":"deepseek/deepseek-v4-flash-vision-exp","name":"DeepSeek V4 Flash Vision Exp","description":"Experimental multimodal DeepSeek V4 Flash model for image understanding, coding, and agentic work","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-21","last_updated":"2026-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4-flash-vision-exp"},"deepseek/deepseek-v4-flash":{"id":"deepseek/deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4-flash"},"inclusionai/ling-3.1-flash:free":{"id":"inclusionai/ling-3.1-flash:free","name":"Ling 3.1 Flash","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"inclusionai/ling-3.1-flash"},"google/gemini-3.8-flash":{"id":"google/gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":1.5,"output":7.5,"cache_read":0.15},"canonical_model_id":"google/gemini-3.8-flash"},"google/gemini-3.5-flash":{"id":"google/gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":1.5,"output":9,"cache_read":0.15},"canonical_model_id":"google/gemini-3.5-flash"},"google/gemini-3.6-flash":{"id":"google/gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":1.5,"output":7.5,"cache_read":0.15},"canonical_model_id":"google/gemini-3.6-flash"},"google/gemini-3.1-flash-lite":{"id":"google/gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.03},"canonical_model_id":"google/gemini-3.1-flash-lite"},"google/gemini-4-argon":{"id":"google/gemini-4-argon","name":"Gemini 4 Argon","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":2,"output":10,"cache_read":0.1},"canonical_model_id":"google/gemini-4-argon"},"google/gemini-3.5-flash-lite":{"id":"google/gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03},"canonical_model_id":"google/gemini-3.5-flash-lite"},"google/gemini-3.7-flash":{"id":"google/gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":7.5,"cache_read":0.15,"cache_write":0.08334},"canonical_model_id":"google/gemini-3.7-flash"},"MiniMaxAI/MiniMax-M2.5":{"id":"MiniMaxAI/MiniMax-M2.5","name":"MiniMax-M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.03},"canonical_model_id":"minimax/MiniMax-M2.5"},"MiniMaxAI/MiniMax-M2.7":{"id":"MiniMaxAI/MiniMax-M2.7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M2.7"},"MiniMaxAI/MiniMax-M3":{"id":"MiniMaxAI/MiniMax-M3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":512000},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"},"tencent/hy3-paid":{"id":"tencent/hy3-paid","name":"Hy3","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":192000,"output":128000},"cost":{"input":0.14,"output":0.58,"cache_read":0.035},"canonical_model_id":"tencent/hy3"},"tencent/hy4-preview":{"id":"tencent/hy4-preview","name":"Hy4 preview","description":"A next-generation productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"temperature":true,"release_date":"2026-08-28","last_updated":"2026-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1024000,"output":64000},"cost":{"input":0.834,"output":2.501,"cache_read":0.042},"canonical_model_id":"tencent/hy4-preview"},"moonshotai/Kimi-K3":{"id":"moonshotai/Kimi-K3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"moonshotai/Kimi-K2.7-Code":{"id":"moonshotai/Kimi-K2.7-Code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"moonshotai/Kimi-K2.7-Code-Highspeed":{"id":"moonshotai/Kimi-K2.7-Code-Highspeed","name":"Kimi K2.7 Code Highspeed","description":"Lower-latency Kimi Code variant for interactive edits and coding-agent loops","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":1.9,"output":8,"cache_read":0.38},"canonical_model_id":"moonshotai/kimi-k2.7-code-highspeed"},"thinkingmachines/inkling-small":{"id":"thinkingmachines/inkling-small","name":"Inkling Small","description":"Multimodal MoE reasoning model (276B total, 12B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-30","last_updated":"2026-07-30","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":1000000},"cost":{"input":0.5,"output":1.2,"cache_read":0.1},"canonical_model_id":"thinkingmachines/inkling-small"},"thinkingmachines/inkling":{"id":"thinkingmachines/inkling","name":"Inkling","description":"Multimodal MoE reasoning model (975B total, 41B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":1,"output":4.05,"cache_read":0.17},"canonical_model_id":"thinkingmachines/inkling"},"meta/muse-spark-1.3":{"id":"meta/muse-spark-1.3","name":"Muse Spark 1.3","description":"Muse Spark 1.3 is a multimodal reasoning model from Meta for long-running agentic, multi-agent, and coding workflows. It improves long-horizon agent collaboration, instruction following, and coding efficiency relative to Muse Spark 1.2.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.3"},"meta/muse-spark-1.1":{"id":"meta/muse-spark-1.1","name":"Muse Spark 1.1","description":"Muse Spark is a natively multimodal reasoning model with support for tool-use, visual chain of thought, and multi-agent orchestration.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-08","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.1"},"meta/muse-wonder-1.0":{"id":"meta/muse-wonder-1.0","name":"Muse Wonder","description":"Muse Wonder is a frontier multimodal reasoning model from Meta for personal and professional agents, long-horizon coding, and computer use. It combines Active Memory, which carries relevant context across conversations, with Active Focus, which keeps it working through blockers toward a goal.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-12","last_updated":"2026-10-12","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":4,"output":20,"cache_read":0.2},"canonical_model_id":"meta/muse-wonder-1.0"},"meta/muse-spark-1.2-contributor":{"id":"meta/muse-spark-1.2-contributor","name":"Muse Spark 1.2 (Contributor)","description":"Muse Spark 1.2 is a coding-focused update to Muse Spark 1.1 with improvements in code generation, complex debugging, codebase understanding, and end-to-end developer workflows.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.1,"output":0.2,"cache_read":0.002},"canonical_model_id":"meta/muse-spark-1.2"},"meta/muse-spark-1.2":{"id":"meta/muse-spark-1.2","name":"Muse Spark 1.2","description":"Muse Spark 1.2 is a coding-focused update to Muse Spark 1.1 with improvements in code generation, complex debugging, codebase understanding, and end-to-end developer workflows.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.2"},"meta/muse-spark-1.3-contributor":{"id":"meta/muse-spark-1.3-contributor","name":"Muse Spark 1.3 (Contributor)","description":"Muse Spark 1.3 is a multimodal reasoning model from Meta for long-running agentic, multi-agent, and coding workflows. It improves long-horizon agent collaboration, instruction following, and coding efficiency relative to Muse Spark 1.2.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.1,"output":0.2,"cache_read":0.002},"canonical_model_id":"meta/muse-spark-1.3"},"stepfun/Step-3.5-Flash":{"id":"stepfun/Step-3.5-Flash","name":"Step 3.5 Flash","description":"StepFun flash lane for quick multimodal reasoning and coding assistance","family":"step","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-29","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":256000},"cost":{"input":0.09,"output":0.3,"cache_read":0.02},"canonical_model_id":"stepfun/step-3.5-flash"},"stepfun/Step-5-Preview":{"id":"stepfun/Step-5-Preview","name":"Step 5 Preview","description":"StepFun's next-generation flagship base model for coding and professional knowledge work, with native text, image, and video input and a 1M-token context window","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":1000000},"cost":{"input":1,"output":2.7,"cache_read":0.05},"canonical_model_id":"stepfun/step-5-preview"},"stepfun/Step-3.7-Flash":{"id":"stepfun/Step-3.7-Flash","name":"Step 3.7 Flash","description":"Newer StepFun flash model for faster agents, coding, and multimodal prompts","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2026-03-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":256000},"cost":{"input":0.2,"output":1.15,"cache_read":0.04},"canonical_model_id":"stepfun/step-3.7-flash"},"z-ai/glm-5.3-flash":{"id":"z-ai/glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"z-ai/glm-5.3-flashx":{"id":"z-ai/glm-5.3-flashx","name":"GLM-5.3-FlashX","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.37,"output":1.25,"cache_read":0.075},"canonical_model_id":"zhipuai/glm-5.3-flash"},"Qwen/Qwen3.8-Max-0902":{"id":"Qwen/Qwen3.8-Max-0902","name":"Qwen3.8 Max 0902","description":"2026-09-02 upgraded snapshot of Qwen3.8 Max with stronger coding, collaborative agents, and multimodal document understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.8-max-0902"},"Qwen/Qwen3.8-Flash":{"id":"Qwen/Qwen3.8-Flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.16,"output":0.47,"cache_read":0.016},"canonical_model_id":"alibaba/qwen3.8-flash"},"Qwen/Qwen3.8-Max":{"id":"Qwen/Qwen3.8-Max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max"},"Qwen/Qwen3.8-27B":{"id":"Qwen/Qwen3.8-27B","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.4,"output":3,"cache_read":0.04},"canonical_model_id":"alibaba/qwen3.8-27b"},"Qwen/Qwen3.8-Omni-Flash":{"id":"Qwen/Qwen3.8-Omni-Flash","name":"Qwen3.8 Omni Flash","description":"Qwen omni model for text, vision, audio, and multimodal agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-17","last_updated":"2026-09-17","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.47,"cache_read":0.016},"canonical_model_id":"alibaba/qwen3.8-omni-flash"},"zai-org/GLM-5.2":{"id":"zai-org/GLM-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"zai-org/GLM-5.2-Fast":{"id":"zai-org/GLM-5.2-Fast","name":"GLM-5.2-Fast","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":3,"output":10.25,"cache_read":0.5},"canonical_model_id":"zhipuai/glm-5.2"},"zai-org/GLM-5.3":{"id":"zai-org/GLM-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"nvidia/nemotron-3-ultra-550b-a55b":{"id":"nvidia/nemotron-3-ultra-550b-a55b","name":"Nemotron 3 Ultra 550B A55B","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":0.6,"output":2.4,"cache_read":0.12},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"xai/grok-4.5":{"id":"xai/grok-4.5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.5"},"xai/grok-4.7":{"id":"xai/grok-4.7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.7"},"xai/grok-4.6":{"id":"xai/grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.6"},"sakana/fugu-ultra":{"id":"sakana/fugu-ultra","name":"Fugu Ultra","description":"Quality-first multi-agent model for hard research, analysis, and competitions","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-06-15","last_updated":"2026-06-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"sakana/fugu-ultra"}}},"orcarouter":{"id":"orcarouter","env":["ORCAROUTER_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.orcarouter.ai/v1","name":"OrcaRouter","doc":"https://docs.orcarouter.ai","models":{"anthropic/claude-opus-4.6":{"id":"anthropic/claude-opus-4.6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":30,"output":150,"cache_read":3,"cache_write":37.5},"provider":{"body":{"speed":"fast"},"headers":{"anthropic-beta":"fast-mode-2026-02-01"}}}}},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"anthropic/claude-opus-4.7":{"id":"anthropic/claude-opus-4.7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":30,"output":150,"cache_read":3,"cache_write":37.5},"provider":{"body":{"speed":"fast"},"headers":{"anthropic-beta":"fast-mode-2026-02-01"}}}}},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"anthropic/claude-opus-4.8":{"id":"anthropic/claude-opus-4.8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic/claude-opus-4.5":{"id":"anthropic/claude-opus-4.5","name":"Claude Opus 4.5 (latest)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"anthropic/claude-haiku-4.5":{"id":"anthropic/claude-haiku-4.5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"anthropic/claude-sonnet-5":{"id":"anthropic/claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"anthropic/claude-sonnet-4.5":{"id":"anthropic/claude-sonnet-4.5","name":"Claude Sonnet 4.5 (latest)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"status":"deprecated","cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"anthropic/claude-sonnet-4.6":{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"anthropic/claude-fable-5":{"id":"anthropic/claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"anthropic/claude-opus-5":{"id":"anthropic/claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":10},"canonical_model_id":"anthropic/claude-opus-5"},"deepseek/deepseek-v4-flash-free":{"id":"deepseek/deepseek-v4-flash-free","name":"DeepSeek V4 Flash (free)","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0,"output":0},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek/deepseek-v4-pro-0813":{"id":"deepseek/deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.66,"output":1.98,"cache_read":0.022},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"deepseek/deepseek-reasoner":{"id":"deepseek/deepseek-reasoner","name":"DeepSeek Reasoner","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-09","release_date":"2025-12-01","last_updated":"2026-02-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.242,"output":0.726,"cache_read":0.0077},"canonical_model_id":"deepseek/deepseek-reasoner"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.66,"output":1.98,"cache_read":0.022},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-v4-flash-vision-exp":{"id":"deepseek/deepseek-v4-flash-vision-exp","name":"DeepSeek V4 Flash Vision Exp","description":"Experimental multimodal DeepSeek V4 Flash model for image understanding, coding, and agentic work","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-21","last_updated":"2026-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.22,"output":0.66,"cache_read":0.007},"canonical_model_id":"deepseek/deepseek-v4-flash-vision-exp"},"deepseek/deepseek-chat":{"id":"deepseek/deepseek-chat","name":"DeepSeek Chat","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2025-12-01","last_updated":"2026-02-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.22,"output":0.66,"cache_read":0.007},"canonical_model_id":"deepseek/deepseek-chat"},"deepseek/deepseek-v4-flash":{"id":"deepseek/deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.22,"output":0.66,"cache_read":0.007},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek/deepseek-v4-flash-0731":{"id":"deepseek/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.22,"output":0.66,"cache_read":0.007},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"grok/grok-4.5":{"id":"grok/grok-4.5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.3,"tiers":[{"input":4,"output":12,"cache_read":0.6,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":0.6}},"canonical_model_id":"xai/grok-4.5"},"grok/grok-4.3":{"id":"grok/grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.3"},"grok/grok-4.6":{"id":"grok/grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.6"},"google/gemini-flash-lite-latest":{"id":"google/gemini-flash-lite-latest","name":"Gemini Flash-Lite Latest","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"input_audio":0.5},"canonical_model_id":"google/gemini-flash-lite-latest"},"google/gemini-2.5-flash":{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"input_audio":1},"canonical_model_id":"google/gemini-2.5-flash"},"google/gemini-2.5-pro":{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2.5,"output":15,"cache_read":0.25},"canonical_model_id":"google/gemini-2.5-pro"},"google/gemini-3.5-flash":{"id":"google/gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"cache_read":0.15,"cache_write":0.08333,"input_audio":3},"canonical_model_id":"google/gemini-3.5-flash"},"google/gemini-flash-latest":{"id":"google/gemini-flash-latest","name":"Gemini Flash Latest","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.1},"canonical_model_id":"google/gemini-flash-latest"},"google/gemini-3.6-flash":{"id":"google/gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.6-flash"},"google/gemini-3.1-pro-preview-customtools":{"id":"google/gemini-3.1-pro-preview-customtools","name":"Gemini 3.1 Pro Preview Custom Tools","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":4,"output":18,"cache_read":0.4},"canonical_model_id":"google/gemini-3.1-pro-preview-customtools"},"google/gemini-robotics-er-1.6-preview":{"id":"google/gemini-robotics-er-1.6-preview","name":"Gemini Robotics-ER 1.6 Preview","description":"Vision-language model for embodied reasoning: spatial understanding, task planning, and physical-world agentic robotics","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":0}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-14","last_updated":"2026-04-14","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":65536},"cost":{"input":1,"output":5},"canonical_model_id":"google/gemini-robotics-er-1.6-preview"},"google/gemini-3.1-pro-preview":{"id":"google/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"input_audio":2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"google/gemini-3.1-flash-lite":{"id":"google/gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"input_audio":0.5},"canonical_model_id":"google/gemini-3.1-flash-lite"},"google/gemini-2.5-flash-lite":{"id":"google/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash-Lite","description":"Lean Gemini 2.5 lane for cheap multimodal traffic and quick agents","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.1,"output":0.4,"cache_read":0.01,"input_audio":0.3},"canonical_model_id":"google/gemini-2.5-flash-lite"},"google/gemini-3.1-flash-lite-preview":{"id":"google/gemini-3.1-flash-lite-preview","name":"Gemini 3.1 Flash Lite Preview","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-03-03","last_updated":"2026-03-03","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"input_audio":0.5},"canonical_model_id":"google/gemini-3.1-flash-lite-preview"},"google/gemini-3.5-flash-lite":{"id":"google/gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03},"canonical_model_id":"google/gemini-3.5-flash-lite"},"google/gemma-4-31b-it":{"id":"google/gemma-4-31b-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.13,"output":0.38,"cache_read":0.02},"canonical_model_id":"google/gemma-4-31b-it"},"google/gemini-3-flash-preview":{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.05,"input_audio":1},"canonical_model_id":"google/gemini-3-flash-preview"},"google/gemma-4-26b-a4b-it":{"id":"google/gemma-4-26b-a4b-it","name":"Gemma 4 26B A4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.06,"output":0.33,"cache_read":0.0075},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"qwen/qwen3.6-plus":{"id":"qwen/qwen3.6-plus","name":"Qwen3.6 Plus","description":"Earlier Qwen multimodal workhorse for million-token agent and document tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.276,"output":1.651,"cache_read":0.0276,"cache_write":0.345,"tiers":[{"input":1.101,"output":6.602,"cache_read":0.1101,"cache_write":1.37625,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":1.101,"output":6.602,"cache_read":0.1101,"cache_write":1.37625}},"canonical_model_id":"alibaba/qwen3.6-plus"},"qwen/qwen3-vl-235b-a22b-instruct":{"id":"qwen/qwen3-vl-235b-a22b-instruct","name":"Qwen3 VL 235B A22B Instruct","description":"Qwen vision-language instruct model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.4,"output":1.6},"canonical_model_id":"alibaba/qwen3-vl-235b-a22b-instruct"},"qwen/qwen3-vl-235b-a22b-thinking":{"id":"qwen/qwen3-vl-235b-a22b-thinking","name":"Qwen3 VL 235B A22B Thinking","description":"Qwen vision-language thinking model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024,"max":81920}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":40960},"cost":{"input":0.4,"output":4},"canonical_model_id":"alibaba/qwen3-vl-235b-a22b-thinking"},"qwen/qwen3.8-27b":{"id":"qwen/qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.33,"output":2.4},"canonical_model_id":"alibaba/qwen3.8-27b"},"qwen/qwen3.5-flash":{"id":"qwen/qwen3.5-flash","name":"Qwen3.5 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1,"max":81920}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.1,"output":0.4},"canonical_model_id":"alibaba/qwen3.5-flash"},"qwen/qwen3.5-397b-a17b":{"id":"qwen/qwen3.5-397b-a17b","name":"Qwen3.5 397B-A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.172,"output":1.032,"tiers":[{"input":0.43,"output":2.58,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"qwen/qwen3.5-35b-a3b":{"id":"qwen/qwen3.5-35b-a3b","name":"Qwen3.5 35B-A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.057,"output":0.459,"tiers":[{"input":0.229,"output":1.835,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3.5-35b-a3b"},"qwen/qwen3.7-plus":{"id":"qwen/qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.35,"output":1.42,"cache_read":0.071,"tiers":[{"input":1.06,"output":4.25,"cache_read":0.21,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":1.06,"output":4.25,"cache_read":0.21}},"canonical_model_id":"alibaba/qwen3.7-plus"},"qwen/qwen3.7-max":{"id":"qwen/qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":1.25,"output":3.75,"cache_read":0.25,"cache_write":1.563},"canonical_model_id":"alibaba/qwen3.7-max"},"qwen/qwen3.6-flash":{"id":"qwen/qwen3.6-flash","name":"Qwen3.6 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.6","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.25,"output":1.5,"tiers":[{"input":1,"output":4,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":1,"output":4}},"canonical_model_id":"alibaba/qwen3.6-flash"},"qwen/qwen3.7-flash":{"id":"qwen/qwen3.7-flash","name":"Qwen3.7 Flash","description":"Lightweight multimodal Qwen model for high-throughput text, image, and video tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":991808,"output":131072},"cost":{"input":0.03,"output":0.13,"cache_read":0.006,"cache_write":0.038,"tiers":[{"input":0.1,"output":0.4,"cache_read":0.02,"tier":{"type":"context","size":32000}},{"input":0.2,"output":0.8,"cache_read":0.04,"tier":{"type":"context","size":256000}}]},"canonical_model_id":"alibaba/qwen3.7-flash"},"qwen/qwen3-max":{"id":"qwen/qwen3-max","name":"Qwen3 Max","description":"Flagship Qwen3 model for coding agents, complex reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536},"cost":{"input":0.359,"output":1.434,"tiers":[{"input":0.574,"output":2.294,"tier":{"type":"context","size":32000}},{"input":1.004,"output":4.014,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3-max"},"qwen/qwen3.6-35b-a3b":{"id":"qwen/qwen3.6-35b-a3b","name":"Qwen3.6 35B-A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.248,"output":1.485},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"qwen/qwen3.5-plus":{"id":"qwen/qwen3.5-plus","name":"Qwen3.5 Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-16","last_updated":"2026-02-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.4,"output":2.4,"tiers":[{"input":0.5,"output":3,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":0.5,"output":3}},"canonical_model_id":"alibaba/qwen3.5-plus"},"qwen/qwen3.8-max":{"id":"qwen/qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","min":0,"max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max"},"qwen/qwen3.5-27b":{"id":"qwen/qwen3.5-27b","name":"Qwen3.5 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.086,"output":0.688,"tiers":[{"input":0.258,"output":2.064,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3.5-27b"},"qwen/qwen3.5-122b-a10b":{"id":"qwen/qwen3.5-122b-a10b","name":"Qwen3.5 122B-A10B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.115,"output":0.917,"tiers":[{"input":0.287,"output":2.294,"tier":{"type":"context","size":128000}}]},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"tencent/hy3-free":{"id":"tencent/hy3-free","name":"Hy3 (free)","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":192000,"output":128000},"cost":{"input":0,"output":0},"canonical_model_id":"tencent/hy3"},"tencent/hy3":{"id":"tencent/hy3","name":"Hy3","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":192000,"output":128000},"cost":{"input":0.18,"output":0.59,"cache_read":0.059},"canonical_model_id":"tencent/hy3"},"openai/gpt-5.2-pro":{"id":"openai/gpt-5.2-pro","name":"GPT-5.2 Pro","description":"Higher-accuracy GPT-5.2 variant for tougher reasoning and review workflows","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":21,"output":168},"canonical_model_id":"openai/gpt-5.2-pro"},"openai/gpt-5.5":{"id":"openai/gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":12.5,"output":75,"cache_read":1.25},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"openai/gpt-4.1-nano":{"id":"openai/gpt-4.1-nano","name":"GPT-4.1 nano","description":"Tiny GPT-4.1 option for classification, routing, and very high-volume tasks","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.1,"output":0.4,"cache_read":0.025},"canonical_model_id":"openai/gpt-4.1-nano"},"openai/gpt-5.2":{"id":"openai/gpt-5.2","name":"GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"openai/gpt-4.1-mini":{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-4.1-mini"},"openai/gpt-5.2-codex":{"id":"openai/gpt-5.2-codex","name":"GPT-5.2 Codex","description":"Code-specialist GPT for repository edits, reviews, and long-running software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2-codex"},"openai/gpt-5.4-mini":{"id":"openai/gpt-5.4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":1.5,"output":9,"cache_read":0.15},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"openai/gpt-5":{"id":"openai/gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"openai/gpt-5.1-codex":{"id":"openai/gpt-5.1-codex","name":"GPT-5.1 Codex","description":"Codex GPT for repository edits, code review, and practical software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1-codex"},"openai/gpt-5.6-sol":{"id":"openai/gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8}},"canonical_model_id":"openai/gpt-5.6-sol"},"openai/gpt-4.1":{"id":"openai/gpt-4.1","name":"GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"openai/gpt-4o-2024-11-20":{"id":"openai/gpt-4o-2024-11-20","name":"GPT-4o (2024-11-20)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-11-20","last_updated":"2024-11-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o-2024-11-20"},"openai/gpt-5.1-chat-latest":{"id":"openai/gpt-5.1-chat-latest","name":"GPT-5.1 Chat","description":"Chat-tuned GPT-5.1 for polished assistants, writing, and product conversations","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1-chat-latest"},"openai/gpt-4":{"id":"openai/gpt-4","name":"GPT-4","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-11","release_date":"2023-11-06","last_updated":"2024-04-09","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":8192},"cost":{"input":30,"output":60},"canonical_model_id":"openai/gpt-4"},"openai/gpt-5-pro":{"id":"openai/gpt-5-pro","name":"GPT-5 Pro","description":"Higher-accuracy GPT-5 tier for tough analysis, coding reviews, and planning","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":272000},"cost":{"input":15,"output":120},"canonical_model_id":"openai/gpt-5-pro"},"openai/gpt-5.3-codex":{"id":"openai/gpt-5.3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"openai/gpt-4o-2024-05-13":{"id":"openai/gpt-4o-2024-05-13","name":"GPT-4o (2024-05-13)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-05-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"cost":{"input":5,"output":15},"canonical_model_id":"openai/gpt-4o-2024-05-13"},"openai/gpt-5.1":{"id":"openai/gpt-5.1","name":"GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1"},"openai/gpt-5-mini":{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"openai/gpt-5.1-codex-mini":{"id":"openai/gpt-5.1-codex-mini","name":"GPT-5.1 Codex mini","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5.1-codex-mini"},"openai/gpt-5.5-pro":{"id":"openai/gpt-5.5-pro","name":"GPT-5.5 Pro","description":"Highest-accuracy GPT-5.5 tier for slower, precision-heavy reasoning and coding","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":100000},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.5-pro"},"openai/gpt-5.6-luna":{"id":"openai/gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04}},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-5.4-pro":{"id":"openai/gpt-5.4-pro","name":"GPT-5.4 Pro","description":"More exact GPT-5.4 tier for demanding professional reasoning and agent tasks","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.4-pro"},"openai/gpt-5-nano":{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-nano"},"openai/gpt-5.4":{"id":"openai/gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":5,"output":30,"cache_read":0.5},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":2.5,"output":15,"cache_read":0.25,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5}},"canonical_model_id":"openai/gpt-5.4"},"openai/gpt-3.5-turbo":{"id":"openai/gpt-3.5-turbo","name":"GPT-3.5-turbo","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2021-09-01","release_date":"2023-03-01","last_updated":"2023-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":16385,"output":4096},"cost":{"input":0.5,"output":1.5,"cache_read":0},"canonical_model_id":"openai/gpt-3.5-turbo"},"openai/gpt-4-turbo":{"id":"openai/gpt-4-turbo","name":"GPT-4 Turbo","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2023-11-06","last_updated":"2024-04-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"cost":{"input":10,"output":30},"canonical_model_id":"openai/gpt-4-turbo"},"openai/gpt-4o-2024-08-06":{"id":"openai/gpt-4o-2024-08-06","name":"GPT-4o (2024-08-06)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-08-06","last_updated":"2024-08-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o-2024-08-06"},"openai/gpt-5.4-nano":{"id":"openai/gpt-5.4-nano","name":"GPT-5.4 nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"openai/gpt-5.2-chat-latest":{"id":"openai/gpt-5.2-chat-latest","name":"GPT-5.2 Chat","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2-chat-latest"},"openai/gpt-4o":{"id":"openai/gpt-4o","name":"GPT-4o","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"status":"deprecated","cost":{"input":0.03,"output":0.17},"canonical_model_id":"openai/gpt-oss-120b"},"openai/gpt-5.6-terra":{"id":"openai/gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"openai/gpt-5.6-terra"},"openai/gpt-5-chat-latest":{"id":"openai/gpt-5-chat-latest","name":"GPT-5 Chat (latest)","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":100000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5-chat-latest"},"openai/gpt-4o-mini":{"id":"openai/gpt-4o-mini","name":"GPT-4o mini","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-4o-mini"},"minimax/minimax-m2.5-highspeed":{"id":"minimax/minimax-m2.5-highspeed","name":"MiniMax-M2.5-highspeed","description":"High-speed MiniMax model for low-latency coding and agent workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-02-13","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.4,"cache_read":0.03,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.5-highspeed"},"minimax/minimax-m2.5":{"id":"minimax/minimax-m2.5","name":"MiniMax-M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.03,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.5"},"minimax/minimax-m3":{"id":"minimax/minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":512000},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"},"minimax/minimax-m2.7-highspeed":{"id":"minimax/minimax-m2.7-highspeed","name":"MiniMax-M2.7-highspeed","description":"Low-latency M2.7 variant for interactive coding plans and agent loops","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.4,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.7-highspeed"},"minimax/minimax-m2.7":{"id":"minimax/minimax-m2.7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.7"},"meta/muse-spark-1.1":{"id":"meta/muse-spark-1.1","name":"Muse Spark 1.1","description":"Muse Spark is a natively multimodal reasoning model with support for tool-use, visual chain of thought, and multi-agent orchestration.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-08","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.1"},"meta/muse-spark-1.2":{"id":"meta/muse-spark-1.2","name":"Muse Spark 1.2","description":"Muse Spark 1.2 is a coding-focused update to Muse Spark 1.1 with improvements in code generation, complex debugging, codebase understanding, and end-to-end developer workflows.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.2"},"kimi/kimi-k2.6":{"id":"kimi/kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.95,"output":4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"kimi/kimi-k3":{"id":"kimi/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"kimi/kimi-k2.5":{"id":"kimi/kimi-k2.5","name":"Kimi K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.6,"output":3,"cache_read":0.1,"cache_write":0},"canonical_model_id":"moonshotai/kimi-k2.5"},"kimi/kimi-k2.7-code":{"id":"kimi/kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"z-ai/glm-5.3-flash-free":{"id":"z-ai/glm-5.3-flash-free","name":"GLM-5.3-Flash (free)","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":0,"output":0},"canonical_model_id":"zhipuai/glm-5.3-flash"},"z-ai/glm-5.2":{"id":"z-ai/glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"z-ai/glm-5.1":{"id":"z-ai/glm-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.1"},"z-ai/glm-4.5":{"id":"z-ai/glm-4.5","name":"GLM-4.5","description":"Hybrid-reasoning GLM release that made the 4.5 line broadly useful","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"cost":{"input":0.6,"output":2.2,"cache_read":0.11,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.5"},"z-ai/glm-4.7":{"id":"z-ai/glm-4.7","name":"GLM-4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.2,"cache_read":0.11,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.7"},"z-ai/glm-5.3":{"id":"z-ai/glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.26,"output":3.96,"cache_read":0.234},"canonical_model_id":"zhipuai/glm-5.3"},"z-ai/glm-5.3-flash":{"id":"z-ai/glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"z-ai/glm-4.5-air":{"id":"z-ai/glm-4.5-air","name":"GLM-4.5-Air","description":"Lighter GLM-4.5 variant for fast coding assistance and cheaper agents","family":"glm-air","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"cost":{"input":0.2,"output":1.1,"cache_read":0.03,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.5-air"},"z-ai/glm-4.6":{"id":"z-ai/glm-4.6","name":"GLM-4.6","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.2,"cache_read":0.11,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.6"},"z-ai/glm-5":{"id":"z-ai/glm-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":1,"output":3.2,"cache_read":0.26,"cache_write":0},"canonical_model_id":"zhipuai/glm-5"},"orcarouter/free":{"id":"orcarouter/free","name":"OrcaRouter Free","description":"Built-in router over the free tier that scores each request's difficulty and sends light work to the smaller free model and harder work to the stronger one. Priced at zero and never falls back to a paid model.","family":"auto","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-27","last_updated":"2026-08-27","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":65536,"output":32768},"cost":{"input":0,"output":0}},"orcarouter/fusion":{"id":"orcarouter/fusion","name":"OrcaRouter Fusion","description":"Curated fan-out router that runs Claude Opus 4.8, GPT-5.5 and Gemini 3.1 Pro in parallel on hard requests, then has a Claude Opus 4.8 judge return the strongest single answer verbatim. Easy requests fall through to a cheaper default and bill as one call.","family":"model-router","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-06-15","last_updated":"2026-06-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000}},"orcarouter/auto":{"id":"orcarouter/auto","name":"OrcaRouter Auto","description":"Automatic model router for matching prompts to suitable backends and budgets","family":"auto","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-01-01","last_updated":"2026-05-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0,"output":0}},"orcarouter/fusion-flash":{"id":"orcarouter/fusion-flash","name":"OrcaRouter Fusion Flash","description":"Budget Fusion panel that runs Gemini 3.5 Flash, MiniMax M2.7 and GLM 5.1 in parallel on hard requests, then has a Claude Opus 4.8 judge return the strongest single answer verbatim. Cost-sensitive fan-out over a 200K window.","family":"model-router","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-15","last_updated":"2026-06-15","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":128000}},"orcarouter/fusion-mini":{"id":"orcarouter/fusion-mini","name":"OrcaRouter Fusion Mini","description":"Leaner two-model Fusion panel that runs Claude Opus 4.8 and GPT-5.5 in parallel on hard requests, then has a Claude Opus 4.8 judge return the strongest single answer verbatim. Easy requests fall through to a cheaper default and bill as one call.","family":"model-router","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-06-15","last_updated":"2026-06-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000}}}},"cloudflare-workers-ai":{"id":"cloudflare-workers-ai","env":["CLOUDFLARE_ACCOUNT_ID","CLOUDFLARE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.cloudflare.com/client/v4/accounts/${CLOUDFLARE_ACCOUNT_ID}/ai/v1","name":"Cloudflare Workers AI","doc":"https://developers.cloudflare.com/workers-ai/models/","models":{"@cf/aisingapore/gemma-sea-lion-v4-27b-it":{"id":"@cf/aisingapore/gemma-sea-lion-v4-27b-it","name":"Gemma Sea Lion V4 27B It","description":"Gemma 3 27B tuned by AI Singapore for Southeast Asian languages and instruction following","family":"gemma","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"cost":{"input":0.351,"output":0.555},"canonical_model_id":"aisingapore/gemma-sea-lion-v4-27b-it"},"@cf/google/gemma-4-26b-a4b-it":{"id":"@cf/google/gemma-4-26b-a4b-it","name":"Gemma 4 26B A4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":16384},"cost":{"input":0.1,"output":0.3,"cache_read":0.05},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"@cf/qwen/qwen3.8-27b":{"id":"@cf/qwen/qwen3.8-27b","name":"Qwen3.8 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.45,"output":3.2,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3.8-27b"},"@cf/qwen/qwen2.5-coder-32b-instruct":{"id":"@cf/qwen/qwen2.5-coder-32b-instruct","name":"Qwen2.5 Coder 32B Instruct","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2024-11-12","last_updated":"2024-11-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32768},"cost":{"input":0.66,"output":1},"canonical_model_id":"alibaba/qwen2.5-coder-32b-instruct"},"@cf/qwen/qwq-32b":{"id":"@cf/qwen/qwq-32b","name":"Qwq 32B","description":"Qwen reasoning model for deliberate problem solving, math, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-04","release_date":"2025-03-05","last_updated":"2025-03-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":24000,"output":24000},"status":"deprecated","cost":{"input":0.66,"output":1},"canonical_model_id":"alibaba/qwq-32b"},"@cf/qwen/qwen3-30b-a3b-fp8":{"id":"@cf/qwen/qwen3-30b-a3b-fp8","name":"Qwen3 30B A3b fp8","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32768},"status":"deprecated","cost":{"input":0.0509,"output":0.335},"canonical_model_id":"alibaba/qwen3-30b-a3b"},"@cf/deepseek-ai/deepseek-r1-distill-qwen-32b":{"id":"@cf/deepseek-ai/deepseek-r1-distill-qwen-32b","name":"Deepseek R1 Distill Qwen 32B","description":"Classic open reasoning model for transparent math, coding, and deliberate problem solving","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-07","release_date":"2025-01-20","last_updated":"2025-05-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":80000,"output":80000},"status":"deprecated","cost":{"input":0.497,"output":4.881},"canonical_model_id":"deepseek/deepseek-r1"},"@cf/deepseek-ai/deepseek-v4-pro-0813":{"id":"@cf/deepseek-ai/deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"status":"deprecated","cost":{"input":1.32,"output":3.96,"cache_read":0.044},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"@cf/deepseek-ai/deepseek-v4-flash-0731":{"id":"@cf/deepseek-ai/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"status":"deprecated","cost":{"input":0.44,"output":1.32,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"@cf/deepseek-ai/deepseek-v4.1-flash-1017":{"id":"@cf/deepseek-ai/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"@cf/mistralai/mistral-small-3.1-24b-instruct":{"id":"@cf/mistralai/mistral-small-3.1-24b-instruct","name":"Mistral Small 3.1 24B Instruct","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-03-17","last_updated":"2025-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"cost":{"input":0.351,"output":0.555},"canonical_model_id":"mistral/mistral-small-3-1-24b-instruct-2503"},"@cf/moonshotai/kimi-k2.6":{"id":"@cf/moonshotai/kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"status":"deprecated","cost":{"input":0.95,"output":4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"@cf/moonshotai/kimi-k2.7-code":{"id":"@cf/moonshotai/kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"@cf/openai/gpt-oss-20b":{"id":"@cf/openai/gpt-oss-20b","name":"GPT OSS 20B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.2,"output":0.3},"canonical_model_id":"openai/gpt-oss-20b"},"@cf/openai/gpt-oss-120b":{"id":"@cf/openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.35,"output":0.75},"canonical_model_id":"openai/gpt-oss-120b"},"@cf/ibm-granite/granite-4.0-h-micro":{"id":"@cf/ibm-granite/granite-4.0-h-micro","name":"Granite 4.0 H Micro","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"granite","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-10-02","last_updated":"2025-10-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":131000},"cost":{"input":0.017,"output":0.112},"canonical_model_id":"ibm/granite-4-h-micro"},"@cf/meta/llama-3.2-3b-instruct":{"id":"@cf/meta/llama-3.2-3b-instruct","name":"Llama 3.2 3B Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":80000,"output":80000},"status":"deprecated","cost":{"input":0.0509,"output":0.335},"canonical_model_id":"meta/llama-3.2-3b"},"@cf/meta/llama-4-scout-17b-16e-instruct":{"id":"@cf/meta/llama-4-scout-17b-16e-instruct","name":"Llama 4 Scout 17B 16E Instruct","description":"Open Llama with long-context vision for efficient multimodal agents","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131000,"output":16384},"cost":{"input":0.27,"output":0.85},"canonical_model_id":"meta/llama-4-scout-17b-instruct"},"@cf/meta/llama-3.1-8b-instruct-fp8":{"id":"@cf/meta/llama-3.1-8b-instruct-fp8","name":"Llama 3.1 8B Instruct fp8","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":32000},"status":"deprecated","cost":{"input":0.152,"output":0.287},"canonical_model_id":"meta/llama-3.1-8b-instruct"},"@cf/meta/llama-guard-3-8b":{"id":"@cf/meta/llama-guard-3-8b","name":"Llama Guard 3 8B","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.484,"output":0.03},"canonical_model_id":"meta/llama-guard-3-8b"},"@cf/meta/llama-3.2-11b-vision-instruct":{"id":"@cf/meta/llama-3.2-11b-vision-instruct","name":"Llama 3.2 11B Vision Instruct","description":"Open Llama multimodal model for image understanding and text reasoning","family":"llama","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"cost":{"input":0.0485,"output":0.676},"canonical_model_id":"meta/llama-3.2-11b-vision-instruct"},"@cf/meta/llama-3.3-70b-instruct-fp8-fast":{"id":"@cf/meta/llama-3.3-70b-instruct-fp8-fast","name":"Llama 3.3 70B Instruct fp8 Fast","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":24000,"output":24000},"cost":{"input":0.293,"output":2.253},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"@cf/meta/llama-3.2-1b-instruct":{"id":"@cf/meta/llama-3.2-1b-instruct","name":"Llama 3.2 1B Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":60000,"output":60000},"status":"deprecated","cost":{"input":0.027,"output":0.201},"canonical_model_id":"meta/llama-3.2-1b"},"@cf/zai-org/glm-5.2":{"id":"@cf/zai-org/glm-5.2","name":"Glm 5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"status":"deprecated","cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"@cf/zai-org/glm-5.3":{"id":"@cf/zai-org/glm-5.3","name":"Glm 5.3","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"@cf/zai-org/glm-5.3-flash":{"id":"@cf/zai-org/glm-5.3-flash","name":"Glm 5.3 Flash","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"status":"deprecated","cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"@cf/zai-org/glm-4.7-flash":{"id":"@cf/zai-org/glm-4.7-flash","name":"GLM-4.7-Flash","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.0605,"output":0.4},"canonical_model_id":"zhipuai/glm-4.7-flash"},"@cf/nvidia/nemotron-3-120b-a12b":{"id":"@cf/nvidia/nemotron-3-120b-a12b","name":"Nemotron 3 Super 120B","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high"]}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"status":"deprecated","cost":{"input":0.5,"output":1.5},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"}}},"merge-gateway":{"id":"merge-gateway","env":["MERGE_GATEWAY_API_KEY"],"npm":"merge-gateway-ai-sdk-provider","api":"https://api-gateway.merge.dev/v1/ai-sdk","name":"Merge Gateway","doc":"https://docs.merge.dev/merge-gateway","models":{"anthropic/claude-sonnet-5-5":{"id":"anthropic/claude-sonnet-5-5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"anthropic/claude-fable-5-1":{"id":"anthropic/claude-fable-5-1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"anthropic/claude-sonnet-5":{"id":"anthropic/claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"anthropic/claude-fable-5-2":{"id":"anthropic/claude-fable-5-2","name":"Claude Fable 5.2","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"anthropic/claude-sonnet-4-5-20250929":{"id":"anthropic/claude-sonnet-4-5-20250929","name":"Claude Sonnet 4.5 (20250929)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5-20250929"},"anthropic/claude-opus-4-1-20250805":{"id":"anthropic/claude-opus-4-1-20250805","name":"Claude Opus 4.1 (20250805)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024,"max":31999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"cost":{"input":15,"output":75,"cache_read":1.5,"cache_write":18.75},"canonical_model_id":"anthropic/claude-opus-4-1-20250805"},"anthropic/claude-fable-5":{"id":"anthropic/claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"anthropic/claude-haiku-4-5-20251001":{"id":"anthropic/claude-haiku-4-5-20251001","name":"Claude Haiku 4.5 (20251001)","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"anthropic/claude-opus-5":{"id":"anthropic/claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"anthropic/claude-opus-4-5-20251101":{"id":"anthropic/claude-opus-4-5-20251101","name":"Claude Opus 4.5 (20251101)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5-20251101"},"anthropic/claude-opus-4-6":{"id":"anthropic/claude-opus-4-6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024,"max":127999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":30,"output":150,"cache_read":3,"cache_write":37.5},"provider":{"body":{"speed":"fast"},"headers":{"anthropic-beta":"fast-mode-2026-02-01"}}}}},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"anthropic/claude-opus-4-8":{"id":"anthropic/claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1,"max":128000}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic/claude-opus-5-5":{"id":"anthropic/claude-opus-5-5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"anthropic/claude-haiku-5-5":{"id":"anthropic/claude-haiku-5-5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"anthropic/claude-sonnet-4-6":{"id":"anthropic/claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"anthropic/claude-opus-4-7":{"id":"anthropic/claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":30,"output":150,"cache_read":3,"cache_write":37.5},"provider":{"body":{"speed":"fast"},"headers":{"anthropic-beta":"fast-mode-2026-02-01"}}}}},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"writer/palmyra-x4":{"id":"writer/palmyra-x4","name":"Palmyra X4","description":"Enterprise language model for workflow automation, coding, data analysis, and tool use","family":"palmyra","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2024-10-09","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32000},"cost":{"input":2.5,"output":10},"canonical_model_id":"writer/palmyra-x4"},"writer/palmyra-x5":{"id":"writer/palmyra-x5","name":"Palmyra X5","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"palmyra","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":250000},"cost":{"input":0.6,"output":6},"canonical_model_id":"writer/palmyra-x5"},"mistral/mistral-medium-2505":{"id":"mistral/mistral-medium-2505","name":"Mistral Medium 3","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-05-07","last_updated":"2025-05-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":128000},"cost":{"input":0.4,"output":2,"cache_read":0.04},"canonical_model_id":"mistral/mistral-medium-2505"},"mistral/mistral-large-2512":{"id":"mistral/mistral-large-2512","name":"Mistral Large 3","description":"Mistral's largest general model for enterprise agents, coding, and multilingual reasoning","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-11","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.5,"output":1.5,"cache_read":0.05},"canonical_model_id":"mistral/mistral-large-2512"},"mistral/devstral-medium-latest":{"id":"mistral/devstral-medium-latest","name":"Devstral 2 (latest)","description":"Mistral coding agent model for repository tasks and software engineering workflows","family":"devstral","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-12","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0.4,"output":2},"canonical_model_id":"mistral/devstral-medium-latest"},"mistral/magistral-medium-latest":{"id":"mistral/magistral-medium-latest","name":"Magistral Medium (latest)","description":"Mistral reasoning model for transparent analysis, math, and complex decisions","family":"magistral-medium","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2025-03-17","last_updated":"2025-03-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2,"output":5},"canonical_model_id":"mistral/magistral-medium-latest"},"mistral/codestral-latest":{"id":"mistral/codestral-latest","name":"Codestral (latest)","description":"Mistral code model for completions, refactors, and developer IDE workflows","family":"codestral","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-05-29","last_updated":"2025-01-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":4096},"cost":{"input":0.3,"output":0.9},"canonical_model_id":"mistral/codestral-latest"},"mistral/devstral-2512":{"id":"mistral/devstral-2512","name":"Devstral 2","description":"Mistral's coding-agent model for repository work, terminal tasks, and software fixes","family":"devstral","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-12","release_date":"2025-12-09","last_updated":"2025-12-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.4,"output":2,"cache_read":0.04},"canonical_model_id":"mistral/devstral-2512"},"mistral/pixtral-large-latest":{"id":"mistral/pixtral-large-latest","name":"Pixtral Large (latest)","description":"Mistral's larger vision model for document-heavy image understanding and chat","family":"pixtral","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-11","release_date":"2024-11-01","last_updated":"2024-11-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":128000},"cost":{"input":2,"output":6},"canonical_model_id":"mistral/pixtral-large-latest"},"mistral/mistral-small-latest":{"id":"mistral/mistral-small-latest","name":"Mistral Small (latest)","description":"Efficient Mistral model for fast chat, extraction, and production assistants","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":256000},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"mistral/mistral-small-latest"},"mistral/mistral-medium-latest":{"id":"mistral/mistral-medium-latest","name":"Mistral Medium (latest)","description":"Balanced Mistral model for enterprise assistants, multilingual work, and tools","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-29","last_updated":"2026-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.4,"output":2},"canonical_model_id":"mistral/mistral-medium-latest"},"mistral/mistral-large-latest":{"id":"mistral/mistral-large-latest","name":"Mistral Large (latest)","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-11","release_date":"2024-11-01","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.5,"output":1.5},"canonical_model_id":"mistral/mistral-large-latest"},"deepseek/deepseek-r1-0528":{"id":"deepseek/deepseek-r1-0528","name":"DeepSeek R1 (0528)","description":"May 2025 DeepSeek R1 update with improved mathematics, coding, and reasoning","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2025-05-28","last_updated":"2025-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":32768},"cost":{"input":1.35,"output":5.4,"cache_read":0.945},"canonical_model_id":"deepseek/deepseek-r1-0528"},"deepseek/deepseek-v4-pro-0423":{"id":"deepseek/deepseek-v4-pro-0423","name":"DeepSeek V4 Pro 0423","description":"DeepSeek V4 Pro initial snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":393216},"cost":{"input":1.65,"output":3.3},"canonical_model_id":"deepseek/deepseek-v4-pro-0423"},"deepseek/deepseek-v3.1":{"id":"deepseek/deepseek-v3.1","name":"DeepSeek V3.1","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.56,"output":1.68,"cache_read":0.13},"canonical_model_id":"deepseek/deepseek-v3.1"},"deepseek/deepseek-v4-flash-0423":{"id":"deepseek/deepseek-v4-flash-0423","name":"DeepSeek V4 Flash 0423","description":"Initial DeepSeek V4 Flash snapshot for economical reasoning, coding, and million-token agent workloads","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.139,"output":0.278},"canonical_model_id":"deepseek/deepseek-v4-flash-0423"},"deepseek/deepseek-v4-flash-0731-fast":{"id":"deepseek/deepseek-v4-flash-0731-fast","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.28,"output":0.56,"cache_read":0.07},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepseek/deepseek-v4-pro-0813":{"id":"deepseek/deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":1.74,"output":3.48,"cache_read":0.003625},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"deepseek/deepseek-r1":{"id":"deepseek/deepseek-r1","name":"DeepSeek R1","description":"Classic open reasoning model for transparent math, coding, and deliberate problem solving","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-07","release_date":"2025-01-20","last_updated":"2025-05-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":40960},"cost":{"input":1.35,"output":5.4},"canonical_model_id":"deepseek/deepseek-r1"},"deepseek/deepseek-v4.1-flash":{"id":"deepseek/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":1.32,"output":3.96,"cache_read":0.044},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-v3":{"id":"deepseek/deepseek-v3","name":"DeepSeek V3","description":"Open DeepSeek MoE chat model for coding, math, and general reasoning","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2024-12-26","last_updated":"2024-12-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":81920},"cost":{"input":0.27,"output":1.1},"canonical_model_id":"deepseek/deepseek-v3"},"deepseek/deepseek-v4-flash":{"id":"deepseek/deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.3,"output":1.2,"cache_read":0.006,"cache_write":0.1125},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek/deepseek-v3.2":{"id":"deepseek/deepseek-v3.2","name":"DeepSeek V3.2","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes, sparse attention, and tool-use","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0.28,"output":0.4,"cache_read":0.13},"canonical_model_id":"deepseek/deepseek-v3.2"},"deepseek/deepseek-v4-flash-0731":{"id":"deepseek/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.13,"output":0.26,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepseek/deepseek-v4.1-flash-1017":{"id":"deepseek/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.15,"output":0.6,"cache_read":0.003},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"google/gemini-flash-lite-latest":{"id":"google/gemini-flash-lite-latest","name":"Gemini Flash-Lite Latest","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"input_audio":0.5},"canonical_model_id":"google/gemini-flash-lite-latest"},"google/gemini-2.5-flash":{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":0,"max":24576}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"input_audio":1},"canonical_model_id":"google/gemini-2.5-flash"},"google/gemini-3.8-flash":{"id":"google/gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.8-flash"},"google/gemini-4-carbon":{"id":"google/gemini-4-carbon","name":"Gemini 4 Carbon","description":"Google's most capable reasoning model for complex software engineering, deep math and science, high factual accuracy, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-11-10","last_updated":"2026-11-10","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":10,"cache_read":0.1},"canonical_model_id":"google/gemini-4-carbon"},"google/gemma-3-27b-it":{"id":"google/gemma-3-27b-it","name":"Gemma 3 27B IT","description":"Largest open Gemma 3 instruction model for multilingual text generation and visual understanding","family":"gemma","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.08,"output":0.45,"cache_read":0.04},"canonical_model_id":"google/gemma-3-27b-it"},"google/gemini-2.5-pro":{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.25,"output":10,"cache_read":0.125,"tiers":[{"input":2.5,"output":15,"cache_read":0.25,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":15,"cache_read":0.25}},"canonical_model_id":"google/gemini-2.5-pro"},"google/gemini-3.5-flash":{"id":"google/gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"cache_read":0.15,"input_audio":1.5},"canonical_model_id":"google/gemini-3.5-flash"},"google/gemini-flash-latest":{"id":"google/gemini-flash-latest","name":"Gemini Flash Latest","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"cache_read":0.15,"input_audio":1.5},"canonical_model_id":"google/gemini-flash-latest"},"google/gemini-3.6-flash":{"id":"google/gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":7.5,"cache_read":0.15},"canonical_model_id":"google/gemini-3.6-flash"},"google/gemini-embedding-001":{"id":"google/gemini-embedding-001","type":"embedding","name":"Gemini Embedding 001","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"gemini","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"knowledge":"2025-05","release_date":"2025-05-20","last_updated":"2025-05-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":2048,"output":4096},"cost":{"input":0.15,"output":0},"canonical_model_id":"google/gemini-embedding-001"},"google/gemini-embedding-2":{"id":"google/gemini-embedding-2","type":"embedding","name":"Gemini Embedding 2","description":"Multimodal embedding model mapping text, images, video, audio, and PDFs into a unified embedding space","family":"gemini","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"knowledge":"2025-11","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":8192},"cost":{"input":0.2,"output":0},"canonical_model_id":"google/gemini-embedding-2"},"google/gemini-2.5-computer-use-preview-10-2025":{"id":"google/gemini-2.5-computer-use-preview-10-2025","name":"Gemini 2.5 Computer Use Preview (10-2025)","description":"Specialized Gemini 2.5 model for browser-control agents that automate UI tasks","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-10-07","last_updated":"2025-10-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":64000},"cost":{"input":1.25,"output":10},"canonical_model_id":"google/gemini-2.5-computer-use-preview-10-2025"},"google/gemini-3.1-flash-image":{"id":"google/gemini-3.1-flash-image","type":"image","name":"Gemini 3.1 Flash Image","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":32768,"output":32768},"cost":{"input":0.5,"output":3},"canonical_model_id":"google/gemini-3.1-flash-image"},"google/gemini-3.1-pro-preview-customtools":{"id":"google/gemini-3.1-pro-preview-customtools","name":"Gemini 3.1 Pro Preview Custom Tools","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview-customtools"},"google/gemma-3-4b-it":{"id":"google/gemma-3-4b-it","name":"Gemma 3 4B","description":"Open multimodal Gemma instruction model for efficient text generation and image understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0.04,"output":0.08},"canonical_model_id":"google/gemma-3-4b-it"},"google/gemini-3.1-pro-preview":{"id":"google/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"google/gemini-3.1-flash-lite":{"id":"google/gemini-3.1-flash-lite","name":"Gemini 3.1 Flash-Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"input_audio":0.5},"canonical_model_id":"google/gemini-3.1-flash-lite"},"google/gemini-2.5-flash-lite":{"id":"google/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash-Lite","description":"Lean Gemini 2.5 lane for cheap multimodal traffic and quick agents","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":512,"max":24576}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.1,"output":0.4,"cache_read":0.01,"input_audio":0.3},"canonical_model_id":"google/gemini-2.5-flash-lite"},"google/gemini-4-argon":{"id":"google/gemini-4-argon","name":"Gemini 4 Argon","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":10,"cache_read":0.1},"canonical_model_id":"google/gemini-4-argon"},"google/gemini-3.5-flash-lite":{"id":"google/gemini-3.5-flash-lite","name":"Gemini 3.5 Flash-Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03},"canonical_model_id":"google/gemini-3.5-flash-lite"},"google/gemma-4-31b-it":{"id":"google/gemma-4-31b-it","name":"Gemma 4 31B It","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.14,"output":0.4},"canonical_model_id":"google/gemma-4-31b-it"},"google/gemini-3-flash-preview":{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.05,"input_audio":1},"canonical_model_id":"google/gemini-3-flash-preview"},"google/gemini-2.5-flash-image":{"id":"google/gemini-2.5-flash-image","type":"image","name":"Gemini 2.5 Flash Image","description":"Nano Banana image model for fast generation, edits, and character-consistent assets","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-26","last_updated":"2025-08-26","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":32768,"output":32768},"cost":{"input":0.3,"output":2.5},"canonical_model_id":"google/gemini-2.5-flash-image"},"google/gemma-4-26b-a4b-it":{"id":"google/gemma-4-26b-a4b-it","name":"Gemma 4 26B A4B","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.13,"output":0.4},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"google/gemini-3-pro-image":{"id":"google/gemini-3-pro-image","type":"image","name":"Gemini 3 Pro Image","description":"Nano Banana Pro for higher-fidelity image generation and design-heavy edits","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":65536},"cost":{"input":2,"output":12},"canonical_model_id":"google/gemini-3-pro-image"},"google/gemma-3-12b-it":{"id":"google/gemma-3-12b-it","name":"Gemma 3 12B","description":"Open multimodal Gemma instruction model for multilingual text generation and image understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0.09,"output":0.29},"canonical_model_id":"google/gemma-3-12b-it"},"google/gemini-3.7-flash":{"id":"google/gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.7-flash"},"qwen/qwen3.6-plus":{"id":"qwen/qwen3.6-plus","name":"Qwen3.6 Plus","description":"Earlier Qwen multimodal workhorse for million-token agent and document tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":250000},"cost":{"input":0.276,"output":1.651,"cache_read":0.0552,"cache_write":0.345},"canonical_model_id":"alibaba/qwen3.6-plus"},"qwen/qwen3-30b-a3b":{"id":"qwen/qwen3-30b-a3b","name":"Qwen3 30B A3B","description":"Sparse MoE Qwen model with 3B active parameters for efficient chat and reasoning","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.108,"output":1.076,"cache_read":0.0216},"canonical_model_id":"alibaba/qwen3-30b-a3b"},"qwen/qwen3-vl-235b-a22b-instruct":{"id":"qwen/qwen3-vl-235b-a22b-instruct","name":"Qwen3-VL 235B A22B Instruct","description":"Qwen vision-language instruct model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.21,"output":1.9,"cache_read":0.105},"canonical_model_id":"alibaba/qwen3-vl-235b-a22b-instruct"},"qwen/qwen3-vl-235b-a22b-thinking":{"id":"qwen/qwen3-vl-235b-a22b-thinking","name":"Qwen3-VL 235B A22B Thinking","description":"Qwen vision-language thinking model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.287,"output":2.867,"cache_read":0.0574},"canonical_model_id":"alibaba/qwen3-vl-235b-a22b-thinking"},"qwen/qwen3-coder-480b-a35b-instruct":{"id":"qwen/qwen3-coder-480b-a35b-instruct","name":"Qwen3 Coder 480B A35B Instruct","description":"Open Qwen coding heavyweight for repository reasoning and agentic engineering","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.22,"output":1.8},"canonical_model_id":"alibaba/qwen3-coder-480b-a35b-instruct"},"qwen/qwen3-coder-plus":{"id":"qwen/qwen3-coder-plus","name":"Qwen3 Coder Plus","description":"Hosted Qwen coder for software agents, repo edits, and long-context code","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-23","last_updated":"2025-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":250000},"cost":{"input":0.574,"output":2.294,"cache_read":0.1148,"cache_write":0.7175},"canonical_model_id":"alibaba/qwen3-coder-plus"},"qwen/qwen3-vl-30b-a3b-instruct":{"id":"qwen/qwen3-vl-30b-a3b-instruct","name":"Qwen3-VL 30B-A3B Instruct","description":"Open vision-language MoE model for image and video understanding, documents, and visual agents","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-04","last_updated":"2025-10-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.15,"output":0.6,"cache_read":0.0216},"canonical_model_id":"alibaba/qwen3-vl-30b-a3b-instruct"},"qwen/qwen3.8-27b":{"id":"qwen/qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.4,"output":3,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3.8-27b"},"qwen/qwen3.6-max-preview":{"id":"qwen/qwen3.6-max-preview","name":"Qwen3.6 Max Preview","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":65536},"cost":{"input":1.31,"output":7.88},"canonical_model_id":"alibaba/qwen3.6-max-preview"},"qwen/qwen3.5-flash":{"id":"qwen/qwen3.5-flash","name":"Qwen3.5 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":250000},"cost":{"input":0.029,"output":0.287,"cache_read":0.0058,"cache_write":0.03625},"canonical_model_id":"alibaba/qwen3.5-flash"},"qwen/qwen-plus":{"id":"qwen/qwen-plus","name":"Qwen Plus","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-01-25","last_updated":"2025-09-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":250000},"cost":{"input":0.115,"output":0.287,"cache_read":0.023,"cache_write":0.14375},"canonical_model_id":"alibaba/qwen-plus"},"qwen/qwen3.8-flash":{"id":"qwen/qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":977000,"output":128000},"cost":{"input":0.15,"output":0.47,"cache_read":0.016},"canonical_model_id":"alibaba/qwen3.8-flash"},"qwen/qwen3-235b-a22b-instruct-2507":{"id":"qwen/qwen3-235b-a22b-instruct-2507","name":"Qwen3 235B A22B Instruct 2507","description":"Updated large open Qwen3 MoE instruct model for multilingual chat, coding, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.1,"output":0.6,"cache_read":0.0574},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"qwen/qwen3-next-80b-a3b-thinking":{"id":"qwen/qwen3-next-80b-a3b-thinking","name":"Qwen3-Next 80B-A3B (Thinking)","description":"Efficient Qwen thinking model for local reasoning, math, and coding agents","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.15,"output":1.2},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-thinking"},"qwen/qwen3.5-397b-a17b":{"id":"qwen/qwen3.5-397b-a17b","name":"Qwen3.5 397B A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.172,"output":1.032,"cache_read":0.0344},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"qwen/qwen3.5-9b":{"id":"qwen/qwen3.5-9b","name":"Qwen3.5 9B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.09,"output":0.13},"canonical_model_id":"alibaba/qwen3.5-9b"},"qwen/qwen3-vl-flash":{"id":"qwen/qwen3-vl-flash","name":"Qwen3-VL Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536},"cost":{"input":0.022,"output":0.215,"cache_read":0.0044,"cache_write":0.0275},"canonical_model_id":"alibaba/qwen3-vl-flash"},"qwen/qwen3.8-2.4t-a95b":{"id":"qwen/qwen3.8-2.4t-a95b","name":"Qwen3.8 2.4T A95B","description":"Open-weight sparse MoE (2.4T total, 95B active), the open-weight twin of Qwen3.8 Max for coding, research, complex reasoning, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":1010000},"cost":{"input":2.5,"output":6.25,"cache_read":0.5},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"qwen/qwen3.5-35b-a3b":{"id":"qwen/qwen3.5-35b-a3b","name":"Qwen3.5 35B A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.057,"output":0.459,"cache_read":0.020357},"canonical_model_id":"alibaba/qwen3.5-35b-a3b"},"qwen/qwen3.7-plus":{"id":"qwen/qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.4,"output":1.6},"canonical_model_id":"alibaba/qwen3.7-plus"},"qwen/qwen3-max-preview":{"id":"qwen/qwen3-max-preview","name":"Qwen3 Max Preview","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-05","last_updated":"2025-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":65536},"cost":{"input":1.08,"output":4.8},"canonical_model_id":"alibaba/qwen3-max-preview"},"qwen/qwen3.7-max":{"id":"qwen/qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":250000},"cost":{"input":0.825,"output":2.4755,"cache_read":0.165,"cache_write":1.03125},"canonical_model_id":"alibaba/qwen3.7-max"},"qwen/qwen3.6-flash":{"id":"qwen/qwen3.6-flash","name":"Qwen3.6 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.6","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":250000},"cost":{"input":0.165,"output":0.99,"cache_read":0.033,"cache_write":0.20625},"canonical_model_id":"alibaba/qwen3.6-flash"},"qwen/qwen3-max":{"id":"qwen/qwen3-max","name":"Qwen3 Max","description":"Flagship Qwen3 model for coding agents, complex reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536},"cost":{"input":0.359,"output":1.434,"cache_read":0.0718,"cache_write":0.44875},"canonical_model_id":"alibaba/qwen3-max"},"qwen/qwen3.6-27b":{"id":"qwen/qwen3.6-27b","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":64000},"cost":{"input":0.4126,"output":2.4754},"canonical_model_id":"alibaba/qwen3.6-27b"},"qwen/qwen3.6-35b-a3b":{"id":"qwen/qwen3.6-35b-a3b","name":"Qwen3.6 35B A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.248,"output":1.485,"cache_read":0.0496},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"qwen/qwen3.5-plus":{"id":"qwen/qwen3.5-plus","name":"Qwen3.5 Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-16","last_updated":"2026-02-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":250000},"cost":{"input":0.115,"output":0.688,"cache_read":0.023,"cache_write":0.14375},"canonical_model_id":"alibaba/qwen3.5-plus"},"qwen/qwen3-coder-next":{"id":"qwen/qwen3-coder-next","name":"Qwen3 Coder Next","description":"Open-weight Qwen coding model for agents, repository edits, and multi-turn tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-09","release_date":"2026-02-03","last_updated":"2026-02-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.15,"output":0.8,"cache_read":0.075},"canonical_model_id":"alibaba/qwen3-coder-next"},"qwen/qwen-flash":{"id":"qwen/qwen-flash","name":"Qwen Flash","description":"Efficient Qwen model for fast chat, extraction, and high-volume workloads","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":250000},"cost":{"input":0.022,"output":0.216,"cache_read":0.0044,"cache_write":0.0275},"canonical_model_id":"alibaba/qwen-flash"},"qwen/qwen3-next-80b-a3b-instruct":{"id":"qwen/qwen3-next-80b-a3b-instruct","name":"Qwen3-Next 80B-A3B Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.1,"output":1.1,"cache_read":0.05},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-instruct"},"qwen/qwen3-32b":{"id":"qwen/qwen3-32b","name":"Qwen3 32B","description":"Dense open Qwen model for self-hosted chat, reasoning, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"alibaba/qwen3-32b"},"qwen/qwen3-235b-a22b":{"id":"qwen/qwen3-235b-a22b","name":"Qwen3 235B A22B","description":"Large open Qwen MoE for multilingual reasoning, coding, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.287,"output":1.147,"cache_read":0.0574},"canonical_model_id":"alibaba/qwen3-235b-a22b"},"qwen/qwen3-vl-plus":{"id":"qwen/qwen3-vl-plus","name":"Qwen3-VL Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536},"cost":{"input":0.143,"output":1.434,"cache_read":0.0286,"cache_write":0.17875},"canonical_model_id":"alibaba/qwen3-vl-plus"},"qwen/qwen3.8-max":{"id":"qwen/qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max"},"qwen/qwen3.5-27b":{"id":"qwen/qwen3.5-27b","name":"Qwen3.5 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.086,"output":0.688,"cache_read":0.0172},"canonical_model_id":"alibaba/qwen3.5-27b"},"qwen/qwen3.5-4b":{"id":"qwen/qwen3.5-4b","name":"Qwen3.5 4B","description":"Small Qwen3.5 multimodal model for low-cost chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-02","last_updated":"2026-03-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.04,"output":0.07},"canonical_model_id":"alibaba/qwen3.5-4b"},"qwen/qwen3-coder-flash":{"id":"qwen/qwen3-coder-flash","name":"Qwen3 Coder Flash","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":250000},"cost":{"input":0.144,"output":0.574,"cache_read":0.0288,"cache_write":0.18},"canonical_model_id":"alibaba/qwen3-coder-flash"},"qwen/qwen3.5-122b-a10b":{"id":"qwen/qwen3.5-122b-a10b","name":"Qwen3.5 122B A10B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.115,"output":0.917,"cache_read":0.023},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"bytedance/dola-seed-2.0-pro":{"id":"bytedance/dola-seed-2.0-pro","name":"Seed 2.0 Pro","description":"Flagship ByteDance Seed 2.0 model for complex multimodal reasoning and long-horizon agent workflows","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"cost":{"input":0.63,"output":3.79},"canonical_model_id":"bytedance-seed/seed-2.0-pro"},"bytedance/dola-seed-2.0-lite":{"id":"bytedance/dola-seed-2.0-lite","name":"Seed 2.0 Lite","description":"Cost-efficient ByteDance Seed 2.0 model for production chat, analysis, and structured generation","family":"seed","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"cost":{"input":0.31,"output":2.5},"canonical_model_id":"bytedance-seed/seed-2.0-lite"},"bytedance/dola-seed-2.0-code":{"id":"bytedance/dola-seed-2.0-code","name":"Seed 2.0 Code","description":"Coding model for repository understanding, refactors, and agentic engineering tasks","family":"seed","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"cost":{"input":0.4,"output":2.4},"canonical_model_id":"bytedance-seed/seed-2.0-code"},"bytedance/dola-seed-2.0-code-preview":{"id":"bytedance/dola-seed-2.0-code-preview","name":"Dola Seed 2.0 Code (preview)","description":"Preview coding model for repository understanding, refactors, and engineering tasks","family":"seed","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-03-28","last_updated":"2026-03-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":32768},"cost":{"input":0.5,"output":3}},"bytedance/dola-seed-2.0-mini":{"id":"bytedance/dola-seed-2.0-mini","name":"Seed 2.0 Mini","description":"Lightweight ByteDance Seed 2.0 model for low-latency multimodal reasoning and high-volume tasks","family":"seed","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"cost":{"input":0.12,"output":0.5},"canonical_model_id":"bytedance-seed/seed-2.0-mini"},"zai/glm-5.2":{"id":"zai/glm-5.2","name":"GLM 5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1,"max":50000}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.05,"output":3.3,"cache_read":0.195},"canonical_model_id":"zhipuai/glm-5.2"},"zai/glm-5.1":{"id":"zai/glm-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26,"cache_write":0},"canonical_model_id":"zhipuai/glm-5.1"},"zai/glm-4.5":{"id":"zai/glm-4.5","name":"GLM-4.5","description":"Hybrid-reasoning GLM release that made the 4.5 line broadly useful","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":98304},"cost":{"input":0.6,"output":2.2,"cache_read":0.11,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.5"},"zai/glm-4.7":{"id":"zai/glm-4.7","name":"GLM-4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0.6,"output":2.2,"cache_read":0.11,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.7"},"zai/glm-5.3":{"id":"zai/glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.7,"output":2.2,"cache_read":0.13},"canonical_model_id":"zhipuai/glm-5.3"},"zai/glm-5.3-flash":{"id":"zai/glm-5.3-flash","name":"GLM-5.3 Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai/glm-5-turbo":{"id":"zai/glm-5-turbo","name":"GLM-5 Turbo","description":"Faster GLM-5 lane for coding agents that need lower latency","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24,"cache_write":0},"canonical_model_id":"zhipuai/glm-5-turbo"},"zai/glm-4.5-air":{"id":"zai/glm-4.5-air","name":"GLM-4.5 Air","description":"Lighter GLM-4.5 variant for fast coding assistance and cheaper agents","family":"glm-air","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":98304},"cost":{"input":0.2,"output":1.1,"cache_read":0.03,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.5-air"},"zai/glm-4.6":{"id":"zai/glm-4.6","name":"GLM-4.6","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0.6,"output":2.2,"cache_read":0.11,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.6"},"zai/glm-4.5v":{"id":"zai/glm-4.5v","name":"Glm 4.5V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-08-11","last_updated":"2025-08-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32000},"cost":{"input":0.6,"output":1.8,"cache_read":0.11,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.5v"},"zai/glm-4.7-flashx":{"id":"zai/glm-4.7-flashx","name":"GLM-4.7 FlashX","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0.07,"output":0.4,"cache_read":0.01,"cache_write":0},"canonical_model_id":"zhipuai/glm-4.7-flashx"},"zai/glm-5":{"id":"zai/glm-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":1,"output":3.2,"cache_read":0.2,"cache_write":0},"canonical_model_id":"zhipuai/glm-5"},"zai/glm-4.7-flash":{"id":"zai/glm-4.7-flash","name":"GLM 4.7 Flash","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.07,"output":0.4},"canonical_model_id":"zhipuai/glm-4.7-flash"},"openai/gpt-oss-safeguard-120b":{"id":"openai/gpt-oss-safeguard-120b","name":"GPT OSS Safeguard 120B","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-10-29","last_updated":"2025-10-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":4096,"output":4096},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"openai/gpt-oss-safeguard-120b"},"openai/gpt-5.5":{"id":"openai/gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":12.5,"output":75,"cache_read":1.25},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"openai/gpt-5.3-chat-latest":{"id":"openai/gpt-5.3-chat-latest","name":"GPT-5.3 Chat Latest","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-03","last_updated":"2026-03-03","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-chat-latest"},"openai/gpt-4.1-nano":{"id":"openai/gpt-4.1-nano","name":"GPT-4.1 Nano","description":"Tiny GPT-4.1 option for classification, routing, and very high-volume tasks","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.1,"output":0.4,"cache_read":0.025},"canonical_model_id":"openai/gpt-4.1-nano"},"openai/gpt-5.2":{"id":"openai/gpt-5.2","name":"GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"openai/o1":{"id":"openai/o1","name":"o1","description":"O-series reasoning model for hard analysis, math, coding, and planning","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2023-09","release_date":"2024-12-05","last_updated":"2024-12-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":15,"output":60,"cache_read":7.5},"canonical_model_id":"openai/o1"},"openai/gpt-4.1-mini":{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 Mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-4.1-mini"},"openai/o4-mini":{"id":"openai/o4-mini","name":"o4 Mini","description":"Fast o-series model for compact reasoning, coding, and tool use","family":"o-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":1.1,"output":4.4,"cache_read":0.275},"canonical_model_id":"openai/o4-mini"},"openai/gpt-5.4-mini":{"id":"openai/gpt-5.4-mini","name":"GPT-5.4 Mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":1.5,"output":9,"cache_read":0.15},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"openai/gpt-oss-safeguard-20b":{"id":"openai/gpt-oss-safeguard-20b","name":"GPT OSS Safeguard 20B","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-10-29","last_updated":"2025-10-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":4096,"output":4096},"cost":{"input":0.07,"output":0.2,"cache_read":0,"cache_write":0},"canonical_model_id":"openai/gpt-oss-safeguard-20b"},"openai/gpt-5":{"id":"openai/gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"openai/gpt-5.6-sol":{"id":"openai/gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"openai/gpt-6.1-terra":{"id":"openai/gpt-6.1-terra","name":"GPT-6.1 Terra","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25,"tiers":[{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5}},"canonical_model_id":"openai/gpt-6.1-terra"},"openai/gpt-4.1":{"id":"openai/gpt-4.1","name":"GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"openai/o3":{"id":"openai/o3","name":"o3","description":"Deliberate o-series reasoner for hard math, coding, and multi-step analysis","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/o3"},"openai/gpt-4o-2024-11-20":{"id":"openai/gpt-4o-2024-11-20","name":"GPT-4o (2024-11-20)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-11-20","last_updated":"2024-11-20","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o-2024-11-20"},"openai/gpt-6-luna":{"id":"openai/gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT-OSS 20B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32000},"cost":{"input":0.04,"output":0.15,"cache_read":0.02},"canonical_model_id":"openai/gpt-oss-20b"},"openai/o3-mini":{"id":"openai/o3-mini","name":"o3 Mini","description":"Smaller o-series reasoner for economical coding, math, and planning tasks","family":"o-mini","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2024-12-20","last_updated":"2025-01-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":1.1,"output":4.4,"cache_read":0.55},"canonical_model_id":"openai/o3-mini"},"openai/gpt-5.1-chat-latest":{"id":"openai/gpt-5.1-chat-latest","name":"GPT-5.1 Chat Latest","description":"Chat-tuned GPT-5.1 for polished assistants, writing, and product conversations","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1-chat-latest"},"openai/whisper-1":{"id":"openai/whisper-1","type":"transcription","name":"Whisper","description":"General-purpose speech recognition model for transcription and translation","family":"whisper","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2023-03-01","last_updated":"2023-03-01","modalities":{"input":["audio"],"output":["text"]},"open_weights":false,"limit":{"context":448000,"output":4096},"provider":{"npm":"@ai-sdk/openai","api":"https://api-gateway.merge.dev/v1"},"canonical_model_id":"openai/whisper-1"},"openai/gpt-audio":{"id":"openai/gpt-audio","type":"chat","name":"GPT Audio","description":"Audio model for speech input and output with the Chat Completions API","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-10-01","release_date":"2025-08-28","last_updated":"2025-08-28","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10},"canonical_model_id":"openai/gpt-audio"},"openai/gpt-4":{"id":"openai/gpt-4","name":"GPT-4","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2023-11","release_date":"2023-11-06","last_updated":"2024-04-09","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":8192},"cost":{"input":30,"output":60},"canonical_model_id":"openai/gpt-4"},"openai/gpt-6-sol":{"id":"openai/gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"openai/gpt-5-search-api":{"id":"openai/gpt-5-search-api","type":"chat","name":"GPT-5 Search API","description":"GPT-5 model trained for web search in the Chat Completions API","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2025-10-14","last_updated":"2025-10-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":272000,"output":128000},"cost":{"input":1.25,"output":10},"canonical_model_id":"openai/gpt-5-search-api"},"openai/gpt-4o-2024-05-13":{"id":"openai/gpt-4o-2024-05-13","name":"GPT-4o (2024-05-13)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-05-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"cost":{"input":5,"output":15},"canonical_model_id":"openai/gpt-4o-2024-05-13"},"openai/gpt-6-astra":{"id":"openai/gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"openai/gpt-5.1":{"id":"openai/gpt-5.1","name":"GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1"},"openai/gpt-5-mini":{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"openai/gpt-5.6-luna":{"id":"openai/gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-6.1-sol":{"id":"openai/gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-sol"},"openai/gpt-audio-mini":{"id":"openai/gpt-audio-mini","type":"chat","name":"GPT Audio Mini","description":"Cost-efficient audio model for speech input and output with the Chat Completions API","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-10-01","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.6,"output":2.4},"canonical_model_id":"openai/gpt-audio-mini"},"openai/gpt-5-nano":{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-nano"},"openai/gpt-5.4":{"id":"openai/gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":5,"output":30,"cache_read":0.5},"provider":{"body":{"service_tier":"priority"}}}}},"cost":{"input":2.5,"output":15,"cache_read":0.25,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5}},"canonical_model_id":"openai/gpt-5.4"},"openai/gpt-3.5-turbo":{"id":"openai/gpt-3.5-turbo","name":"GPT-3.5 Turbo","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2021-09-01","release_date":"2023-03-01","last_updated":"2023-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":16385,"output":4096},"cost":{"input":0.5,"output":1.5},"canonical_model_id":"openai/gpt-3.5-turbo"},"openai/gpt-4-turbo":{"id":"openai/gpt-4-turbo","name":"GPT-4 Turbo","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2023-11-06","last_updated":"2024-04-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"cost":{"input":10,"output":30},"canonical_model_id":"openai/gpt-4-turbo"},"openai/gpt-4o-2024-08-06":{"id":"openai/gpt-4o-2024-08-06","name":"GPT-4o (2024-08-06)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-08-06","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o-2024-08-06"},"openai/gpt-5.4-nano":{"id":"openai/gpt-5.4-nano","name":"GPT-5.4 Nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"openai/gpt-5.2-chat-latest":{"id":"openai/gpt-5.2-chat-latest","name":"GPT-5.2 Chat Latest","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2-chat-latest"},"openai/gpt-4o":{"id":"openai/gpt-4o","name":"GPT-4o","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT-OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32000},"cost":{"input":0.05,"output":0.25},"canonical_model_id":"openai/gpt-oss-120b"},"openai/gpt-5.6-terra":{"id":"openai/gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"openai/gpt-5-chat-latest":{"id":"openai/gpt-5-chat-latest","name":"GPT-5 Chat Latest","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":false,"tool_call":false,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5-chat-latest"},"openai/gpt-4o-mini":{"id":"openai/gpt-4o-mini","name":"GPT-4o Mini","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-4o-mini"},"cohere/command-r-plus-08-2024":{"id":"cohere/command-r-plus-08-2024","name":"Command R+ 08-2024","description":"Cohere's RAG workhorse for long-context enterprise search and tool use","family":"command-r","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2024-08-30","last_updated":"2024-08-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4000},"cost":{"input":2.5,"output":10},"canonical_model_id":"cohere/command-r-plus-08-2024"},"cohere/command-r7b-12-2024":{"id":"cohere/command-r7b-12-2024","name":"Command R7B 12-2024","description":"Cohere retrieval model for long-context chat and enterprise RAG workflows","family":"command-r","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2024-12-13","last_updated":"2024-12-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4000},"cost":{"input":0.0375,"output":0.15},"canonical_model_id":"cohere/command-r7b-12-2024"},"cohere/command-r-08-2024":{"id":"cohere/command-r-08-2024","name":"Command R 08-2024","description":"Cohere retrieval model for long-context chat and enterprise RAG workflows","family":"command-r","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2024-08-30","last_updated":"2024-08-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4000},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"cohere/command-r-08-2024"},"cohere/command-a-03-2025":{"id":"cohere/command-a-03-2025","name":"Command A 03-2025","description":"Cohere command model for multilingual enterprise agents, tools, and chat","family":"command-a","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2025-03-13","last_updated":"2025-03-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":8000},"cost":{"input":2.5,"output":10},"canonical_model_id":"cohere/command-a-03-2025"},"moonshot/kimi-k3.1-pro":{"id":"moonshot/kimi-k3.1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":2,"output":10,"cache_read":0.2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"moonshot/kimi-k2.6":{"id":"moonshot/kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1,"max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"moonshot/kimi-k3":{"id":"moonshot/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"moonshot/kimi-k2.5":{"id":"moonshot/kimi-k2.5","name":"Kimi K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1,"max":262144}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.6,"output":3,"cache_read":0.1},"canonical_model_id":"moonshotai/kimi-k2.5"},"moonshot/kimi-k2.7-code":{"id":"moonshot/kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1,"max":32768}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"moonshot/kimi-k2.7-code-highspeed":{"id":"moonshot/kimi-k2.7-code-highspeed","name":"Kimi K2.7 Code Highspeed","description":"Lower-latency Kimi Code variant for interactive edits and coding-agent loops","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1,"max":32768}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":1.9,"output":8,"cache_read":0.38},"canonical_model_id":"moonshotai/kimi-k2.7-code-highspeed"},"minimax/minimax-m2.1":{"id":"minimax/minimax-m2.1","name":"MiniMax M2.1","description":"Earlier MiniMax agent model for practical coding and productivity tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":8192},"cost":{"input":0.3,"output":1.2,"cache_read":0.03,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.1"},"minimax/minimax-m2.5-highspeed":{"id":"minimax/minimax-m2.5-highspeed","name":"MiniMax M2.5 Highspeed","description":"High-speed MiniMax model for low-latency coding and agent workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-13","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":8192},"cost":{"input":0.6,"output":2.4,"cache_read":0.03,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.5-highspeed"},"minimax/minimax-m2.5":{"id":"minimax/minimax-m2.5","name":"MiniMax M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":8192},"cost":{"input":0.3,"output":1.2,"cache_read":0.03,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.5"},"minimax/minimax-m2":{"id":"minimax/minimax-m2","name":"MiniMax M2","description":"Efficient open MiniMax model built for coding agents and tool-heavy workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-27","last_updated":"2025-10-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":8192},"cost":{"input":0.3,"output":1.2,"cache_read":0.03,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2"},"minimax/minimax-m3.1-flash":{"id":"minimax/minimax-m3.1-flash","name":"MiniMax M3.1 Flash","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"minimax/minimax-m3":{"id":"minimax/minimax-m3","name":"MiniMax M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1,"max":128000}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M3"},"minimax/minimax-m2.7-highspeed":{"id":"minimax/minimax-m2.7-highspeed","name":"MiniMax M2.7 Highspeed","description":"Low-latency M2.7 variant for interactive coding plans and agent loops","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":8192},"cost":{"input":0.6,"output":2.4,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.7-highspeed"},"minimax/minimax-m2.7":{"id":"minimax/minimax-m2.7","name":"MiniMax M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":8192},"cost":{"input":0.3,"output":1.2,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.7"},"thinkingmachines/inkling":{"id":"thinkingmachines/inkling","name":"Inkling","description":"Multimodal MoE reasoning model (975B total, 41B active) for text, image, and audio","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048000,"output":32000},"cost":{"input":1,"output":4.05,"cache_read":0.17},"canonical_model_id":"thinkingmachines/inkling"},"meta/llama-3.1-8b-instruct":{"id":"meta/llama-3.1-8b-instruct","name":"Llama 3.1 8B","description":"Compact open Llama model for lightweight chat, drafting, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":2048},"cost":{"input":0.22,"output":0.22},"canonical_model_id":"meta/llama-3.1-8b-instruct"},"meta/muse-spark-open":{"id":"meta/muse-spark-open","name":"Muse Spark Open","description":"Muse Spark Open is an 816B total / 42B active open-weight multimodal reasoning model from Meta for coding and long-horizon agentic work, with 1M-token context.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-open"},"meta/llama-3.1-70b-instruct":{"id":"meta/llama-3.1-70b-instruct","name":"Llama 3.1 70B","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":2048},"cost":{"input":0.99,"output":0.99},"canonical_model_id":"meta/llama-3.1-70b-instruct"},"meta/llama-3.3-70b-instruct":{"id":"meta/llama-3.3-70b-instruct","name":"Llama 3.3 70B Instruct","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.22,"output":0.5,"cache_read":0.11},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"nvidia/nemotron-3.5-lightning-30b-a3b":{"id":"nvidia/nemotron-3.5-lightning-30b-a3b","name":"Nemotron 3.5 Lightning 30B A3B","description":"Fast NVIDIA Nemotron MoE for reliable agentic tasks across enterprise workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":262144},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3.5-lightning"},"nvidia/nemotron-3-nano-30b-a3b":{"id":"nvidia/nemotron-3-nano-30b-a3b","name":"Nemotron 3 Nano 30B A3B","description":"Small Nemotron 3 MoE for efficient coding, math, and long-context agents","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-06-25","release_date":"2025-12-15","last_updated":"2025-12-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":32000},"cost":{"input":0.05,"output":0.2},"canonical_model_id":"nvidia/nemotron-3-nano-30b-a3b"},"nvidia/nemotron-nano-9b-v2":{"id":"nvidia/nemotron-nano-9b-v2","name":"Nemotron Nano 9B","description":"Compact Nemotron model for efficient reasoning and deployable AI agents","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2024-09","release_date":"2025-08-18","last_updated":"2025-08-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0.06,"output":0.23},"canonical_model_id":"nvidia/nemotron-nano-9b-v2"},"xai/grok-4.20-0309-non-reasoning":{"id":"xai/grok-4.20-0309-non-reasoning","name":"Grok 4.20 Non-Reasoning","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2},"canonical_model_id":"xai/grok-4.20-0309-non-reasoning"},"xai/grok-4.5":{"id":"xai/grok-4.5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.5"},"xai/grok-4.3":{"id":"xai/grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.3"},"xai/grok-4.20-0309-reasoning":{"id":"xai/grok-4.20-0309-reasoning","name":"Grok 4.20","description":"Reasoning Grok for document-heavy analysis and long-horizon tool use","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}},"canonical_model_id":"xai/grok-4.20-0309-reasoning"},"xai/grok-4.7":{"id":"xai/grok-4.7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":2,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.7"},"xai/grok-4.6":{"id":"xai/grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.6"},"xai/grok-build-0.1":{"id":"xai/grok-build-0.1","name":"Grok Build 0.1","description":"Fast Grok coding model tuned for agentic engineering and iterative edits","family":"grok-build","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":1,"output":2,"cache_read":0.2},"canonical_model_id":"xai/grok-build-0.1"},"sakana/fugu-max":{"id":"sakana/fugu-max","name":"Fugu Max","description":"Multi-agent model for routing expert agents across complex analytical tasks","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"release_date":"2026-09-11","last_updated":"2026-09-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"sakana/fugu-max"},"sakana/fugu-ultra":{"id":"sakana/fugu-ultra","name":"Fugu Ultra","description":"Quality-first multi-agent model for hard research, analysis, and competitions","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":false,"release_date":"2026-06-15","last_updated":"2026-06-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"sakana/fugu-ultra"},"sakana/sakana-namazu":{"id":"sakana/sakana-namazu","name":"Sakana Namazu","description":"Japanese-specialized reasoning model based on Kimi K2.6 and tuned for Japanese language, culture, and business workflows","family":"sakana-namazu","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536},"cost":{"input":0.95,"output":4,"cache_read":0.15},"canonical_model_id":"sakana/sakana-namazu"}}},"privatemode-ai":{"id":"privatemode-ai","env":["PRIVATEMODE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"http://localhost:8080/v1","name":"Privatemode AI","doc":"https://docs.privatemode.ai/api/overview","models":{"whisper-large-v3":{"id":"whisper-large-v3","type":"transcription","name":"Whisper large-v3","description":"Open Whisper checkpoint for robust multilingual transcription and captioning","family":"whisper","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2023-11-06","last_updated":"2023-11-06","modalities":{"input":["audio"],"output":["text"]},"open_weights":true,"limit":{"context":448,"output":4096},"provider":{"npm":"@ai-sdk/openai"},"cost":{"input":0.01618,"output":0},"canonical_model_id":"openai/whisper-large-v3"},"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":262144},"status":"deprecated","cost":{"input":1.791,"output":8.9436,"cache_read":0.1733},"canonical_model_id":"moonshotai/kimi-k2.6"},"qwen3-embedding-4b":{"id":"qwen3-embedding-4b","type":"embedding","name":"Qwen3-Embedding 4B","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"knowledge":"2025-06","release_date":"2025-06-05","last_updated":"2025-06-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":2560},"cost":{"input":0.1502,"output":0},"canonical_model_id":"alibaba/qwen3-embedding-4b"},"glm-latest":{"id":"glm-latest","name":"GLM (latest)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.791,"output":6.6326,"cache_read":0.1733},"canonical_model_id":"zhipuai/glm-5.3"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.791,"output":6.6326,"cache_read":0.1733},"canonical_model_id":"zhipuai/glm-5.3"},"kimi-latest":{"id":"kimi-latest","name":"Kimi (latest)","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":262144},"status":"deprecated","cost":{"input":1.791,"output":8.9436,"cache_read":0.1733},"canonical_model_id":"moonshotai/kimi-k2.6"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.2311,"output":0.7511,"cache_read":0.0578},"canonical_model_id":"zhipuai/glm-5.3-flash"},"glm-flash-latest":{"id":"glm-flash-latest","name":"GLM Flash (latest)","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.2311,"output":0.7511,"cache_read":0.0578},"canonical_model_id":"zhipuai/glm-5.3-flash"},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"gpt-oss-120b","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"cost":{"input":0.2311,"output":0.7511,"cache_read":0.0462},"canonical_model_id":"openai/gpt-oss-120b"},"voxtral-mini-3b":{"id":"voxtral-mini-3b","type":"transcription","name":"Voxtral Mini 3B","description":"Speech-to-text model for audio transcription, translation, and audio understanding","family":"voxtral","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-07-15","last_updated":"2025-07-15","modalities":{"input":["audio"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":32000},"provider":{"npm":"@ai-sdk/openai"},"cost":{"input":0.00462,"output":0},"canonical_model_id":"mistral/voxtral-mini-3b-2507"},"deepseek-ocr-2":{"id":"deepseek-ocr-2","name":"DeepSeek OCR 2","description":"High-accuracy OCR model for extracting text from documents, screenshots, receipts, and natural scenes","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":8192},"status":"beta","cost":{"input":0.8897,"output":1.4675,"cache_read":0.0924},"canonical_model_id":"deepseek/deepseek-ocr-2"}}},"anyapi":{"id":"anyapi","env":["ANYAPI_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.anyapi.ai/v1","name":"AnyAPI","doc":"https://docs.anyapi.ai","models":{"anthropic/claude-opus-4-6":{"id":"anthropic/claude-opus-4-6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024,"max":127999}],"tool_call":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":30,"output":150,"cache_read":3,"cache_write":37.5},"provider":{"body":{"speed":"fast"},"headers":{"anthropic-beta":"fast-mode-2026-02-01"}}}}},"canonical_model_id":"anthropic/claude-opus-4-6"},"anthropic/claude-sonnet-4-5":{"id":"anthropic/claude-sonnet-4-5","name":"Claude Sonnet 4.5 (latest)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"anthropic/claude-sonnet-4-6":{"id":"anthropic/claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"anthropic/claude-opus-4-7":{"id":"anthropic/claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":30,"output":150,"cache_read":3,"cache_write":37.5},"provider":{"body":{"speed":"fast"},"headers":{"anthropic-beta":"fast-mode-2026-02-01"}}}}},"canonical_model_id":"anthropic/claude-opus-4-7"},"anthropic/claude-haiku-4-5":{"id":"anthropic/claude-haiku-4-5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024,"max":63999}],"tool_call":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"canonical_model_id":"anthropic/claude-haiku-4-5"},"perplexity/sonar-pro":{"id":"perplexity/sonar-pro","name":"Sonar Pro","description":"Deeper Sonar search model with broader retrieval and stronger synthesis","family":"sonar-pro","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2025-09-01","release_date":"2024-01-01","last_updated":"2025-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":8192},"canonical_model_id":"perplexity/sonar-pro"},"perplexity/sonar-reasoning-pro":{"id":"perplexity/sonar-reasoning-pro","name":"Sonar Reasoning Pro","description":"Web-grounded Sonar for multi-step research questions that need cited reasoning","family":"sonar-reasoning","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"knowledge":"2025-09-01","release_date":"2024-01-01","last_updated":"2025-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"canonical_model_id":"perplexity/sonar-reasoning-pro"},"deepseek/deepseek-r1":{"id":"deepseek/deepseek-r1","name":"DeepSeek Reasoner","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-09","release_date":"2025-12-01","last_updated":"2026-02-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"canonical_model_id":"deepseek/deepseek-reasoner"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-chat":{"id":"deepseek/deepseek-chat","name":"DeepSeek Chat","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2025-12-01","last_updated":"2026-02-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"canonical_model_id":"deepseek/deepseek-chat"},"deepseek/deepseek-v4-flash":{"id":"deepseek/deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"canonical_model_id":"deepseek/deepseek-v4-flash"},"google/gemini-2.5-flash":{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"canonical_model_id":"google/gemini-2.5-flash"},"google/gemini-2.5-pro":{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"canonical_model_id":"google/gemini-2.5-pro"},"google/gemini-3-pro-preview":{"id":"google/gemini-3-pro-preview","name":"Gemini 3 Pro Preview","description":"Preview Gemini flagship for complex reasoning, coding, and rich multimodal prompts","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-11-18","last_updated":"2025-11-18","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"canonical_model_id":"google/gemini-3-pro-preview"},"google/gemini-2.5-flash-lite":{"id":"google/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash-Lite","description":"Lean Gemini 2.5 lane for cheap multimodal traffic and quick agents","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"canonical_model_id":"google/gemini-2.5-flash-lite"},"google/gemini-3-flash-preview":{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"canonical_model_id":"google/gemini-3-flash-preview"},"mistralai/mistral-large-2512":{"id":"mistralai/mistral-large-2512","name":"Mistral Large 3","description":"Mistral's largest general model for enterprise agents, coding, and multilingual reasoning","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-11","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"canonical_model_id":"mistral/mistral-large-2512"},"mistralai/devstral-2512":{"id":"mistralai/devstral-2512","name":"Devstral 2","description":"Mistral's coding-agent model for repository work, terminal tasks, and software fixes","family":"devstral","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-12","release_date":"2025-12-09","last_updated":"2025-12-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","canonical_model_id":"mistral/devstral-2512"},"openai/gpt-5.2":{"id":"openai/gpt-5.2","name":"GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"canonical_model_id":"openai/gpt-5.2"},"openai/gpt-4.1-mini":{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"canonical_model_id":"openai/gpt-4.1-mini"},"openai/o4-mini":{"id":"openai/o4-mini","name":"o4-mini","description":"Fast o-series model for compact reasoning, coding, and tool use","family":"o-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"canonical_model_id":"openai/o4-mini"},"openai/gpt-5":{"id":"openai/gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"canonical_model_id":"openai/gpt-5"},"openai/gpt-4.1":{"id":"openai/gpt-4.1","name":"GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"canonical_model_id":"openai/gpt-4.1"},"openai/o3":{"id":"openai/o3","name":"o3","description":"Deliberate o-series reasoner for hard math, coding, and multi-step analysis","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"canonical_model_id":"openai/o3"},"openai/o3-mini":{"id":"openai/o3-mini","name":"o3-mini","description":"Smaller o-series reasoner for economical coding, math, and planning tasks","family":"o-mini","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2024-12-20","last_updated":"2025-01-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"canonical_model_id":"openai/o3-mini"},"openai/gpt-5.1":{"id":"openai/gpt-5.1","name":"GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"canonical_model_id":"openai/gpt-5.1"},"openai/gpt-5-mini":{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"canonical_model_id":"openai/gpt-5-mini"},"openai/gpt-5.4":{"id":"openai/gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"experimental":{"modes":{"fast":{"cost":{"input":5,"output":30,"cache_read":0.5},"provider":{"body":{"service_tier":"priority"}}}}},"canonical_model_id":"openai/gpt-5.4"},"cohere/command-r-plus-08-2024":{"id":"cohere/command-r-plus-08-2024","name":"Command R+","description":"Cohere's RAG workhorse for long-context enterprise search and tool use","family":"command-r","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-06-01","release_date":"2024-08-30","last_updated":"2024-08-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4000},"canonical_model_id":"cohere/command-r-plus-08-2024"},"xai/grok-4.3":{"id":"xai/grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"canonical_model_id":"xai/grok-4.3"}}},"nvidia":{"id":"nvidia","env":["NVIDIA_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://integrate.api.nvidia.com/v1","name":"Nvidia","doc":"https://docs.api.nvidia.com/nim/","models":{"minimaxai/minimax-m3.1-flash":{"id":"minimaxai/minimax-m3.1-flash","name":"MiniMax-M3.1-Flash","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0,"output":0},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"google/google-paligemma":{"id":"google/google-paligemma","name":"paligemma","description":"Vision-language model for answering questions about images and text","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2024-05-14","last_updated":"2024-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0,"output":0}},"google/gemma-3-4b-it":{"id":"google/gemma-3-4b-it","name":"Gemma 3 4B IT","description":"Open multimodal Gemma instruction model for efficient text generation and image understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"google/gemma-3-4b-it"},"google/diffusiongemma-26b-a4b-it":{"id":"google/diffusiongemma-26b-a4b-it","name":"DiffusionGemma 26B A4B IT","description":"Gemma 4 based discrete text diffusion model for fast chat, reasoning, and tool use","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-09","last_updated":"2026-07-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":250000,"output":32768},"cost":{"input":0,"output":0},"canonical_model_id":"google/diffusiongemma-26b-a4b-it"},"google/gemma-4-31b-it":{"id":"google/gemma-4-31b-it","name":"Gemma-4-31B-IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":16384},"cost":{"input":0,"output":0},"canonical_model_id":"google/gemma-4-31b-it"},"google/gemma-3-12b-it":{"id":"google/gemma-3-12b-it","name":"Gemma 3 12B IT","description":"Open multimodal Gemma instruction model for multilingual text generation and image understanding","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"google/gemma-3-12b-it"},"qwen/qwen-image":{"id":"qwen/qwen-image","type":"image","name":"Qwen Image","description":"Text-to-image foundation model with multilingual text rendering","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":0,"output":0}},"qwen/qwen-image-edit":{"id":"qwen/qwen-image-edit","type":"image","name":"Qwen Image Edit","description":"Image editing model with multilingual text editing and subject consistency","family":"qwen","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"release_date":"2025-08-19","last_updated":"2025-08-19","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":0,"output":0},"cost":{"input":0,"output":0}},"deepseek-ai/deepseek-v4.1-flash":{"id":"deepseek-ai/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0,"output":0},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"poolside/laguna-xs-2.1":{"id":"poolside/laguna-xs-2.1","name":"Laguna XS 2.1","description":"Agentic coding model from Poolside in the XS size class for local deployment","family":"laguna","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-02","last_updated":"2026-07-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0,"output":0},"canonical_model_id":"poolside/laguna-xs-2.1"},"mistralai/magistral-small-2506":{"id":"mistralai/magistral-small-2506","name":"Magistral Small 2506","description":"Open Mistral reasoning model for transparent step-by-step problem solving","family":"magistral","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-06-10","last_updated":"2025-06-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"input":32768,"output":32768},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"mistral/magistral-small-2506"},"mistralai/mistral-medium-3-instruct":{"id":"mistralai/mistral-medium-3-instruct","name":"Mistral Medium 3","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-medium","attachment":true,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-07","last_updated":"2025-05-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"input":131072,"output":32768},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"mistral/mistral-medium-3"},"mistralai/mistral-7b-instruct-v0.3":{"id":"mistralai/mistral-7b-instruct-v0.3","name":"Mistral-7B-Instruct-v0.3","description":"Open 7B Mistral instruction model with function calling","family":"mistral","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2024-05-22","last_updated":"2024-05-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"mistral/mistral-7b-instruct-v0.3"},"moonshotai/kimi-k2.6":{"id":"moonshotai/kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"moonshotai/kimi-k2.6"},"moonshotai/kimi-k3":{"id":"moonshotai/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"moonshotai/kimi-k3"},"openai/whisper-large-v3":{"id":"openai/whisper-large-v3","type":"transcription","name":"Whisper Large v3","description":"Open Whisper checkpoint for robust multilingual transcription and captioning","family":"whisper","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2023-09","release_date":"2023-11-06","last_updated":"2023-11-06","modalities":{"input":["audio"],"output":["text"]},"open_weights":true,"limit":{"context":448,"output":4096},"cost":{"input":0,"output":0},"canonical_model_id":"openai/whisper-large-v3"},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT OSS 20B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0,"output":0},"canonical_model_id":"openai/gpt-oss-20b"},"black-forest-labs/flux_1-schnell":{"id":"black-forest-labs/flux_1-schnell","type":"image","name":"FLUX.1-schnell","description":"Fast few-step FLUX.1 text-to-image model under Apache 2.0","family":"flux","attachment":false,"reasoning":false,"tool_call":false,"structured_output":false,"temperature":false,"knowledge":"2024-07","release_date":"2024-08-01","last_updated":"2024-08-01","modalities":{"input":["text"],"output":["image"]},"open_weights":true,"limit":{"context":0,"output":0},"provider":{"api":"https://ai.api.nvidia.com/v1/genai/black-forest-labs/flux.1-schnell"},"cost":{"input":0,"output":0},"canonical_model_id":"black-forest-labs/flux-1-schnell"},"black-forest-labs/flux_2-klein-4b":{"id":"black-forest-labs/flux_2-klein-4b","type":"image","name":"FLUX.2 Klein 4B","description":"Fast 4B open-weight image generation and editing model","family":"flux","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2025-06","release_date":"2026-01-15","last_updated":"2026-01-15","modalities":{"input":["text","image"],"output":["image"]},"open_weights":true,"limit":{"context":0,"output":0},"provider":{"api":"https://ai.api.nvidia.com/v1/genai/black-forest-labs/flux.2-klein-4b"},"cost":{"input":0,"output":0},"canonical_model_id":"black-forest-labs/flux-2-klein-4b"},"black-forest-labs/flux.1-dev":{"id":"black-forest-labs/flux.1-dev","type":"image","name":"FLUX.1-dev","description":"Open-weight FLUX.1 text-to-image model for high-quality guidance-distilled generation","family":"flux","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2024-08","release_date":"2024-08-01","last_updated":"2024-08-01","modalities":{"input":["text"],"output":["image"]},"open_weights":true,"limit":{"context":0,"output":0},"provider":{"api":"https://ai.api.nvidia.com/v1/genai/black-forest-labs/flux.1-dev"},"cost":{"input":0,"output":0},"canonical_model_id":"black-forest-labs/flux-1-dev"},"black-forest-labs/flux_1-kontext-dev":{"id":"black-forest-labs/flux_1-kontext-dev","type":"image","name":"FLUX.1-Kontext-dev","description":"Open-weight FLUX.1 Kontext model for instruction-based image editing","family":"flux","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-05-29","last_updated":"2025-05-29","modalities":{"input":["text","image"],"output":["image"]},"open_weights":true,"limit":{"context":0,"output":0},"provider":{"api":"https://ai.api.nvidia.com/v1/genai/black-forest-labs/flux.1-kontext-dev"},"cost":{"input":0,"output":0},"canonical_model_id":"black-forest-labs/flux-1-kontext-dev"},"meta/llama-3.2-90b-vision-instruct":{"id":"meta/llama-3.2-90b-vision-instruct","name":"Llama-3.2-90B-Vision-Instruct","description":"Large open multimodal Llama model for image reasoning, document QA, and captioning","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"meta/llama-3.2-90b-vision-instruct"},"meta/llama-guard-4-12b":{"id":"meta/llama-guard-4-12b","name":"Llama Guard 4 12B","description":"Multimodal Llama 4-based safety classifier for moderating prompts and responses","family":"llama","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-04-29","last_updated":"2025-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":16384},"cost":{"input":0,"output":0},"canonical_model_id":"meta/llama-guard-4-12b"},"meta/llama-3.2-11b-vision-instruct":{"id":"meta/llama-3.2-11b-vision-instruct","name":"Llama 3.2 11b Vision Instruct","description":"Open multimodal Llama model for image understanding, captioning, and visual QA","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"cost":{"input":0,"output":0},"canonical_model_id":"meta/llama-3.2-11b-vision-instruct"},"meta/muse-glimmer-30b":{"id":"meta/muse-glimmer-30b","name":"Muse Glimmer 30B","description":"Muse Glimmer is a 30-billion-parameter open-weight multimodal model from Meta Superintelligence Labs, distilled from Muse Spark for always-on local agents, tool use, coding, and image understanding.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-08-10","last_updated":"2026-08-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"meta/muse-glimmer-30b"},"z-ai/glm-5.3":{"id":"z-ai/glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"zhipuai/glm-5.3"},"z-ai/glm-5.3-flash":{"id":"z-ai/glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"zhipuai/glm-5.3-flash"},"nvidia/cosmos-reason2-8b":{"id":"nvidia/cosmos-reason2-8b","name":"Cosmos Reason2 8B","description":"Vision language model for physical-world understanding with structured reasoning on video and images","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"status":"deprecated","cost":{"input":0,"output":0}},"nvidia/rerank-qa-mistral-4b":{"id":"nvidia/rerank-qa-mistral-4b","type":"reranking","name":"rerank-qa-mistral-4b","description":"Reranking model for improving retrieval quality in search and recommendation systems","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-03-17","last_updated":"2025-01-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"status":"deprecated","provider":{"api":"https://ai.api.nvidia.com/v1/retrieval/nvidia/reranking"},"cost":{"input":0,"output":0}},"nvidia/magpie-tts-zeroshot":{"id":"nvidia/magpie-tts-zeroshot","type":"speech","name":"magpie-tts-zeroshot","description":"Expressive text-to-speech that clones a voice from a short audio sample","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-05-22","last_updated":"2025-06-12","modalities":{"input":["text","audio"],"output":["audio"]},"open_weights":true,"limit":{"context":0,"output":4096},"cost":{"input":0,"output":0}},"nvidia/llama-3.1-nemotron-70b-instruct":{"id":"nvidia/llama-3.1-nemotron-70b-instruct","name":"Llama 3.1 Nemotron 70B Instruct","description":"Nemotron model for efficient reasoning, coding, and specialized AI agents","family":"nemotron","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-04-15","last_updated":"2025-04-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"nvidia/llama-3.1-nemotron-70b-instruct"},"nvidia/nemotron-3-ultra-550b-a55b":{"id":"nvidia/nemotron-3-ultra-550b-a55b","name":"Nemotron 3 Ultra 550B A55B","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","medium","high"]},{"type":"budget_tokens","min":-1,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"nvidia/studiovoice":{"id":"nvidia/studiovoice","name":"studiovoice","description":"Enhances noisy or reverberant speech recordings to studio-quality speech","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-10-03","last_updated":"2025-06-13","modalities":{"input":["audio"],"output":["audio"]},"open_weights":true,"limit":{"context":0,"output":0},"cost":{"input":0,"output":0}},"nvidia/nemotron-3.5-lightning-30b-a3b":{"id":"nvidia/nemotron-3.5-lightning-30b-a3b","name":"Nemotron 3.5 Lightning 30B A3B","description":"Fast NVIDIA Nemotron MoE for reliable agentic tasks across enterprise workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3.5-lightning"},"nvidia/nemotron-voicechat":{"id":"nvidia/nemotron-voicechat","name":"nemotron-voicechat","description":"Nemotron multimodal model for visual reasoning and agentic AI workflows","family":"nemotron","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-voicechat"},"nvidia/sparsedrive":{"id":"nvidia/sparsedrive","name":"sparsedrive","description":"End-to-end autonomous driving stack for perception, prediction, and planning","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-03-18","last_updated":"2025-07-20","modalities":{"input":["video"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0,"output":0}},"nvidia/cosmos-transfer2_5-2b":{"id":"nvidia/cosmos-transfer2_5-2b","type":"video","name":"cosmos-transfer2.5-2b","description":"Generates physics-aware video world states from text and spatial control videos","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-02-26","last_updated":"2026-02-26","modalities":{"input":["text","image","video"],"output":["video"]},"open_weights":true,"limit":{"context":0,"output":4096},"cost":{"input":0,"output":0}},"nvidia/bevformer":{"id":"nvidia/bevformer","name":"bevformer","description":"Multi-frame bird's-eye-view 3D perception transformer for autonomous driving","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-03-18","last_updated":"2025-07-20","modalities":{"input":["video"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0,"output":0}},"nvidia/llama-3.1-nemotron-ultra-253b-v1":{"id":"nvidia/llama-3.1-nemotron-ultra-253b-v1","name":"Llama 3.1 Nemotron Ultra 253B","description":"Flagship Nemotron model for high-throughput reasoning and complex agents","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2025-04-07","last_updated":"2025-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"nvidia/llama-3.1-nemotron-ultra-253b"},"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning":{"id":"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning","name":"Nemotron 3 Nano Omni","description":"Open Nemotron omni model combining reasoning with text, vision, and audio","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":-1,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-28","last_updated":"2026-04-28","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning"},"nvidia/llama-nemotron-embed-vl-1b-v2":{"id":"nvidia/llama-nemotron-embed-vl-1b-v2","type":"embedding","name":"llama-nemotron-embed-vl-1b-v2","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"nemotron","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-12-18","last_updated":"2025-12-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":2048},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/llama-nemotron-embed-vl-1b-v2"},"nvidia/nemotron-3.5-super-vl-120b-a12b":{"id":"nvidia/nemotron-3.5-super-vl-120b-a12b","name":"Nemotron 3.5 Super VL 120B A12B","description":"NVIDIA vision-language reasoning model for text, image, and video understanding and agentic tool use","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3.5-super-vl-120b-a12b"},"nvidia/synthetic-video-detector":{"id":"nvidia/synthetic-video-detector","name":"synthetic-video-detector","description":"Detects AI-generated (synthetic) video","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["video"],"output":["text"]},"open_weights":true,"limit":{"context":0,"output":4096},"cost":{"input":0,"output":0}},"nvidia/active-speaker-detection":{"id":"nvidia/active-speaker-detection","name":"Active Speaker Detection","description":"Detects and tracks which person is speaking across video frames","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["video"],"output":["text"]},"open_weights":true,"limit":{"context":0,"output":4096},"cost":{"input":0,"output":0}},"nvidia/riva-translate-4b-instruct-v1.1":{"id":"nvidia/riva-translate-4b-instruct-v1.1","name":"riva-translate-4b-instruct-v1_1","description":"Translation model for multilingual conversion, localization, and cross-language workflows","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-12-12","last_updated":"2025-12-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"status":"deprecated","cost":{"input":0,"output":0}},"nvidia/llama-nemotron-rerank-vl-1b-v2":{"id":"nvidia/llama-nemotron-rerank-vl-1b-v2","type":"reranking","name":"llama-nemotron-rerank-vl-1b-v2","description":"Reranking model for improving retrieval quality in search and recommendation systems","family":"nemotron","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-12-18","last_updated":"2025-12-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":10240,"output":4096},"provider":{"api":"https://ai.api.nvidia.com/v1/retrieval/nvidia/llama-nemotron-rerank-vl-1b-v2/reranking"},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/llama-nemotron-rerank-vl-1b-v2"},"nvidia/usdcode":{"id":"nvidia/usdcode","name":"usdcode","description":"Nemotron model for efficient reasoning, coding, and specialized AI agents","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-01-01","last_updated":"2026-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":4096},"status":"deprecated","cost":{"input":0,"output":0}},"nvidia/streampetr":{"id":"nvidia/streampetr","name":"streampetr","description":"Temporal 3D object detection model for autonomous driving","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["video"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0,"output":0}},"nvidia/nemotron-3.5-content-safety":{"id":"nvidia/nemotron-3.5-content-safety","name":"Nemotron 3.5 Content Safety","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":false,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3.5-content-safety"},"nvidia/llama-3.1-nemotron-safety-guard-8b-v3":{"id":"nvidia/llama-3.1-nemotron-safety-guard-8b-v3","name":"llama-3.1-nemotron-safety-guard-8b-v3","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"nemotron","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2025-10-28","last_updated":"2025-10-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/llama-3.1-nemotron-safety-guard-8b-v3"},"nvidia/usdvalidate":{"id":"nvidia/usdvalidate","name":"usdvalidate","description":"Nemotron model for efficient reasoning, coding, and specialized AI agents","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-07-24","last_updated":"2025-01-08","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":0,"output":4096},"status":"deprecated","cost":{"input":0,"output":0}},"stepfun-ai/step-5-preview":{"id":"stepfun-ai/step-5-preview","name":"Step 5 Preview","description":"StepFun's next-generation flagship base model for coding and professional knowledge work, with native text, image, and video input and a 1M-token context window","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":false,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"input":1048576,"output":1048576},"cost":{"input":0,"output":0},"canonical_model_id":"stepfun/step-5-preview"}}},"stepfun-ai":{"id":"stepfun-ai","env":["STEPFUN_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.stepfun.ai/v1","name":"StepFun (Global)","doc":"https://platform.stepfun.ai/docs/en/overview/concept","models":{"step-tts-2":{"id":"step-tts-2","type":"speech","name":"Step TTS 2","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"step","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-03-01","last_updated":"2026-07-02","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai"}},"step-5-preview":{"id":"step-5-preview","name":"Step 5 Preview","description":"StepFun's next-generation flagship base model for coding and professional knowledge work, with native text, image, and video input and a 1M-token context window","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1024000,"input":1024000,"output":65536},"cost":{"input":1,"output":2.7,"cache_read":0.1},"canonical_model_id":"stepfun/step-5-preview"},"step-3.5-flash-2603":{"id":"step-3.5-flash-2603","name":"Step 3.5 Flash 2603","description":"StepFun flash model for efficient multimodal reasoning, coding, and tool use","family":"step","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":256000},"cost":{"input":0.1,"output":0.3,"cache_read":0.02},"canonical_model_id":"stepfun/step-3.5-flash-2603"},"stepaudio-2.5-asr":{"id":"stepaudio-2.5-asr","type":"transcription","name":"StepAudio 2.5 ASR","description":"Speech transcription model for accurate audio-to-text and captioning workflows","family":"step","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-24","last_updated":"2026-07-02","modalities":{"input":["audio"],"output":["text"]},"open_weights":false,"limit":{"context":0,"output":0}},"stepaudio-2.5-tts":{"id":"stepaudio-2.5-tts","type":"speech","name":"StepAudio 2.5 TTS","description":"Speech generation model for controllable voice, narration, and audio delivery","family":"step","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-16","last_updated":"2026-07-02","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":0,"output":0},"provider":{"npm":"@ai-sdk/openai"}},"step-3.7-flash":{"id":"step-3.7-flash","name":"Step 3.7 Flash","description":"Newer StepFun flash model for faster agents, coding, and multimodal prompts","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-03-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":256000},"cost":{"input":0.2,"output":1.15,"cache_read":0.04},"canonical_model_id":"stepfun/step-3.7-flash"},"step-3.5-flash":{"id":"step-3.5-flash","name":"Step 3.5 Flash","description":"StepFun flash lane for quick multimodal reasoning and coding assistance","family":"step","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-29","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":256000},"cost":{"input":0.1,"output":0.3,"cache_read":0.02},"canonical_model_id":"stepfun/step-3.5-flash"}}},"nova":{"id":"nova","env":["NOVA_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.nova.amazon.com/v1","name":"Nova","doc":"https://nova.amazon.com/dev/documentation","models":{"nova-2-pro-v1":{"id":"nova-2-pro-v1","name":"Nova 2 Pro","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"nova-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-12-03","last_updated":"2026-01-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0,"output":0,"reasoning":0}},"nova-2-lite-v1":{"id":"nova-2-lite-v1","name":"Nova 2 Lite","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"nova","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-10","release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0,"output":0,"reasoning":0},"canonical_model_id":"amazon/nova-2-lite-v1"}}},"ofox":{"id":"ofox","env":["OFOX_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.ofox.ai/v1","name":"Ofox","doc":"https://ofox.ai/docs","models":{"anthropic/claude-opus-4.6":{"id":"anthropic/claude-opus-4.6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.ofox.ai/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"anthropic/claude-opus-4.7":{"id":"anthropic/claude-opus-4.7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.ofox.ai/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"anthropic/claude-opus-4.8":{"id":"anthropic/claude-opus-4.8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.ofox.ai/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic/claude-opus-4.5":{"id":"anthropic/claude-opus-4.5","name":"Claude Opus 4.5 (latest)","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","provider":{"npm":"@ai-sdk/anthropic","api":"https://api.ofox.ai/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-5"},"anthropic/claude-opus-5.5":{"id":"anthropic/claude-opus-5.5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.ofox.ai/anthropic/v1"},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"anthropic/claude-haiku-4.5":{"id":"anthropic/claude-haiku-4.5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.ofox.ai/anthropic/v1"},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"anthropic/claude-sonnet-5":{"id":"anthropic/claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.ofox.ai/anthropic/v1"},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"anthropic/claude-sonnet-4.5":{"id":"anthropic/claude-sonnet-4.5","name":"Claude Sonnet 4.5 (latest)","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","provider":{"npm":"@ai-sdk/anthropic","api":"https://api.ofox.ai/anthropic/v1"},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-5"},"anthropic/claude-fable-5.2":{"id":"anthropic/claude-fable-5.2","name":"Claude Fable 5.2","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.ofox.ai/anthropic/v1"},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"anthropic/claude-fable-5.1":{"id":"anthropic/claude-fable-5.1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.ofox.ai/anthropic/v1"},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"anthropic/claude-sonnet-4.6":{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.ofox.ai/anthropic/v1"},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"anthropic/claude-fable-5":{"id":"anthropic/claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.ofox.ai/anthropic/v1"},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"anthropic/claude-opus-5":{"id":"anthropic/claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.ofox.ai/anthropic/v1"},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"anthropic/claude-sonnet-5.5":{"id":"anthropic/claude-sonnet-5.5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.ofox.ai/anthropic/v1"},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"anthropic/claude-haiku-5.5":{"id":"anthropic/claude-haiku-5.5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"provider":{"npm":"@ai-sdk/anthropic","api":"https://api.ofox.ai/anthropic/v1"},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"x-ai/grok-4.5":{"id":"x-ai/grok-4.5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":65536},"cost":{"input":2,"output":6,"cache_read":0.3},"canonical_model_id":"xai/grok-4.5"},"x-ai/grok-4.3":{"id":"x-ai/grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2},"canonical_model_id":"xai/grok-4.3"},"x-ai/grok-4.7":{"id":"x-ai/grok-4.7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":65536},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.7"},"x-ai/grok-4.1-fast":{"id":"x-ai/grok-4.1-fast","name":"Grok 4.1 Fast","description":"xAI's fast agentic tool-calling model with a 2M context window; non-reasoning variant for low-latency responses","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-11-19","last_updated":"2025-11-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"canonical_model_id":"xai/grok-4.1-fast"},"x-ai/grok-4.20":{"id":"x-ai/grok-4.20","name":"Grok 4.20 (Reasoning)","description":"Reasoning Grok for document-heavy analysis and long-horizon tool use","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":128000},"cost":{"input":4,"output":12,"cache_read":0.4},"canonical_model_id":"xai/grok-4.20-0309-reasoning"},"x-ai/grok-4.6":{"id":"x-ai/grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":65536},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.6"},"deepseek/deepseek-v4-pro-0423":{"id":"deepseek/deepseek-v4-pro-0423","name":"DeepSeek V4 Pro 0423","description":"DeepSeek V4 Pro initial snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":1.74,"output":3.48,"cache_read":0.145},"canonical_model_id":"deepseek/deepseek-v4-pro-0423"},"deepseek/deepseek-v4-flash-0423":{"id":"deepseek/deepseek-v4-flash-0423","name":"DeepSeek V4 Flash 0423","description":"Initial DeepSeek V4 Flash snapshot for economical reasoning, coding, and million-token agent workloads","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.19,"output":0.51,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash-0423"},"deepseek/deepseek-v4-pro-0813":{"id":"deepseek/deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":1.32,"output":3.96,"cache_read":0.044},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"deepseek/deepseek-v4.1-flash":{"id":"deepseek/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":1.32,"output":3.96,"cache_read":0.044},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-v4-flash":{"id":"deepseek/deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.44,"output":1.32,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek/deepseek-v3.2":{"id":"deepseek/deepseek-v3.2","name":"DeepSeek V3.2","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes, sparse attention, and tool-use","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32000},"cost":{"input":0.29,"output":0.43,"cache_read":0.06},"canonical_model_id":"deepseek/deepseek-v3.2"},"deepseek/deepseek-v4-flash-0731":{"id":"deepseek/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.44,"output":1.32,"cache_read":0.014},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepseek/deepseek-v4.1-flash-1017":{"id":"deepseek/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"google/gemini-2.5-flash":{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":0,"max":24576}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"cache_write":1,"input_audio":1},"canonical_model_id":"google/gemini-2.5-flash"},"google/gemini-3.8-flash":{"id":"google/gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"provider":{"npm":"@ai-sdk/google","api":"https://api.ofox.ai/gemini/v1beta"},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"cache_write":0.0415,"input_audio":0.75},"canonical_model_id":"google/gemini-3.8-flash"},"google/gemini-2.5-pro":{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.25,"output":10,"cache_read":0.125,"cache_write":4.5,"input_audio":1.25},"canonical_model_id":"google/gemini-2.5-pro"},"google/gemini-3.5-flash":{"id":"google/gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"provider":{"npm":"@ai-sdk/google","api":"https://api.ofox.ai/gemini/v1beta"},"cost":{"input":1.5,"output":9,"cache_read":0.15,"cache_write":0.083,"input_audio":1.5},"canonical_model_id":"google/gemini-3.5-flash"},"google/gemini-3.6-flash":{"id":"google/gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"provider":{"npm":"@ai-sdk/google","api":"https://api.ofox.ai/gemini/v1beta"},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"cache_write":0.0415,"input_audio":0.75},"canonical_model_id":"google/gemini-3.6-flash"},"google/gemini-3.1-pro-preview":{"id":"google/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"provider":{"npm":"@ai-sdk/google","api":"https://api.ofox.ai/gemini/v1beta"},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":4.5,"input_audio":2},"canonical_model_id":"google/gemini-3.1-pro-preview"},"google/gemini-3.1-flash-lite":{"id":"google/gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"cache_write":1,"input_audio":0.5},"canonical_model_id":"google/gemini-3.1-flash-lite"},"google/gemini-2.5-flash-lite":{"id":"google/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash-Lite","description":"Lean Gemini 2.5 lane for cheap multimodal traffic and quick agents","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":512,"max":24576}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.1,"output":0.4,"cache_read":0.01,"cache_write":1,"input_audio":0.3},"canonical_model_id":"google/gemini-2.5-flash-lite"},"google/gemini-4-argon":{"id":"google/gemini-4-argon","name":"Gemini 4 Argon","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"provider":{"npm":"@ai-sdk/google","api":"https://api.ofox.ai/gemini/v1beta"},"cost":{"input":2,"output":10,"cache_read":0.1,"input_audio":2},"canonical_model_id":"google/gemini-4-argon"},"google/gemini-3.5-flash-lite":{"id":"google/gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"provider":{"npm":"@ai-sdk/google","api":"https://api.ofox.ai/gemini/v1beta"},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"cache_write":0.083,"input_audio":0.3},"canonical_model_id":"google/gemini-3.5-flash-lite"},"google/gemini-3-flash-preview":{"id":"google/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.05,"cache_write":1,"input_audio":1},"canonical_model_id":"google/gemini-3-flash-preview"},"google/gemini-3.7-flash":{"id":"google/gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"provider":{"npm":"@ai-sdk/google","api":"https://api.ofox.ai/gemini/v1beta"},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"cache_write":0.0415,"input_audio":0.75},"canonical_model_id":"google/gemini-3.7-flash"},"qwen/qwen3.6-plus":{"id":"qwen/qwen3.6-plus","name":"Qwen3.6 Plus","description":"Earlier Qwen multimodal workhorse for million-token agent and document tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.5,"output":3,"cache_read":0.05,"cache_write":0.625},"canonical_model_id":"alibaba/qwen3.6-plus"},"qwen/qwen-max":{"id":"qwen/qwen-max","name":"Qwen Max","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-04-03","last_updated":"2025-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":8000},"cost":{"input":0.35,"output":1.38,"cache_read":0.069},"canonical_model_id":"alibaba/qwen-max"},"qwen/qwen3-coder-plus":{"id":"qwen/qwen3-coder-plus","name":"Qwen3 Coder Plus","description":"Hosted Qwen coder for software agents, repo edits, and long-context code","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-23","last_updated":"2025-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":1.8,"output":9,"cache_read":0.2,"cache_write":1},"canonical_model_id":"alibaba/qwen3-coder-plus"},"qwen/qwen3.8-27b":{"id":"qwen/qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1131072,"output":131072},"cost":{"input":0.5,"output":1.71,"cache_read":0.043,"cache_write":0.63},"canonical_model_id":"alibaba/qwen3.8-27b"},"qwen/qwen3.6-max-preview":{"id":"qwen/qwen3.6-max-preview","name":"Qwen3.6 Max Preview","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":64000},"cost":{"input":2.15,"output":12.86,"cache_read":0.2,"cache_write":1.17},"canonical_model_id":"alibaba/qwen3.6-max-preview"},"qwen/qwen3.5-flash":{"id":"qwen/qwen3.5-flash","name":"Qwen3.5 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.1,"output":0.4,"cache_read":0.01,"cache_write":0.125},"canonical_model_id":"alibaba/qwen3.5-flash"},"qwen/qwen-plus":{"id":"qwen/qwen-plus","name":"Qwen Plus","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-01-25","last_updated":"2025-09-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32000},"cost":{"input":0.12,"output":0.29,"cache_read":0.023},"canonical_model_id":"alibaba/qwen-plus"},"qwen/qwen3.8-flash":{"id":"qwen/qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.11,"output":0.39,"cache_read":0.011,"cache_write":0.14},"canonical_model_id":"alibaba/qwen3.8-flash"},"qwen/qwen3.5-397b-a17b":{"id":"qwen/qwen3.5-397b-a17b","name":"Qwen3.5 397B-A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":64000},"cost":{"input":0.55,"output":3.5,"cache_read":0.55},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"qwen/qwen3.8-max-0902":{"id":"qwen/qwen3.8-max-0902","name":"Qwen3.8 Max 0902","description":"2026-09-02 upgraded snapshot of Qwen3.8 Max with stronger coding, collaborative agents, and multimodal document understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","min":0,"max":262144}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":1.71,"output":5.14,"cache_read":0.17,"cache_write":2.14},"canonical_model_id":"alibaba/qwen3.8-max-0902"},"qwen/qwen3.5-35b-a3b":{"id":"qwen/qwen3.5-35b-a3b","name":"Qwen3.5 35B-A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":64000},"cost":{"input":0.29,"output":1.83,"cache_read":0.29},"canonical_model_id":"alibaba/qwen3.5-35b-a3b"},"qwen/qwen3.7-plus":{"id":"qwen/qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1064000,"output":64000},"cost":{"input":0.4,"output":1.6,"cache_read":0.08,"cache_write":0.5},"canonical_model_id":"alibaba/qwen3.7-plus"},"qwen/qwen3.7-max":{"id":"qwen/qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1064000,"output":64000},"cost":{"input":1.71,"output":5.14,"cache_read":0.17,"cache_write":2.14},"canonical_model_id":"alibaba/qwen3.7-max"},"qwen/qwen3.6-flash":{"id":"qwen/qwen3.6-flash","name":"Qwen3.6 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.6","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"cache_write":0.31},"canonical_model_id":"alibaba/qwen3.6-flash"},"qwen/qwen3-max":{"id":"qwen/qwen3-max","name":"Qwen3 Max","description":"Flagship Qwen3 model for coding agents, complex reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":64000},"cost":{"input":0.36,"output":1.43,"cache_read":0.072},"canonical_model_id":"alibaba/qwen3-max"},"qwen/qwen-turbo":{"id":"qwen/qwen-turbo","name":"Qwen Turbo","description":"Efficient Qwen model for fast chat, extraction, and high-volume workloads","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-11-01","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16000},"cost":{"input":0.043,"output":0.09,"cache_read":0.0086},"canonical_model_id":"alibaba/qwen-turbo"},"qwen/qwen3.6-27b":{"id":"qwen/qwen3.6-27b","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":64000},"cost":{"input":0.43,"output":2.57},"canonical_model_id":"alibaba/qwen3.6-27b"},"qwen/qwen3.5-plus":{"id":"qwen/qwen3.5-plus","name":"Qwen3.5 Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-16","last_updated":"2026-02-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.4,"output":2.4,"cache_read":0.04,"cache_write":0.4},"canonical_model_id":"alibaba/qwen3.5-plus"},"qwen/qwen3-coder-next":{"id":"qwen/qwen3-coder-next","name":"Qwen3 Coder Next","description":"Open-weight Qwen coding model for agents, repository edits, and multi-turn tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-02-03","last_updated":"2026-02-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":64000},"cost":{"input":0.2,"output":1.5},"canonical_model_id":"alibaba/qwen3-coder-next"},"qwen/qwen-flash":{"id":"qwen/qwen-flash","name":"Qwen Flash","description":"Efficient Qwen model for fast chat, extraction, and high-volume workloads","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32000},"cost":{"input":0.022,"output":0.22,"cache_read":0.0043,"cache_write":0.027},"canonical_model_id":"alibaba/qwen-flash"},"qwen/qwen-vl-max":{"id":"qwen/qwen-vl-max","name":"Qwen-VL Max","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-04-08","last_updated":"2025-08-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":8000},"cost":{"input":0.23,"output":0.58,"cache_read":0.023},"canonical_model_id":"alibaba/qwen-vl-max"},"qwen/qwen3.8-max":{"id":"qwen/qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","min":0,"max":262144}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":1.71,"output":5.14,"cache_read":0.17,"cache_write":2.14},"canonical_model_id":"alibaba/qwen3.8-max"},"qwen/qwen3.5-27b":{"id":"qwen/qwen3.5-27b","name":"Qwen3.5 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":64000},"cost":{"input":0.29,"output":2.05,"cache_read":0.29},"canonical_model_id":"alibaba/qwen3.5-27b"},"qwen/qwen3-coder-flash":{"id":"qwen/qwen3-coder-flash","name":"Qwen3 Coder Flash","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.5,"output":2.5,"cache_read":0.06,"cache_write":0.27},"canonical_model_id":"alibaba/qwen3-coder-flash"},"qwen/qwen3.5-122b-a10b":{"id":"qwen/qwen3.5-122b-a10b","name":"Qwen3.5 122B-A10B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":64000},"cost":{"input":0.29,"output":2.29,"cache_read":0.29},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"bailian/qwen3.6-plus":{"id":"bailian/qwen3.6-plus","name":"Qwen3.6 Plus","description":"Earlier Qwen multimodal workhorse for million-token agent and document tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.05,"cache_write":0.625},"canonical_model_id":"alibaba/qwen3.6-plus"},"bailian/qwen-max":{"id":"bailian/qwen-max","name":"Qwen Max","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-04-03","last_updated":"2025-01-25","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":8192},"cost":{"input":0.35,"output":1.38,"cache_read":0.069},"canonical_model_id":"alibaba/qwen-max"},"bailian/qwen3-coder-plus":{"id":"bailian/qwen3-coder-plus","name":"Qwen3 Coder Plus","description":"Hosted Qwen coder for software agents, repo edits, and long-context code","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-23","last_updated":"2025-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.8,"output":9,"cache_read":0.2,"cache_write":1},"canonical_model_id":"alibaba/qwen3-coder-plus"},"bailian/qwen3.8-27b":{"id":"bailian/qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1131072,"output":131072},"cost":{"input":0.45,"output":3.2,"cache_read":0.05,"cache_write":0.5625},"canonical_model_id":"alibaba/qwen3.8-27b"},"bailian/qwen3.6-max-preview":{"id":"bailian/qwen3.6-max-preview","name":"Qwen3.6 Max Preview","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536},"cost":{"input":2.15,"output":12.86,"cache_read":0.2,"cache_write":1.17},"canonical_model_id":"alibaba/qwen3.6-max-preview"},"bailian/qwen3.5-flash":{"id":"bailian/qwen3.5-flash","name":"Qwen3.5 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.1,"output":0.4,"cache_read":0.01,"cache_write":0.125},"canonical_model_id":"alibaba/qwen3.5-flash"},"bailian/qwen-plus":{"id":"bailian/qwen-plus","name":"Qwen Plus","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-01-25","last_updated":"2025-09-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":0.12,"output":0.29,"cache_read":0.023},"canonical_model_id":"alibaba/qwen-plus"},"bailian/qwen3.8-flash":{"id":"bailian/qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.47,"cache_read":0.016,"cache_write":0.2},"canonical_model_id":"alibaba/qwen3.8-flash"},"bailian/qwen3.5-397b-a17b":{"id":"bailian/qwen3.5-397b-a17b","name":"Qwen3.5 397B-A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":64000},"cost":{"input":0.55,"output":3.5,"cache_read":0.55},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"bailian/qwen3.8-max-0902":{"id":"bailian/qwen3.8-max-0902","name":"Qwen3.8 Max 0902","description":"2026-09-02 upgraded snapshot of Qwen3.8 Max with stronger coding, collaborative agents, and multimodal document understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","min":0,"max":262144}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max-0902"},"bailian/qwen3.5-35b-a3b":{"id":"bailian/qwen3.5-35b-a3b","name":"Qwen3.5 35B-A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.29,"output":1.83,"cache_read":0.29},"canonical_model_id":"alibaba/qwen3.5-35b-a3b"},"bailian/qwen3.7-plus":{"id":"bailian/qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.4,"output":1.6,"cache_read":0.08,"cache_write":0.5},"canonical_model_id":"alibaba/qwen3.7-plus"},"bailian/qwen3.7-max":{"id":"bailian/qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2.5,"output":7.5,"cache_read":0.5,"cache_write":3.125},"canonical_model_id":"alibaba/qwen3.7-max"},"bailian/qwen3.6-flash":{"id":"bailian/qwen3.6-flash","name":"Qwen3.6 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.6","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.025,"cache_write":0.31},"canonical_model_id":"alibaba/qwen3.6-flash"},"bailian/qwen3-max":{"id":"bailian/qwen3-max","name":"Qwen3 Max","description":"Flagship Qwen3 model for coding agents, complex reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536},"cost":{"input":0.36,"output":1.43,"cache_read":0.072},"canonical_model_id":"alibaba/qwen3-max"},"bailian/qwen-turbo":{"id":"bailian/qwen-turbo","name":"Qwen Turbo","description":"Efficient Qwen model for fast chat, extraction, and high-volume workloads","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-11-01","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.05,"output":0.09,"cache_read":0.0086},"canonical_model_id":"alibaba/qwen-turbo"},"bailian/qwen3.6-27b":{"id":"bailian/qwen3.6-27b","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":64000},"cost":{"input":0.6,"output":3.6},"canonical_model_id":"alibaba/qwen3.6-27b"},"bailian/qwen3.5-plus":{"id":"bailian/qwen3.5-plus","name":"Qwen3.5 Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-16","last_updated":"2026-02-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.4,"output":2.4,"cache_read":0.04,"cache_write":0.4},"canonical_model_id":"alibaba/qwen3.5-plus"},"bailian/qwen3-coder-next":{"id":"bailian/qwen3-coder-next","name":"Qwen3 Coder Next","description":"Open-weight Qwen coding model for agents, repository edits, and multi-turn tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-02-03","last_updated":"2026-02-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.2,"output":1.5},"canonical_model_id":"alibaba/qwen3-coder-next"},"bailian/qwen-flash":{"id":"bailian/qwen-flash","name":"Qwen Flash","description":"Efficient Qwen model for fast chat, extraction, and high-volume workloads","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":0.022,"output":0.22,"cache_read":0.0043,"cache_write":0.027},"canonical_model_id":"alibaba/qwen-flash"},"bailian/qwen-vl-max":{"id":"bailian/qwen-vl-max","name":"Qwen-VL Max","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-04-08","last_updated":"2025-08-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":8192},"cost":{"input":0.23,"output":0.58,"cache_read":0.046},"canonical_model_id":"alibaba/qwen-vl-max"},"bailian/qwen3.8-max":{"id":"bailian/qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens","min":0,"max":262144}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25,"cache_write":2.5},"canonical_model_id":"alibaba/qwen3.8-max"},"bailian/qwen3.5-27b":{"id":"bailian/qwen3.5-27b","name":"Qwen3.5 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.29,"output":2.05,"cache_read":0.29},"canonical_model_id":"alibaba/qwen3.5-27b"},"bailian/qwen3-coder-flash":{"id":"bailian/qwen3-coder-flash","name":"Qwen3 Coder Flash","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.5,"output":2.5,"cache_read":0.06,"cache_write":0.27},"canonical_model_id":"alibaba/qwen3-coder-flash"},"bailian/qwen3.5-122b-a10b":{"id":"bailian/qwen3.5-122b-a10b","name":"Qwen3.5 122B-A10B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":64000},"cost":{"input":0.29,"output":2.29,"cache_read":0.29},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"moonshotai/kimi-k3.1-pro":{"id":"moonshotai/kimi-k3.1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":2,"output":11,"cache_read":0.2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"moonshotai/kimi-k2.6":{"id":"moonshotai/kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"moonshotai/kimi-k3":{"id":"moonshotai/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"moonshotai/kimi-k2.7-code":{"id":"moonshotai/kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"moonshotai/kimi-k2.7-code-highspeed":{"id":"moonshotai/kimi-k2.7-code-highspeed","name":"Kimi K2.7 Code Highspeed","description":"Lower-latency Kimi Code variant for interactive edits and coding-agent loops","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.9,"output":8,"cache_read":0.38},"canonical_model_id":"moonshotai/kimi-k2.7-code-highspeed"},"openai/gpt-5.5":{"id":"openai/gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"openai/gpt-5.5"},"openai/gpt-5.2":{"id":"openai/gpt-5.2","name":"GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":1.75,"output":14,"cache_read":0.18},"canonical_model_id":"openai/gpt-5.2"},"openai/gpt-4.1-mini":{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-4.1-mini"},"openai/gpt-5.2-codex":{"id":"openai/gpt-5.2-codex","name":"GPT-5.2 Codex","description":"Code-specialist GPT for repository edits, reviews, and long-running software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":1.75,"output":14,"cache_read":0.18},"canonical_model_id":"openai/gpt-5.2-codex"},"openai/gpt-5.4-mini":{"id":"openai/gpt-5.4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"openai/gpt-5":{"id":"openai/gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":1.25,"output":10,"cache_read":0.13},"canonical_model_id":"openai/gpt-5"},"openai/gpt-5.1-codex-max":{"id":"openai/gpt-5.1-codex-max","name":"GPT-5.1 Codex Max","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":1.25,"output":10,"cache_read":0.13},"canonical_model_id":"openai/gpt-5.1-codex-max"},"openai/gpt-5.6-sol":{"id":"openai/gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":2.5,"output":15,"cache_read":0.25,"cache_write":3.125,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"cache_write":6.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5,"cache_write":6.25}},"canonical_model_id":"openai/gpt-5.6-sol"},"openai/gpt-6.1-terra":{"id":"openai/gpt-6.1-terra","name":"GPT-6.1 Terra","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25,"tiers":[{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5}},"canonical_model_id":"openai/gpt-6.1-terra"},"openai/gpt-4.1":{"id":"openai/gpt-4.1","name":"GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"openai/gpt-6-luna":{"id":"openai/gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"openai/gpt-6-sol":{"id":"openai/gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"openai/gpt-5.3-codex":{"id":"openai/gpt-5.3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":1.75,"output":14,"cache_read":0.18},"canonical_model_id":"openai/gpt-5.3-codex"},"openai/gpt-6-astra":{"id":"openai/gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"openai/gpt-5.1":{"id":"openai/gpt-5.1","name":"GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":1.25,"output":10,"cache_read":0.13},"canonical_model_id":"openai/gpt-5.1"},"openai/gpt-5-mini":{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32768},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":0.25,"output":2,"cache_read":0.03},"canonical_model_id":"openai/gpt-5-mini"},"openai/gpt-5.1-codex-mini":{"id":"openai/gpt-5.1-codex-mini","name":"GPT-5.1 Codex mini","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":65536},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":0.25,"output":2,"cache_read":0.03},"canonical_model_id":"openai/gpt-5.1-codex-mini"},"openai/gpt-5.6-luna":{"id":"openai/gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-6.1-sol":{"id":"openai/gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-sol"},"openai/gpt-5.4-pro":{"id":"openai/gpt-5.4-pro","name":"GPT-5.4 Pro","description":"More exact GPT-5.4 tier for demanding professional reasoning and agent tasks","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":false,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.4-pro"},"openai/gpt-5-nano":{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":0.05,"output":0.4,"cache_read":0.01},"canonical_model_id":"openai/gpt-5-nano"},"openai/gpt-5.4":{"id":"openai/gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":2.5,"output":15,"cache_read":0.25,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5}},"canonical_model_id":"openai/gpt-5.4"},"openai/gpt-5.4-nano":{"id":"openai/gpt-5.4-nano","name":"GPT-5.4 nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"openai/gpt-4o":{"id":"openai/gpt-4o","name":"GPT-4o","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o"},"openai/gpt-5.6-terra":{"id":"openai/gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"openai/gpt-4o-mini":{"id":"openai/gpt-4o-mini","name":"GPT-4o mini","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"provider":{"npm":"@ai-sdk/openai","api":"https://api.ofox.ai/v1"},"cost":{"input":0.15,"output":0.6,"cache_read":0.075},"canonical_model_id":"openai/gpt-4o-mini"},"volcengine/doubao-seed-2.0-code":{"id":"volcengine/doubao-seed-2.0-code","name":"Seed 2.0 Code","description":"ByteDance Seed coding model for multimodal software engineering and long-running agents","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"cost":{"input":0.67,"output":3.36,"cache_read":0.14,"cache_write":0.0024},"canonical_model_id":"bytedance-seed/seed-2.0-code"},"volcengine/doubao-seed-2.0-lite":{"id":"volcengine/doubao-seed-2.0-lite","name":"Seed 2.0 Lite","description":"Cost-efficient ByteDance Seed 2.0 model for production chat, analysis, and structured generation","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000},"cost":{"input":0.13,"output":0.76,"cache_read":0.03,"cache_write":0.0024},"canonical_model_id":"bytedance-seed/seed-2.0-lite"},"volcengine/doubao-seed-character":{"id":"volcengine/doubao-seed-character","name":"Seed Character","description":"ByteDance Seed model optimized for character-driven dialogue and consistent conversational behavior","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-23","last_updated":"2026-06-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":0.177,"output":0.884,"cache_read":0.024,"cache_write":0.0025},"canonical_model_id":"bytedance-seed/seed-character"},"volcengine/doubao-seed-2.1-turbo":{"id":"volcengine/doubao-seed-2.1-turbo","name":"Seed 2.1 Turbo","description":"Faster ByteDance Seed 2.1 model for multimodal reasoning and latency-sensitive agent workflows","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-23","last_updated":"2026-06-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":0.3536,"output":1.7696,"cache_read":0.068,"cache_write":0.0019},"canonical_model_id":"bytedance-seed/seed-2.1-turbo"},"volcengine/doubao-seed-2.0-mini":{"id":"volcengine/doubao-seed-2.0-mini","name":"Seed 2.0 Mini","description":"Lightweight ByteDance Seed 2.0 model for low-latency multimodal reasoning and high-volume tasks","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32000},"cost":{"input":0.06,"output":0.56,"cache_read":0.02,"cache_write":0.0024},"canonical_model_id":"bytedance-seed/seed-2.0-mini"},"volcengine/doubao-seed-2.0-pro":{"id":"volcengine/doubao-seed-2.0-pro","name":"Seed 2.0 Pro","description":"Flagship ByteDance Seed 2.0 model for complex multimodal reasoning and long-horizon agent workflows","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-02-14","last_updated":"2026-02-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"cost":{"input":0.67,"output":3.36,"cache_read":0.14,"cache_write":0.0024},"canonical_model_id":"bytedance-seed/seed-2.0-pro"},"volcengine/doubao-seed-evolving":{"id":"volcengine/doubao-seed-evolving","name":"Seed Evolving","description":"Rolling ByteDance Seed model for rapidly updated reasoning, coding, and agent capabilities","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-23","last_updated":"2026-06-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":0.884,"output":4.42,"cache_read":0.177,"cache_write":0.0025},"canonical_model_id":"bytedance-seed/seed-evolving"},"volcengine/doubao-seed-2.1-pro":{"id":"volcengine/doubao-seed-2.1-pro","name":"Seed 2.1 Pro","description":"Flagship ByteDance Seed 2.1 model for complex multimodal reasoning, coding, and agents","family":"seed","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-23","last_updated":"2026-06-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":0.7072,"output":3.536,"cache_read":0.1416,"cache_write":0.002},"canonical_model_id":"bytedance-seed/seed-2.1-pro"},"minimax/minimax-m2.1":{"id":"minimax/minimax-m2.1","name":"MiniMax-M2.1","description":"Earlier MiniMax agent model for practical coding and productivity tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.03,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.1"},"minimax/minimax-m2.1-lightning":{"id":"minimax/minimax-m2.1-lightning","name":"MiniMax-M2.1 Lightning","description":"Earlier MiniMax agent model for practical coding and productivity tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":2.4,"cache_read":0.03,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.1"},"minimax/minimax-m2.5":{"id":"minimax/minimax-m2.5","name":"MiniMax-M2.5","description":"Prior MiniMax coding model for agent workflows, office edits, and automation","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.03,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.5"},"minimax/minimax-m2.5-lightning":{"id":"minimax/minimax-m2.5-lightning","name":"MiniMax-M2.5 Lightning","description":"High-speed MiniMax model for low-latency coding and agent workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-02-13","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":2.4,"cache_read":0.03,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.5-highspeed"},"minimax/minimax-m2":{"id":"minimax/minimax-m2","name":"MiniMax-M2","description":"Efficient open MiniMax model built for coding agents and tool-heavy workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-10-27","last_updated":"2025-10-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.03,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2"},"minimax/minimax-m3":{"id":"minimax/minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":512000},"cost":{"input":0.6,"output":2.4,"cache_read":0.12},"canonical_model_id":"minimax/MiniMax-M3"},"minimax/minimax-m2.7-highspeed":{"id":"minimax/minimax-m2.7-highspeed","name":"MiniMax-M2.7-highspeed","description":"Low-latency M2.7 variant for interactive coding plans and agent loops","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.4,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.7-highspeed"},"minimax/minimax-m2.7":{"id":"minimax/minimax-m2.7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.06,"cache_write":0.375},"canonical_model_id":"minimax/MiniMax-M2.7"},"minimax/m2-her":{"id":"minimax/m2-her","name":"MiniMax-M2 Her","description":"MiniMax M2 variant tuned for conversational and character-driven agent interactions","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-01-23","last_updated":"2026-01-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":65536,"output":2048},"cost":{"input":0.3,"output":1.2},"canonical_model_id":"minimax/MiniMax-M2-Her"},"z-ai/glm-5.2":{"id":"z-ai/glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"z-ai/glm-5.1":{"id":"z-ai/glm-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.1"},"z-ai/glm-4.7":{"id":"z-ai/glm-4.7","name":"GLM-4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.4,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.7"},"z-ai/glm-5.3":{"id":"z-ai/glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"z-ai/glm-5.3-flash":{"id":"z-ai/glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"z-ai/glm-5-turbo":{"id":"z-ai/glm-5-turbo","name":"GLM-5-Turbo","description":"Faster GLM-5 lane for coding agents that need lower latency","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24},"canonical_model_id":"zhipuai/glm-5-turbo"},"z-ai/glm-4.6":{"id":"z-ai/glm-4.6","name":"GLM-4.6","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.6"},"z-ai/glm-5.3-flashx":{"id":"z-ai/glm-5.3-flashx","name":"GLM-5.3-FlashX","description":"High-speed GLM-5.3-Flash serving option for coding and agent workflows","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"},"z-ai/glm-5v-turbo":{"id":"z-ai/glm-5v-turbo","name":"GLM-5V-Turbo","description":"Fast GLM vision model for screenshots, documents, and multimodal agent tasks","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-04-01","last_updated":"2026-04-01","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":131072},"cost":{"input":1.2,"output":4,"cache_read":0.24},"canonical_model_id":"zhipuai/glm-5v-turbo"},"z-ai/glm-4.7-flashx":{"id":"z-ai/glm-4.7-flashx","name":"GLM-4.7-FlashX","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.072,"output":0.4,"cache_read":0.01},"canonical_model_id":"zhipuai/glm-4.7-flashx"},"z-ai/glm-5":{"id":"z-ai/glm-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":1,"output":3.2,"cache_read":0.2},"canonical_model_id":"zhipuai/glm-5"}}},"abacus":{"id":"abacus","env":["ABACUS_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://routellm.abacus.ai/v1","name":"Abacus","doc":"https://abacus.ai/help/api","models":{"grok-4-1-fast-non-reasoning":{"id":"grok-4-1-fast-non-reasoning","name":"Grok 4.1 Fast (Non-Reasoning)","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-11-17","last_updated":"2025-11-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":16384},"status":"deprecated","cost":{"input":0.2,"output":0.5}},"claude-sonnet-4-20250514":{"id":"claude-sonnet-4-20250514","name":"Claude Sonnet 4","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","cost":{"input":3,"output":15},"canonical_model_id":"anthropic/claude-sonnet-4-20250514"},"gpt-5.5":{"id":"gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"openai/gpt-5.5"},"qwen-2.5-coder-32b":{"id":"qwen-2.5-coder-32b","name":"Qwen 2.5 Coder 32B","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2024-11-12","last_updated":"2024-11-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"status":"deprecated","cost":{"input":0.79,"output":0.79},"canonical_model_id":"alibaba/qwen2.5-coder-32b-instruct"},"gpt-5.3-chat-latest":{"id":"gpt-5.3-chat-latest","name":"GPT-5.3 Chat Latest","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-03","last_updated":"2026-03-03","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"status":"deprecated","cost":{"input":1.75,"output":14},"canonical_model_id":"openai/gpt-5.3-chat-latest"},"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03},"canonical_model_id":"google/gemini-2.5-flash"},"gpt-4.1-nano":{"id":"gpt-4.1-nano","name":"GPT-4.1 nano","description":"Tiny GPT-4.1 option for classification, routing, and very high-volume tasks","family":"gpt-nano","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.1,"output":0.4,"cache_read":0.025},"canonical_model_id":"openai/gpt-4.1-nano"},"gemini-3.1-flash-image-preview":{"id":"gemini-3.1-flash-image-preview","type":"image","name":"Nano Banana 2 Preview","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-26","last_updated":"2026-02-26","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":1048576,"output":32768},"status":"deprecated","cost":{"input":0.5,"output":3},"canonical_model_id":"google/gemini-3.1-flash-image-preview"},"mimo-v2-pro":{"id":"mimo-v2-pro","name":"MiMo-V2-Pro","description":"Earlier MiMo Pro model for multimodal agents, reasoning, and code tasks","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1,"output":3,"cache_read":0.2},"canonical_model_id":"xiaomi/mimo-v2-pro"},"gpt-5.2":{"id":"gpt-5.2","name":"GPT-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2"},"grok-4.5":{"id":"grok-4.5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":32768},"cost":{"input":2,"output":6,"cache_read":0.3},"canonical_model_id":"xai/grok-4.5"},"gpt-4.1-mini":{"id":"gpt-4.1-mini","name":"GPT-4.1 mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":0.4,"output":1.6,"cache_read":0.1},"canonical_model_id":"openai/gpt-4.1-mini"},"o4-mini":{"id":"o4-mini","name":"o4-mini","description":"Fast o-series model for compact reasoning, coding, and tool use","family":"o-mini","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":1.1,"output":4.4},"canonical_model_id":"openai/o4-mini"},"gpt-5.2-codex":{"id":"gpt-5.2-codex","name":"GPT-5.2 Codex","description":"Code-specialist GPT for repository edits, reviews, and long-running software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2-codex"},"gpt-5.4-mini":{"id":"gpt-5.4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"grok-4.3":{"id":"grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":1.25,"output":2.5,"cache_read":0.2},"canonical_model_id":"xai/grok-4.3"},"gpt-5":{"id":"gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5"},"gpt-5.1-codex-max":{"id":"gpt-5.1-codex-max","name":"GPT-5.1 Codex Max","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":1.25,"output":10},"canonical_model_id":"openai/gpt-5.1-codex-max"},"gpt-5.1-codex":{"id":"gpt-5.1-codex","name":"GPT-5.1 Codex","description":"Codex GPT for repository edits, code review, and practical software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1-codex"},"muse-spark-1.1":{"id":"muse-spark-1.1","name":"Muse Spark 1.1","description":"Muse Spark is a natively multimodal reasoning model with support for tool-use, visual chain of thought, and multi-agent orchestration.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-08","last_updated":"2026-07-09","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32000},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.1"},"gemini-2.5-pro":{"id":"gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"google/gemini-2.5-pro"},"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4},"canonical_model_id":"openai/gpt-5.6-sol"},"gemini-3.5-flash":{"id":"gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"cache_read":0.15},"canonical_model_id":"google/gemini-3.5-flash"},"claude-sonnet-5":{"id":"claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":2,"output":10},"canonical_model_id":"anthropic/claude-sonnet-5"},"gpt-4.1":{"id":"gpt-4.1","name":"GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/gpt-4.1"},"o3":{"id":"o3","name":"o3","description":"Deliberate o-series reasoner for hard math, coding, and multi-step analysis","family":"o","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":2,"output":8,"cache_read":0.5},"canonical_model_id":"openai/o3"},"gpt-4o-2024-11-20":{"id":"gpt-4o-2024-11-20","name":"GPT-4o (2024-11-20)","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2024-11-20","last_updated":"2024-11-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"status":"deprecated","cost":{"input":2.5,"output":10},"canonical_model_id":"openai/gpt-4o-2024-11-20"},"gemini-3.6-flash":{"id":"gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.6-flash"},"kimi-k2.5":{"id":"kimi-k2.5","name":"Kimi K2.5","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"status":"deprecated","cost":{"input":0.6,"output":3},"canonical_model_id":"moonshotai/kimi-k2.5"},"gemini-3.1-flash-image":{"id":"gemini-3.1-flash-image","type":"image","name":"Nano Banana 2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":1048576,"output":32768},"status":"deprecated","cost":{"input":0.5,"output":3},"canonical_model_id":"google/gemini-3.1-flash-image"},"o3-mini":{"id":"o3-mini","name":"o3-mini","description":"Smaller o-series reasoner for economical coding, math, and planning tasks","family":"o-mini","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2024-12-20","last_updated":"2025-01-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":1.1,"output":4.4,"cache_read":0.55},"canonical_model_id":"openai/o3-mini"},"gpt-5.1-chat-latest":{"id":"gpt-5.1-chat-latest","name":"GPT-5.1 Chat Latest","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"status":"deprecated","cost":{"input":1.25,"output":10},"canonical_model_id":"openai/gpt-5.1-chat-latest"},"gemini-3.1-pro-preview":{"id":"gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2},"canonical_model_id":"google/gemini-3.1-pro-preview"},"gemini-3.1-flash-lite":{"id":"gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.25,"output":1.5,"cache_read":0.025},"canonical_model_id":"google/gemini-3.1-flash-lite"},"claude-sonnet-4-5-20250929":{"id":"claude-sonnet-4-5-20250929","name":"Claude Sonnet 4.5","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15},"canonical_model_id":"anthropic/claude-sonnet-4-5-20250929"},"gpt-5.3-codex":{"id":"gpt-5.3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"claude-opus-4-1-20250805":{"id":"claude-opus-4-1-20250805","name":"Claude Opus 4.1","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"status":"deprecated","cost":{"input":15,"output":75},"canonical_model_id":"anthropic/claude-opus-4-1-20250805"},"claude-fable-5":{"id":"claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50},"canonical_model_id":"anthropic/claude-fable-5"},"qwen3.7-max":{"id":"qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":2.5,"output":7.5},"canonical_model_id":"alibaba/qwen3.7-max"},"gpt-5.1":{"id":"gpt-5.1","name":"GPT-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5.1"},"claude-haiku-4-5-20251001":{"id":"claude-haiku-4-5-20251001","name":"Claude Haiku 4.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"llama-3.3-70b-versatile":{"id":"llama-3.3-70b-versatile","name":"Llama 3.3 70B Versatile","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32768},"status":"deprecated","cost":{"input":0.59,"output":0.79},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"gpt-5-mini":{"id":"gpt-5-mini","name":"GPT-5 Mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.25,"output":2,"cache_read":0.025},"canonical_model_id":"openai/gpt-5-mini"},"claude-opus-4-20250514":{"id":"claude-opus-4-20250514","name":"Claude Opus 4","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"status":"deprecated","cost":{"input":15,"output":75},"canonical_model_id":"anthropic/claude-opus-4-20250514"},"gemini-3.1-flash-lite-preview":{"id":"gemini-3.1-flash-lite-preview","name":"Gemini 3.1 Flash Lite Preview","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-03-03","last_updated":"2026-03-03","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":0.25,"output":1.5,"cache_read":0.025,"cache_write":1},"canonical_model_id":"google/gemini-3.1-flash-lite-preview"},"gpt-5.3-codex-xhigh":{"id":"gpt-5.3-codex-xhigh","name":"GPT-5.3 Codex XHigh","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":1.75,"output":14},"canonical_model_id":"openai/gpt-5.3-codex"},"gemini-3-pro-image-preview":{"id":"gemini-3-pro-image-preview","type":"image","name":"Nano Banana Pro Preview","description":"Nano Banana Pro for higher-fidelity image generation and design-heavy edits","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2025-11-20","last_updated":"2025-11-20","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":32768},"status":"deprecated","cost":{"input":2,"output":12,"cache_read":0.2},"canonical_model_id":"google/gemini-3-pro-image-preview"},"claude-opus-5":{"id":"claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25},"canonical_model_id":"anthropic/claude-opus-5"},"qwen3-max":{"id":"qwen3-max","name":"Qwen3 Max","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":16384},"status":"deprecated","cost":{"input":1.2,"output":6},"canonical_model_id":"alibaba/qwen3-max"},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.6-luna"},"gemini-3.5-flash-lite":{"id":"gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03},"canonical_model_id":"google/gemini-3.5-flash-lite"},"claude-opus-4-5-20251101":{"id":"claude-opus-4-5-20251101","name":"Claude Opus 4.5","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":5,"output":25},"canonical_model_id":"anthropic/claude-opus-4-5-20251101"},"gpt-5-nano":{"id":"gpt-5-nano","name":"GPT-5 Nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.05,"output":0.4,"cache_read":0.005},"canonical_model_id":"openai/gpt-5-nano"},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25},"canonical_model_id":"openai/gpt-5.4"},"gemini-3-flash-preview":{"id":"gemini-3-flash-preview","name":"Gemini 3 Flash Preview","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.05},"canonical_model_id":"google/gemini-3-flash-preview"},"claude-opus-4-6":{"id":"claude-opus-4-6","name":"Claude Opus 4.6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25},"canonical_model_id":"anthropic/claude-opus-4-6"},"gemini-2.5-flash-image":{"id":"gemini-2.5-flash-image","type":"image","name":"Nano Banana","description":"Nano Banana image model for fast generation, edits, and character-consistent assets","family":"gemini-flash","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-26","last_updated":"2025-08-26","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":32768,"output":32768},"cost":{"input":0.3,"output":30},"canonical_model_id":"google/gemini-2.5-flash-image"},"o3-pro":{"id":"o3-pro","name":"o3-pro","description":"High-effort o3 tier for difficult technical reasoning and careful answers","family":"o-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-06-10","last_updated":"2025-06-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":20,"output":80},"canonical_model_id":"openai/o3-pro"},"gpt-5.4-nano":{"id":"gpt-5.4-nano","name":"GPT-5.4 nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"grok-4-0709":{"id":"grok-4-0709","name":"Grok 4","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-07-09","last_updated":"2025-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":16384},"status":"deprecated","cost":{"input":3,"output":15}},"gemini-3-pro-image":{"id":"gemini-3-pro-image","type":"image","name":"Nano Banana Pro","description":"Nano Banana Pro for higher-fidelity image generation and design-heavy edits","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":32768},"cost":{"input":2,"output":12,"cache_read":0.2},"canonical_model_id":"google/gemini-3-pro-image"},"grok-4.6":{"id":"grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":32768},"cost":{"input":2,"output":6,"cache_read":0.5},"canonical_model_id":"xai/grok-4.6"},"grok-code-fast-1":{"id":"grok-code-fast-1","name":"Grok Code Fast 1","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-09-02","last_updated":"2025-09-02","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":16384},"status":"deprecated","cost":{"input":0.2,"output":1.5},"canonical_model_id":"xai/grok-code-fast-1"},"gpt-5.2-chat-latest":{"id":"gpt-5.2-chat-latest","name":"GPT-5.2 Chat Latest","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"output":128000},"status":"deprecated","cost":{"input":1.75,"output":14},"canonical_model_id":"openai/gpt-5.2-chat-latest"},"gpt-4o":{"id":"gpt-4o","name":"GPT-4o","description":"Omni-era GPT for multimodal chat, practical coding, and general assistants","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o"},"claude-opus-4-8":{"id":"claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25},"canonical_model_id":"anthropic/claude-opus-4-8"},"gpt-5-codex":{"id":"gpt-5-codex","name":"GPT-5-Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-09-15","last_updated":"2025-09-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":1.25,"output":10,"cache_read":0.125},"canonical_model_id":"openai/gpt-5-codex"},"gpt-5.6-terra":{"id":"gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2},"canonical_model_id":"openai/gpt-5.6-terra"},"qwen3.8-max":{"id":"qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2,"output":6,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.8-max"},"grok-4-fast-non-reasoning":{"id":"grok-4-fast-non-reasoning","name":"Grok 4 Fast (Non-Reasoning)","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-12-18","last_updated":"2025-12-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":16384},"status":"deprecated","cost":{"input":0.2,"output":0.5},"canonical_model_id":"xai/grok-4-fast-non-reasoning"},"route-llm":{"id":"route-llm","name":"RouteLLM","description":"RouteLLM routes prompts to an appropriate Abacus-backed text-generation model","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2024-01-01","last_updated":"2026-07-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":64000},"cost":{"input":2,"output":10,"cache_read":0.1}},"gpt-4o-mini":{"id":"gpt-4o-mini","name":"GPT-4o mini","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"openai/gpt-4o-mini"},"kimi-k2-turbo-preview":{"id":"kimi-k2-turbo-preview","name":"Kimi K2 Turbo Preview","description":"Fast Kimi model for responsive chat, coding help, and agent loops","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-07-08","last_updated":"2025-07-08","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":8192},"status":"deprecated","cost":{"input":0.15,"output":8}},"claude-3-7-sonnet-20250219":{"id":"claude-3-7-sonnet-20250219","name":"Claude Sonnet 3.7","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-10-31","release_date":"2025-02-19","last_updated":"2025-02-19","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","cost":{"input":3,"output":15},"canonical_model_id":"anthropic/claude-3-7-sonnet-20250219"},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3,"output":15},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"muse-spark-1.2":{"id":"muse-spark-1.2","name":"Muse Spark 1.2","description":"Muse Spark 1.2 is a coding-focused update to Muse Spark 1.1 with improvements in code generation, complex debugging, codebase understanding, and end-to-end developer workflows.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":1.25,"output":4.25,"cache_read":0.15},"canonical_model_id":"meta/muse-spark-1.2"},"claude-opus-4-7":{"id":"claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25},"canonical_model_id":"anthropic/claude-opus-4-7"},"gemini-3.7-flash":{"id":"gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075},"canonical_model_id":"google/gemini-3.7-flash"},"deepseek/deepseek-v3.1":{"id":"deepseek/deepseek-v3.1","name":"DeepSeek V3.1","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"status":"deprecated","cost":{"input":0.55,"output":1.66},"canonical_model_id":"deepseek/deepseek-v3.1"},"google/gemma-4-31b-it":{"id":"google/gemma-4-31b-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0.14,"output":0.4},"canonical_model_id":"google/gemma-4-31b-it"},"MiniMaxAI/MiniMax-M2.7":{"id":"MiniMaxAI/MiniMax-M2.7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2},"canonical_model_id":"minimax/MiniMax-M2.7"},"MiniMaxAI/MiniMax-M3":{"id":"MiniMaxAI/MiniMax-M3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.3,"output":1.2},"canonical_model_id":"minimax/MiniMax-M3"},"deepseek-ai/DeepSeek-V3.2":{"id":"deepseek-ai/DeepSeek-V3.2","name":"DeepSeek V3.2","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"status":"deprecated","cost":{"input":0.27,"output":0.4},"canonical_model_id":"deepseek/deepseek-v3.2"},"deepseek-ai/DeepSeek-V4-Flash":{"id":"deepseek-ai/DeepSeek-V4-Flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":32768},"status":"deprecated","cost":{"input":0.14,"output":0.28,"cache_read":0.03},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek-ai/DeepSeek-V3.1-Terminus":{"id":"deepseek-ai/DeepSeek-V3.1-Terminus","name":"DeepSeek V3.1 Terminus","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-06-01","last_updated":"2025-06-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"status":"deprecated","cost":{"input":0.27,"output":1}},"deepseek-ai/DeepSeek-V4-Pro":{"id":"deepseek-ai/DeepSeek-V4-Pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":32768},"status":"deprecated","cost":{"input":1.74,"output":3.48,"cache_read":0.15},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek-ai/DeepSeek-R1":{"id":"deepseek-ai/DeepSeek-R1","name":"DeepSeek R1","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-01-20","last_updated":"2025-05-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"status":"deprecated","cost":{"input":3,"output":7},"canonical_model_id":"deepseek/deepseek-r1"},"moonshotai/Kimi-K3":{"id":"moonshotai/Kimi-K3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"moonshotai/Kimi-K2.7-Code":{"id":"moonshotai/Kimi-K2.7-Code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.19},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"moonshotai/Kimi-K2.6":{"id":"moonshotai/Kimi-K2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":16384},"cost":{"input":0.037,"output":0.17},"canonical_model_id":"openai/gpt-oss-120b"},"thinkingmachines/Inkling":{"id":"thinkingmachines/Inkling","name":"Inkling","description":"Multimodal MoE reasoning model (975B total, 41B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":3.74,"output":9.36,"cache_read":0.748},"canonical_model_id":"thinkingmachines/inkling"},"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8":{"id":"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8","name":"Llama 4 Maverick 17B Instruct","description":"Open multimodal Llama for strong reasoning with efficient everyday serving","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-04-05","last_updated":"2025-04-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":8192},"status":"deprecated","cost":{"input":0.14,"output":0.59},"canonical_model_id":"meta/llama-4-maverick-17b-instruct"},"meta-llama/Meta-Llama-3.1-8B-Instruct":{"id":"meta-llama/Meta-Llama-3.1-8B-Instruct","name":"Llama 3.1 8B Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"status":"deprecated","cost":{"input":0.02,"output":0.05},"canonical_model_id":"meta/llama-3.1-8b-instruct"},"meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo":{"id":"meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo","name":"Llama 3.1 405B Instruct Turbo","description":"Compact Llama instruction model for fast chat and local deployment","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":4096},"status":"deprecated","cost":{"input":3.5,"output":3.5}},"meta-llama/Meta-Llama-3.3-70B-Instruct":{"id":"meta-llama/Meta-Llama-3.3-70B-Instruct","name":"Llama-3.3-70B-Instruct","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"status":"deprecated","cost":{"input":0.59,"output":0.79},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"Qwen/Qwen2.5-72B-Instruct":{"id":"Qwen/Qwen2.5-72B-Instruct","name":"Qwen 2.5 72B Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2024-09-19","last_updated":"2024-09-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"status":"deprecated","cost":{"input":0.11,"output":0.38}},"Qwen/Qwen3-32B":{"id":"Qwen/Qwen3-32B","name":"Qwen3 32B","description":"Dense open Qwen model for self-hosted chat, reasoning, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"cost":{"input":0.08,"output":0.28},"canonical_model_id":"alibaba/qwen3-32b"},"Qwen/Qwen3.6-27B":{"id":"Qwen/Qwen3.6-27B","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":8192},"cost":{"input":0.32,"output":3.2},"canonical_model_id":"alibaba/qwen3.6-27b"},"Qwen/Qwen3-Coder-480B-A35B-Instruct":{"id":"Qwen/Qwen3-Coder-480B-A35B-Instruct","name":"Qwen3-Coder 480B-A35B Instruct","description":"Open Qwen coding heavyweight for repository reasoning and agentic engineering","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0.38,"output":1.55},"canonical_model_id":"alibaba/qwen3-coder-480b-a35b-instruct"},"Qwen/QwQ-32B":{"id":"Qwen/QwQ-32B","name":"QwQ 32B","description":"Qwen reasoning model for deliberate problem solving, math, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-03-05","last_updated":"2025-03-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":32768},"status":"deprecated","cost":{"input":0.4,"output":0.4},"canonical_model_id":"alibaba/qwq-32b"},"Qwen/Qwen3-235B-A22B-Instruct-2507":{"id":"Qwen/Qwen3-235B-A22B-Instruct-2507","name":"Qwen3 235B A22B Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":8192},"status":"deprecated","cost":{"input":0.13,"output":0.6},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"zai-org/GLM-5.2":{"id":"zai-org/GLM-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"zai-org/GLM-4.6":{"id":"zai-org/GLM-4.6","name":"GLM-4.6","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":0.55,"output":2.2},"canonical_model_id":"zhipuai/glm-4.6"},"zai-org/GLM-4.7":{"id":"zai-org/GLM-4.7","name":"GLM-4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.2},"canonical_model_id":"zhipuai/glm-4.7"},"zai-org/GLM-5":{"id":"zai-org/GLM-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":1,"output":3.2},"canonical_model_id":"zhipuai/glm-5"},"zai-org/GLM-5.1":{"id":"zai-org/GLM-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":1.38,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.1"},"zai-org/GLM-4.5":{"id":"zai-org/GLM-4.5","name":"GLM-4.5","description":"Hybrid-reasoning GLM release that made the 4.5 line broadly useful","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":96000},"status":"deprecated","cost":{"input":0.6,"output":2.2},"canonical_model_id":"zhipuai/glm-4.5"}}},"alibaba-coding-plan":{"id":"alibaba-coding-plan","env":["ALIBABA_CODING_PLAN_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://coding-intl.dashscope.aliyuncs.com/v1","name":"Alibaba Coding Plan","doc":"https://www.alibabacloud.com/help/en/model-studio/coding-plan","models":{"qwen3-max-2026-01-23":{"id":"qwen3-max-2026-01-23","name":"Qwen3 Max","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-23","last_updated":"2026-01-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"qwen3.6-plus":{"id":"qwen3.6-plus","name":"Qwen3.6 Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"MiniMax-M2.5":{"id":"MiniMax-M2.5","name":"MiniMax-M2.5","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"input":196601,"output":24576},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"qwen3-coder-plus":{"id":"qwen3-coder-plus","name":"Qwen3 Coder Plus","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-23","last_updated":"2025-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":65536},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"kimi-k2.5":{"id":"kimi-k2.5","name":"Kimi K2.5","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"glm-4.7":{"id":"glm-4.7","name":"GLM-4.7","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":16384},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"qwen3.7-plus":{"id":"qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"alibaba/qwen3.7-plus"},"qwen3.5-plus":{"id":"qwen3.5-plus","name":"Qwen3.5 Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-16","last_updated":"2026-02-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"qwen3-coder-next":{"id":"qwen3-coder-next","name":"Qwen3 Coder Next","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-03","last_updated":"2026-02-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"glm-5":{"id":"glm-5","name":"GLM-5","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-11","last_updated":"2026-02-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":202752,"output":16384},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}}}},"sarvam":{"id":"sarvam","env":["SARVAM_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.sarvam.ai/v1","name":"Sarvam AI","doc":"https://docs.sarvam.ai/api-reference-docs/getting-started/models","models":{"sarvam-105b":{"id":"sarvam-105b","name":"Sarvam-105B","description":"Flagship Indian-language reasoning model for enterprise multilingual applications","family":"sarvam","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-18","last_updated":"2026-02-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.15790269,"output":0.63161075,"cache_read":0.05263423},"canonical_model_id":"sarvam/sarvam-105b"},"sarvam-30b":{"id":"sarvam-30b","name":"Sarvam-30B","description":"Efficient Indian-language reasoning model for chat, coding, and multilingual work","family":"sarvam","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-18","last_updated":"2026-02-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"status":"deprecated","canonical_model_id":"sarvam/sarvam-30b"}}},"arcee":{"id":"arcee","env":["ARCEE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.arcee.ai/api/v1","name":"Arcee","doc":"https://docs.arcee.ai","models":{"trinity-large-thinking":{"id":"trinity-large-thinking","name":"Trinity Large Thinking","description":"Reasoning-optimized 398B MoE agent model with extended thinking for long-horizon and multi-turn tool use","family":"trinity","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-04-01","last_updated":"2026-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":80000},"status":"beta","cost":{"input":0.25,"output":0.8,"cache_read":0.06},"canonical_model_id":"arcee-ai/trinity-large-thinking"},"deepseek/deepseek-v4-pro-0813":{"id":"deepseek/deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"status":"beta","cost":{"input":1.32,"output":3.96,"cache_read":0.044},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"deepseek/deepseek-v4-flash-latest":{"id":"deepseek/deepseek-v4-flash-latest","name":"DeepSeek V4 Flash Latest","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"status":"beta","cost":{"input":0.14,"output":0.28,"cache_read":0.028},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepseek/deepseek-v4.1-flash":{"id":"deepseek/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"beta","cost":{"input":0.22,"output":0.66,"cache_read":0.007},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":512000,"output":384000},"status":"deprecated","cost":{"input":1.74,"output":3.48,"cache_read":0.2},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-v4.1-flash-1017":{"id":"deepseek/deepseek-v4.1-flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"beta","cost":{"input":0.3,"output":1.2,"cache_read":0.006},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"moonshotai/kimi-k3":{"id":"moonshotai/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"beta","cost":{"input":3,"output":15,"cache_read":0.3},"canonical_model_id":"moonshotai/kimi-k3"},"thinkingmachines/inkling-small":{"id":"thinkingmachines/inkling-small","name":"Inkling Small","description":"Multimodal MoE reasoning model (276B total, 12B active) for text, image, and audio","family":"ling","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-07-30","last_updated":"2026-07-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0.5,"output":1.2,"cache_read":0.1},"canonical_model_id":"thinkingmachines/inkling-small"},"zai-org/glm-5.2":{"id":"zai-org/glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"status":"beta","cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.2"},"zai-org/glm-5.3":{"id":"zai-org/glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"status":"beta","cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.3"},"zai-org/glm-5.3-flash":{"id":"zai-org/glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"status":"beta","cost":{"input":0.15,"output":0.5,"cache_read":0.03},"canonical_model_id":"zhipuai/glm-5.3-flash"}}},"morph":{"id":"morph","env":["MORPH_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.morphllm.com/v1","name":"Morph","doc":"https://docs.morphllm.com/api-reference/introduction","models":{"morph-kimik3-fast":{"id":"morph-kimik3-fast","name":"Kimi K3 Fast","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":6,"output":22.5,"cache_read":0.6},"canonical_model_id":"moonshotai/kimi-k3"},"morph-dsv41flash-1017":{"id":"morph-dsv41flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"October 17 update of DeepSeek V4.1 Flash with improved reasoning, coding, agentic tasks, and visual understanding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.12,"output":0.8,"cache_read":0.008},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"morph-kimik3":{"id":"morph-kimik3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":2.5,"output":14,"cache_read":0.29},"canonical_model_id":"moonshotai/kimi-k3"},"morph-dsv4flash":{"id":"morph-dsv4flash","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.141953125,"output":0.399625,"cache_read":0.0359375},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"morph-glm52-744b":{"id":"morph-glm52-744b","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":1.19,"output":6,"cache_read":0.1955},"canonical_model_id":"zhipuai/glm-5.2"},"morph-v3-large":{"id":"morph-v3-large","name":"Morph V3 Large","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"morph","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-07-07","last_updated":"2025-07-07","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":0.9,"output":1.9},"canonical_model_id":"morph/morph-v3-large"},"morph-glm53flash":{"id":"morph-glm53flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.2,"output":0.7,"cache_read":0.04},"canonical_model_id":"zhipuai/glm-5.3-flash"},"morph-kimik31":{"id":"morph-kimik31","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":2.5,"output":14,"cache_read":0.29},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"morph-glm53-744b":{"id":"morph-glm53-744b","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":1.19,"output":6,"cache_read":0.1955},"canonical_model_id":"zhipuai/glm-5.3"},"auto":{"id":"auto","name":"Auto","description":"Automatic model router for matching prompts to suitable backends and budgets","family":"auto","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-06-01","last_updated":"2024-06-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":32000,"output":32000},"cost":{"input":0.85,"output":1.55}},"morph-dsv41flash":{"id":"morph-dsv41flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":0.12,"output":0.8,"cache_read":0.008},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"morph-v3-fast":{"id":"morph-v3-fast","name":"Morph V3 Fast","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"morph","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-07-07","last_updated":"2025-07-07","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":131072},"cost":{"input":0.8,"output":1.2},"canonical_model_id":"morph/morph-v3-fast"}}},"xai":{"id":"xai","env":["XAI_API_KEY"],"npm":"@ai-sdk/xai","name":"xAI","doc":"https://docs.x.ai/docs/models","models":{"grok-4.20-0309-non-reasoning":{"id":"grok-4.20-0309-non-reasoning","name":"Grok 4.20 (Non-Reasoning)","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}}},"grok-4.5":{"id":"grok-4.5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.3,"tiers":[{"input":4,"output":12,"cache_read":0.6,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":0.6}},"canonical_model_id":"xai/grok-4.5"},"grok-4.3":{"id":"grok-4.3","name":"Grok 4.3","description":"xAI's Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}}},"grok-4.20-0309-reasoning":{"id":"grok-4.20-0309-reasoning","name":"Grok 4.20 (Reasoning)","description":"Reasoning Grok for document-heavy analysis and long-horizon tool use","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}}},"grok-imagine-video":{"id":"grok-imagine-video","type":"video","name":"Grok Imagine Video","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"grok","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-01-28","last_updated":"2026-01-28","modalities":{"input":["text","image","video"],"output":["video"]},"open_weights":false,"limit":{"context":1024,"output":0}},"grok-4.7":{"id":"grok-4.7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.7"},"grok-imagine-image":{"id":"grok-imagine-image","type":"image","name":"Grok Imagine Image","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"grok","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-01-28","last_updated":"2026-01-28","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":16000,"output":0},"canonical_model_id":"xai/grok-imagine-image"},"grok-imagine-video-1.5-lite":{"id":"grok-imagine-video-1.5-lite","type":"video","name":"Grok Imagine Video 1.5 Lite","description":"Cost-efficient video model for text-to-video and image-to-video generation","family":"grok","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-10-01","last_updated":"2026-10-01","modalities":{"input":["text","image"],"output":["video"]},"open_weights":false,"limit":{"context":1024,"output":0},"canonical_model_id":"xai/grok-imagine-video-1.5-lite"},"grok-4.6":{"id":"grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"tiers":[{"input":4,"output":12,"cache_read":1,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1}},"canonical_model_id":"xai/grok-4.6"},"grok-build-0.1":{"id":"grok-build-0.1","name":"Grok Build 0.1","description":"Fast Grok coding model tuned for agentic engineering and iterative edits","family":"grok-build","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":1,"output":2,"cache_read":0.2,"tiers":[{"input":2,"output":4,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2,"output":4,"cache_read":0.4}}},"grok-4.20-multi-agent-0309":{"id":"grok-4.20-multi-agent-0309","name":"Grok 4.20 Multi-Agent","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-03-09","last_updated":"2026-03-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":30000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4}}},"grok-imagine-video-1.5":{"id":"grok-imagine-video-1.5","type":"video","name":"Grok Imagine Video 1.5","description":"Video model for text-to-video, image-to-video, and reference-to-video generation with optional voice references","family":"grok","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-05-30","last_updated":"2026-05-30","modalities":{"input":["text","image","audio"],"output":["video"]},"open_weights":false,"limit":{"context":1024,"output":0},"canonical_model_id":"xai/grok-imagine-video-1.5"}}},"openreason":{"id":"openreason","env":["OPENREASON_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.openreason.app/v1","name":"OpenReason","doc":"https://openreason.app/docs","models":{"deepseek-ai/deepseek-v4-flash-0731":{"id":"deepseek-ai/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.1371,"output":0.2743},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"moonshotai/kimi-k2.7-code":{"id":"moonshotai/kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.0022,"output":4.22},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.1055,"output":0.422},"canonical_model_id":"openai/gpt-oss-120b"}}},"model-oracle-ai":{"id":"model-oracle-ai","env":["MODEL_ORACLE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.modeloracle.com/api/v1","name":"Model Oracle AI","doc":"https://modeloracle.com/setup/","models":{"gpt-5.5":{"id":"gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"canonical_model_id":"openai/gpt-5.5"},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"canonical_model_id":"zhipuai/glm-5.2"},"gpt-4.1-mini":{"id":"gpt-4.1-mini","name":"GPT-4.1 mini","description":"Affordable GPT-4.1 lane for fast coding help and structured extraction","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"canonical_model_id":"openai/gpt-4.1-mini"},"o4-mini":{"id":"o4-mini","name":"o4-mini","description":"Fast o-series model for compact reasoning, coding, and tool use","family":"o-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"canonical_model_id":"openai/o4-mini"},"gpt-5.4-mini":{"id":"gpt-5.4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"canonical_model_id":"openai/gpt-5.4-mini"},"claude-opus-4.8":{"id":"claude-opus-4.8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"canonical_model_id":"anthropic/claude-opus-4-8"},"gpt-5":{"id":"gpt-5","name":"GPT-5","description":"Original GPT-5 workhorse for reasoning, coding, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"canonical_model_id":"openai/gpt-5"},"claude-haiku-4.5":{"id":"claude-haiku-4.5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"canonical_model_id":"anthropic/claude-haiku-4-5"},"claude-sonnet-5":{"id":"claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"canonical_model_id":"anthropic/claude-sonnet-5"},"gpt-4.1":{"id":"gpt-4.1","name":"GPT-4.1","description":"Long-lived GPT workhorse for coding, instruction following, and production apps","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-04-14","last_updated":"2025-04-14","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1047576,"output":32768},"canonical_model_id":"openai/gpt-4.1"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"canonical_model_id":"deepseek/deepseek-v4-pro"},"claude-fable-5":{"id":"claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"canonical_model_id":"anthropic/claude-fable-5"},"gpt-5.4":{"id":"gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"canonical_model_id":"openai/gpt-5.4"},"auto":{"id":"auto","name":"Auto","description":"Model Oracle AI decision engine that selects and routes among configured coding-agent models","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-29","last_updated":"2026-07-07","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000}},"gpt-5.4-nano":{"id":"gpt-5.4-nano","name":"GPT-5.4 nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"canonical_model_id":"openai/gpt-5.4-nano"}}},"sakana":{"id":"sakana","env":["SAKANA_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.sakana.ai/v1","name":"Sakana AI","doc":"https://console.sakana.ai/models","models":{"fugu-ultra":{"id":"fugu-ultra","name":"Fugu Ultra","description":"Quality-first multi-agent model for hard research, analysis, and competitions","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-06-15","last_updated":"2026-06-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"provider":{"shape":"responses"},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"sakana/fugu-ultra"},"fugu-ultra-20260615":{"id":"fugu-ultra-20260615","name":"Fugu Ultra","description":"Quality-first multi-agent model for hard research, analysis, and competitions","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-06-15","last_updated":"2026-06-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"provider":{"shape":"responses"},"cost":{"input":5,"output":30,"cache_read":0.5,"tiers":[{"input":10,"output":45,"cache_read":1,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1}},"canonical_model_id":"sakana/fugu-ultra"},"fugu":{"id":"fugu","name":"Fugu","description":"Multi-agent model for routing expert agents across complex analytical tasks","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-06-15","last_updated":"2026-06-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"provider":{"shape":"responses"},"canonical_model_id":"sakana/fugu"},"sakana-namazu":{"id":"sakana-namazu","name":"Sakana Namazu","description":"Japanese-specialized reasoning model based on Kimi K2.6 and tuned for Japanese language, culture, and business workflows","family":"sakana-namazu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":65536},"cost":{"input":0.95,"output":4,"cache_read":0.15},"canonical_model_id":"sakana/sakana-namazu"}}},"wallaby":{"id":"wallaby","env":["WALLABY_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.wallabytoken.com/v1","name":"Wallaby","doc":"https://wallabytoken.com/docs","models":{"moonshotai/kimi-k3":{"id":"moonshotai/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":2.7,"output":13.5,"cache_read":0.27},"canonical_model_id":"moonshotai/kimi-k3"}}},"nan":{"id":"nan","env":["NAN_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.nan.builders/v1","name":"NaN","doc":"https://nan.builders/docs/models","models":{"glm5.3":{"id":"glm5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"zhipuai/glm-5.3"},"gemma4":{"id":"gemma4","name":"Gemma 4 26B A4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0,"output":0},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"qwen-image-2.1":{"id":"qwen-image-2.1","type":"image","name":"Qwen-Image-2.1","description":"Unified text-to-image generation and image editing model with native RGBA transparency and reference-image editing","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-09-14","last_updated":"2026-09-21","modalities":{"input":["text"],"output":["image"]},"open_weights":true,"limit":{"context":8192,"output":0},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen-image-2.1"},"qwen3.8-flash":{"id":"qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3.8-flash"},"mimo-v2.6-flash":{"id":"mimo-v2.6-flash","name":"MiMo-V2.6-Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0,"output":0},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"glm5.3-flash":{"id":"glm5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"zhipuai/glm-5.3-flash"},"qwen3.6":{"id":"qwen3.6","name":"Qwen3.6 35B-A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0,"output":0},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"}}},"huggingface":{"id":"huggingface","env":["HF_TOKEN"],"npm":"@ai-sdk/openai-compatible","api":"https://router.huggingface.co/v1","name":"Hugging Face","doc":"https://huggingface.co/docs/inference-providers","models":{"XiaomiMiMo/MiMo-V2.5":{"id":"XiaomiMiMo/MiMo-V2.5","name":"MiMo-V2.5","description":"MiMo model for long-context reasoning, perception, and agentic tasks","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0.4,"output":2},"canonical_model_id":"xiaomi/mimo-v2.5"},"XiaomiMiMo/MiMo-V2.5-Pro":{"id":"XiaomiMiMo/MiMo-V2.5-Pro","name":"MiMo-V2.5-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1,"output":3},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"google/gemma-4-31B-it":{"id":"google/gemma-4-31B-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.14,"output":0.4},"canonical_model_id":"google/gemma-4-31b-it"},"google/gemma-4-26B-A4B-it":{"id":"google/gemma-4-26B-A4B-it","name":"Gemma 4 26B A4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.13,"output":0.4},"canonical_model_id":"google/gemma-4-26b-a4b-it"},"google/gemma-3-27b-it":{"id":"google/gemma-3-27b-it","name":"Gemma 3 27B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.08,"output":0.16},"canonical_model_id":"google/gemma-3-27b-it"},"google/gemma-3-4b-it":{"id":"google/gemma-3-4b-it","name":"Gemma 3 4B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.05,"output":0.1},"canonical_model_id":"google/gemma-3-4b-it"},"google/gemma-3-12b-it":{"id":"google/gemma-3-12b-it","name":"Gemma 3 12B IT","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08","release_date":"2025-03-12","last_updated":"2025-03-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.05,"output":0.15},"canonical_model_id":"google/gemma-3-12b-it"},"MiniMaxAI/MiniMax-M1-80k":{"id":"MiniMaxAI/MiniMax-M1-80k","name":"MiniMax M1 80K","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":80000},"cost":{"input":0.55,"output":2.2},"canonical_model_id":"minimax/minimax-m1-80k"},"MiniMaxAI/MiniMax-M2.1":{"id":"MiniMaxAI/MiniMax-M2.1","name":"MiniMax-M2.1","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-10","release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2},"canonical_model_id":"minimax/MiniMax-M2.1"},"MiniMaxAI/MiniMax-M2.5":{"id":"MiniMaxAI/MiniMax-M2.5","name":"MiniMax-M2.5","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.03},"canonical_model_id":"minimax/MiniMax-M2.5"},"MiniMaxAI/MiniMax-M2.7":{"id":"MiniMaxAI/MiniMax-M2.7","name":"MiniMax-M2.7","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M2.7"},"MiniMaxAI/MiniMax-M3":{"id":"MiniMaxAI/MiniMax-M3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":512000},"cost":{"input":0.3,"output":1.2},"canonical_model_id":"minimax/MiniMax-M3"},"MiniMaxAI/MiniMax-M3.1-Flash":{"id":"MiniMaxAI/MiniMax-M3.1-Flash","name":"MiniMax-M3.1-Flash","description":"Frontier multimodal coding model with 1M context window and tunable thinking depth","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-10-19","last_updated":"2026-10-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":512000},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"minimax/MiniMax-M3.1-Flash"},"MiniMaxAI/MiniMax-M2":{"id":"MiniMaxAI/MiniMax-M2","name":"MiniMax-M2","description":"Efficient open MiniMax model built for coding agents and tool-heavy workflows","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-10-27","last_updated":"2025-10-27","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2},"canonical_model_id":"minimax/MiniMax-M2"},"deepseek-ai/DeepSeek-V3.2":{"id":"deepseek-ai/DeepSeek-V3.2","name":"DeepSeek-V3.2","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-12-01","last_updated":"2025-12-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":65536},"cost":{"input":0.28,"output":0.4},"canonical_model_id":"deepseek/deepseek-v3.2"},"deepseek-ai/DeepSeek-V4-Flash":{"id":"deepseek-ai/DeepSeek-V4-Flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.14,"output":0.28},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek-ai/DeepSeek-V3.1":{"id":"deepseek-ai/DeepSeek-V3.1","name":"DeepSeek-V3.1","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"cost":{"input":0.27,"output":1},"canonical_model_id":"deepseek/deepseek-v3.1"},"deepseek-ai/DeepSeek-V4.1-Flash-1017":{"id":"deepseek-ai/DeepSeek-V4.1-Flash-1017","name":"DeepSeek V4.1 Flash 1017","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-10-17","last_updated":"2026-10-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.3,"output":1.2},"canonical_model_id":"deepseek/deepseek-v4.1-flash-1017"},"deepseek-ai/DeepSeek-V4-Flash-0731":{"id":"deepseek-ai/DeepSeek-V4-Flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.14,"output":0.28},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"deepseek-ai/DeepSeek-V4-Flash-Vision-Exp":{"id":"deepseek-ai/DeepSeek-V4-Flash-Vision-Exp","name":"DeepSeek V4 Flash Vision Exp","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-21","last_updated":"2026-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.44,"output":1.32},"canonical_model_id":"deepseek/deepseek-v4-flash-vision-exp"},"deepseek-ai/DeepSeek-V3":{"id":"deepseek-ai/DeepSeek-V3","name":"DeepSeek-V3","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2024-12-26","last_updated":"2024-12-26","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":64000,"output":8192},"cost":{"input":0.4,"output":1.3},"canonical_model_id":"deepseek/deepseek-v3"},"deepseek-ai/DeepSeek-V3-0324":{"id":"deepseek-ai/DeepSeek-V3-0324","name":"DeepSeek V3 0324","description":"DeepSeek chat model for instruction following, coding, and analysis","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-03-24","last_updated":"2025-03-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":163840},"cost":{"input":0.27,"output":1.12},"canonical_model_id":"deepseek/deepseek-v3-0324"},"deepseek-ai/DeepSeek-V4-Pro":{"id":"deepseek-ai/DeepSeek-V4-Pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.435,"output":0.87,"cache_read":0.003625},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek-ai/DeepSeek-V4.1-Flash":{"id":"deepseek-ai/DeepSeek-V4.1-Flash","name":"DeepSeek V4.1 Flash","description":"Fast DeepSeek model for efficient chat, coding help, and agent loops","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.3,"output":1.2},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek-ai/DeepSeek-R1-0528":{"id":"deepseek-ai/DeepSeek-R1-0528","name":"DeepSeek-R1-0528","description":"DeepSeek reasoning model for multi-step analysis, math, coding, and tools","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-05-28","last_updated":"2025-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":32768},"cost":{"input":3,"output":5},"canonical_model_id":"deepseek/deepseek-r1-0528"},"deepseek-ai/DeepSeek-V4-Pro-0813":{"id":"deepseek-ai/DeepSeek-V4-Pro-0813","name":"DeepSeek V4 Pro 0813","description":"Flagship DeepSeek model for coding, reasoning, and agentic work","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":1.32,"output":3.96},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"deepseek-ai/DeepSeek-R1":{"id":"deepseek-ai/DeepSeek-R1","name":"DeepSeek-R1","description":"Classic open reasoning model for transparent math, coding, and deliberate problem solving","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-07","release_date":"2025-01-20","last_updated":"2025-05-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":64000,"output":32768},"cost":{"input":0.7,"output":2.5},"canonical_model_id":"deepseek/deepseek-r1"},"tencent/Hy4-preview":{"id":"tencent/Hy4-preview","name":"Hy4 preview","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-28","last_updated":"2026-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":64000},"cost":{"input":0.834,"output":2.501},"canonical_model_id":"tencent/hy4-preview"},"tencent/Hy3":{"id":"tencent/Hy3","name":"Hy3","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":192000,"output":128000},"cost":{"input":0.14,"output":0.58},"canonical_model_id":"tencent/hy3"},"moonshotai/Kimi-K3":{"id":"moonshotai/Kimi-K3","name":"Kimi K3","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":3,"output":15},"canonical_model_id":"moonshotai/kimi-k3"},"moonshotai/Kimi-K2.7-Code":{"id":"moonshotai/Kimi-K2.7-Code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"moonshotai/Kimi-K2.5":{"id":"moonshotai/Kimi-K2.5","name":"Kimi-K2.5","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.6,"output":3,"cache_read":0.1},"canonical_model_id":"moonshotai/kimi-k2.5"},"moonshotai/Kimi-K2.6":{"id":"moonshotai/Kimi-K2.6","name":"Kimi-K2.6","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"moonshotai/Kimi-K2-Instruct":{"id":"moonshotai/Kimi-K2-Instruct","name":"Kimi-K2-Instruct","description":"Kimi model for long-context chat, coding, and agentic reasoning","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2025-07-11","last_updated":"2025-07-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":1,"output":3},"canonical_model_id":"moonshotai/kimi-k2-instruct"},"moonshotai/Kimi-K2-Instruct-0905":{"id":"moonshotai/Kimi-K2-Instruct-0905","name":"Kimi-K2-Instruct-0905","description":"Kimi model for long-context chat, coding, and agentic reasoning","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2025-09-05","last_updated":"2025-09-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":1,"output":3},"canonical_model_id":"moonshotai/kimi-k2-0905"},"moonshotai/Kimi-K2-Thinking":{"id":"moonshotai/Kimi-K2-Thinking","name":"Kimi-K2-Thinking","description":"Kimi reasoning model for long-horizon research, planning, and tool use","family":"kimi-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2024-08","release_date":"2025-11-06","last_updated":"2025-11-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.6,"output":2.5,"cache_read":0.15},"canonical_model_id":"moonshotai/kimi-k2-thinking"},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT OSS 20B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.1,"output":0.5},"canonical_model_id":"openai/gpt-oss-20b"},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.25,"output":0.69},"canonical_model_id":"openai/gpt-oss-120b"},"thinkingmachines/Inkling-Small":{"id":"thinkingmachines/Inkling-Small","name":"Inkling Small","description":"Efficient model for low-latency assistance, extraction, and routine automation","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-07-30","last_updated":"2026-07-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":1048576},"cost":{"input":0.5,"output":1.2},"canonical_model_id":"thinkingmachines/inkling-small"},"thinkingmachines/Inkling":{"id":"thinkingmachines/Inkling","name":"Inkling","description":"Multimodal model for analyzing text, images, documents, and rich media","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":1,"output":4.05},"canonical_model_id":"thinkingmachines/inkling"},"meta-llama/Llama-3.1-8B-Instruct":{"id":"meta-llama/Llama-3.1-8B-Instruct","name":"Llama-3.1-8B-Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":4096},"cost":{"input":0.06,"output":0.06},"canonical_model_id":"meta/llama-3.1-8b-instruct"},"meta-llama/Llama-Guard-4-12B":{"id":"meta-llama/Llama-Guard-4-12B","name":"Llama Guard 4 12B","description":"Multimodal Llama 4-based safety classifier for moderating prompts and responses","family":"llama","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-04-29","last_updated":"2025-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":163840},"cost":{"input":0.18,"output":0.18},"canonical_model_id":"meta/llama-guard-4-12b"},"meta-llama/Llama-3.3-70B-Instruct":{"id":"meta-llama/Llama-3.3-70B-Instruct","name":"Llama-3.3-70B-Instruct","description":"Popular open Llama workhorse for multilingual chat, coding, and self-hosting","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-12-06","last_updated":"2024-12-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":4096},"cost":{"input":0.59,"output":0.79},"canonical_model_id":"meta/llama-3.3-70b-instruct"},"Qwen/Qwen3-VL-30B-A3B-Instruct":{"id":"Qwen/Qwen3-VL-30B-A3B-Instruct","name":"Qwen3 VL 30B A3B Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-10-04","last_updated":"2025-10-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.2,"output":0.7},"canonical_model_id":"alibaba/qwen3-vl-30b-a3b-instruct"},"Qwen/Qwen3-235B-A22B-Thinking-2507":{"id":"Qwen/Qwen3-235B-A22B-Thinking-2507","name":"Qwen3-235B-A22B-Thinking-2507","description":"Qwen reasoning model for deliberate problem solving, math, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-25","last_updated":"2025-07-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":81920},"cost":{"input":0.3,"output":3},"canonical_model_id":"alibaba/qwen3-235b-a22b-thinking-2507"},"Qwen/Qwen3-235B-A22B":{"id":"Qwen/Qwen3-235B-A22B","name":"Qwen3 235B-A22B","description":"Large open Qwen MoE for multilingual reasoning, coding, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":40960,"output":16384},"cost":{"input":0.2,"output":0.8},"canonical_model_id":"alibaba/qwen3-235b-a22b"},"Qwen/Qwen3.5-397B-A17B":{"id":"Qwen/Qwen3.5-397B-A17B","name":"Qwen3.5-397B-A17B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.6,"output":3.6},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"Qwen/Qwen3-32B":{"id":"Qwen/Qwen3-32B","name":"Qwen3 32B","description":"Dense open Qwen model for self-hosted chat, reasoning, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.29,"output":0.59},"canonical_model_id":"alibaba/qwen3-32b"},"Qwen/Qwen2.5-Coder-32B-Instruct":{"id":"Qwen/Qwen2.5-Coder-32B-Instruct","name":"Qwen2.5-Coder-32B-Instruct","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2024-11-12","last_updated":"2024-11-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"cost":{"input":0.06,"output":0.2},"canonical_model_id":"alibaba/qwen2.5-coder-32b-instruct"},"Qwen/Qwen3.5-27B":{"id":"Qwen/Qwen3.5-27B","name":"Qwen3.5 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.3,"output":2.4},"canonical_model_id":"alibaba/qwen3.5-27b"},"Qwen/Qwen3-VL-235B-A22B-Instruct":{"id":"Qwen/Qwen3-VL-235B-A22B-Instruct","name":"Qwen3 VL 235B A22B Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.3,"output":1.5},"canonical_model_id":"alibaba/qwen3-vl-235b-a22b-instruct"},"Qwen/Qwen3.6-27B":{"id":"Qwen/Qwen3.6-27B","name":"Qwen3.6 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.47,"output":3.19},"canonical_model_id":"alibaba/qwen3.6-27b"},"Qwen/Qwen3-Coder-Next":{"id":"Qwen/Qwen3-Coder-Next","name":"Qwen3-Coder-Next","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-02-03","last_updated":"2026-02-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.2,"output":1.5},"canonical_model_id":"alibaba/qwen3-coder-next"},"Qwen/Qwen3-Next-80B-A3B-Instruct":{"id":"Qwen/Qwen3-Next-80B-A3B-Instruct","name":"Qwen3-Next-80B-A3B-Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.25,"output":1},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-instruct"},"Qwen/Qwen3-Coder-480B-A35B-Instruct":{"id":"Qwen/Qwen3-Coder-480B-A35B-Instruct","name":"Qwen3-Coder-480B-A35B-Instruct","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":2,"output":2},"canonical_model_id":"alibaba/qwen3-coder-480b-a35b-instruct"},"Qwen/Qwen3-Embedding-4B":{"id":"Qwen/Qwen3-Embedding-4B","type":"embedding","name":"Qwen 3 Embedding 4B","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2024-12","release_date":"2025-06-05","last_updated":"2025-06-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":0},"provider":{"api":"https://router.huggingface.co/deepinfra/v1/openai"},"cost":{"input":0.01,"output":0},"canonical_model_id":"alibaba/qwen3-embedding-4b"},"Qwen/Qwen3.5-122B-A10B":{"id":"Qwen/Qwen3.5-122B-A10B","name":"Qwen3.5 122B-A10B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.4,"output":3.2},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"Qwen/Qwen3.8-2.4T-A95B":{"id":"Qwen/Qwen3.8-2.4T-A95B","name":"Qwen3.8 2.4T A95B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":2.5,"output":6.25},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"Qwen/Qwen3.5-9B":{"id":"Qwen/Qwen3.5-9B","name":"Qwen3.5 9B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.17,"output":0.25},"canonical_model_id":"alibaba/qwen3.5-9b"},"Qwen/Qwen3-30B-A3B":{"id":"Qwen/Qwen3-30B-A3B","name":"Qwen3 30B A3B","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":40960,"output":16384},"cost":{"input":0.12,"output":0.5},"canonical_model_id":"alibaba/qwen3-30b-a3b"},"Qwen/Qwen3.8-27B":{"id":"Qwen/Qwen3.8-27B","name":"Qwen3.8 27B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.4,"output":3},"canonical_model_id":"alibaba/qwen3.8-27b"},"Qwen/Qwen3-235B-A22B-Instruct-2507":{"id":"Qwen/Qwen3-235B-A22B-Instruct-2507","name":"Qwen3 235B-A22B Instruct 2507","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":16384},"cost":{"input":0.855,"output":2.565},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"Qwen/Qwen3-Coder-30B-A3B-Instruct":{"id":"Qwen/Qwen3-Coder-30B-A3B-Instruct","name":"Qwen3-Coder 30B-A3B Instruct","description":"Smaller Qwen coder for efficient local agents and repo-level fixes","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-31","last_updated":"2025-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.07,"output":0.26},"canonical_model_id":"alibaba/qwen3-coder-30b-a3b-instruct"},"Qwen/Qwen3-8B":{"id":"Qwen/Qwen3-8B","name":"Qwen3 8B","description":"Dense 8B Qwen3 model with switchable thinking for chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-04-29","last_updated":"2025-04-29","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":40960,"output":32768},"cost":{"input":0.07,"output":0.18},"canonical_model_id":"alibaba/qwen3-8b"},"Qwen/Qwen3.5-35B-A3B":{"id":"Qwen/Qwen3.5-35B-A3B","name":"Qwen3.5 35B-A3B","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.25,"output":2},"canonical_model_id":"alibaba/qwen3.5-35b-a3b"},"Qwen/Qwen3-Embedding-8B":{"id":"Qwen/Qwen3-Embedding-8B","type":"embedding","name":"Qwen 3 Embedding 8B","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2024-12","release_date":"2025-06-05","last_updated":"2025-06-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32768,"output":0},"provider":{"api":"https://router.huggingface.co/deepinfra/v1/openai"},"cost":{"input":0.01,"output":0},"canonical_model_id":"alibaba/qwen3-embedding-8b"},"Qwen/Qwen3-VL-235B-A22B-Thinking":{"id":"Qwen/Qwen3-VL-235B-A22B-Thinking","name":"Qwen3 VL 235B A22B Thinking","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.98,"output":3.95},"canonical_model_id":"alibaba/qwen3-vl-235b-a22b-thinking"},"Qwen/Qwen3.6-35B-A3B":{"id":"Qwen/Qwen3.6-35B-A3B","name":"Qwen3.6 35B-A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.15,"output":0.95},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"zai-org/GLM-5.3-Flash":{"id":"zai-org/GLM-5.3-Flash","name":"GLM-5.3-Flash","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.15,"output":0.5},"canonical_model_id":"zhipuai/glm-5.3-flash"},"zai-org/GLM-4.6V-Flash":{"id":"zai-org/GLM-4.6V-Flash","name":"GLM-4.6V-Flash","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-12-08","last_updated":"2025-12-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.3,"output":0.9},"canonical_model_id":"zhipuai/glm-4.6v-flash"},"zai-org/GLM-5.2":{"id":"zai-org/GLM-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":1.4,"output":4.4},"canonical_model_id":"zhipuai/glm-5.2"},"zai-org/GLM-4.7-Flash":{"id":"zai-org/GLM-4.7-Flash","name":"GLM-4.7-Flash","description":"Efficient GLM model for fast reasoning, coding, and agent workflows","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0,"output":0},"canonical_model_id":"zhipuai/glm-4.7-flash"},"zai-org/GLM-5.3":{"id":"zai-org/GLM-5.3","name":"GLM-5.3","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.4,"output":4.4},"canonical_model_id":"zhipuai/glm-5.3"},"zai-org/GLM-4.5-Air":{"id":"zai-org/GLM-4.5-Air","name":"GLM-4.5-Air","description":"Lighter GLM-4.5 variant for fast coding assistance and cheaper agents","family":"glm-air","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"cost":{"input":0.13,"output":0.85},"canonical_model_id":"zhipuai/glm-4.5-air"},"zai-org/GLM-4.6":{"id":"zai-org/GLM-4.6","name":"GLM-4.6","description":"Late GLM-4 workhorse for coding agents, reasoning, and structured tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-30","last_updated":"2025-09-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.55,"output":2.2},"canonical_model_id":"zhipuai/glm-4.6"},"zai-org/AutoGLM-Phone-9B-Multilingual":{"id":"zai-org/AutoGLM-Phone-9B-Multilingual","name":"AutoGLM Phone 9B Multilingual","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-12-10","last_updated":"2025-12-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":0.035,"output":0.138},"canonical_model_id":"zhipuai/autoglm-phone-9b-multilingual"},"zai-org/GLM-4.7":{"id":"zai-org/GLM-4.7","name":"GLM-4.7","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.2,"cache_read":0.11},"canonical_model_id":"zhipuai/glm-4.7"},"zai-org/GLM-4.5V":{"id":"zai-org/GLM-4.5V","name":"GLM-4.5V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-08-11","last_updated":"2025-08-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":16384},"cost":{"input":0.6,"output":1.8},"canonical_model_id":"zhipuai/glm-4.5v"},"zai-org/GLM-5":{"id":"zai-org/GLM-5","name":"GLM-5","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":1,"output":3.2,"cache_read":0.2},"canonical_model_id":"zhipuai/glm-5"},"zai-org/GLM-5.1":{"id":"zai-org/GLM-5.1","name":"GLM-5.1","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":1,"output":3.2,"cache_read":0.2},"canonical_model_id":"zhipuai/glm-5.1"},"stepfun-ai/Step-3.5-Flash":{"id":"stepfun-ai/Step-3.5-Flash","name":"Step 3.5 Flash","description":"StepFun flash lane for quick multimodal reasoning and coding assistance","family":"step","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-29","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"cost":{"input":0.1,"output":0.3},"canonical_model_id":"stepfun/step-3.5-flash"},"stepfun-ai/Step-3.7-Flash":{"id":"stepfun-ai/Step-3.7-Flash","name":"Step 3.7 Flash","description":"Newer StepFun flash model for faster agents, coding, and multimodal prompts","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2026-03-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":256000},"cost":{"input":0.2,"output":1.15},"canonical_model_id":"stepfun/step-3.7-flash"}}},"kenari":{"id":"kenari","env":["KENARI_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://kenari.id/v1","name":"Kenari","doc":"https://kenari.id/docs","models":{"gemini-3-1-flash-lite":{"id":"gemini-3-1-flash-lite","name":"Gemini 3.1 Flash Lite","description":"Low-latency Gemini model for high-volume multimodal and agent workloads","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-07","last_updated":"2026-05-07","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.28571429,"output":1.71428571,"cache_read":0.02857143,"cache_write":0.08571429},"canonical_model_id":"google/gemini-3.1-flash-lite"},"gpt-5-6-terra":{"id":"gpt-5-6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"status":"deprecated","cost":{"input":2.4,"output":14.28571429},"canonical_model_id":"openai/gpt-5.6-terra"},"grok-4-6":{"id":"grok-4-6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2.28571429,"output":6.85714286,"cache_read":0.34285714},"canonical_model_id":"xai/grok-4.6"},"nemotron-3-ultra-550b-a55b":{"id":"nemotron-3-ultra-550b-a55b","name":"Nemotron 3 Ultra 550B A55B","description":"Largest Nemotron 3 model for maximum open-weight reasoning and agent accuracy","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-06-04","last_updated":"2026-06-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":0.68571429,"output":4.28571429,"cache_read":0.06857143},"canonical_model_id":"nvidia/nemotron-3-ultra-550b-a55b"},"mistral-large:free":{"id":"mistral-large:free","name":"Mistral Large (Free)","description":"Flagship Mistral model for advanced reasoning, coding, and multilingual work","family":"mistral-large","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-11","release_date":"2024-11-01","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"mistral/mistral-large-latest"},"nano-banana-2-lite":{"id":"nano-banana-2-lite","type":"image","name":"Nano Banana 2 Lite","description":"Fastest, most cost-efficient Gemini image model for high-volume 1K generation and editing","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","high"]}],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":4096},"canonical_model_id":"google/gemini-3.1-flash-lite-image"},"nano-banana-2":{"id":"nano-banana-2","type":"image","name":"Nano Banana 2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","high"]}],"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","video","pdf"],"output":["text","image"]},"open_weights":false,"limit":{"context":131072,"output":32768},"canonical_model_id":"google/gemini-3.1-flash-image"},"grok-imagine-image-2-0":{"id":"grok-imagine-image-2-0","type":"image","name":"Grok Imagine Image 2.0","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"grok","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-08-07","last_updated":"2026-08-07","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":64000,"output":0},"canonical_model_id":"xai/grok-imagine-image-2.0"},"glm-5-3-flash":{"id":"glm-5-3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.11428571,"output":0.34285714,"cache_read":0.02285714},"canonical_model_id":"zhipuai/glm-5.3-flash"},"hy3:free":{"id":"hy3:free","name":"Hy3 (Free)","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":192000,"output":128000},"cost":{"input":0,"output":0},"canonical_model_id":"tencent/hy3"},"mistral-medium-3-5:free":{"id":"mistral-medium-3-5:free","name":"Mistral Medium 3.5 (Free)","description":"Balanced Mistral model for enterprise assistants, multilingual work, and tools","family":"mistral-medium","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-29","last_updated":"2026-04-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"mistral/mistral-medium-2604"},"nemotron-3-nano-30b-a3b":{"id":"nemotron-3-nano-30b-a3b","name":"Nemotron 3 Nano 30B A3B","description":"Small Nemotron 3 MoE for efficient coding, math, and long-context agents","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-06-25","release_date":"2025-12-15","last_updated":"2025-12-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","canonical_model_id":"nvidia/nemotron-3-nano-30b-a3b"},"glm-5-2":{"id":"glm-5-2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.28571429,"output":3.42857143,"cache_read":0.05314286},"canonical_model_id":"zhipuai/glm-5.2"},"kimi-k2-7-code:free":{"id":"kimi-k2-7-code:free","name":"Kimi K2.7 Code (Free)","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"gpt-5-4-mini":{"id":"gpt-5-4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":0.85714286,"output":5.37142857},"canonical_model_id":"openai/gpt-5.4-mini"},"gpt-5-6-luna":{"id":"gpt-5-6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":0.2,"output":1.14285714,"cache_read":0.02,"cache_write":0.25714286},"canonical_model_id":"openai/gpt-5.6-luna"},"gpt-5-6-sol":{"id":"gpt-5-6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"cost":{"input":2.97142857,"output":17.71428571,"cache_read":1.18857143,"cache_write":3.71428571},"canonical_model_id":"openai/gpt-5.6-sol"},"kimi-k3":{"id":"kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.85714286,"output":8.57142857,"cache_read":0.11428571},"canonical_model_id":"moonshotai/kimi-k3"},"claude-sonnet-5":{"id":"claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":1.42857143,"output":7.14285714,"cache_read":0.57142857,"cache_write":1.71428571},"canonical_model_id":"anthropic/claude-sonnet-5"},"gemini-3-1-flash-tts":{"id":"gemini-3-1-flash-tts","type":"speech","name":"Gemini 3.1 Flash TTS Preview","description":"Low-latency speech generation with steerable prompts and expressive audio tags","family":"gemini-flash","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-15","last_updated":"2026-04-15","modalities":{"input":["text"],"output":["audio"]},"open_weights":false,"limit":{"context":8192,"output":16384},"provider":{"npm":"@ai-sdk/openai"},"canonical_model_id":"google/gemini-3.1-flash-tts-preview"},"gemini-3-6-flash":{"id":"gemini-3-6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":0.34285714,"output":1.71428571,"cache_read":0.03428571,"cache_write":0.01714286},"canonical_model_id":"google/gemini-3.6-flash"},"kimi-k2-7-code":{"id":"kimi-k2-7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.57142857,"output":2.85714286,"cache_read":0.11428571},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"gpt-image-2":{"id":"gpt-image-2","type":"image","name":"GPT-Image-2","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"gpt-image","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-04-21","last_updated":"2026-04-21","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":272000,"output":16384},"canonical_model_id":"openai/gpt-image-2"},"grok-4-5":{"id":"grok-4-5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2.28571429,"output":6.85714286,"cache_read":0.34285714},"canonical_model_id":"xai/grok-4.5"},"qwen3-7-plus":{"id":"qwen3-7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.38285714,"output":1.48571429,"cache_read":0.07428571,"cache_write":0.48},"canonical_model_id":"alibaba/qwen3.7-plus"},"gpt-oss-20b":{"id":"gpt-oss-20b","name":"GPT OSS 20B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.036,"output":0.15428571,"cache_read":0.00371429},"canonical_model_id":"openai/gpt-oss-20b"},"grok-build-0-1":{"id":"grok-build-0-1","name":"Grok Build 0.1","description":"Fast Grok coding model tuned for agentic engineering and iterative edits","family":"grok-build","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"status":"deprecated","canonical_model_id":"xai/grok-build-0.1"},"nano-banana-pro":{"id":"nano-banana-pro","type":"image","name":"Nano Banana Pro","description":"Nano Banana Pro for higher-fidelity image generation and design-heavy edits","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":false,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image"],"output":["text","image"]},"open_weights":false,"limit":{"context":65536,"output":32768},"canonical_model_id":"google/gemini-3-pro-image"},"grok-imagine-image":{"id":"grok-imagine-image","type":"image","name":"Grok Imagine Image","description":"Image model for prompt-driven generation, editing, and visual design workflows","family":"grok","attachment":true,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2026-01-28","last_updated":"2026-01-28","modalities":{"input":["text","image"],"output":["image"]},"open_weights":false,"limit":{"context":16000,"output":0},"canonical_model_id":"xai/grok-imagine-image"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.57142857,"output":1.14285714,"cache_read":0.00571429},"canonical_model_id":"deepseek/deepseek-v4-pro"},"mimo-v2-5":{"id":"mimo-v2-5","name":"MiMo-V2.5","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":0.16571429,"output":0.33142857},"canonical_model_id":"xiaomi/mimo-v2.5"},"gpt-5-5":{"id":"gpt-5-5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5.71428571,"output":36,"cache_read":0.57142857},"canonical_model_id":"openai/gpt-5.5"},"minimax-m2-7":{"id":"minimax-m2-7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.36,"output":1.42857143,"cache_read":0.06857143},"canonical_model_id":"minimax/MiniMax-M2.7"},"claude-fable-5":{"id":"claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":12,"output":57.14285714,"cache_read":1.2,"cache_write":14.85714286},"canonical_model_id":"anthropic/claude-fable-5"},"gemini-3-7-flash":{"id":"gemini-3-7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":0.34285714,"output":1.71428571,"cache_read":0.03428571,"cache_write":0.01714286},"canonical_model_id":"google/gemini-3.7-flash"},"minimax-m3":{"id":"minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":512000},"cost":{"input":0.36,"output":1.42857143,"cache_read":0.06857143},"canonical_model_id":"minimax/MiniMax-M3"},"kimi-k2-6":{"id":"kimi-k2-6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.57142857,"output":2.85714286,"cache_read":0.28571429},"canonical_model_id":"moonshotai/kimi-k2.6"},"step-3-7-flash":{"id":"step-3-7-flash","name":"Step 3.7 Flash","description":"Newer StepFun flash model for faster agents, coding, and multimodal prompts","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2026-03-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":256000},"cost":{"input":0.24,"output":1.37142857,"cache_read":0.048},"canonical_model_id":"stepfun/step-3.7-flash"},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.15714286,"output":0.31428571,"cache_read":0.00371429},"canonical_model_id":"deepseek/deepseek-v4-flash"},"deepseek-v4-1-flash":{"id":"deepseek-v4-1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.15714286,"output":0.31428571,"cache_read":0.00371429},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"glm-5-3":{"id":"glm-5-3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0.28571429,"output":3.42857143,"cache_read":0.05314286},"canonical_model_id":"zhipuai/glm-5.3"},"claude-opus-5":{"id":"claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.71428571,"output":28.57142857,"cache_read":2.28571429,"cache_write":5.71428571},"canonical_model_id":"anthropic/claude-opus-5"},"deepseek-v4-flash:free":{"id":"deepseek-v4-flash:free","name":"DeepSeek V4 Flash (Free)","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"deepseek/deepseek-v4-flash"},"glm-5-1":{"id":"glm-5-1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"status":"deprecated","canonical_model_id":"zhipuai/glm-5.1"},"gemini-2-5-flash":{"id":"gemini-2-5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","canonical_model_id":"google/gemini-2.5-flash"},"gemma-4-31b-it":{"id":"gemma-4-31b-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.10285714,"output":0.40571429,"cache_read":0.04114286},"canonical_model_id":"google/gemma-4-31b-it"},"minimax-m2-7-highspeed":{"id":"minimax-m2-7-highspeed","name":"MiniMax-M2.7-highspeed","description":"Low-latency M2.7 variant for interactive coding plans and agent loops","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.59428571,"output":2.4,"cache_read":0.11428571},"canonical_model_id":"minimax/MiniMax-M2.7-highspeed"},"gemini-3-5-flash":{"id":"gemini-3-5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","canonical_model_id":"google/gemini-3.5-flash"},"hy3":{"id":"hy3","name":"Hy3","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":192000,"output":128000},"cost":{"input":0.15428571,"output":0.62857143,"cache_read":0.01542857},"canonical_model_id":"tencent/hy3"},"step-3-7-flash:free":{"id":"step-3-7-flash:free","name":"Step 3.7 Flash (Free)","description":"Newer StepFun flash model for faster agents, coding, and multimodal prompts","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2026-03-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":256000},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"stepfun/step-3.7-flash"},"glm-4-7-flash:free":{"id":"glm-4-7-flash:free","name":"GLM-4.7-Flash (Free)","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"zhipuai/glm-4.7-flash"},"mimo-v2-5:free":{"id":"mimo-v2-5:free","name":"MiMo-V2.5 (Free)","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"xiaomi/mimo-v2.5"},"kimi-k2-6:free":{"id":"kimi-k2-6:free","name":"Kimi K2.6 (Free)","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"status":"deprecated","cost":{"input":0,"output":0},"canonical_model_id":"moonshotai/kimi-k2.6"},"qwen3-8-max":{"id":"qwen3-8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":2.4,"output":6.85714286,"cache_read":0.29714286,"cache_write":2.97142857},"canonical_model_id":"alibaba/qwen3.8-max"},"claude-opus-4-8":{"id":"claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.71428571,"output":29.71428571,"cache_read":0.57142857,"cache_write":7.42857143},"canonical_model_id":"anthropic/claude-opus-4-8"},"nemotron-3-super-120b-a12b":{"id":"nemotron-3-super-120b-a12b","name":"Nemotron 3 Super 120B A12B","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium"]}],"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.09714286,"output":0.48,"cache_read":0.00971429},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"},"whisper-large-v3-turbo":{"id":"whisper-large-v3-turbo","type":"transcription","name":"Whisper Large v3 Turbo","description":"Speech transcription model for accurate audio-to-text and captioning workflows","family":"whisper","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2024-10-01","last_updated":"2024-10-01","modalities":{"input":["audio"],"output":["text"]},"open_weights":true,"limit":{"context":448,"output":448},"provider":{"npm":"@ai-sdk/openai"},"canonical_model_id":"openai/whisper-large-v3-turbo"},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"GPT OSS 120B","description":"Open GPT reasoning model for self-hosted agents and controllable deployments","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.036,"output":0.2,"cache_read":0.0036},"canonical_model_id":"openai/gpt-oss-120b"},"nemotron-3-super-120b-a12b:free":{"id":"nemotron-3-super-120b-a12b:free","name":"Nemotron 3 Super 120B A12B (Free)","description":"Nemotron middle tier for collaborative agents and high-volume reasoning workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium"]}],"tool_call":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-11","last_updated":"2026-03-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0,"output":0},"canonical_model_id":"nvidia/nemotron-3-super-120b-a12b"},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":3.6,"output":17.71428571,"cache_read":0.36,"cache_write":4.45714286},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"claude-opus-4-7":{"id":"claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5.71428571,"output":29.71428571,"cache_read":0.57142857,"cache_write":7.42857143},"canonical_model_id":"anthropic/claude-opus-4-7"},"mimo-v2-5-pro":{"id":"mimo-v2-5-pro","name":"MiMo-V2.5-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"status":"deprecated","cost":{"input":0.52,"output":1.02857143},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"gemini-2-5-flash-lite":{"id":"gemini-2-5-flash-lite","name":"Gemini 2.5 Flash-Lite","description":"Lean Gemini 2.5 lane for cheap multimodal traffic and quick agents","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","canonical_model_id":"google/gemini-2.5-flash-lite"},"gemini-3-1-pro":{"id":"gemini-3-1-pro","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.2,"output":7.14285714,"cache_read":0.12,"cache_write":0.22285714},"canonical_model_id":"google/gemini-3.1-pro-preview"}}},"vultr":{"id":"vultr","env":["VULTR_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.vultrinference.com/v1","name":"Vultr","doc":"https://api.vultrinference.com/","models":{"mimo-v2.6-flash-rl":{"id":"mimo-v2.6-flash-rl","name":"MiMo-V2.6-Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.1,"output":0.25},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.75,"output":3},"canonical_model_id":"zhipuai/glm-5.2"},"glm-5.x-menthol":{"id":"glm-5.x-menthol","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":131072},"cost":{"input":0.4,"output":1.75},"canonical_model_id":"zhipuai/glm-5"},"qwen3.8-27b":{"id":"qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0.15,"output":1},"canonical_model_id":"alibaba/qwen3.8-27b"},"qwen3.8-flash-next":{"id":"qwen3.8-flash-next","name":"Qwen3.8 Flash Next","description":"Open-weight experimental preview of the Qwen4 architecture: hybrid-attention MoE (125B total, 6B active) with vision encoder for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-27","last_updated":"2026-08-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0.1,"output":0.2},"canonical_model_id":"alibaba/qwen3.8-flash-next"},"nemotron-3-nano-omni-30b-a3b-reasoning":{"id":"nemotron-3-nano-omni-30b-a3b-reasoning","name":"Nemotron 3 Nano Omni 30B A3B Reasoning","description":"Open Nemotron omni model combining reasoning with text, vision, and audio","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-04-28","last_updated":"2026-04-28","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.1,"output":0.25},"canonical_model_id":"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning"},"deepseek-v4.1-flash":{"id":"deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"mimo-v2.6-pro-rl":{"id":"mimo-v2.6-pro-rl","name":"MiMo-V2.6-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.4,"output":0.8},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"glm-5.3":{"id":"glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.75,"output":3},"canonical_model_id":"zhipuai/glm-5.3"},"minimax-m3":{"id":"minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":524288,"output":512000},"cost":{"input":0.2,"output":0.9},"canonical_model_id":"minimax/MiniMax-M3"},"glm-5.3-flash":{"id":"glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.1,"output":0.35},"canonical_model_id":"zhipuai/glm-5.3-flash"},"laguna-s-2.1":{"id":"laguna-s-2.1","name":"Laguna S 2.1","description":"Agentic coding model from Poolside in the XS size class for local deployment","family":"laguna","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":32768},"status":"deprecated","cost":{"input":0.09,"output":0.18},"canonical_model_id":"poolside/laguna-s-2.1"},"muse-glimmer-30b":{"id":"muse-glimmer-30b","name":"Muse Glimmer 30B","description":"Muse Glimmer is a 30-billion-parameter open-weight multimodal model from Meta Superintelligence Labs, distilled from Muse Spark for always-on local agents, tool use, coding, and image understanding.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-08-10","last_updated":"2026-08-10","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.25,"output":1},"canonical_model_id":"meta/muse-glimmer-30b"},"deepseek-v4-flash-0731":{"id":"deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","description":"Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-07-31","last_updated":"2026-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":384000},"status":"deprecated","cost":{"input":0.1,"output":0.25},"canonical_model_id":"deepseek/deepseek-v4-flash-0731"},"nemotron-3.5-content-safety":{"id":"nemotron-3.5-content-safety","name":"Nemotron 3.5 Content Safety","description":"Safety model for policy screening, moderation, and risk-aware routing workflows","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":false,"temperature":true,"release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"cost":{"input":0.05,"output":0.15},"canonical_model_id":"nvidia/nemotron-3.5-content-safety"}}},"ai21":{"id":"ai21","env":["AI21_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.ai21.com/studio/v1","name":"AI21 Labs","doc":"https://docs.ai21.com/docs/jamba-foundation-models","models":{"jamba-mini":{"id":"jamba-mini","name":"Jamba Mini","description":"AI21's efficient, lightweight hybrid SSM-Transformer model for a wide range of tasks","family":"jamba","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08-22","release_date":"2026-01-08","last_updated":"2026-01-08","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":4096},"cost":{"input":0.2,"output":0.4},"canonical_model_id":"ai21/jamba-mini"},"jamba-large":{"id":"jamba-large","name":"Jamba Large","description":"AI21's hybrid SSM-Transformer long-context model for enterprise agents and grounded generation","family":"jamba","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-08-22","release_date":"2025-07-03","last_updated":"2025-07-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":4096},"cost":{"input":2,"output":8},"canonical_model_id":"ai21/jamba-large"}}},"clarifai":{"id":"clarifai","env":["CLARIFAI_PAT"],"npm":"@ai-sdk/openai-compatible","api":"https://api.clarifai.com/v2/ext/openai/v1","name":"Clarifai","doc":"https://docs.clarifai.com/compute/inference/","models":{"arcee_ai/AFM/models/trinity-mini":{"id":"arcee_ai/AFM/models/trinity-mini","name":"Trinity Mini","description":"Reasoning-tuned 26B MoE model with 3B active parameters for agents, tools, and multi-step workloads","family":"trinity","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2025-12-01","last_updated":"2026-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.045,"output":0.15},"canonical_model_id":"arcee-ai/trinity-mini"},"minimaxai/chat-completion/models/MiniMax-M2_5-high-throughput":{"id":"minimaxai/chat-completion/models/MiniMax-M2_5-high-throughput","name":"MiniMax-M2.5 High Throughput","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2},"canonical_model_id":"minimax/MiniMax-M2.5"},"qwen/qwenCoder/models/Qwen3-Coder-30B-A3B-Instruct":{"id":"qwen/qwenCoder/models/Qwen3-Coder-30B-A3B-Instruct","name":"Qwen3 Coder 30B A3B Instruct","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-31","last_updated":"2025-07-31","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.11458,"output":0.74812},"canonical_model_id":"alibaba/qwen3-coder-30b-a3b-instruct"},"qwen/qwenLM/models/Qwen3-30B-A3B-Thinking-2507":{"id":"qwen/qwenLM/models/Qwen3-30B-A3B-Thinking-2507","name":"Qwen3 30B A3B Thinking 2507","description":"Qwen reasoning model for deliberate problem solving, math, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-31","last_updated":"2026-02-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0.36,"output":1.3}},"qwen/qwenLM/models/Qwen3-30B-A3B-Instruct-2507":{"id":"qwen/qwenLM/models/Qwen3-30B-A3B-Instruct-2507","name":"Qwen3 30B A3B Instruct 2507","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.3,"output":0.5},"canonical_model_id":"alibaba/qwen3-30b-a3b-instruct-2507"},"deepseek-ai/deepseek-ocr/models/DeepSeek-OCR":{"id":"deepseek-ai/deepseek-ocr/models/DeepSeek-OCR","name":"DeepSeek OCR","description":"OCR model for extracting structured text from documents and screenshots","family":"deepseek","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-10-20","last_updated":"2026-02-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":8192},"cost":{"input":0.2,"output":0.7}},"mistralai/completion/models/Ministral-3-14B-Reasoning-2512":{"id":"mistralai/completion/models/Ministral-3-14B-Reasoning-2512","name":"Ministral 3 14B Reasoning 2512","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-12","release_date":"2025-12-01","last_updated":"2025-12-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":2.5,"output":1.7}},"mistralai/completion/models/Ministral-3-3B-Reasoning-2512":{"id":"mistralai/completion/models/Ministral-3-3B-Reasoning-2512","name":"Ministral 3 3B Reasoning 2512","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"release_date":"2025-12","last_updated":"2026-02-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.039,"output":0.54825}},"moonshotai/chat-completion/models/Kimi-K2_6":{"id":"moonshotai/chat-completion/models/Kimi-K2_6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.95,"output":4},"canonical_model_id":"moonshotai/kimi-k2.6"},"openai/chat-completion/models/gpt-oss-120b-high-throughput":{"id":"openai/chat-completion/models/gpt-oss-120b-high-throughput","name":"GPT OSS 120B High Throughput","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.09,"output":0.36},"canonical_model_id":"openai/gpt-oss-120b"},"openai/chat-completion/models/gpt-oss-20b":{"id":"openai/chat-completion/models/gpt-oss-20b","name":"GPT OSS 20B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.045,"output":0.18},"canonical_model_id":"openai/gpt-oss-20b"},"clarifai/main/models/mm-poly-8b":{"id":"clarifai/main/models/mm-poly-8b","name":"MM Poly 8B","description":"Multimodal model for analyzing text, images, documents, and rich media","family":"mm-poly","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-06","last_updated":"2026-02-25","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":32768,"output":4096},"cost":{"input":0.658,"output":1.11}}}},"stepfun-step-plan":{"id":"stepfun-step-plan","env":["STEPFUN_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.stepfun.com/step_plan/v1","name":"StepFun Step Plan (China)","doc":"https://platform.stepfun.com/docs/zh/step-plan/integrations/reasoning-api","models":{"step-5-preview":{"id":"step-5-preview","name":"Step 5 Preview","description":"StepFun's next-generation flagship base model for coding and professional knowledge work, with native text, image, and video input and a 1M-token context window","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-09-16","last_updated":"2026-09-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":65536},"canonical_model_id":"stepfun/step-5-preview"},"step-router-v1":{"id":"step-router-v1","name":"Step Router v1","description":"StepFun routing model that dispatches requests to the appropriate Step model.","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"input":256000,"output":256000}},"step-3.5-flash-2603":{"id":"step-3.5-flash-2603","name":"Step 3.5 Flash 2603","description":"StepFun flash model for efficient multimodal reasoning, coding, and tool use","family":"step","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":256000},"canonical_model_id":"stepfun/step-3.5-flash-2603"},"step-3.7-flash":{"id":"step-3.7-flash","name":"Step 3.7 Flash","description":"Newer StepFun flash model for faster agents, coding, and multimodal prompts","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2026-03-01","release_date":"2026-05-29","last_updated":"2026-05-29","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":256000},"canonical_model_id":"stepfun/step-3.7-flash"},"step-3.5-flash":{"id":"step-3.5-flash","name":"Step 3.5 Flash","description":"StepFun flash lane for quick multimodal reasoning and coding assistance","family":"step","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-29","last_updated":"2026-02-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":256000},"canonical_model_id":"stepfun/step-3.5-flash"}}},"tokenrouter":{"id":"tokenrouter","env":["TOKENROUTER_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.tokenrouter.com/v1","name":"TokenRouter","doc":"https://www.tokenrouter.com/docs/tokenrouter-feature-guide/","models":{"z-ai/glm-5.3-free":{"id":"z-ai/glm-5.3-free","name":"GLM-5.3 (free)","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"cost":{"input":0,"output":0},"canonical_model_id":"zhipuai/glm-5.3"}}},"iteracompute":{"id":"iteracompute","env":["ITERACOMPUTE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.iteracompute.com/v1","name":"IteraCompute","doc":"https://iteracompute.com/docs.html","models":{"deepseek/deepseek-v4-pro-0813":{"id":"deepseek/deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","description":"DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-13","last_updated":"2026-08-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.79,"output":2.38,"cache_read":0.026},"canonical_model_id":"deepseek/deepseek-v4-pro-0813"},"deepseek/deepseek-v4.1-flash":{"id":"deepseek/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.17,"output":0.7,"cache_read":0.005},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek/deepseek-v4-flash-0731":{"id":"deepseek/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731 (legacy alias)","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":393216},"cost":{"input":0.17,"output":0.7,"cache_read":0.005},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"qwen/qwen3.8-27b":{"id":"qwen/qwen3.8-27b","name":"Qwen3.8 27B","description":"Dense 27B vision-language model for coding, agent tasks, and image and video understanding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":8192},"cost":{"input":0,"output":0,"cache_read":0},"canonical_model_id":"alibaba/qwen3.8-27b"},"qwen/qwen3.8-2.4t-a95b":{"id":"qwen/qwen3.8-2.4t-a95b","name":"Qwen3.8 2.4T A95B","description":"Open-weight sparse MoE (2.4T total, 95B active), the open-weight twin of Qwen3.8 Max for coding, research, complex reasoning, and agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":1.95,"output":5.7,"cache_read":0.25},"canonical_model_id":"alibaba/qwen3.8-2.4t-a95b"},"moonshotai/kimi-k3":{"id":"moonshotai/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":999999},"cost":{"input":2.35,"output":11.76,"cache_read":0.23},"canonical_model_id":"moonshotai/kimi-k3"},"moonshotai/kimi-k2.7-code":{"id":"moonshotai/kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":235929},"cost":{"input":0.69,"output":3.29,"cache_read":0.15},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"minimax/minimax-m3":{"id":"minimax/minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":524288},"cost":{"input":0.3,"output":1.19,"cache_read":0.05},"canonical_model_id":"minimax/MiniMax-M3"},"z-ai/glm-5.3":{"id":"z-ai/glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.82,"output":2.88,"cache_read":0.2},"canonical_model_id":"zhipuai/glm-5.3"},"z-ai/glm-5.3-flash":{"id":"z-ai/glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.08,"output":0.28,"cache_read":0.023},"canonical_model_id":"zhipuai/glm-5.3-flash"}}},"alibaba-coding-plan-cn":{"id":"alibaba-coding-plan-cn","env":["ALIBABA_CODING_PLAN_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://coding.dashscope.aliyuncs.com/v1","name":"Alibaba Coding Plan (China)","doc":"https://help.aliyun.com/zh/model-studio/coding-plan","models":{"qwen3-max-2026-01-23":{"id":"qwen3-max-2026-01-23","name":"Qwen3 Max","description":"Flagship Qwen model for complex reasoning, coding, and agentic workflows","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-23","last_updated":"2026-01-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":262144,"output":32768},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"qwen3.6-plus":{"id":"qwen3.6-plus","name":"Qwen3.6 Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"MiniMax-M2.5":{"id":"MiniMax-M2.5","name":"MiniMax-M2.5","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":196608,"output":24576},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"qwen3-coder-plus":{"id":"qwen3-coder-plus","name":"Qwen3 Coder Plus","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-23","last_updated":"2025-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":65536},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"kimi-k2.5":{"id":"kimi-k2.5","name":"Kimi K2.5","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"glm-4.7":{"id":"glm-4.7","name":"GLM-4.7","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":202752,"output":16384},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"qwen3.7-plus":{"id":"qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0},"canonical_model_id":"alibaba/qwen3.7-plus"},"qwen3.5-plus":{"id":"qwen3.5-plus","name":"Qwen3.5 Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-16","last_updated":"2026-02-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"qwen3-coder-next":{"id":"qwen3-coder-next","name":"Qwen3 Coder Next","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-03","last_updated":"2026-02-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"status":"deprecated","cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}},"glm-5":{"id":"glm-5","name":"GLM-5","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-02-11","last_updated":"2026-02-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":202752,"output":16384},"cost":{"input":0,"output":0,"cache_read":0,"cache_write":0}}}},"llmtr":{"id":"llmtr","env":["LLMTR_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://llmtr.com/v1","name":"LLMTR","doc":"https://llmtr.com/docs","models":{"muse-glimmer-30b-tr":{"id":"muse-glimmer-30b-tr","name":"Muse Glimmer 30B (TR)","description":"Muse Glimmer is a 30-billion-parameter open-weight multimodal model from Meta Superintelligence Labs, distilled from Muse Spark for always-on local agents, tool use, coding, and image understanding.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01-04","release_date":"2026-08-10","last_updated":"2026-08-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":2,"output":5,"cache_read":0.5},"canonical_model_id":"meta/muse-glimmer-30b"},"qwen3-6-35b":{"id":"qwen3-6-35b","name":"Qwen3.6 35B-A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":false,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":16384,"output":16384},"cost":{"input":5,"output":10},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"},"magibu-11b-v8":{"id":"magibu-11b-v8","name":"Magibu 11B v8","description":"Turkish-language chat model for instruction following and assistant flows","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-06-05","last_updated":"2026-08-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":8192,"output":8192},"cost":{"input":0.1,"output":0.5}},"gemma-4":{"id":"gemma-4","name":"Gemma 4","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":2,"output":5,"cache_read":0.5},"canonical_model_id":"google/gemma-4-31b-it"},"trendyol-asure-12b":{"id":"trendyol-asure-12b","name":"Trendyol Asure 12B","description":"Turkish-language multimodal instruct model built on Gemma 3 12B for e-commerce text, chat, and image-text tasks","family":"gemma","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-02-19","last_updated":"2026-02-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":40960,"output":40960},"cost":{"input":0.1,"output":0.5,"cache_read":0.025},"canonical_model_id":"trendyol/asure-12b"},"medgemma-4b":{"id":"medgemma-4b","name":"MedGemma 4B","description":"Multimodal medical-domain Gemma variant for text and image analysis","attachment":true,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-04-26","last_updated":"2026-08-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":8192},"status":"deprecated","cost":{"input":3,"output":5}},"publicai/apertus-8b-instruct":{"id":"publicai/apertus-8b-instruct","name":"Apertus 8B Instruct","description":"Fully open 8B multilingual LLM supporting 1800+ languages with 65K context. Trained on compliant open data. Apache 2.0, EU AI Act compliant.","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2025-09-02","last_updated":"2025-09-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":8192},"cost":{"input":0.1,"output":0.2},"canonical_model_id":"swiss-ai/apertus-8b"},"publicai/apertus-70b-instruct":{"id":"publicai/apertus-70b-instruct","name":"Apertus 70B Instruct","description":"Fully open 70B multilingual LLM supporting 1800+ languages with 65K context. Trained on 15T tokens of compliant open data. Apache 2.0, EU AI Act compliant.","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-09","release_date":"2025-09-02","last_updated":"2025-09-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":8192},"cost":{"input":0.82,"output":2.92},"canonical_model_id":"swiss-ai/apertus-70b"},"perplexity/sonar-deep-research":{"id":"perplexity/sonar-deep-research","name":"Sonar Deep Research","description":"Sonar search model for autonomous research and citation-backed long-form reports","family":"sonar","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":false,"knowledge":"2025-01","release_date":"2025-02-01","last_updated":"2025-09-01","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":32768},"cost":{"input":2,"output":8,"reasoning":3},"canonical_model_id":"perplexity/sonar-deep-research"},"mistral/voxtral-small-latest":{"id":"mistral/voxtral-small-latest","name":"Voxtral Small (latest)","description":"Instruct model with native audio input for speech understanding and tool use","family":"voxtral","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2025-07-15","last_updated":"2025-07-15","modalities":{"input":["text","audio"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":32000},"cost":{"input":0.1,"output":0.3},"canonical_model_id":"mistral/voxtral-small-latest"},"google/gemini-2.5-flash-lite":{"id":"google/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash-Lite","description":"Lean Gemini 2.5 lane for cheap multimodal traffic and quick agents","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":0.1,"output":0.1},"canonical_model_id":"google/gemini-2.5-flash-lite"},"qwen/qwen3.6-plus":{"id":"qwen/qwen3.6-plus","name":"Qwen3.6 Plus","description":"Earlier Qwen multimodal workhorse for million-token agent and document tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.5,"output":3},"canonical_model_id":"alibaba/qwen3.6-plus"},"qwen/qwen3-coder-plus":{"id":"qwen/qwen3-coder-plus","name":"Qwen3 Coder Plus","description":"Hosted Qwen coder for software agents, repo edits, and long-context code","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-23","last_updated":"2025-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"status":"deprecated","cost":{"input":1,"output":5},"canonical_model_id":"alibaba/qwen3-coder-plus"},"qwen/qwen-plus":{"id":"qwen/qwen-plus","name":"Qwen Plus","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2024-01-25","last_updated":"2025-09-11","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":0.4,"output":1.2,"cache_read":0.08},"canonical_model_id":"alibaba/qwen-plus"},"qwen/qwen3.5-397b-a17b":{"id":"qwen/qwen3.5-397b-a17b","name":"Qwen3.5 397B-A17B","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":65536},"cost":{"input":0.6,"output":3.6},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"qwen/qwen3.7-plus":{"id":"qwen/qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.4,"output":1.6,"cache_read":0.08},"canonical_model_id":"alibaba/qwen3.7-plus"},"qwen/qwen3.6-flash":{"id":"qwen/qwen3.6-flash","name":"Qwen3.6 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.6","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.25,"output":1.5},"canonical_model_id":"alibaba/qwen3.6-flash"},"qwen/qwen3-max":{"id":"qwen/qwen3-max","name":"Qwen3 Max","description":"Flagship Qwen3 model for coding agents, complex reasoning, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":65536},"status":"deprecated","cost":{"input":1.2,"output":6},"canonical_model_id":"alibaba/qwen3-max"},"qwen/qwen3.5-plus":{"id":"qwen/qwen3.5-plus","name":"Qwen3.5 Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-02-16","last_updated":"2026-02-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.4,"output":2.4},"canonical_model_id":"alibaba/qwen3.5-plus"},"qwen/qwen-flash":{"id":"qwen/qwen-flash","name":"Qwen Flash","description":"Efficient Qwen model for fast chat, extraction, and high-volume workloads","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2024-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":32768},"cost":{"input":0.05,"output":0.4,"cache_read":0.01},"canonical_model_id":"alibaba/qwen-flash"},"qwen/qwen3-vl-plus":{"id":"qwen/qwen3-vl-plus","name":"Qwen3-VL Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens"}],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09-23","last_updated":"2025-09-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":32768},"cost":{"input":0.2,"output":1.6,"cache_read":0.04},"canonical_model_id":"alibaba/qwen3-vl-plus"},"qwen/qwen3-coder-flash":{"id":"qwen/qwen3-coder-flash","name":"Qwen3 Coder Flash","description":"Qwen coding model for software agents, repository edits, and code reasoning","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.3,"output":1.5,"cache_read":0.06},"canonical_model_id":"alibaba/qwen3-coder-flash"},"poolside/laguna-xs-2.1":{"id":"poolside/laguna-xs-2.1","name":"Laguna XS 2.1","description":"Agentic coding model from Poolside in the XS size class for local deployment","family":"laguna","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-07-02","last_updated":"2026-07-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":32768},"cost":{"input":0,"output":0},"canonical_model_id":"poolside/laguna-xs-2.1"},"thinkingmachines/inkling-small":{"id":"thinkingmachines/inkling-small","name":"Inkling Small","description":"Multimodal MoE reasoning model (276B total, 12B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-30","last_updated":"2026-07-30","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.58,"output":1.44,"cache_read":0.116},"canonical_model_id":"thinkingmachines/inkling-small"},"thinkingmachines/inkling":{"id":"thinkingmachines/inkling","name":"Inkling","description":"Multimodal MoE reasoning model (975B total, 41B active) for text, image, and audio","family":"ling","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh"]}],"tool_call":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":1.87,"output":4.68,"cache_read":0.374},"canonical_model_id":"thinkingmachines/inkling"},"upstage/solar-pro4":{"id":"upstage/solar-pro4","name":"Solar Pro 4","description":"Upstage's flagship model, specialized for agentic use","family":"solar-pro","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02","release_date":"2026-08-06","last_updated":"2026-08-06","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":524288,"output":131072},"cost":{"input":0.15,"output":0.6,"cache_read":0.03},"canonical_model_id":"upstage/solar-pro4"},"upstage/solar-pro2":{"id":"upstage/solar-pro2","name":"Solar Pro 2","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"solar-pro","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-03","release_date":"2025-05-20","last_updated":"2025-05-20","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":65536,"output":8192},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"upstage/solar-pro2"},"upstage/solar-pro3":{"id":"upstage/solar-pro3","name":"Solar Pro 3","description":"Flagship model for demanding analysis, coding, and production agent workflows","family":"solar-pro","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":true,"knowledge":"2025-07","release_date":"2026-01-26","last_updated":"2026-03-23","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":131072,"output":8192},"cost":{"input":0.15,"output":0.6,"cache_read":0.015},"canonical_model_id":"upstage/solar-pro3"},"meta/muse-spark-1.2-contributor":{"id":"meta/muse-spark-1.2-contributor","name":"Muse Spark 1.2 Contributor","description":"Muse Spark 1.2 is a coding-focused update to Muse Spark 1.1 with improvements in code generation, complex debugging, codebase understanding, and end-to-end developer workflows.","family":"muse","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-05","last_updated":"2026-08-05","modalities":{"input":["text","image","video","pdf","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":131072},"cost":{"input":0.1,"output":0.2,"cache_read":0.002},"canonical_model_id":"meta/muse-spark-1.2"},"mimo/mimo-v2.5":{"id":"mimo/mimo-v2.5","name":"MiMo-V2.5","description":"Open MiMo model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"status":"deprecated","cost":{"input":0.14,"output":0.28},"canonical_model_id":"xiaomi/mimo-v2.5"},"mimo/mimo-v2.5-pro":{"id":"mimo/mimo-v2.5-pro","name":"MiMo-V2.5-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2026-04-22","last_updated":"2026-04-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"status":"deprecated","cost":{"input":0.435,"output":0.87},"canonical_model_id":"xiaomi/mimo-v2.5-pro"},"sakana/fugu-ultra":{"id":"sakana/fugu-ultra","name":"Fugu Ultra","description":"Quality-first multi-agent model for hard research, analysis, and competitions","family":"fugu","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-06-15","last_updated":"2026-06-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"sakana/fugu-ultra"}}},"inference":{"id":"inference","env":["INFERENCE_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://inference.net/v1","name":"Inference","doc":"https://inference.net/models","models":{"mistral/mistral-nemo-12b-instruct":{"id":"mistral/mistral-nemo-12b-instruct","name":"Mistral Nemo 12B Instruct","description":"Mistral model for multilingual chat, reasoning, and tool-assisted workflows","family":"mistral-nemo","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16000,"output":4096},"status":"deprecated","cost":{"input":0.038,"output":0.1},"canonical_model_id":"mistral/mistral-nemo"},"google/gemma-3":{"id":"google/gemma-3","name":"Google Gemma 3","description":"Open Gemma instruction model for efficient chat and self-hosted deployments","family":"gemma","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2025-01-01","last_updated":"2025-01-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":125000,"output":4096},"cost":{"input":0.15,"output":0.3}},"qwen/qwen-2.5-7b-vision-instruct":{"id":"qwen/qwen-2.5-7b-vision-instruct","name":"Qwen 2.5 7B Vision Instruct","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2025-01-01","last_updated":"2025-01-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":125000,"output":4096},"status":"deprecated","cost":{"input":0.2,"output":0.2}},"qwen/qwen3-embedding-4b":{"id":"qwen/qwen3-embedding-4b","type":"embedding","name":"Qwen 3 Embedding 4B","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"qwen","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"knowledge":"2024-12","release_date":"2025-06-05","last_updated":"2025-06-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":32000,"output":2048},"status":"deprecated","cost":{"input":0.01,"output":0},"canonical_model_id":"alibaba/qwen3-embedding-4b"},"meta/llama-3.2-3b-instruct":{"id":"meta/llama-3.2-3b-instruct","name":"Llama 3.2 3B Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2025-01-01","last_updated":"2025-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16000,"output":4096},"cost":{"input":0.02,"output":0.02}},"meta/llama-3.1-8b-instruct":{"id":"meta/llama-3.1-8b-instruct","name":"Llama 3.1 8B Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-07-23","last_updated":"2024-07-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16000,"output":4096},"status":"deprecated","cost":{"input":0.025,"output":0.025},"canonical_model_id":"meta/llama-3.1-8b-instruct"},"meta/llama-3.2-11b-vision-instruct":{"id":"meta/llama-3.2-11b-vision-instruct","name":"Llama 3.2 11B Vision Instruct","description":"Open Llama multimodal model for image understanding and text reasoning","family":"llama","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":16000,"output":4096},"status":"deprecated","cost":{"input":0.055,"output":0.055},"canonical_model_id":"meta/llama-3.2-11b-vision-instruct"},"meta/llama-3.2-1b-instruct":{"id":"meta/llama-3.2-1b-instruct","name":"Llama 3.2 1B Instruct","description":"Open Llama instruction model for multilingual chat, reasoning, and coding","family":"llama","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2023-12","release_date":"2024-09-25","last_updated":"2024-09-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":16000,"output":4096},"cost":{"input":0.01,"output":0.01},"canonical_model_id":"meta/llama-3.2-1b-instruct"},"osmosis/osmosis-structure-0.6b":{"id":"osmosis/osmosis-structure-0.6b","name":"Osmosis Structure 0.6B","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","family":"osmosis","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-12","release_date":"2025-01-01","last_updated":"2025-01-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":4000,"output":2048},"status":"deprecated","cost":{"input":0.1,"output":0.5}}}},"zenifra":{"id":"zenifra","env":["ZENIFRA_AI_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://ai.zenifra.com/v1","name":"Zenifra","doc":"https://docs.zenifra.com","models":{"alibaba/qwen3.6-35b-a3b":{"id":"alibaba/qwen3.6-35b-a3b","name":"Qwen3.6 35B-A3B","description":"Open multimodal Qwen MoE for local agents that need vision, audio, and code","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"provider":{"shape":"completions"},"cost":{"input":0.19,"output":0.48},"canonical_model_id":"alibaba/qwen3.6-35b-a3b"}}},"pioneer":{"id":"pioneer","env":["PIONEER_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.fastino.ai/v1","name":"Pioneer","doc":"https://agent.pioneer.ai/llms.txt","models":{"gpt-5.5":{"id":"gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"output":128000},"status":"deprecated","cost":{"input":5,"output":30,"cache_read":0.5,"cache_write":5},"canonical_model_id":"openai/gpt-5.5"},"gpt-5.6-sol":{"id":"gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"status":"deprecated","cost":{"input":5,"output":30,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"openai/gpt-5.6-sol"},"claude-sonnet-5":{"id":"claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"status":"deprecated","cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"claude-fable-5":{"id":"claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"status":"deprecated","cost":{"input":11,"output":55,"cache_read":1.1,"cache_write":13.75},"canonical_model_id":"anthropic/claude-fable-5"},"claude-opus-5":{"id":"claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"status":"deprecated","cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"gpt-5.6-luna":{"id":"gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"status":"deprecated","cost":{"input":1,"output":6,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"openai/gpt-5.6-luna"},"claude-opus-5-fast":{"id":"claude-opus-5-fast","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"status":"deprecated","cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-opus-5"},"gpt-5.6-terra":{"id":"gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"status":"deprecated","cost":{"input":2.5,"output":15,"cache_read":0.25,"cache_write":3.125},"canonical_model_id":"openai/gpt-5.6-terra"},"claude-haiku-4-5":{"id":"claude-haiku-4-5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"fastino/gliner2.5-base-v1":{"id":"fastino/gliner2.5-base-v1","name":"GLiNER 2.5 Base","description":"English boundary NER and structured extraction with LoRA fine-tuning.","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-08-24","last_updated":"2026-08-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":4096,"output":4096},"cost":{"input":0.03,"output":0,"cache_read":0.03,"cache_write":0.03}},"fastino/gliguard-LLMGuardrails-300M":{"id":"fastino/gliguard-LLMGuardrails-300M","name":"GLiGuard LLM Guardrails 300M","description":"LLM safety, PII, and adversarial-attack guardrails; 300M-param encoder.","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-04-30","last_updated":"2026-04-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":8192},"cost":{"input":0.15,"output":0.15,"cache_read":0.15,"cache_write":0.15}},"fastino/gliner2-multi-large-v1":{"id":"fastino/gliner2-multi-large-v1","name":"GLiNER2 Multi Large","description":"High-accuracy multilingual NER and span extraction.","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-11-30","last_updated":"2025-11-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":8192},"cost":{"input":0.03,"output":0,"cache_read":0.03,"cache_write":0.03}},"fastino/GLiNER-2.5-Decide":{"id":"fastino/GLiNER-2.5-Decide","name":"GLiNER-2.5-Decide","description":"Classification-tuned GLiNER2 large. Entities, relations, and JSON extraction still work.","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-09-24","last_updated":"2026-09-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":8192},"cost":{"input":0.03,"output":0,"cache_read":0.03,"cache_write":0.03}},"fastino/gliner2-base-v1":{"id":"fastino/gliner2-base-v1","name":"GLiNER2 Base","description":"Named entity recognition; zero-shot span extraction.","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-06-30","last_updated":"2025-06-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":2048,"output":2048},"cost":{"input":0.03,"output":0,"cache_read":0.03,"cache_write":0.03}},"fastino/gliguard-PII-multi":{"id":"fastino/gliguard-PII-multi","name":"GLiNER2-Guardrails-PII-Multi","description":"A 300M-parameter multilingual model that runs LLM safety moderation and PII detection in a single forward pass.","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":8192},"cost":{"input":0.15,"output":0.15,"cache_read":0.15,"cache_write":0.15}},"fastino/gliner2-privacy-filter-PII-multi":{"id":"fastino/gliner2-privacy-filter-PII-multi","name":"GLiNER2 Privacy Filter PII (Multi)","description":"Multilingual PII entity detection across 40+ languages; non-trainable encoder.","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-04-30","last_updated":"2026-04-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":8192},"cost":{"input":0.03,"output":0,"cache_read":0.03,"cache_write":0.03}},"fastino/gliner2-large-v1":{"id":"fastino/gliner2-large-v1","name":"GLiNER2 Large","description":"Higher-accuracy NER; broader entity coverage.","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-06-30","last_updated":"2025-06-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":8192},"cost":{"input":0.03,"output":0,"cache_read":0.03,"cache_write":0.03}},"fastino/gliner2-multi-v1":{"id":"fastino/gliner2-multi-v1","name":"GLiNER2 Multi","description":"Multilingual NER for cross-lingual extraction.","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2025-11-30","last_updated":"2025-11-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8192,"output":8192},"cost":{"input":0.03,"output":0,"cache_read":0.03,"cache_write":0.03}},"fastino/gliner2.5-multi-v1":{"id":"fastino/gliner2.5-multi-v1","name":"GLiNER 2.5 Multi","description":"Multilingual boundary NER and span extraction; non-trainable encoder.","attachment":false,"reasoning":false,"tool_call":false,"temperature":true,"release_date":"2026-08-24","last_updated":"2026-08-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":4096,"output":4096},"cost":{"input":0.03,"output":0,"cache_read":0.03,"cache_write":0.03}},"deepseek-ai/DeepSeek-V4-Flash":{"id":"deepseek-ai/DeepSeek-V4-Flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"status":"deprecated","cost":{"input":0.1,"output":0.2,"cache_read":0.0197,"cache_write":0.1},"canonical_model_id":"deepseek/deepseek-v4-flash"},"moonshotai/Kimi-K3":{"id":"moonshotai/Kimi-K3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"status":"deprecated","cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3},"canonical_model_id":"moonshotai/kimi-k3"},"moonshotai/Kimi-K3-Fast":{"id":"moonshotai/Kimi-K3-Fast","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":131072},"status":"deprecated","cost":{"input":4.5,"output":22.5,"cache_read":0.45,"cache_write":4.5},"canonical_model_id":"moonshotai/kimi-k3"},"zai-org/GLM-5.2":{"id":"zai-org/GLM-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["high","max"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1040000,"output":128000},"status":"deprecated","cost":{"input":1.4,"output":4.4,"cache_read":0.26,"cache_write":1.4},"canonical_model_id":"zhipuai/glm-5.2"},"nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16":{"id":"nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16","name":"Nemotron 3.5 Lightning 30B A3B","description":"Fast NVIDIA Nemotron MoE for reliable agentic tasks across enterprise workloads","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-08-11","last_updated":"2026-08-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":4096},"cost":{"input":0.07,"output":0.2,"cache_read":0.035,"cache_write":0.07},"canonical_model_id":"nvidia/nemotron-3.5-lightning"},"nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-NVFP4":{"id":"nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-NVFP4","name":"Nemotron 3.5 Super VL 120B A12B","description":"NVIDIA vision-language reasoning model for text, image, and video understanding and agentic tool use","family":"nemotron","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"interleaved":{"field":"reasoning_content"},"temperature":true,"release_date":"2026-10-15","last_updated":"2026-10-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":4096},"cost":{"input":0.08,"output":0.45,"cache_read":0.04,"cache_write":0.08},"canonical_model_id":"nvidia/nemotron-3.5-super-vl-120b-a12b"}}},"crossmodel":{"id":"crossmodel","env":["CROSSMODEL_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.crossmodel.ai/v1","name":"CrossModel","doc":"https://www.crossmodel.ai/docs","models":{"anthropic/claude-sonnet-5-5":{"id":"anthropic/claude-sonnet-5-5","name":"Claude Sonnet 5.5","description":"Fast Claude model for everyday coding, agents, and knowledge work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-28","last_updated":"2026-09-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5-5"},"anthropic/claude-fable-5-1":{"id":"anthropic/claude-fable-5-1","name":"Claude Fable 5.1","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-01","last_updated":"2026-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":0.25,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5-1"},"anthropic/claude-sonnet-5":{"id":"anthropic/claude-sonnet-5","name":"Claude Sonnet 5","description":"Everyday Claude agent model for coding, planning, browsing, and general work","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-30","last_updated":"2026-06-30","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5},"canonical_model_id":"anthropic/claude-sonnet-5"},"anthropic/claude-fable-5-2":{"id":"anthropic/claude-fable-5-2","name":"Claude Fable 5.2","description":"Claude model for demanding reasoning and long-horizon agentic work","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-11-09","last_updated":"2026-11-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":8,"output":40,"cache_read":0.2,"cache_write":10},"canonical_model_id":"anthropic/claude-fable-5-2"},"anthropic/claude-fable-5":{"id":"anthropic/claude-fable-5","name":"Claude Fable 5","description":"Claude model for creative writing, analysis, and controlled agent workflows","family":"claude-fable","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-06-09","last_updated":"2026-06-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5},"canonical_model_id":"anthropic/claude-fable-5"},"anthropic/claude-opus-5":{"id":"anthropic/claude-opus-5","name":"Claude Opus 5","description":"Strongest Claude Opus model for coding, agents, and professional work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05","release_date":"2026-07-24","last_updated":"2026-07-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-5"},"anthropic/claude-opus-4-8":{"id":"anthropic/claude-opus-4-8","name":"Claude Opus 4.8","description":"Top Claude Opus tier for the hardest reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01","release_date":"2026-05-28","last_updated":"2026-05-28","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-8"},"anthropic/claude-opus-5-5":{"id":"anthropic/claude-opus-5-5","name":"Claude Opus 5.5","description":"Claude model for long-running agentic coding and knowledge work","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.2,"cache_write":5},"canonical_model_id":"anthropic/claude-opus-5-5"},"anthropic/claude-haiku-5-5":{"id":"anthropic/claude-haiku-5-5","name":"Claude Haiku 5.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06","release_date":"2026-10-07","last_updated":"2026-10-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.5,"output":2.5,"cache_read":0.05,"cache_write":0.625,"tier":{"type":"context","size":100000}}]},"canonical_model_id":"anthropic/claude-haiku-5-5"},"anthropic/claude-sonnet-4-6":{"id":"anthropic/claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Claude workhorse for coding agents, careful analysis, and production cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"anthropic/claude-opus-4-7":{"id":"anthropic/claude-opus-4-7","name":"Claude Opus 4.7","description":"Stronger Opus tier for advanced software work and high-stakes reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"anthropic/claude-haiku-4-5":{"id":"anthropic/claude-haiku-4-5","name":"Claude Haiku 4.5 (latest)","description":"Fast Claude lane for lightweight agents, office tasks, and responsive chat","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"},"x-ai/grok-4.5":{"id":"x-ai/grok-4.5","name":"Grok 4.5","description":"xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-08","last_updated":"2026-07-08","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.3,"cache_write":2,"tiers":[{"input":4,"output":12,"cache_read":0.6,"cache_write":4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":0.6,"cache_write":4}},"canonical_model_id":"xai/grok-4.5"},"x-ai/grok-4.3":{"id":"x-ai/grok-4.3","name":"Grok 4.3","description":"xAI's default Grok for chat, coding, agentic tools, and lower hallucination risk","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":1000000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2,"cache_write":1.25,"tiers":[{"input":2.5,"output":5,"cache_read":0.4,"cache_write":2.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":5,"cache_read":0.4,"cache_write":2.5}},"canonical_model_id":"xai/grok-4.3"},"x-ai/grok-4.7":{"id":"x-ai/grok-4.7","name":"Grok 4.7","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-05","release_date":"2026-09-21","last_updated":"2026-09-21","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"cache_write":2,"tiers":[{"input":4,"output":12,"cache_read":1,"cache_write":4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1,"cache_write":4}},"canonical_model_id":"xai/grok-4.7"},"x-ai/grok-4.6":{"id":"x-ai/grok-4.6","name":"Grok 4.6","description":"xAI's frontier model for long-running agents, coding, knowledge work, and visual projects","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-02-01","release_date":"2026-08-12","last_updated":"2026-08-12","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":500000,"output":500000},"cost":{"input":2,"output":6,"cache_read":0.5,"cache_write":2,"tiers":[{"input":4,"output":12,"cache_read":1,"cache_write":4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":12,"cache_read":1,"cache_write":4}},"canonical_model_id":"xai/grok-4.6"},"x-ai/grok-build-0.1":{"id":"x-ai/grok-build-0.1","name":"Grok Build 0.1","description":"Fast Grok coding model tuned for agentic engineering and iterative edits","family":"grok-build","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":256000},"cost":{"input":1,"output":2,"cache_read":0.2,"cache_write":1,"tiers":[{"input":2,"output":4,"cache_read":0.4,"cache_write":2,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2,"output":4,"cache_read":0.4,"cache_write":2}},"canonical_model_id":"xai/grok-build-0.1"},"deepseek/deepseek-v4.1-flash":{"id":"deepseek/deepseek-v4.1-flash","name":"DeepSeek V4.1 Flash","description":"DeepSeek V4.1 Flash model for reasoning and agentic coding","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-09-10","last_updated":"2026-09-10","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":0.3,"output":1.2,"cache_read":0.006,"cache_write":0.3},"canonical_model_id":"deepseek/deepseek-v4.1-flash"},"deepseek/deepseek-v4-pro":{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","description":"Open MoE flagship with million-token context for coding and long agent runs","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"cost":{"input":1.35,"output":4.05,"cache_read":0.045,"cache_write":1.35},"canonical_model_id":"deepseek/deepseek-v4-pro"},"deepseek/deepseek-v4-flash-vision-exp":{"id":"deepseek/deepseek-v4-flash-vision-exp","name":"DeepSeek V4 Flash Vision Exp","description":"Experimental multimodal DeepSeek V4 Flash model for image understanding, coding, and agentic work","family":"deepseek-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-08-21","last_updated":"2026-09-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"deprecated","cost":{"input":0.3,"output":1.2,"cache_read":0.006,"cache_write":0.3},"canonical_model_id":"deepseek/deepseek-v4-flash-vision-exp"},"deepseek/deepseek-v4-flash":{"id":"deepseek/deepseek-v4-flash","name":"DeepSeek V4 Flash","description":"Fast DeepSeek V4 lane for economical reasoning, coding, and long-context work","family":"deepseek-flash","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":384000},"status":"deprecated","cost":{"input":0.3,"output":1.2,"cache_read":0.006,"cache_write":0.3},"canonical_model_id":"deepseek/deepseek-v4-flash"},"qwen/qwen3.6-plus":{"id":"qwen/qwen3.6-plus","name":"Qwen3.6 Plus","description":"Earlier Qwen multimodal workhorse for million-token agent and document tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.32,"output":1.88,"cache_read":0.032,"cache_write":0.4,"tiers":[{"input":1.25,"output":7.5,"cache_read":0.124,"cache_write":1.57,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":1.25,"output":7.5,"cache_read":0.124,"cache_write":1.57}},"canonical_model_id":"alibaba/qwen3.6-plus"},"qwen/qwen3.8-omni-flash":{"id":"qwen/qwen3.8-omni-flash","name":"Qwen3.8 Omni Flash","description":"Qwen omni model for text, vision, audio, and multimodal agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens"}],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2026-09-17","last_updated":"2026-09-17","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.13,"output":0.43,"cache_read":0.016,"cache_write":0.13},"canonical_model_id":"alibaba/qwen3.8-omni-flash"},"qwen/qwen3.8-flash":{"id":"qwen/qwen3.8-flash","name":"Qwen3.8 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":0.13,"output":0.43,"cache_read":0.016,"cache_write":0.2},"canonical_model_id":"alibaba/qwen3.8-flash"},"qwen/qwen3.7-plus":{"id":"qwen/qwen3.7-plus","name":"Qwen3.7 Plus","description":"Multimodal Qwen workhorse for long-context agents, visual inputs, and coding","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-06-02","last_updated":"2026-06-02","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":0.32,"output":1.25,"cache_read":0.032,"cache_write":0.4,"tiers":[{"input":0.96,"output":3.75,"cache_read":0.096,"cache_write":1.2,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":0.96,"output":3.75,"cache_read":0.096,"cache_write":1.2}},"canonical_model_id":"alibaba/qwen3.7-plus"},"qwen/qwen3.7-max":{"id":"qwen/qwen3.7-max","name":"Qwen3.7 Max","description":"Qwen frontier model tuned for agent frameworks, coding assistants, and long tasks","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-05-21","last_updated":"2026-05-21","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":1.88,"output":5.63,"cache_read":0.375,"cache_write":2.35},"canonical_model_id":"alibaba/qwen3.7-max"},"qwen/qwen3.6-flash":{"id":"qwen/qwen3.6-flash","name":"Qwen3.6 Flash","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen3.6","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-27","last_updated":"2026-04-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":65536},"cost":{"input":0.19,"output":1.13,"cache_read":0.019,"cache_write":0.24,"tiers":[{"input":0.75,"output":4.5,"cache_read":0.075,"cache_write":0.94,"tier":{"type":"context","size":256000}}],"context_over_200k":{"input":0.75,"output":4.5,"cache_read":0.075,"cache_write":0.94}},"canonical_model_id":"alibaba/qwen3.6-flash"},"qwen/qwen3.7-flash":{"id":"qwen/qwen3.7-flash","name":"Qwen3.7 Flash","description":"Lightweight multimodal Qwen model for high-throughput text, image, and video tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-15","last_updated":"2026-07-15","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"input":991808,"output":65536},"cost":{"input":0.04,"output":0.13,"cache_read":0.01,"cache_write":0.04,"tiers":[{"input":0.1,"output":0.37,"cache_read":0.02,"cache_write":0.12,"tier":{"type":"context","size":32000}},{"input":0.19,"output":0.74,"cache_read":0.04,"cache_write":0.24,"tier":{"type":"context","size":256000}}]},"canonical_model_id":"alibaba/qwen3.7-flash"},"qwen/qwen3.8-max":{"id":"qwen/qwen3.8-max","name":"Qwen3.8 Max","description":"2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["low","medium","xhigh"]},{"type":"budget_tokens"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-03","last_updated":"2026-08-03","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":131072},"cost":{"input":1.88,"output":5.63,"cache_read":0.23,"cache_write":2.35},"canonical_model_id":"alibaba/qwen3.8-max"},"tencent/hy4":{"id":"tencent/hy4","name":"Hy4","description":"A next-generation multimodal productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-11-04","last_updated":"2026-11-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"input":983010,"output":65536},"cost":{"input":0.96,"output":2.88,"cache_read":0.048,"cache_write":0.96},"canonical_model_id":"tencent/hy4"},"tencent/hy3":{"id":"tencent/hy3","name":"Hy3","description":"Tencent Hy reasoning model for coding, instruction following, and agent tasks","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-07-06","last_updated":"2026-07-06","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"input":192000,"output":131072},"cost":{"input":0.16,"output":0.64,"cache_read":0.04,"cache_write":0.16},"canonical_model_id":"tencent/hy3"},"tencent/hy4-preview":{"id":"tencent/hy4-preview","name":"Hy4 preview","description":"A next-generation productivity model with significantly enhanced Agent and complex task execution capabilities.","family":"Hy","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-08-28","last_updated":"2026-08-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":65536},"cost":{"input":0.96,"output":2.88,"cache_read":0.048,"cache_write":0.96},"canonical_model_id":"tencent/hy4-preview"},"gemini/gemini-2.5-flash":{"id":"gemini/gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"cache_write":0.3},"canonical_model_id":"google/gemini-2.5-flash"},"gemini/gemini-3.8-flash":{"id":"gemini/gemini-3.8-flash","name":"Gemini 3.8 Flash","description":"Google's most intelligent Flash model, engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-09-02","last_updated":"2026-09-02","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"cache_write":0.75},"canonical_model_id":"google/gemini-3.8-flash"},"gemini/gemini-2.5-pro":{"id":"gemini/gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.25,"output":10,"cache_read":0.125,"cache_write":1.25,"tiers":[{"input":2.5,"output":15,"cache_read":0.25,"cache_write":2.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":2.5,"output":15,"cache_read":0.25,"cache_write":2.5}},"canonical_model_id":"google/gemini-2.5-pro"},"gemini/gemini-3.5-flash":{"id":"gemini/gemini-3.5-flash","name":"Gemini 3.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-05-19","last_updated":"2026-05-19","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.5,"output":9,"cache_read":0.15,"cache_write":1.5},"canonical_model_id":"google/gemini-3.5-flash"},"gemini/gemini-3.6-flash":{"id":"gemini/gemini-3.6-flash","name":"Gemini 3.6 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"cache_write":0.75},"canonical_model_id":"google/gemini-3.6-flash"},"gemini/gemini-3.1-pro-preview":{"id":"gemini/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Reasoning-first Gemini preview for agentic coding and complex problem solving","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":4,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":4}},"canonical_model_id":"google/gemini-3.1-pro-preview"},"gemini/gemini-2.5-flash-lite":{"id":"gemini/gemini-2.5-flash-lite","name":"Gemini 2.5 Flash-Lite","description":"Lean Gemini 2.5 lane for cheap multimodal traffic and quick agents","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.1,"output":0.4,"cache_read":0.01,"cache_write":0.1},"canonical_model_id":"google/gemini-2.5-flash-lite"},"gemini/gemini-4-argon":{"id":"gemini/gemini-4-argon","name":"Gemini 4 Argon","description":"Google's flagship reasoning model for complex software engineering, deep math and science, and long-horizon autonomous agents","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-03","release_date":"2026-10-13","last_updated":"2026-10-13","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2},"canonical_model_id":"google/gemini-4-argon"},"gemini/gemini-3.5-flash-lite":{"id":"gemini/gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-07-21","last_updated":"2026-07-21","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.03,"cache_write":0.3},"canonical_model_id":"google/gemini-3.5-flash-lite"},"gemini/gemini-3-flash-preview":{"id":"gemini/gemini-3-flash-preview","name":"Gemini 3 Flash Preview","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"},{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.05,"cache_write":0.5},"canonical_model_id":"google/gemini-3-flash-preview"},"gemini/gemini-3.7-flash":{"id":"gemini/gemini-3.7-flash","name":"Gemini 3.7 Flash","description":"High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-03","release_date":"2026-08-13","last_updated":"2026-08-13","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.75,"output":3.75,"cache_read":0.075,"cache_write":0.75},"canonical_model_id":"google/gemini-3.7-flash"},"openai/gpt-5.5":{"id":"openai/gpt-5.5","name":"GPT-5.5","description":"Default frontier GPT for coding, computer use, research, and knowledge work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5,"cache_write":5,"tiers":[{"input":10,"output":45,"cache_read":1,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":10,"output":45,"cache_read":1,"cache_write":10}},"canonical_model_id":"openai/gpt-5.5"},"openai/gpt-5.4-mini":{"id":"openai/gpt-5.4-mini","name":"GPT-5.4 mini","description":"Strong small GPT for coding subagents, quick tool use, and high-volume work","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075,"cache_write":0.75},"canonical_model_id":"openai/gpt-5.4-mini"},"openai/gpt-5.6-sol":{"id":"openai/gpt-5.6-sol","name":"GPT-5.6 Sol","description":"Frontier GPT-5.6 model for complex professional work, coding, and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":4,"output":20,"cache_read":0.4,"cache_write":5,"tiers":[{"input":8,"output":30,"cache_read":0.8,"cache_write":10,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":8,"output":30,"cache_read":0.8,"cache_write":10}},"canonical_model_id":"openai/gpt-5.6-sol"},"openai/gpt-6.1-terra":{"id":"openai/gpt-6.1-terra","name":"GPT-6.1 Terra","description":"Fast, efficient model for visual reasoning, precise computer use, and clear, natural writing.","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-06-01","release_date":"2026-10-26","last_updated":"2026-10-26","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":1,"output":5,"cache_read":0.05,"cache_write":1.25,"tiers":[{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":2,"output":7.5,"cache_read":0.1,"cache_write":2.5}},"canonical_model_id":"openai/gpt-6.1-terra"},"openai/gpt-6-luna":{"id":"openai/gpt-6-luna","name":"GPT-6 Luna","description":"OpenAI's most efficient model for focused, high-volume tasks","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-05-18","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.1,"output":0.5,"cache_read":0.01,"cache_write":0.125,"tiers":[{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.2,"output":0.75,"cache_read":0.02,"cache_write":0.25}},"canonical_model_id":"openai/gpt-6-luna"},"openai/gpt-6-sol":{"id":"openai/gpt-6-sol","name":"GPT-6 Sol","description":"OpenAI model for complex coding and agentic workflows","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-20","release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-6-sol"},"openai/gpt-6-astra":{"id":"openai/gpt-6-astra","name":"GPT-6 Astra","description":"GPT-6 Astra is OpenAI's most capable model for complex reasoning, coding, computer use, research, and document creation.","family":"gpt-astra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-04","last_updated":"2026-09-04","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":10,"output":50,"cache_read":1,"cache_write":12.5,"tiers":[{"input":20,"output":75,"cache_read":2,"cache_write":25,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":20,"output":75,"cache_read":2,"cache_write":25}},"canonical_model_id":"openai/gpt-6-astra"},"openai/gpt-5.5-pro":{"id":"openai/gpt-5.5-pro","name":"GPT-5.5 Pro","description":"Highest-accuracy GPT-5.5 tier for slower, precision-heavy reasoning and coding","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-12-01","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":30,"output":180,"tiers":[{"input":60,"output":270,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":60,"output":270}},"canonical_model_id":"openai/gpt-5.5-pro"},"openai/gpt-5.6-luna":{"id":"openai/gpt-5.6-luna","name":"GPT-5.6 Luna","description":"Cost-efficient GPT-5.6 model for fast, high-volume workloads","family":"gpt-luna","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":0.2,"output":1.2,"cache_read":0.02,"cache_write":0.25,"tiers":[{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":0.4,"output":1.8,"cache_read":0.04,"cache_write":0.5}},"canonical_model_id":"openai/gpt-5.6-luna"},"openai/gpt-6.1-sol":{"id":"openai/gpt-6.1-sol","name":"GPT-6.1 Sol","description":"Near-Astra performance for complex coding, computer use, and professional work at a lower cost.","family":"gpt-sol","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-04-30","release_date":"2026-09-29","last_updated":"2026-09-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":10,"cache_read":0.1,"cache_write":2.5,"tiers":[{"input":4,"output":15,"cache_read":0.2,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":15,"cache_read":0.2,"cache_write":5}},"canonical_model_id":"openai/gpt-6.1-sol"},"openai/gpt-5.4":{"id":"openai/gpt-5.4","name":"GPT-5.4","description":"Agent-ready GPT for coding and computer-use workflows at a lower cost","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-05","last_updated":"2026-03-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2.5,"output":15,"cache_read":0.25,"cache_write":2.5,"tiers":[{"input":5,"output":22.5,"cache_read":0.5,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":5,"output":22.5,"cache_read":0.5,"cache_write":5}},"canonical_model_id":"openai/gpt-5.4"},"openai/gpt-5.4-nano":{"id":"openai/gpt-5.4-nano","name":"GPT-5.4 nano","description":"Cheapest GPT-5.4 lane for simple routing, extraction, and bulk automation","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02,"cache_write":0.2},"canonical_model_id":"openai/gpt-5.4-nano"},"openai/gpt-5.6-terra":{"id":"openai/gpt-5.6-terra","name":"GPT-5.6 Terra","description":"Balanced GPT-5.6 model for capable, cost-efficient everyday work","family":"gpt-terra","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2026-02-16","release_date":"2026-07-09","last_updated":"2026-07-09","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1050000,"input":922000,"output":128000},"cost":{"input":2,"output":12,"cache_read":0.2,"cache_write":2.5,"tiers":[{"input":4,"output":18,"cache_read":0.4,"cache_write":5,"tier":{"type":"context","size":272000}}],"context_over_200k":{"input":4,"output":18,"cache_read":0.4,"cache_write":5}},"canonical_model_id":"openai/gpt-5.6-terra"},"openai/gpt-4o-mini":{"id":"openai/gpt-4o-mini","name":"GPT-4o mini","description":"Small omni GPT for cheap multimodal assistance and production-scale traffic","family":"gpt-mini","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-07-18","last_updated":"2024-07-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":0.15,"output":0.6,"cache_read":0.075,"cache_write":0.15},"canonical_model_id":"openai/gpt-4o-mini"},"moonshot/kimi-k3.1-pro":{"id":"moonshot/kimi-k3.1-pro","name":"Kimi K3.1 Pro","description":"Multimodal Kimi model with a 1M-token context window and always-on reasoning, for coding, 3D creation and financial research","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-10-23","last_updated":"2026-10-23","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":2,"output":10,"cache_read":0.2,"cache_write":2},"canonical_model_id":"moonshotai/kimi-k3.1-pro"},"moonshot/kimi-k2.6":{"id":"moonshot/kimi-k2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":1,"output":4.16,"cache_read":0.18,"cache_write":1},"canonical_model_id":"moonshotai/kimi-k2.6"},"moonshot/kimi-k3":{"id":"moonshot/kimi-k3","name":"Kimi K3","description":"Multimodal Kimi model with 1M context and toggleable max-effort thinking for long-horizon agent work","family":"kimi-k3","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":false,"release_date":"2026-07-16","last_updated":"2026-07-16","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":1048576},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3},"canonical_model_id":"moonshotai/kimi-k3"},"moonshot/kimi-k2.7-code":{"id":"moonshot/kimi-k2.7-code","name":"Kimi K2.7 Code","description":"Coding-focused Kimi model, stronger on long-horizon repo work with less overthinking","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-06-12","last_updated":"2026-06-12","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262000,"output":262000},"cost":{"input":1,"output":4.16,"cache_read":0.18,"cache_write":1},"canonical_model_id":"moonshotai/kimi-k2.7-code"},"xiaomi/mimo-v2.6-pro":{"id":"xiaomi/mimo-v2.6-pro","name":"MiMo-V2.6-Pro","description":"Stronger MiMo Pro tier for multimodal reasoning and coding-agent execution","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.47,"output":0.94,"cache_read":0.005,"cache_write":0.47},"canonical_model_id":"xiaomi/mimo-v2.6-pro"},"xiaomi/mimo-v2.6-flash":{"id":"xiaomi/mimo-v2.6-flash","name":"MiMo-V2.6-Flash","description":"MiMo Flash model for multimodal coding agents and long-context automation","family":"mimo","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"temperature":true,"release_date":"2026-09-22","last_updated":"2026-09-22","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":true,"limit":{"context":1048576,"output":131072},"cost":{"input":0.16,"output":0.32,"cache_read":0.004,"cache_write":0.16},"canonical_model_id":"xiaomi/mimo-v2.6-flash"},"minimax/minimax-m3":{"id":"minimax/minimax-m3","name":"MiniMax-M3","description":"MiniMax multimodal model for long-context coding, perception, and agent planning","family":"minimax","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-01","last_updated":"2026-06-01","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1024000,"output":512000},"cost":{"input":0.33,"output":1.32,"cache_read":0.066,"cache_write":0.33,"tiers":[{"input":0.66,"output":2.63,"cache_read":0.132,"cache_write":0.66,"tier":{"type":"context","size":512000}}],"context_over_200k":{"input":0.66,"output":2.63,"cache_read":0.132,"cache_write":0.66}},"canonical_model_id":"minimax/MiniMax-M3"},"minimax/minimax-m2.7":{"id":"minimax/minimax-m2.7","name":"MiniMax-M2.7","description":"Open MiniMax flagship for coding agents, office automation, and complex environments","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.33,"output":1.32,"cache_read":0.066,"cache_write":0.42},"canonical_model_id":"minimax/MiniMax-M2.7"},"z-ai/glm-5.2":{"id":"z-ai/glm-5.2","name":"GLM-5.2","description":"Open flagship GLM for long-horizon coding agents and million-token context work","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-06-13","last_updated":"2026-06-13","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":1.2,"output":4.4,"cache_read":0.3,"cache_write":1.2},"canonical_model_id":"zhipuai/glm-5.2"},"z-ai/glm-5.1":{"id":"z-ai/glm-5.1","name":"GLM-5.1","description":"Strong GLM coding model for agentic engineering, terminals, and repository generation","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":1,"output":3.8,"cache_read":0.2,"cache_write":1,"tiers":[{"input":1.2,"output":4.4,"cache_read":0.3,"cache_write":1.2,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-5.1"},"z-ai/glm-4.7":{"id":"z-ai/glm-4.7","name":"GLM-4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.47,"output":2.16,"cache_read":0.1,"cache_write":0.47,"tiers":[{"input":0.62,"output":2.47,"cache_read":0.13,"cache_write":0.62,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-4.7"},"z-ai/glm-5.3":{"id":"z-ai/glm-5.3","name":"GLM-5.3","description":"Flagship GLM model for long-horizon coding, agents, and complex project delivery","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-14","last_updated":"2026-08-14","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":1.2,"output":4.4,"cache_read":0.3,"cache_write":1.2},"canonical_model_id":"zhipuai/glm-5.3"},"z-ai/glm-5.3-flash":{"id":"z-ai/glm-5.3-flash","name":"GLM-5.3-Flash","description":"Native multimodal GLM model for efficient coding and long-horizon agent tasks","family":"glm-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","high","max"]}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-08-26","last_updated":"2026-08-26","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":128000},"cost":{"input":0.15,"output":0.5,"cache_read":0.03,"cache_write":0.15},"canonical_model_id":"zhipuai/glm-5.3-flash"},"z-ai/glm-5-turbo":{"id":"z-ai/glm-5-turbo","name":"GLM-5-Turbo","description":"Faster GLM-5 lane for coding agents that need lower latency","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":128000},"cost":{"input":0.9,"output":3.7,"cache_read":0.18,"cache_write":0.9,"tiers":[{"input":1.1,"output":4.3,"cache_read":0.27,"cache_write":1.1,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-5-turbo"},"z-ai/glm-5":{"id":"z-ai/glm-5","name":"GLM-5","description":"General GLM flagship for coding, analysis, and tool-heavy engineering workflows","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.6,"output":3,"cache_read":0.16,"cache_write":0.6,"tiers":[{"input":0.8,"output":3.4,"cache_read":0.2,"cache_write":0.8,"tier":{"type":"context","size":32000}}]},"canonical_model_id":"zhipuai/glm-5"}}},"infomaniak":{"id":"infomaniak","env":["INFOMANIAK_API_KEY","INFOMANIAK_PRODUCT_ID"],"npm":"@ai-sdk/openai-compatible","api":"https://api.infomaniak.com/2/ai/${INFOMANIAK_PRODUCT_ID}/openai/v1","name":"Infomaniak","doc":"https://www.infomaniak.com/en/hosting/ai-services/open-source-models","models":{"mini_lm_l12_v2":{"id":"mini_lm_l12_v2","type":"embedding","name":"All-MiniLM-L12-v2","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"text-embedding","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2021-08-30","last_updated":"2021-08-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128,"input":128,"output":384},"cost":{"input":0,"output":0},"canonical_model_id":"sentence-transformers/all-minilm-l12-v2"},"bge_multilingual_gemma2":{"id":"bge_multilingual_gemma2","type":"embedding","name":"BGE Multilingual Gemma2","description":"Embedding model for semantic search, retrieval, clustering, and ranking pipelines","family":"text-embedding","attachment":false,"reasoning":false,"tool_call":false,"temperature":false,"release_date":"2024-07-25","last_updated":"2026-08-01","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":8000,"input":8000,"output":3584},"cost":{"input":0.08,"output":0}},"google/gemma-4-31B-it":{"id":"google/gemma-4-31B-it","name":"Gemma 4 31B IT","description":"Largest Gemma 4 instruction model for open, self-hosted chat and reasoning","family":"gemma","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":100000,"input":100000,"output":32768},"cost":{"input":0.25,"output":0.5},"canonical_model_id":"google/gemma-4-31b-it"},"mistralai/Mistral-Small-4-119B-2603":{"id":"mistralai/Mistral-Small-4-119B-2603","name":"Mistral Small 4","description":"Fast Mistral production model for chat, extraction, and cost-sensitive agents","family":"mistral-small","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"interleaved":true,"temperature":true,"knowledge":"2025-06","release_date":"2026-03-16","last_updated":"2026-03-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":256000},"cost":{"input":0.25,"output":0.93},"canonical_model_id":"mistral/mistral-small-2603"},"mistralai/Ministral-3-14B-Instruct-2512":{"id":"mistralai/Ministral-3-14B-Instruct-2512","name":"Ministral 3 14B Instruct","description":"Compact Mistral model for edge, latency-sensitive, and cost-efficient workloads","family":"ministral","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-02","last_updated":"2025-12-02","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":100000,"input":100000,"output":25600},"status":"beta","cost":{"input":0.37,"output":0.5},"canonical_model_id":"mistral/ministral-3-14b-instruct-2512"},"moonshotai/Kimi-K2.6":{"id":"moonshotai/Kimi-K2.6","name":"Kimi K2.6","description":"Multimodal Kimi workhorse for agent loops, coding tasks, and visual context","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"input":256000,"output":256000},"status":"beta","cost":{"input":0.74,"output":3.72},"canonical_model_id":"moonshotai/kimi-k2.6"},"swiss-ai/Apertus-v1.5-70B":{"id":"swiss-ai/Apertus-v1.5-70B","name":"Apertus v1.5 70B","description":"Open, ethically-sourced Swiss AI model for multilingual, multimodal chat and instruction following","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"release_date":"2026-07-24","last_updated":"2026-08-01","modalities":{"input":["text","image","audio"],"output":["text"]},"open_weights":true,"limit":{"context":100000,"input":100000,"output":8192},"status":"beta","cost":{"input":0.87,"output":3.1}},"Qwen/Qwen3.5-397B-A17B-FP8":{"id":"Qwen/Qwen3.5-397B-A17B-FP8","name":"Qwen3.5 397B-A17B FP8","description":"Large open Qwen multimodal MoE for visual agents and long technical tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2026-02-15","last_updated":"2026-02-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"input":200000,"output":65536},"status":"beta","cost":{"input":0.99,"output":4.46},"canonical_model_id":"alibaba/qwen3.5-397b-a17b"},"Qwen/Qwen3.5-122B-A10B-FP8":{"id":"Qwen/Qwen3.5-122B-A10B-FP8","name":"Qwen3.5 122B-A10B FP8","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":true,"structured_output":true,"temperature":true,"release_date":"2026-02-23","last_updated":"2026-02-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"input":200000,"output":65536},"status":"deprecated","cost":{"input":0.5,"output":3.97},"canonical_model_id":"alibaba/qwen3.5-122b-a10b"},"nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-FP8":{"id":"nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-FP8","name":"Nemotron 3 Nano 30B A3B FP8","description":"Small Nemotron 3 MoE for efficient coding, math, and long-context agents","family":"nemotron","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"interleaved":true,"temperature":true,"knowledge":"2025-06-25","release_date":"2025-12-15","last_updated":"2025-12-15","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"input":1000000,"output":262144},"status":"deprecated","cost":{"input":0.06,"output":0.25},"canonical_model_id":"nvidia/nemotron-3-nano-30b-a3b"}}},"bailing":{"id":"bailing","env":["BAILING_API_TOKEN"],"npm":"@ai-sdk/openai-compatible","api":"https://api.tbox.cn/api/llm/v1","name":"Bailing","doc":"https://alipaytbox.yuque.com/sxs0ba/ling/intro","models":{"Ling-1T":{"id":"Ling-1T","name":"Ling-1T","description":"Open-weight instruction model for adaptable chat and self-hosted production workloads","family":"ling","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-10","last_updated":"2025-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32000},"cost":{"input":0.57,"output":2.29}},"Ring-1T":{"id":"Ring-1T","name":"Ring-1T","description":"Reasoning model for deliberate analysis, multi-step problem solving, and tool use","family":"ring","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"temperature":true,"knowledge":"2024-06","release_date":"2025-10","last_updated":"2025-10","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":32000},"cost":{"input":0.57,"output":2.29}}}},"frogbot":{"id":"frogbot","env":["FROGBOT_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://app.frogbot.ai/api/v1","name":"FrogBot","doc":"https://docs.frogbot.ai","models":{"grok-4-1-fast-non-reasoning":{"id":"grok-4-1-fast-non-reasoning","name":"Grok 4.1 Fast (Non-Reasoning)","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2025-11","release_date":"2025-11-19","last_updated":"2025-11-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":128000},"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"canonical_model_id":"xai/grok-4.1-fast"},"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"Gemini 2.5 Flash","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":0,"max":24576}],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.3,"output":2.5,"cache_read":0.075},"canonical_model_id":"google/gemini-2.5-flash"},"grok-4-3":{"id":"grok-4-3","name":"Grok 4.3","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-11","release_date":"2026-04-17","last_updated":"2026-04-17","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":1.25,"output":2.5,"cache_read":0.2},"canonical_model_id":"xai/grok-4.3"},"minimax-m2-5":{"id":"minimax-m2-5","name":"MiniMax-M2.5","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-09","release_date":"2026-02-12","last_updated":"2026-02-12","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":192000,"output":8192},"status":"deprecated","cost":{"input":0.3,"output":1.2,"cache_read":0.03},"canonical_model_id":"minimax/MiniMax-M2.5"},"gpt-5-4-mini":{"id":"gpt-5-4-mini","name":"GPT-5.4 Mini","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.75,"output":4.5,"cache_read":0.075},"canonical_model_id":"openai/gpt-5.4-mini"},"gemini-2.5-pro":{"id":"gemini-2.5-pro","name":"Gemini 2.5 Pro","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":128,"max":32768}],"tool_call":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.25,"output":10,"cache_read":0.31},"canonical_model_id":"google/gemini-2.5-pro"},"kimi-k2.5":{"id":"kimi-k2.5","name":"Kimi-K2.5","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":128000},"status":"deprecated","cost":{"input":0.6,"output":3,"cache_read":0.1},"canonical_model_id":"moonshotai/kimi-k2.5"},"gpt-oss-20b":{"id":"gpt-oss-20b","name":"GPT OSS 20B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.07,"output":0.2},"canonical_model_id":"openai/gpt-oss-20b"},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek v4 Pro","description":"Flagship DeepSeek model for coding, reasoning, and agentic work","family":"deepseek-thinking","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2026-01","release_date":"2026-04-24","last_updated":"2026-04-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":128000,"output":8192},"cost":{"input":1.32,"output":3.96,"cache_read":0.044},"canonical_model_id":"deepseek/deepseek-v4-pro"},"gpt-5-5":{"id":"gpt-5-5","name":"GPT-5.5","description":"Frontier GPT model for professional reasoning, coding, and multimodal work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2026-04-23","last_updated":"2026-04-23","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":272000,"output":128000},"cost":{"input":5,"output":30,"cache_read":0.5},"canonical_model_id":"openai/gpt-5.5"},"zai-glm-5-1":{"id":"zai-glm-5-1","name":"Z.AI GLM-5.1","description":"Flagship GLM model for hybrid reasoning, coding, and agentic engineering","family":"glm","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-10","release_date":"2026-04-07","last_updated":"2026-04-07","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":198000,"output":8192},"status":"deprecated","cost":{"input":1.4,"output":4.4,"cache_read":0.26},"canonical_model_id":"zhipuai/glm-5.1"},"minimax-m2-7":{"id":"minimax-m2-7","name":"MiniMax-M2.7","description":"MiniMax model for chat, coding, office work, and agentic tasks","family":"minimax","attachment":false,"reasoning":false,"tool_call":true,"temperature":true,"knowledge":"2024-09","release_date":"2026-03-18","last_updated":"2026-03-18","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":192000,"output":8192},"status":"deprecated","cost":{"input":0.3,"output":1.2,"cache_read":0.06},"canonical_model_id":"minimax/MiniMax-M2.7"},"grok-4-1-fast-reasoning":{"id":"grok-4-1-fast-reasoning","name":"Grok 4.1 Fast (Reasoning)","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-11","release_date":"2025-11-19","last_updated":"2025-11-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":128000},"cost":{"input":0.2,"output":0.5,"cache_read":0.05},"canonical_model_id":"xai/grok-4.1-fast-reasoning"},"kimi-k2-6":{"id":"kimi-k2-6","name":"Kimi-K2.6","description":"Kimi multimodal agent model for visual understanding, coding, and planning","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2026-04-20","last_updated":"2026-04-20","modalities":{"input":["text","image"],"output":["text"]},"open_weights":true,"limit":{"context":256000,"output":128000},"cost":{"input":0.95,"output":4,"cache_read":0.16},"canonical_model_id":"moonshotai/kimi-k2.6"},"gpt-5-3-codex":{"id":"gpt-5-3-codex","name":"GPT-5.3 Codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-02-05","last_updated":"2026-02-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.3-codex"},"gpt-5-4-nano":{"id":"gpt-5-4-nano","name":"GPT-5.4 Nano","description":"Compact GPT model for low-latency assistance and high-volume workloads","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2026-03-17","last_updated":"2026-03-17","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2,"output":1.25,"cache_read":0.02},"canonical_model_id":"openai/gpt-5.4-nano"},"gemini-3-flash-preview":{"id":"gemini-3-flash-preview","name":"Gemini 3 Flash Preview","description":"Fast Gemini model balancing multimodal reasoning, tool use, and cost","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.5,"output":3,"cache_read":0.05},"canonical_model_id":"google/gemini-3-flash-preview"},"claude-opus-4-6":{"id":"claude-opus-4-6","name":"Claude Opus 4.6","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"gemini-3-1-pro-preview":{"id":"gemini-3-1-pro-preview","name":"Gemini 3.1 Pro Preview","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2026-01","release_date":"2026-02-19","last_updated":"2026-02-19","modalities":{"input":["text","image","video","audio","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"cost":{"input":2,"output":12,"cache_read":0.2},"canonical_model_id":"google/gemini-3.1-pro-preview"},"grok-code-fast-1":{"id":"grok-code-fast-1","name":"Grok 4.1 Fast (Reasoning)","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2023-10","release_date":"2025-09-02","last_updated":"2025-09-02","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":128000},"cost":{"input":0.2,"output":1.5,"cache_read":0.02},"canonical_model_id":"xai/grok-code-fast-1"},"gpt-4o":{"id":"gpt-4o","name":"GPT-4o","description":"GPT model for general reasoning, writing, coding, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2023-09","release_date":"2024-05-13","last_updated":"2024-08-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":128000,"output":16384},"cost":{"input":2.5,"output":10,"cache_read":1.25},"canonical_model_id":"openai/gpt-4o"},"gpt-oss-120b":{"id":"gpt-oss-120b","name":"GPT OSS 120B","description":"Open-weight GPT model for self-hosted reasoning and instruction-following workloads","family":"gpt-oss","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-06","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":32768},"cost":{"input":0.15,"output":0.6},"canonical_model_id":"openai/gpt-oss-120b"},"qwen-3-6-plus":{"id":"qwen-3-6-plus","name":"Qwen 3.6 Plus","description":"Qwen vision-language model for visual reasoning, documents, and agent tasks","family":"qwen","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-04-02","last_updated":"2026-04-02","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":64000},"status":"deprecated","cost":{"input":0.5,"output":3,"cache_read":0.1},"canonical_model_id":"alibaba/qwen3.6-plus"},"claude-sonnet-4-6":{"id":"claude-sonnet-4-6","name":"Claude Sonnet 4.6","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2026-02-17","last_updated":"2026-03-13","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75},"canonical_model_id":"anthropic/claude-sonnet-4-6"},"claude-opus-4-7":{"id":"claude-opus-4-7","name":"Claude Opus 4.7","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"temperature":false,"knowledge":"2026-01-31","release_date":"2026-04-16","last_updated":"2026-04-16","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-7"},"claude-haiku-4-5":{"id":"claude-haiku-4-5","name":"Claude Haiku 4.5","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image","pdf"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5"}}},"jiekou":{"id":"jiekou","env":["JIEKOU_API_KEY"],"npm":"@ai-sdk/openai-compatible","api":"https://api.jiekou.ai/openai","name":"Jiekou.AI","doc":"https://docs.jiekou.ai/docs/support/quickstart?utm_source=github_models.dev","models":{"grok-4-1-fast-non-reasoning":{"id":"grok-4-1-fast-non-reasoning","name":"grok-4-1-fast-non-reasoning","description":"xAI's fast agentic tool-calling model with a 2M context window; non-reasoning variant for low-latency responses","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-11-19","last_updated":"2025-11-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"cost":{"input":0.19,"output":0.475},"canonical_model_id":"xai/grok-4.1-fast"},"claude-sonnet-4-20250514":{"id":"claude-sonnet-4-20250514","name":"claude-sonnet-4-20250514","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"status":"deprecated","cost":{"input":2.7,"output":13.5},"canonical_model_id":"anthropic/claude-sonnet-4-20250514"},"gpt-5.2-pro":{"id":"gpt-5.2-pro","name":"gpt-5.2-pro","description":"Higher-accuracy GPT-5.2 variant for tougher reasoning and review workflows","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":19.95,"output":159.6},"canonical_model_id":"openai/gpt-5.2-pro"},"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"gemini-2.5-flash","description":"Fast Gemini workhorse for multimodal apps where latency and price matter","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.285,"output":2.375,"cache_read":0.0285},"canonical_model_id":"google/gemini-2.5-flash"},"gpt-5.2":{"id":"gpt-5.2","name":"gpt-5.2","description":"Reliable GPT generation for broad coding, writing, and tool-assisted product work","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.6625,"output":13.3,"cache_read":0.1662},"canonical_model_id":"openai/gpt-5.2"},"o4-mini":{"id":"o4-mini","name":"o4-mini","description":"Fast o-series model for compact reasoning, coding, and tool use","family":"o-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"status":"deprecated","cost":{"input":1.1,"output":4.4},"canonical_model_id":"openai/o4-mini"},"gpt-5.2-codex":{"id":"gpt-5.2-codex","name":"gpt-5.2-codex","description":"Code-specialist GPT for repository edits, reviews, and long-running software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-08-31","release_date":"2025-12-11","last_updated":"2025-12-11","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.75,"output":14,"cache_read":0.175},"canonical_model_id":"openai/gpt-5.2-codex"},"grok-4-fast-reasoning":{"id":"grok-4-fast-reasoning","name":"grok-4-fast-reasoning","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-18","last_updated":"2025-12-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":2000000},"status":"deprecated","cost":{"input":0.18,"output":0.45},"canonical_model_id":"xai/grok-4-fast-reasoning"},"gpt-5.1-codex-max":{"id":"gpt-5.1-codex-max","name":"gpt-5.1-codex-max","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","xhigh"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.1875,"output":9.5,"cache_read":0.1187},"canonical_model_id":"openai/gpt-5.1-codex-max"},"gpt-5.1-codex":{"id":"gpt-5.1-codex","name":"gpt-5.1-codex","description":"Codex GPT for repository edits, code review, and practical software agents","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.1875,"output":9.5,"cache_read":0.1187},"canonical_model_id":"openai/gpt-5.1-codex"},"gemini-2.5-pro":{"id":"gemini-2.5-pro","name":"gemini-2.5-pro","description":"Google's proven reasoning model for coding, math, and multimodal analysis","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":1.1875,"output":9.5,"cache_read":0.1187},"canonical_model_id":"google/gemini-2.5-pro"},"o3":{"id":"o3","name":"o3","description":"Deliberate o-series reasoner for hard math, coding, and multi-step analysis","family":"o","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2025-04-16","last_updated":"2025-04-16","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":9.5,"output":38,"cache_read":0.475},"canonical_model_id":"openai/o3"},"gemini-2.5-flash-preview-05-20":{"id":"gemini-2.5-flash-preview-05-20","name":"gemini-2.5-flash-preview-05-20","description":"Preview snapshot of Gemini 2.5 Flash with controllable thinking budgets","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-05-20","last_updated":"2025-05-20","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.1425,"output":3.325,"cache_read":0.0285},"canonical_model_id":"google/gemini-2.5-flash-preview-05-20"},"gemini-3-pro-preview":{"id":"gemini-3-pro-preview","name":"gemini-3-pro-preview","description":"Preview Gemini flagship for complex reasoning, coding, and rich multimodal prompts","family":"gemini-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-11-18","last_updated":"2025-11-18","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":1.8,"output":10.8},"canonical_model_id":"google/gemini-3-pro-preview"},"o3-mini":{"id":"o3-mini","name":"o3-mini","description":"Smaller o-series reasoner for economical coding, math, and planning tasks","family":"o-mini","attachment":false,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05","release_date":"2024-12-20","last_updated":"2025-01-29","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":100000},"cost":{"input":1.045,"output":4.18,"cache_read":0.5225},"canonical_model_id":"openai/o3-mini"},"gpt-5-pro":{"id":"gpt-5-pro","name":"gpt-5-pro","description":"Higher-accuracy GPT-5 tier for tough analysis, coding reviews, and planning","family":"gpt-pro","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-10-06","last_updated":"2025-10-06","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":272000},"cost":{"input":14.25,"output":114},"canonical_model_id":"openai/gpt-5-pro"},"claude-sonnet-4-5-20250929":{"id":"claude-sonnet-4-5-20250929","name":"claude-sonnet-4-5-20250929","description":"Balanced Claude model for coding, analysis, agent workflows, and cost control","family":"claude-sonnet","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-07-31","release_date":"2025-09-29","last_updated":"2025-09-29","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":3,"output":15,"cache_read":0.3,"cache_write":3.75,"tiers":[{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5,"tier":{"type":"context","size":200000}}],"context_over_200k":{"input":6,"output":22.5,"cache_read":0.6,"cache_write":7.5}},"canonical_model_id":"anthropic/claude-sonnet-4-5-20250929"},"gemini-2.5-flash-lite":{"id":"gemini-2.5-flash-lite","name":"gemini-2.5-flash-lite","description":"Lean Gemini 2.5 lane for cheap multimodal traffic and quick agents","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"cost":{"input":0.095,"output":0.38,"cache_read":0.0095},"canonical_model_id":"google/gemini-2.5-flash-lite"},"claude-opus-4-1-20250805":{"id":"claude-opus-4-1-20250805","name":"claude-opus-4-1-20250805","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-08-05","last_updated":"2025-08-05","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"status":"deprecated","cost":{"input":13.5,"output":67.5},"canonical_model_id":"anthropic/claude-opus-4-1-20250805"},"grok-4-1-fast-reasoning":{"id":"grok-4-1-fast-reasoning","name":"grok-4-1-fast-reasoning","description":"xAI's fast agentic tool-calling model with a 2M context window and built-in reasoning","family":"grok","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-11-19","last_updated":"2025-11-19","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":30000},"cost":{"input":0.19,"output":0.475},"canonical_model_id":"xai/grok-4.1-fast-reasoning"},"gemini-2.5-flash-lite-preview-06-17":{"id":"gemini-2.5-flash-lite-preview-06-17","name":"gemini-2.5-flash-lite-preview-06-17","description":"First preview of Gemini 2.5 Flash-Lite, the low-cost, low-latency 2.5 model","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65535},"status":"deprecated","cost":{"input":0.09,"output":0.36},"canonical_model_id":"google/gemini-2.5-flash-lite-preview-06-17"},"gpt-5.1":{"id":"gpt-5.1","name":"gpt-5.1","description":"Sharper GPT-5 generation for coding, product work, and tool-assisted tasks","family":"gpt","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.1875,"output":9.5,"cache_read":0.1187},"canonical_model_id":"openai/gpt-5.1"},"claude-haiku-4-5-20251001":{"id":"claude-haiku-4-5-20251001","name":"claude-haiku-4-5-20251001","description":"Fast Claude model for responsive assistance, classification, and lightweight agents","family":"claude-haiku","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-02-28","release_date":"2025-10-15","last_updated":"2025-10-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":64000},"cost":{"input":1,"output":5,"cache_read":0.1,"cache_write":1.25},"canonical_model_id":"anthropic/claude-haiku-4-5-20251001"},"gpt-5-mini":{"id":"gpt-5-mini","name":"gpt-5-mini","description":"Small GPT-5 for responsive agents, coding help, and everyday automation","family":"gpt-mini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2375,"output":1.9,"cache_read":0.0237},"canonical_model_id":"openai/gpt-5-mini"},"gpt-5.1-codex-mini":{"id":"gpt-5.1-codex-mini","name":"gpt-5.1-codex-mini","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-11-13","last_updated":"2025-11-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.2375,"output":1.9,"cache_read":0.0237},"canonical_model_id":"openai/gpt-5.1-codex-mini"},"claude-opus-4-20250514":{"id":"claude-opus-4-20250514","name":"claude-opus-4-20250514","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-05-22","last_updated":"2025-05-22","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":32000},"status":"deprecated","cost":{"input":13.5,"output":67.5},"canonical_model_id":"anthropic/claude-opus-4-20250514"},"gemini-2.5-pro-preview-06-05":{"id":"gemini-2.5-pro-preview-06-05","name":"gemini-2.5-pro-preview-06-05","description":"Advanced Gemini model for complex reasoning, coding, and multimodal analysis","family":"gemini","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01-31","release_date":"2025-06-05","last_updated":"2025-06-05","modalities":{"input":["image","text","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":1.1875,"output":9.5,"cache_read":0.1187},"canonical_model_id":"google/gemini-2.5-pro-preview"},"claude-opus-4-5-20251101":{"id":"claude-opus-4-5-20251101","name":"claude-opus-4-5-20251101","description":"Flagship Claude model for deep reasoning, coding, and long-horizon agents","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05","release_date":"2025-11-24","last_updated":"2025-11-24","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":200000,"output":65536},"cost":{"input":4.75,"output":23.75,"cache_read":0.475,"cache_write":5.9375},"canonical_model_id":"anthropic/claude-opus-4-5-20251101"},"gpt-5-nano":{"id":"gpt-5-nano","name":"gpt-5-nano","description":"Tiny GPT-5 lane for routing, extraction, classification, and bulk jobs","family":"gpt-nano","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["minimal","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-05-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":0.0475,"output":0.38,"cache_read":0.0047},"canonical_model_id":"openai/gpt-5-nano"},"gemini-3-flash-preview":{"id":"gemini-3-flash-preview","name":"gemini-3-flash-preview","description":"New Gemini flash lane bringing frontier-style multimodal reasoning to cheaper runs","family":"gemini-flash","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-12-17","last_updated":"2025-12-17","modalities":{"input":["text","image","video","audio"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"cost":{"input":0.475,"output":2.85,"cache_read":0.0475},"canonical_model_id":"google/gemini-3-flash-preview"},"claude-opus-4-6":{"id":"claude-opus-4-6","name":"claude-opus-4-6","description":"High-end Claude for difficult coding, planning, and slower expert reasoning","family":"claude-opus","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high","max"]},{"type":"budget_tokens","min":1024}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-05-31","release_date":"2026-02-05","last_updated":"2026-03-13","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":1000000,"output":128000},"cost":{"input":5,"output":25,"cache_read":0.5,"cache_write":6.25},"canonical_model_id":"anthropic/claude-opus-4-6"},"grok-4-0709":{"id":"grok-4-0709","name":"grok-4-0709","description":"Grok model for agentic tool use, reasoning, coding, and live assistance","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2026-01","last_updated":"2026-01","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":8192},"cost":{"input":2.85,"output":14.25}},"grok-code-fast-1":{"id":"grok-code-fast-1","name":"grok-code-fast-1","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-09-02","last_updated":"2025-09-02","modalities":{"input":["text"],"output":["text"]},"open_weights":false,"limit":{"context":256000,"output":10000},"cost":{"input":0.19,"output":1.425,"cache_read":0.019},"canonical_model_id":"xai/grok-code-fast-1"},"gpt-5-codex":{"id":"gpt-5-codex","name":"gpt-5-codex","description":"Coding-optimized GPT model for repository edits, reviews, and agentic software work","family":"gpt-codex","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-09-15","last_updated":"2025-09-15","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"cost":{"input":1.1875,"output":9.5,"cache_read":0.1187},"canonical_model_id":"openai/gpt-5-codex"},"gpt-5-chat-latest":{"id":"gpt-5-chat-latest","name":"gpt-5-chat-latest","description":"Chat-tuned GPT model for conversational assistance, writing, and tool workflows","family":"gpt","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2024-09-30","release_date":"2025-08-07","last_updated":"2025-08-07","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":400000,"input":272000,"output":128000},"status":"deprecated","cost":{"input":1.125,"output":9},"canonical_model_id":"openai/gpt-5-chat-latest"},"grok-4-fast-non-reasoning":{"id":"grok-4-fast-non-reasoning","name":"grok-4-fast-non-reasoning","description":"Fast Grok model for responsive chat, reasoning, and tool-assisted work","family":"grok","attachment":true,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-18","last_updated":"2025-12-18","modalities":{"input":["text","image"],"output":["text"]},"open_weights":false,"limit":{"context":2000000,"output":2000000},"status":"deprecated","cost":{"input":0.18,"output":0.45},"canonical_model_id":"xai/grok-4-fast-non-reasoning"},"gemini-2.5-flash-lite-preview-09-2025":{"id":"gemini-2.5-flash-lite-preview-09-2025","name":"gemini-2.5-flash-lite-preview-09-2025","description":"September 2025 preview of Gemini 2.5 Flash-Lite with better instruction following and multimodal quality","family":"gemini-flash-lite","attachment":true,"reasoning":true,"reasoning_options":[{"type":"effort","values":["none","low","medium","high"]}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-01","release_date":"2025-09-25","last_updated":"2025-09-25","modalities":{"input":["text","image","audio","video"],"output":["text"]},"open_weights":false,"limit":{"context":1048576,"output":65536},"status":"deprecated","cost":{"input":0.09,"output":0.36},"canonical_model_id":"google/gemini-2.5-flash-lite-preview-09-2025"},"baidu/ernie-4.5-vl-424b-a47b":{"id":"baidu/ernie-4.5-vl-424b-a47b","name":"ERNIE 4.5 VL 424B A47B","description":"Multimodal reasoning model for visual analysis, planning, and tool use","family":"ernie","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"knowledge":"2025-03-31","release_date":"2025-06-30","last_updated":"2025-06-30","modalities":{"input":["image","text"],"output":["text"]},"open_weights":true,"limit":{"context":123000,"output":16000},"cost":{"input":0.42,"output":1.25},"canonical_model_id":"baidu/ernie-4.5-vl-424b-a47b"},"baidu/ernie-4.5-300b-a47b-paddle":{"id":"baidu/ernie-4.5-300b-a47b-paddle","name":"ERNIE 4.5 300B A47B","description":"Open ERNIE text MoE with 300B total and 47B active parameters","family":"ernie","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-06-30","last_updated":"2025-06-30","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":123000,"output":12000},"cost":{"input":0.28,"output":1.1},"canonical_model_id":"baidu/ernie-4.5-300b-a47b"},"minimaxai/minimax-m1-80k":{"id":"minimaxai/minimax-m1-80k","name":"MiniMax M1","description":"Open hybrid-attention MoE reasoning model with a million-token context and an 80K thinking budget","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":false,"temperature":true,"release_date":"2025-06-17","last_updated":"2025-06-17","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":1000000,"output":40000},"cost":{"input":0.55,"output":2.2},"canonical_model_id":"minimax/minimax-m1-80k"},"deepseek/deepseek-r1-0528":{"id":"deepseek/deepseek-r1-0528","name":"DeepSeek R1 0528","description":"May 2025 DeepSeek R1 update with improved mathematics, coding, and reasoning","family":"deepseek-thinking","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-05-28","last_updated":"2025-05-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":32768},"cost":{"input":0.7,"output":2.5,"cache_read":0.35},"canonical_model_id":"deepseek/deepseek-r1-0528"},"deepseek/deepseek-v3.1":{"id":"deepseek/deepseek-v3.1","name":"DeepSeek V3.1","description":"Hybrid-reasoning DeepSeek model with thinking and non-thinking modes","family":"deepseek","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-08-21","last_updated":"2025-08-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":32768},"cost":{"input":0.27,"output":1},"canonical_model_id":"deepseek/deepseek-v3.1"},"deepseek/deepseek-v3-0324":{"id":"deepseek/deepseek-v3-0324","name":"DeepSeek V3 0324","description":"March 2025 checkpoint of DeepSeek-V3 with improved reasoning and coding","family":"deepseek","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-03-24","last_updated":"2025-03-24","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":163840,"output":163840},"cost":{"input":0.28,"output":1.14,"cache_read":0.14},"canonical_model_id":"deepseek/deepseek-v3-0324"},"qwen/qwen3-235b-a22b-thinking-2507":{"id":"qwen/qwen3-235b-a22b-thinking-2507","name":"Qwen3 235B A22b Thinking 2507","description":"Updated large open Qwen3 MoE thinking model for reasoning, math, coding, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-25","last_updated":"2025-07-25","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":131072},"cost":{"input":0.3,"output":3},"canonical_model_id":"alibaba/qwen3-235b-a22b-thinking-2507"},"qwen/qwen3-coder-480b-a35b-instruct":{"id":"qwen/qwen3-coder-480b-a35b-instruct","name":"Qwen3 Coder 480B A35B Instruct","description":"Open Qwen coding heavyweight for repository reasoning and agentic engineering","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-22","last_updated":"2025-07-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.38,"output":1.55},"canonical_model_id":"alibaba/qwen3-coder-480b-a35b-instruct"},"qwen/qwen3-235b-a22b-instruct-2507":{"id":"qwen/qwen3-235b-a22b-instruct-2507","name":"Qwen3 235B A22B Instruct 2507","description":"Updated large open Qwen3 MoE instruct model for multilingual chat, coding, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-21","last_updated":"2025-07-21","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":16384},"cost":{"input":0.15,"output":0.8},"canonical_model_id":"alibaba/qwen3-235b-a22b-instruct-2507"},"qwen/qwen3-next-80b-a3b-thinking":{"id":"qwen/qwen3-next-80b-a3b-thinking","name":"Qwen3 Next 80B A3B Thinking","description":"Efficient Qwen thinking model for local reasoning, math, and coding agents","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":0.15,"output":1.5},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-thinking"},"qwen/qwen3-32b-fp8":{"id":"qwen/qwen3-32b-fp8","name":"Qwen3 32B","description":"Dense open Qwen model for self-hosted chat, reasoning, and coding","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":40960,"output":20000},"cost":{"input":0.1,"output":0.45},"canonical_model_id":"alibaba/qwen3-32b"},"qwen/qwen3-235b-a22b-fp8":{"id":"qwen/qwen3-235b-a22b-fp8","name":"Qwen3 235B A22B","description":"Large open Qwen MoE for multilingual reasoning, coding, and tool use","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"knowledge":"2025-04","release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":40960,"output":20000},"cost":{"input":0.2,"output":0.8},"canonical_model_id":"alibaba/qwen3-235b-a22b"},"qwen/qwen3-coder-next":{"id":"qwen/qwen3-coder-next","name":"qwen/qwen3-coder-next","description":"Open-weight Qwen coding model for agents, repository edits, and multi-turn tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-09","release_date":"2026-02-03","last_updated":"2026-02-03","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":65536},"cost":{"input":0.2,"output":1.5},"canonical_model_id":"alibaba/qwen3-coder-next"},"qwen/qwen3-next-80b-a3b-instruct":{"id":"qwen/qwen3-next-80b-a3b-instruct","name":"Qwen3 Next 80B A3B Instruct","description":"Qwen instruction model for multilingual chat, reasoning, and tool use","family":"qwen","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-09","last_updated":"2025-09","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":65536},"cost":{"input":0.15,"output":1.5},"canonical_model_id":"alibaba/qwen3-next-80b-a3b-instruct"},"qwen/qwen3-30b-a3b-fp8":{"id":"qwen/qwen3-30b-a3b-fp8","name":"Qwen3 30B A3B","description":"Sparse MoE Qwen model with 3B active parameters for efficient chat and reasoning","family":"qwen","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":false,"structured_output":false,"temperature":true,"release_date":"2025-04-28","last_updated":"2025-04-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":40960,"output":20000},"cost":{"input":0.09,"output":0.45},"canonical_model_id":"alibaba/qwen3-30b-a3b"},"xiaomimimo/mimo-v2-flash":{"id":"xiaomimimo/mimo-v2-flash","name":"XiaomiMiMo/MiMo-V2-Flash","description":"MiMo flash model for fast multimodal assistance and agent workflows","family":"mimo","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2024-12-01","release_date":"2025-12-16","last_updated":"2026-02-04","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":131072},"cost":{"input":0.1,"output":0.3,"cache_read":0.02},"canonical_model_id":"xiaomi/mimo-v2-flash"},"moonshotai/kimi-k2-0905":{"id":"moonshotai/kimi-k2-0905","name":"Kimi K2 0905","description":"September 2025 Kimi K2 instruction update with a 256K context and improved agentic coding","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-09-05","last_updated":"2025-09-05","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":100352},"cost":{"input":0.6,"output":2.5},"canonical_model_id":"moonshotai/kimi-k2-0905"},"moonshotai/kimi-k2-instruct":{"id":"moonshotai/kimi-k2-instruct","name":"Kimi K2 Instruct","description":"Non-thinking Kimi K2 MoE instruction model for coding and tool-using agents","family":"kimi-k2","attachment":false,"reasoning":false,"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-07-11","last_updated":"2025-07-11","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":100352},"cost":{"input":0.57,"output":2.3},"canonical_model_id":"moonshotai/kimi-k2-instruct"},"moonshotai/kimi-k2.5":{"id":"moonshotai/kimi-k2.5","name":"Kimi K2.5","description":"Earlier Kimi frontier model for long-context agents, coding, and multimodal work","family":"kimi-k2","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":false,"knowledge":"2025-01","release_date":"2026-01-27","last_updated":"2026-01-27","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":262144,"output":262144},"cost":{"input":0.6,"output":3,"cache_read":0.1},"canonical_model_id":"moonshotai/kimi-k2.5"},"minimax/minimax-m2.1":{"id":"minimax/minimax-m2.1","name":"Minimax M2.1","description":"Earlier MiniMax agent model for practical coding and productivity tasks","family":"minimax","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"release_date":"2025-12-23","last_updated":"2025-12-23","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.3,"output":1.2,"cache_read":0.03},"canonical_model_id":"minimax/MiniMax-M2.1"},"zai-org/glm-4.5":{"id":"zai-org/glm-4.5","name":"GLM-4.5","description":"Hybrid-reasoning GLM release that made the 4.5 line broadly useful","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[{"type":"toggle"}],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-07-28","last_updated":"2025-07-28","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":131072,"output":98304},"cost":{"input":0.6,"output":2.2},"canonical_model_id":"zhipuai/glm-4.5"},"zai-org/glm-4.7":{"id":"zai-org/glm-4.7","name":"GLM-4.7","description":"Mature GLM model for dependable coding, reasoning, and structured agent tasks","family":"glm","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-12-22","last_updated":"2025-12-22","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":204800,"output":131072},"cost":{"input":0.6,"output":2.2},"canonical_model_id":"zhipuai/glm-4.7"},"zai-org/glm-4.5v":{"id":"zai-org/glm-4.5v","name":"GLM 4.5V","description":"GLM vision model for visual reasoning, documents, and multimodal agents","family":"glm","attachment":true,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2025-08-11","last_updated":"2025-08-11","modalities":{"input":["text","image","video"],"output":["text"]},"open_weights":true,"limit":{"context":65536,"output":16384},"cost":{"input":0.6,"output":1.8},"canonical_model_id":"zhipuai/glm-4.5v"},"zai-org/glm-4.7-flash":{"id":"zai-org/glm-4.7-flash","name":"GLM-4.7-Flash","description":"Budget GLM lane for fast coding help, routing, and everyday automation","family":"glm-flash","attachment":false,"reasoning":true,"reasoning_options":[],"tool_call":true,"structured_output":true,"temperature":true,"knowledge":"2025-04","release_date":"2026-01-19","last_updated":"2026-01-19","modalities":{"input":["text"],"output":["text"]},"open_weights":true,"limit":{"context":200000,"output":128000},"cost":{"input":0.07,"output":0.4,"cache_read":0.01},"canonical_model_id":"zhipuai/glm-4.7-flash"}}}} \ No newline at end of file diff --git a/host/js/models.ts b/host/js/models.ts index cde0805..156e5ff 100644 --- a/host/js/models.ts +++ b/host/js/models.ts @@ -1,5 +1,6 @@ -/** Configured providers with models.dev metadata and pi-ai API adapters. */ +/** Configured providers retain pi-ai catalog metadata and API compatibility flags. */ import {createModels, createProvider} from '@earendil-works/pi-ai/models'; +import {getBuiltinModel} from '@earendil-works/pi-ai/providers/all'; import {anthropicMessagesApi} from '@earendil-works/pi-ai/api/anthropic-messages.lazy'; import {openAIResponsesApi} from '@earendil-works/pi-ai/api/openai-responses.lazy'; import {openAICompletionsApi} from '@earendil-works/pi-ai/api/openai-completions.lazy'; @@ -10,28 +11,25 @@ const adapters = {'anthropic-messages': anthropicMessagesApi, 'openai-responses' export function resolveModel(provider: string, settings: any, entry: any, catalog: any) { const override = typeof entry === 'string' ? {id:entry} : entry; const id = override.id; - const known = catalog[settings.catalog ?? provider]?.models?.[id]; - const metadata = {context_window:known?.limit?.context, max_tokens:known?.limit?.output, - reasoning:known?.reasoning, cost:known?.cost, ...override}; - const cost = {...known?.cost, ...override.cost}; + const known = catalog(settings.catalog ?? provider,id); + const metadata = {context_window:known?.contextWindow, max_tokens:known?.maxTokens, + reasoning:known?.reasoning, ...override}; + const cost = {...known?.cost}; + const costFields = {input:'input',output:'output',cache_read:'cacheRead',cache_write:'cacheWrite'}; + for (const [key, field] of Object.entries(costFields)) if (override.cost?.[key] !== undefined) cost[field] = override.cost[key]; const missing = ['context_window','max_tokens','reasoning'].filter(key=>metadata[key] === undefined); - for (const key of ['input','output','cache_read','cache_write']) if (cost[key] === undefined) missing.push(`cost.${key}`); + for (const [key, field] of Object.entries(costFields)) if (cost[field] === undefined) missing.push(`cost.${key}`); if (missing.length) throw new Error(`${CONFIG}: ${provider}/${id} lacks ${missing.join(', ')}`); const extra = Object.keys(override).filter(key=>!['id','context_window','max_tokens','reasoning','cost'].includes(key)); const extraCost = Object.keys(override.cost ?? {}).filter(key=>!['input','output','cache_read','cache_write'].includes(key)); if (extra.length || extraCost.length) throw new Error(`${CONFIG}: invalid overrides for ${provider}/${id}: ${[...extra,...extraCost].join(', ')}`); - return {id, name:known?.name ?? id, provider, api:settings.type === 'openai-chat-completions' ? 'openai-completions' : settings.type, + return {...known, type:'chat', id, name:known?.name ?? id, provider, + api:settings.type === 'openai-chat-completions' ? 'openai-completions' : settings.type, baseUrl:settings.base_url, contextWindow:metadata.context_window, maxTokens:metadata.max_tokens, - reasoning:metadata.reasoning, input:known?.modalities?.input?.filter((type:string)=>['text','image'].includes(type)) ?? ['text'], - cost:{input:cost.input, output:cost.output, cacheRead:cost.cache_read, cacheWrite:cost.cache_write}}; + reasoning:metadata.reasoning, input:known?.input ?? ['text'], cost}; } -export async function modelCatalog() { - let updated; - try { - const response = await fetch('https://models.dev/api.json',{signal:AbortSignal.timeout(5000)}); - if (response.ok) updated = await response.json(); - } catch { /* Cached metadata and the packaged snapshot also work offline. */ } - return Deno.core.ops.op_model_catalog(updated ?? null); +export function modelCatalog() { + return getBuiltinModel; } export async function configuredModels(readProviders:()=>Promise, catalog:any) { const models:any = createModels(); diff --git a/host/js/provider-models-test-bundle.js b/host/js/provider-models-test-bundle.js index d4b2b0e..0005bb3 100644 --- a/host/js/provider-models-test-bundle.js +++ b/host/js/provider-models-test-bundle.js @@ -1871,7 +1871,7 @@ var init_models = __esm({ } }); -// node_modules/@anthropic-ai/sdk/internal/tslib.mjs +// node_modules/openai/internal/tslib.mjs function __classPrivateFieldSet(receiver, state2, value2, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); @@ -1889,1365 +1889,14 @@ function __classPrivateFieldGet(receiver, state2, kind, f) { return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state2.get(receiver); } var init_tslib = __esm({ - "node_modules/@anthropic-ai/sdk/internal/tslib.mjs"() { + "node_modules/openai/internal/tslib.mjs"() { } }); -// node_modules/@anthropic-ai/sdk/internal/errors.mjs -function isAbortError(err) { - return typeof err === "object" && err !== null && // Spec-compliant fetch implementations - ("name" in err && err.name === "AbortError" || // Expo fetch - "message" in err && String(err.message).includes("FetchRequestCanceledException")); -} -var castToError; -var init_errors = __esm({ - "node_modules/@anthropic-ai/sdk/internal/errors.mjs"() { - castToError = (err) => { - if (err instanceof Error) - return err; - if (typeof err === "object" && err !== null) { - try { - const tag = Object.prototype.toString.call(err); - if (tag === "[object Error]" || tag === "[object DOMException]") { - const error = new Error(err.message, err.cause ? { cause: err.cause } : {}); - if (err.stack) - error.stack = err.stack; - if (err.cause && !error.cause) - error.cause = err.cause; - if (err.name) - error.name = err.name; - return error; - } - } catch { - } - try { - return new Error(JSON.stringify(err)); - } catch { - } - } - return new Error(err); - }; - } -}); - -// node_modules/@anthropic-ai/sdk/core/error.mjs -var AnthropicError, APIError, APIUserAbortError, APIConnectionError, APIConnectionTimeoutError, RetryableError, BadRequestError, AuthenticationError, PermissionDeniedError, NotFoundError, ConflictError, UnprocessableEntityError, RateLimitError, InternalServerError; -var init_error = __esm({ - "node_modules/@anthropic-ai/sdk/core/error.mjs"() { - init_errors(); - AnthropicError = /* @__PURE__ */ (() => { - class AnthropicError2 extends Error { - } - return AnthropicError2; - })(); - APIError = class _APIError extends AnthropicError { - constructor(status, error, message, headers, type) { - super(`${_APIError.makeMessage(status, error, message)}`); - this.status = status; - this.headers = headers; - this.requestID = headers?.get("request-id"); - this.workspaceID = headers?.get("anthropic-workspace-id"); - this.error = error; - this.type = type ?? null; - } - static makeMessage(status, error, message) { - const msg = error?.message ? typeof error.message === "string" ? error.message : JSON.stringify(error.message) : error ? JSON.stringify(error) : message; - if (status && msg) { - return `${status} ${msg}`; - } - if (status) { - return `${status} status code (no body)`; - } - if (msg) { - return msg; - } - return "(no status code or body)"; - } - static generate(status, errorResponse, message, headers) { - if (!status || !headers) { - return new APIConnectionError({ message, cause: castToError(errorResponse) }); - } - const error = errorResponse; - const type = error?.["error"]?.["type"]; - if (status === 400) { - return new BadRequestError(status, error, message, headers, type); - } - if (status === 401) { - return new AuthenticationError(status, error, message, headers, type); - } - if (status === 403) { - return new PermissionDeniedError(status, error, message, headers, type); - } - if (status === 404) { - return new NotFoundError(status, error, message, headers, type); - } - if (status === 409) { - return new ConflictError(status, error, message, headers, type); - } - if (status === 422) { - return new UnprocessableEntityError(status, error, message, headers, type); - } - if (status === 429) { - return new RateLimitError(status, error, message, headers, type); - } - if (status >= 500) { - return new InternalServerError(status, error, message, headers, type); - } - return new _APIError(status, error, message, headers, type); - } - }; - APIUserAbortError = class extends APIError { - constructor({ message } = {}) { - super(void 0, void 0, message || "Request was aborted.", void 0); - } - }; - APIConnectionError = class extends APIError { - constructor({ message, cause }) { - super(void 0, void 0, message || "Connection error.", void 0); - if (cause) - this.cause = cause; - } - }; - APIConnectionTimeoutError = class extends APIConnectionError { - constructor({ message } = {}) { - super({ message: message ?? "Request timed out." }); - } - }; - RetryableError = class extends AnthropicError { - constructor(message, { cause } = {}) { - super(message ?? "Retryable error."); - if (cause !== void 0) - this.cause = cause; - } - }; - BadRequestError = class extends APIError { - }; - AuthenticationError = class extends APIError { - }; - PermissionDeniedError = class extends APIError { - }; - NotFoundError = class extends APIError { - }; - ConflictError = class extends APIError { - }; - UnprocessableEntityError = class extends APIError { - }; - RateLimitError = class extends APIError { - }; - InternalServerError = class extends APIError { - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/values.mjs -function maybeObj(x) { - if (typeof x !== "object") { - return {}; - } - return x ?? {}; -} -function isEmptyObj(obj2) { - if (!obj2) - return true; - for (const _k in obj2) - return false; - return true; -} -function hasOwn(obj2, key) { - return Object.prototype.hasOwnProperty.call(obj2, key); -} -function isObj(obj2) { - return obj2 != null && typeof obj2 === "object" && !Array.isArray(obj2); -} -function checkNever(_value) { -} -var startsWithSchemeRegexp, isAbsoluteURL, isArray, isReadonlyArray, validatePositiveInteger, safeJSON; -var init_values = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/values.mjs"() { - init_error(); - startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i; - isAbsoluteURL = (url) => { - return startsWithSchemeRegexp.test(url); - }; - isArray = (val) => (isArray = Array.isArray, isArray(val)); - isReadonlyArray = isArray; - validatePositiveInteger = (name, n) => { - if (typeof n !== "number" || !Number.isInteger(n)) { - throw new AnthropicError(`${name} must be an integer`); - } - if (n < 0) { - throw new AnthropicError(`${name} must be a positive integer`); - } - return n; - }; - safeJSON = (text) => { - try { - return JSON.parse(text); - } catch (err) { - return void 0; - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/sleep.mjs -var sleep; -var init_sleep = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/sleep.mjs"() { - sleep = (ms, signal) => new Promise((resolve2) => { - if (signal?.aborted) - return resolve2(); - const onAbort = () => { - clearTimeout(timer); - resolve2(); - }; - const timer = setTimeout(() => { - signal?.removeEventListener("abort", onAbort); - resolve2(); - }, ms); - signal?.addEventListener("abort", onAbort, { once: true }); - }); - } -}); - -// node_modules/@anthropic-ai/sdk/version.mjs -var VERSION; -var init_version2 = __esm({ - "node_modules/@anthropic-ai/sdk/version.mjs"() { - VERSION = "0.129.0"; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/detect-platform.mjs -function getDetectedPlatform() { - if (typeof Deno !== "undefined" && Deno.build != null) { - return "deno"; - } - if (typeof EdgeRuntime !== "undefined") { - return "edge"; - } - if (Object.prototype.toString.call(typeof globalThis.process !== "undefined" ? globalThis.process : 0) === "[object process]") { - return "node"; - } - return "unknown"; -} -function getBrowserInfo() { - if (typeof navigator === "undefined" || !navigator) { - return null; - } - const browserPatterns = [ - { key: "edge", pattern: /Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, - { key: "ie", pattern: /MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, - { key: "ie", pattern: /Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/ }, - { key: "chrome", pattern: /Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, - { key: "firefox", pattern: /Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, - { key: "safari", pattern: /(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/ } - ]; - for (const { key, pattern } of browserPatterns) { - const match = pattern.exec(navigator.userAgent); - if (match) { - const major = match[1] || 0; - const minor = match[2] || 0; - const patch = match[3] || 0; - return { browser: key, version: `${major}.${minor}.${patch}` }; - } - } - return null; -} -var isRunningInBrowser, getPlatformProperties, normalizeArch, normalizePlatform, _platformHeaders, getPlatformHeaders; -var init_detect_platform = __esm({ - "node_modules/@anthropic-ai/sdk/internal/detect-platform.mjs"() { - init_version2(); - isRunningInBrowser = () => { - return ( - // @ts-ignore - typeof window !== "undefined" && // @ts-ignore - typeof window.document !== "undefined" && // @ts-ignore - typeof navigator !== "undefined" - ); - }; - getPlatformProperties = () => { - const detectedPlatform = getDetectedPlatform(); - if (detectedPlatform === "deno") { - return { - "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION, - "X-Stainless-OS": normalizePlatform(Deno.build.os), - "X-Stainless-Arch": normalizeArch(Deno.build.arch), - "X-Stainless-Runtime": "deno", - "X-Stainless-Runtime-Version": typeof Deno.version === "string" ? Deno.version : Deno.version?.deno ?? "unknown" - }; - } - if (typeof EdgeRuntime !== "undefined") { - return { - "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION, - "X-Stainless-OS": "Unknown", - "X-Stainless-Arch": `other:${EdgeRuntime}`, - "X-Stainless-Runtime": "edge", - "X-Stainless-Runtime-Version": globalThis.process?.version ?? "unknown" - }; - } - if (detectedPlatform === "node") { - return { - "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION, - "X-Stainless-OS": normalizePlatform(globalThis.process.platform ?? "unknown"), - "X-Stainless-Arch": normalizeArch(globalThis.process.arch ?? "unknown"), - "X-Stainless-Runtime": "node", - "X-Stainless-Runtime-Version": globalThis.process.version ?? "unknown" - }; - } - const browserInfo = getBrowserInfo(); - if (browserInfo) { - return { - "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION, - "X-Stainless-OS": "Unknown", - "X-Stainless-Arch": "unknown", - "X-Stainless-Runtime": `browser:${browserInfo.browser}`, - "X-Stainless-Runtime-Version": browserInfo.version - }; - } - return { - "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION, - "X-Stainless-OS": "Unknown", - "X-Stainless-Arch": "unknown", - "X-Stainless-Runtime": "unknown", - "X-Stainless-Runtime-Version": "unknown" - }; - }; - normalizeArch = (arch) => { - if (arch === "x32") - return "x32"; - if (arch === "x86_64" || arch === "x64") - return "x64"; - if (arch === "arm") - return "arm"; - if (arch === "aarch64" || arch === "arm64") - return "arm64"; - if (arch) - return `other:${arch}`; - return "unknown"; - }; - normalizePlatform = (platform) => { - platform = platform.toLowerCase(); - if (platform.includes("ios")) - return "iOS"; - if (platform === "android") - return "Android"; - if (platform === "darwin") - return "MacOS"; - if (platform === "win32") - return "Windows"; - if (platform === "freebsd") - return "FreeBSD"; - if (platform === "openbsd") - return "OpenBSD"; - if (platform === "linux") - return "Linux"; - if (platform) - return `Other:${platform}`; - return "Unknown"; - }; - getPlatformHeaders = () => { - return _platformHeaders ?? (_platformHeaders = getPlatformProperties()); - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/request-signal.mjs -function makeCleanup(signal, listener) { - return () => signal.removeEventListener("abort", listener); -} -function registerRequestSignalCleanup(controller, signal, listener) { - cleanups.set(controller, makeCleanup(signal, listener)); -} -function armAbandonmentBackstop(body, controller) { - if (cleanups.has(controller)) - registry?.register(body, controller, controller); -} -function releaseRequestSignal(controller) { - const cleanup = cleanups.get(controller); - if (cleanup) { - cleanups.delete(controller); - registry?.unregister(controller); - cleanup(); - } -} -var cleanups, registry; -var init_request_signal = __esm({ - "node_modules/@anthropic-ai/sdk/internal/request-signal.mjs"() { - cleanups = /* @__PURE__ */ new WeakMap(); - registry = typeof globalThis.FinalizationRegistry === "function" ? new globalThis.FinalizationRegistry((controller) => releaseRequestSignal(controller)) : null; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/shims.mjs -function getDefaultFetch() { - if (typeof fetch !== "undefined") { - return fetch; - } - throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`"); -} -function makeReadableStream(...args) { - const ReadableStream2 = globalThis.ReadableStream; - if (typeof ReadableStream2 === "undefined") { - throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`"); - } - return new ReadableStream2(...args); -} -function ReadableStreamFrom(iterable) { - let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator](); - return makeReadableStream({ - start() { - }, - async pull(controller) { - const { done, value: value2 } = await iter.next(); - if (done) { - controller.close(); - } else { - controller.enqueue(value2); - } - }, - async cancel() { - await iter.return?.(); - } - }); -} -function ReadableStreamToAsyncIterable(stream5) { - if (stream5[Symbol.asyncIterator]) - return stream5; - const reader = stream5.getReader(); - return { - async next() { - try { - const result = await reader.read(); - if (result?.done) - reader.releaseLock(); - return result; - } catch (e) { - reader.releaseLock(); - throw e; - } - }, - async return() { - const cancelPromise = reader.cancel(); - reader.releaseLock(); - await cancelPromise; - return { done: true, value: void 0 }; - }, - [Symbol.asyncIterator]() { - return this; - } - }; -} -async function CancelReadableStream(stream5) { - if (stream5 === null || typeof stream5 !== "object") - return; - if (stream5[Symbol.asyncIterator]) { - await stream5[Symbol.asyncIterator]().return?.(); - return; - } - const reader = stream5.getReader(); - const cancelPromise = reader.cancel(); - reader.releaseLock(); - await cancelPromise; -} -var init_shims = __esm({ - "node_modules/@anthropic-ai/sdk/internal/shims.mjs"() { - } -}); - -// node_modules/@anthropic-ai/sdk/internal/request-options.mjs -var FallbackEncoder; -var init_request_options = __esm({ - "node_modules/@anthropic-ai/sdk/internal/request-options.mjs"() { - FallbackEncoder = ({ headers, body }) => { - return { - bodyHeaders: { - "content-type": "application/json" - }, - body: JSON.stringify(body) - }; - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/qs/formats.mjs -var default_format, default_formatter, formatters, RFC1738; -var init_formats = __esm({ - "node_modules/@anthropic-ai/sdk/internal/qs/formats.mjs"() { - default_format = "RFC3986"; - default_formatter = (v) => String(v); - formatters = { - RFC1738: (v) => String(v).replace(/%20/g, "+"), - RFC3986: default_formatter - }; - RFC1738 = "RFC1738"; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/qs/utils.mjs -function is_buffer(obj2) { - if (!obj2 || typeof obj2 !== "object") { - return false; - } - return !!(obj2.constructor && obj2.constructor.isBuffer && obj2.constructor.isBuffer(obj2)); -} -function maybe_map(val, fn) { - if (isArray(val)) { - const mapped = []; - for (let i = 0; i < val.length; i += 1) { - mapped.push(fn(val[i])); - } - return mapped; - } - return fn(val); -} -var has, hex_table, limit, encode; -var init_utils = __esm({ - "node_modules/@anthropic-ai/sdk/internal/qs/utils.mjs"() { - init_formats(); - init_values(); - has = (obj2, key) => (has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty), has(obj2, key)); - hex_table = /* @__PURE__ */ (() => { - const array = []; - for (let i = 0; i < 256; ++i) { - array.push("%" + ((i < 16 ? "0" : "") + i.toString(16)).toUpperCase()); - } - return array; - })(); - limit = 1024; - encode = (str2, _defaultEncoder, charset, _kind, format) => { - if (str2.length === 0) { - return str2; - } - let string2 = str2; - if (typeof str2 === "symbol") { - string2 = Symbol.prototype.toString.call(str2); - } else if (typeof str2 !== "string") { - string2 = String(str2); - } - if (charset === "iso-8859-1") { - return escape(string2).replace(/%u[0-9a-f]{4}/gi, function($0) { - return "%26%23" + parseInt($0.slice(2), 16) + "%3B"; - }); - } - let out = ""; - for (let j = 0; j < string2.length; j += limit) { - const segment = string2.length >= limit ? string2.slice(j, j + limit) : string2; - const arr2 = []; - for (let i = 0; i < segment.length; ++i) { - let c = segment.charCodeAt(i); - if (c === 45 || // - - c === 46 || // . - c === 95 || // _ - c === 126 || // ~ - c >= 48 && c <= 57 || // 0-9 - c >= 65 && c <= 90 || // a-z - c >= 97 && c <= 122 || // A-Z - format === RFC1738 && (c === 40 || c === 41)) { - arr2[arr2.length] = segment.charAt(i); - continue; - } - if (c < 128) { - arr2[arr2.length] = hex_table[c]; - continue; - } - if (c < 2048) { - arr2[arr2.length] = hex_table[192 | c >> 6] + hex_table[128 | c & 63]; - continue; - } - if (c < 55296 || c >= 57344) { - arr2[arr2.length] = hex_table[224 | c >> 12] + hex_table[128 | c >> 6 & 63] + hex_table[128 | c & 63]; - continue; - } - i += 1; - c = 65536 + ((c & 1023) << 10 | segment.charCodeAt(i) & 1023); - arr2[arr2.length] = hex_table[240 | c >> 18] + hex_table[128 | c >> 12 & 63] + hex_table[128 | c >> 6 & 63] + hex_table[128 | c & 63]; - } - out += arr2.join(""); - } - return out; - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/qs/stringify.mjs -function is_non_nullish_primitive(v) { - return typeof v === "string" || typeof v === "number" || typeof v === "boolean" || typeof v === "symbol" || typeof v === "bigint"; -} -function inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder4, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) { - let obj2 = object; - let tmp_sc = sideChannel; - let step = 0; - let find_flag = false; - while ((tmp_sc = tmp_sc.get(sentinel)) !== void 0 && !find_flag) { - const pos = tmp_sc.get(object); - step += 1; - if (typeof pos !== "undefined") { - if (pos === step) { - throw new RangeError("Cyclic object value"); - } else { - find_flag = true; - } - } - if (typeof tmp_sc.get(sentinel) === "undefined") { - step = 0; - } - } - if (typeof filter === "function") { - obj2 = filter(prefix, obj2); - } else if (obj2 instanceof Date) { - obj2 = serializeDate?.(obj2); - } else if (generateArrayPrefix === "comma" && isArray(obj2)) { - obj2 = maybe_map(obj2, function(value2) { - if (value2 instanceof Date) { - return serializeDate?.(value2); - } - return value2; - }); - } - if (obj2 === null) { - if (strictNullHandling) { - return encoder4 && !encodeValuesOnly ? ( - // @ts-expect-error - encoder4(prefix, defaults.encoder, charset, "key", format) - ) : prefix; - } - obj2 = ""; - } - if (is_non_nullish_primitive(obj2) || is_buffer(obj2)) { - if (encoder4) { - const key_value = encodeValuesOnly ? prefix : encoder4(prefix, defaults.encoder, charset, "key", format); - return [ - formatter?.(key_value) + "=" + // @ts-expect-error - formatter?.(encoder4(obj2, defaults.encoder, charset, "value", format)) - ]; - } - return [formatter?.(prefix) + "=" + formatter?.(String(obj2))]; - } - const values = []; - if (typeof obj2 === "undefined") { - return values; - } - let obj_keys; - if (generateArrayPrefix === "comma" && isArray(obj2)) { - if (encodeValuesOnly && encoder4) { - obj2 = maybe_map(obj2, encoder4); - } - obj_keys = [{ value: obj2.length > 0 ? obj2.join(",") || null : void 0 }]; - } else if (isArray(filter)) { - obj_keys = filter; - } else { - const keys = Object.keys(obj2); - obj_keys = sort ? keys.sort(sort) : keys; - } - const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\./g, "%2E") : String(prefix); - const adjusted_prefix = commaRoundTrip && isArray(obj2) && obj2.length === 1 ? encoded_prefix + "[]" : encoded_prefix; - if (allowEmptyArrays && isArray(obj2) && obj2.length === 0) { - return adjusted_prefix + "[]"; - } - for (let j = 0; j < obj_keys.length; ++j) { - const key = obj_keys[j]; - const value2 = ( - // @ts-ignore - typeof key === "object" && typeof key.value !== "undefined" ? key.value : obj2[key] - ); - if (skipNulls && value2 === null) { - continue; - } - const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\./g, "%2E") : key; - const key_prefix = isArray(obj2) ? typeof generateArrayPrefix === "function" ? generateArrayPrefix(adjusted_prefix, encoded_key) : adjusted_prefix : adjusted_prefix + (allowDots ? "." + encoded_key : "[" + encoded_key + "]"); - sideChannel.set(object, step); - const valueSideChannel = /* @__PURE__ */ new WeakMap(); - valueSideChannel.set(sentinel, sideChannel); - push_to_array(values, inner_stringify( - value2, - key_prefix, - generateArrayPrefix, - commaRoundTrip, - allowEmptyArrays, - strictNullHandling, - skipNulls, - encodeDotInKeys, - // @ts-ignore - generateArrayPrefix === "comma" && encodeValuesOnly && isArray(obj2) ? null : encoder4, - filter, - sort, - allowDots, - serializeDate, - format, - formatter, - encodeValuesOnly, - charset, - valueSideChannel - )); - } - return values; -} -function normalize_stringify_options(opts = defaults) { - if (typeof opts.allowEmptyArrays !== "undefined" && typeof opts.allowEmptyArrays !== "boolean") { - throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided"); - } - if (typeof opts.encodeDotInKeys !== "undefined" && typeof opts.encodeDotInKeys !== "boolean") { - throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided"); - } - if (opts.encoder !== null && typeof opts.encoder !== "undefined" && typeof opts.encoder !== "function") { - throw new TypeError("Encoder has to be a function."); - } - const charset = opts.charset || defaults.charset; - if (typeof opts.charset !== "undefined" && opts.charset !== "utf-8" && opts.charset !== "iso-8859-1") { - throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined"); - } - let format = default_format; - if (typeof opts.format !== "undefined") { - if (!has(formatters, opts.format)) { - throw new TypeError("Unknown format option provided."); - } - format = opts.format; - } - const formatter = formatters[format]; - let filter = defaults.filter; - if (typeof opts.filter === "function" || isArray(opts.filter)) { - filter = opts.filter; - } - let arrayFormat; - if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) { - arrayFormat = opts.arrayFormat; - } else if ("indices" in opts) { - arrayFormat = opts.indices ? "indices" : "repeat"; - } else { - arrayFormat = defaults.arrayFormat; - } - if ("commaRoundTrip" in opts && typeof opts.commaRoundTrip !== "boolean") { - throw new TypeError("`commaRoundTrip` must be a boolean, or absent"); - } - const allowDots = typeof opts.allowDots === "undefined" ? !!opts.encodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots; - return { - addQueryPrefix: typeof opts.addQueryPrefix === "boolean" ? opts.addQueryPrefix : defaults.addQueryPrefix, - // @ts-ignore - allowDots, - allowEmptyArrays: typeof opts.allowEmptyArrays === "boolean" ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays, - arrayFormat, - charset, - charsetSentinel: typeof opts.charsetSentinel === "boolean" ? opts.charsetSentinel : defaults.charsetSentinel, - commaRoundTrip: !!opts.commaRoundTrip, - delimiter: typeof opts.delimiter === "undefined" ? defaults.delimiter : opts.delimiter, - encode: typeof opts.encode === "boolean" ? opts.encode : defaults.encode, - encodeDotInKeys: typeof opts.encodeDotInKeys === "boolean" ? opts.encodeDotInKeys : defaults.encodeDotInKeys, - encoder: typeof opts.encoder === "function" ? opts.encoder : defaults.encoder, - encodeValuesOnly: typeof opts.encodeValuesOnly === "boolean" ? opts.encodeValuesOnly : defaults.encodeValuesOnly, - filter, - format, - formatter, - serializeDate: typeof opts.serializeDate === "function" ? opts.serializeDate : defaults.serializeDate, - skipNulls: typeof opts.skipNulls === "boolean" ? opts.skipNulls : defaults.skipNulls, - // @ts-ignore - sort: typeof opts.sort === "function" ? opts.sort : null, - strictNullHandling: typeof opts.strictNullHandling === "boolean" ? opts.strictNullHandling : defaults.strictNullHandling - }; -} -function stringify(object, opts = {}) { - let obj2 = object; - const options = normalize_stringify_options(opts); - let obj_keys; - let filter; - if (typeof options.filter === "function") { - filter = options.filter; - obj2 = filter("", obj2); - } else if (isArray(options.filter)) { - filter = options.filter; - obj_keys = filter; - } - const keys = []; - if (typeof obj2 !== "object" || obj2 === null) { - return ""; - } - const generateArrayPrefix = array_prefix_generators[options.arrayFormat]; - const commaRoundTrip = generateArrayPrefix === "comma" && options.commaRoundTrip; - if (!obj_keys) { - obj_keys = Object.keys(obj2); - } - if (options.sort) { - obj_keys.sort(options.sort); - } - const sideChannel = /* @__PURE__ */ new WeakMap(); - for (let i = 0; i < obj_keys.length; ++i) { - const key = obj_keys[i]; - if (options.skipNulls && obj2[key] === null) { - continue; - } - push_to_array(keys, inner_stringify( - obj2[key], - key, - // @ts-expect-error - generateArrayPrefix, - commaRoundTrip, - options.allowEmptyArrays, - options.strictNullHandling, - options.skipNulls, - options.encodeDotInKeys, - options.encode ? options.encoder : null, - options.filter, - options.sort, - options.allowDots, - options.serializeDate, - options.format, - options.formatter, - options.encodeValuesOnly, - options.charset, - sideChannel - )); - } - const joined = keys.join(options.delimiter); - let prefix = options.addQueryPrefix === true ? "?" : ""; - if (options.charsetSentinel) { - if (options.charset === "iso-8859-1") { - prefix += "utf8=%26%2310003%3B&"; - } else { - prefix += "utf8=%E2%9C%93&"; - } - } - return joined.length > 0 ? prefix + joined : ""; -} -var array_prefix_generators, push_to_array, toISOString, defaults, sentinel; -var init_stringify = __esm({ - "node_modules/@anthropic-ai/sdk/internal/qs/stringify.mjs"() { - init_utils(); - init_formats(); - init_values(); - array_prefix_generators = { - brackets(prefix) { - return String(prefix) + "[]"; - }, - comma: "comma", - indices(prefix, key) { - return String(prefix) + "[" + key + "]"; - }, - repeat(prefix) { - return String(prefix); - } - }; - push_to_array = function(arr2, value_or_array) { - Array.prototype.push.apply(arr2, isArray(value_or_array) ? value_or_array : [value_or_array]); - }; - defaults = { - addQueryPrefix: false, - allowDots: false, - allowEmptyArrays: false, - arrayFormat: "indices", - charset: "utf-8", - charsetSentinel: false, - delimiter: "&", - encode: true, - encodeDotInKeys: false, - encoder: encode, - encodeValuesOnly: false, - format: default_format, - formatter: default_formatter, - /** @deprecated */ - indices: false, - serializeDate(date) { - return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date); - }, - skipNulls: false, - strictNullHandling: false - }; - sentinel = {}; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/query.mjs -function stringifyQuery(query) { - return stringify(query, { arrayFormat: "brackets" }); -} -var init_query = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/query.mjs"() { - init_stringify(); - } -}); - -// node_modules/@anthropic-ai/sdk/internal/node.browser.mjs -var node_browser_exports = {}; -__export(node_browser_exports, { - child_process: () => child_process, - crypto: () => crypto2, - fs: () => fs, - os: () => os, - path: () => path, - stream: () => stream, - util: () => util -}); -function unavailable(module) { - return new Proxy({}, { - get(_target, property) { - if (typeof property === "symbol") - return void 0; - throw new AnthropicError(`\`${module}.${property}\` is not available in this environment; it needs a Node.js-compatible runtime`); - } - }); -} -var child_process, crypto2, fs, os, path, stream, util; -var init_node_browser = __esm({ - "node_modules/@anthropic-ai/sdk/internal/node.browser.mjs"() { - init_error(); - child_process = /* @__PURE__ */ unavailable("child_process"); - crypto2 = /* @__PURE__ */ unavailable("crypto"); - fs = /* @__PURE__ */ unavailable("fs"); - os = /* @__PURE__ */ unavailable("os"); - path = /* @__PURE__ */ unavailable("path"); - stream = /* @__PURE__ */ unavailable("stream"); - util = /* @__PURE__ */ unavailable("util"); - } -}); - -// node_modules/@anthropic-ai/sdk/lib/credentials/types.mjs -function requireSecureTokenEndpoint(baseURL) { - if (!baseURL) - return; - let u; - try { - u = new URL(baseURL); - } catch (err) { - throw new WorkloadIdentityError(`Invalid token endpoint base URL "${baseURL}": ${err}`); - } - if (u.protocol === "https:") - return; - const host = u.hostname.toLowerCase().replace(/^\[|\]$/g, ""); - if (u.protocol === "http:" && (host === "localhost" || host === "127.0.0.1" || host === "::1")) { - return; - } - throw new WorkloadIdentityError(`Refusing to send credential over non-https token endpoint "${baseURL}"`); -} -async function parseTokenResponse(resp, requestId) { - const text = await readLimitedText(resp); - let data; - try { - data = JSON.parse(text); - } catch { - throw new WorkloadIdentityError(`Token endpoint returned non-JSON response (status ${resp.status})`, resp.status, redactSensitive(text), requestId); - } - if (!data.access_token) { - throw new WorkloadIdentityError(`Token endpoint response missing access_token: ${JSON.stringify(redactSensitive(data))}`, resp.status, redactSensitive(data), requestId); - } - if (data.token_type && data.token_type.toLowerCase() !== "bearer") { - throw new WorkloadIdentityError(`Token endpoint response: unsupported token_type "${data.token_type}" (want Bearer)`, resp.status, redactSensitive(data), requestId); - } - return data; -} -function redactSensitive(body) { - if (body == null) - return body; - if (typeof body === "string") { - let parsed; - try { - parsed = JSON.parse(body); - } catch { - if (body.length <= MAX_ERROR_BODY_CHARS) - return body; - return body.slice(0, MAX_ERROR_BODY_CHARS) + `... <${body.length - MAX_ERROR_BODY_CHARS} more chars>`; - } - return JSON.stringify(redactSensitive(parsed)); - } - if (typeof body === "object" && !Array.isArray(body)) { - const out = {}; - for (const [k, v] of Object.entries(body)) { - if (SAFE_ERROR_KEYS.has(k)) - out[k] = v; - } - return out; - } - return null; -} -async function checkCredentialsFileSafety(path5, onWarn = (m) => console.warn(`anthropic-sdk: ${m}`)) { - if (typeof process === "undefined" || process.platform === "win32") - return; - const { fs: fs3 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); - let resolved = path5; - let st; - try { - resolved = await fs3.promises.realpath(path5); - st = await fs3.promises.stat(resolved); - } catch { - return; - } - const mode = st.mode & 511; - if (mode & 18) { - throw new WorkloadIdentityError(`Credentials file at ${resolved} is group/world-writable (mode 0o${mode.toString(8)}); this allows other local users to plant tokens. Run \`chmod 600 ${resolved}\`.`); - } - if (mode & 36) { - throw new WorkloadIdentityError(`Credentials file at ${resolved} is group/world-readable (mode 0o${mode.toString(8)}); run \`chmod 600 ${resolved}\` before retrying.`); - } - if (typeof process.getuid === "function" && st.uid !== process.getuid()) { - onWarn(`credentials file at ${resolved} is owned by uid ${st.uid} (current process uid ${process.getuid()}); verify this is intentional.`); - } -} -async function writeCredentialsFileAtomic(targetPath, data) { - const { fs: fs3, path: path5 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); - const dir = path5.dirname(targetPath); - await fs3.promises.mkdir(dir, { recursive: true, mode: 448 }); - const tmpPath = `${targetPath}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`; - try { - const fh = await fs3.promises.open(tmpPath, "w", 384); - try { - await fh.writeFile(JSON.stringify(data, null, 2)); - await fh.sync(); - } finally { - await fh.close(); - } - await fs3.promises.rename(tmpPath, targetPath); - } catch (err) { - await fs3.promises.unlink(tmpPath).catch(() => { - }); - throw err; - } - try { - const dirFh = await fs3.promises.open(dir, "r"); - try { - await dirFh.sync(); - } finally { - await dirFh.close(); - } - } catch { - } -} -async function readLimitedText(resp) { - if (!resp.body) { - return ""; - } - const reader = resp.body.getReader(); - const chunks = []; - let received = 0; - for (; ; ) { - const { done, value: value2 } = await reader.read(); - if (done) - break; - if (received + value2.length > MAX_TOKEN_RESPONSE_BYTES) { - const remaining = MAX_TOKEN_RESPONSE_BYTES - received; - if (remaining > 0) - chunks.push(value2.subarray(0, remaining)); - await reader.cancel(); - break; - } - chunks.push(value2); - received += value2.length; - } - let merged; - if (chunks.length === 1) { - merged = chunks[0]; - } else { - merged = new Uint8Array(chunks.reduce((n, c) => n + c.length, 0)); - let offset = 0; - for (const c of chunks) { - merged.set(c, offset); - offset += c.length; - } - } - return new TextDecoder("utf-8").decode(merged); -} -var GRANT_TYPE_JWT_BEARER, GRANT_TYPE_REFRESH_TOKEN, TOKEN_ENDPOINT, OAUTH_API_BETA_HEADER, FEDERATION_BETA_HEADER, ADVISORY_REFRESH_THRESHOLD_IN_SECONDS, MANDATORY_REFRESH_THRESHOLD_IN_SECONDS, ADVISORY_REFRESH_BACKOFF_IN_SECONDS, MAX_TOKEN_RESPONSE_BYTES, MAX_ERROR_BODY_CHARS, SAFE_ERROR_KEYS, WorkloadIdentityError; -var init_types = __esm({ - "node_modules/@anthropic-ai/sdk/lib/credentials/types.mjs"() { - init_error(); - GRANT_TYPE_JWT_BEARER = "urn:ietf:params:oauth:grant-type:jwt-bearer"; - GRANT_TYPE_REFRESH_TOKEN = "refresh_token"; - TOKEN_ENDPOINT = "/v1/oauth/token"; - OAUTH_API_BETA_HEADER = "oauth-2025-04-20"; - FEDERATION_BETA_HEADER = "oidc-federation-2026-04-01"; - ADVISORY_REFRESH_THRESHOLD_IN_SECONDS = 120; - MANDATORY_REFRESH_THRESHOLD_IN_SECONDS = 30; - ADVISORY_REFRESH_BACKOFF_IN_SECONDS = 5; - MAX_TOKEN_RESPONSE_BYTES = 1 << 20; - MAX_ERROR_BODY_CHARS = 2e3; - SAFE_ERROR_KEYS = /* @__PURE__ */ new Set(["error", "error_description", "error_uri"]); - WorkloadIdentityError = class extends AnthropicError { - constructor(message, statusCode = null, body = null, requestId = null) { - super(message); - this.statusCode = statusCode; - this.body = body; - this.requestId = requestId; - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/time.mjs -function nowAsSeconds() { - return Math.floor(Date.now() / 1e3); -} -var init_time = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/time.mjs"() { - } -}); - -// node_modules/@anthropic-ai/sdk/lib/credentials/token-cache.mjs -var TokenCache; -var init_token_cache = __esm({ - "node_modules/@anthropic-ai/sdk/lib/credentials/token-cache.mjs"() { - init_types(); - init_time(); - TokenCache = class { - constructor(provider2, onAdvisoryRefreshError) { - this.cached = null; - this.pendingRefresh = null; - this.nextForce = false; - this.lastAdvisoryError = 0; - this.provider = provider2; - this.onAdvisoryRefreshError = onAdvisoryRefreshError; - } - async getToken() { - const force = this.nextForce; - this.nextForce = false; - const cached = this.cached; - if (force || cached == null) { - const token2 = await this.refresh(force); - return token2.token; - } - if (cached.expiresAt == null) { - return cached.token; - } - const remaining = cached.expiresAt - nowAsSeconds(); - if (remaining > ADVISORY_REFRESH_THRESHOLD_IN_SECONDS) { - return cached.token; - } - if (remaining > MANDATORY_REFRESH_THRESHOLD_IN_SECONDS) { - this.backgroundRefresh(); - return cached.token; - } - const token = await this.refresh(); - return token.token; - } - /** - * Clears the cached token and marks the next {@link getToken} as a forced - * refresh, so the underlying provider bypasses any on-disk freshness check. - * Called after a 401 — the server has just told us the token is bad even - * if its `expires_at` still looks fresh. - */ - invalidate() { - this.cached = null; - this.nextForce = true; - } - /** - * Mandatory refresh. Joins any in-flight refresh unless forced — a forced - * refresh must not coalesce into a non-forced one that may re-serve the - * same stale disk token. - */ - refresh(force = false) { - if (this.pendingRefresh && !force) { - return this.pendingRefresh; - } - return this.doRefresh(force); - } - /** - * Advisory background refresh. Shares the same in-flight promise as - * mandatory refreshes for deduplication, but swallows errors so the - * stale cached token keeps being served. Backs off for - * {@link ADVISORY_REFRESH_BACKOFF_IN_SECONDS} after a failure so an - * outage during the advisory window doesn't hammer the token endpoint. - */ - backgroundRefresh() { - if (this.pendingRefresh) { - return; - } - if (nowAsSeconds() - this.lastAdvisoryError < ADVISORY_REFRESH_BACKOFF_IN_SECONDS) { - return; - } - this.doRefresh().catch((err) => { - this.lastAdvisoryError = nowAsSeconds(); - this.onAdvisoryRefreshError?.(err); - }); - } - /** - * Core refresh. Sets {@link pendingRefresh} so concurrent callers - * (both advisory and mandatory) coalesce into a single provider call. - */ - doRefresh(force = false) { - this.pendingRefresh = this.provider(force ? { forceRefresh: true } : void 0).then((token) => { - this.cached = token; - this.pendingRefresh = null; - return token; - }, (err) => { - this.pendingRefresh = null; - throw err; - }); - return this.pendingRefresh; - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/env.mjs -var readEnv; -var init_env = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/env.mjs"() { - readEnv = (env) => { - if (typeof globalThis.process !== "undefined") { - return globalThis.process.env?.[env]?.trim() || void 0; - } - if (typeof globalThis.Deno !== "undefined") { - return globalThis.Deno.env?.get?.(env)?.trim() || void 0; - } - return void 0; - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/bytes.mjs -function concatBytes(buffers) { - let length = 0; - for (const buffer of buffers) { - length += buffer.length; - } - const output = new Uint8Array(length); - let index = 0; - for (const buffer of buffers) { - output.set(buffer, index); - index += buffer.length; - } - return output; -} -function encodeUTF8(str2) { - let encoder4; - return (encodeUTF8_ ?? (encoder4 = new globalThis.TextEncoder(), encodeUTF8_ = encoder4.encode.bind(encoder4)))(str2); -} -function decodeUTF8(bytes2) { - let decoder3; - return (decodeUTF8_ ?? (decoder3 = new globalThis.TextDecoder(), decodeUTF8_ = decoder3.decode.bind(decoder3)))(bytes2); -} -var encodeUTF8_, decodeUTF8_; -var init_bytes = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/bytes.mjs"() { - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/base64.mjs -var fromBase64; -var init_base64 = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/base64.mjs"() { - init_error(); - fromBase64 = (str2) => { - if (typeof globalThis.Buffer !== "undefined") { - const buf = globalThis.Buffer.from(str2, "base64"); - return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength); - } - if (typeof atob !== "undefined") { - const bstr = atob(str2); - const buf = new Uint8Array(bstr.length); - for (let i = 0; i < bstr.length; i++) { - buf[i] = bstr.charCodeAt(i); - } - return buf; - } - throw new AnthropicError("Cannot decode base64 string; Expected `Buffer` or `atob` to be defined"); - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/log.mjs -function noop() { -} -function makeLogFn(fnLevel, logger, logLevel) { - if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) { - return noop; - } else { - return logger[fnLevel].bind(logger); - } -} -function filterLogger(logger, logLevel) { - const cachedLogger = cachedLoggers.get(logger); - if (cachedLogger && cachedLogger[0] === logLevel) { - return cachedLogger[1]; - } - const levelLogger = { - error: makeLogFn("error", logger, logLevel), - warn: makeLogFn("warn", logger, logLevel), - info: makeLogFn("info", logger, logLevel), - debug: makeLogFn("debug", logger, logLevel) - }; - cachedLoggers.set(logger, [logLevel, levelLogger]); - return levelLogger; -} -function loggerFor(client) { - const logger = client.logger; - const logLevel = client.logLevel ?? "off"; - if (!logger) { - return noopLogger; - } - return filterLogger(logger, logLevel); -} -function defaultLogger() { - const envLevel = readEnv("ANTHROPIC_LOG"); - if (!cachedDefaultLogger || envLevel !== lastEnvLevel) { - lastEnvLevel = envLevel; - cachedDefaultLogger = filterLogger(console, parseLogLevel(envLevel, "process.env['ANTHROPIC_LOG']", filterLogger(console, defaultLogLevel)) ?? defaultLogLevel); - } - return cachedDefaultLogger; -} -function debugLogRequestDetails(logger, message, details) { - if (logger.debug === noop) { - return; - } - logger.debug(message, formatRequestDetails(details)); -} -var defaultLogLevel, levelNumbers, parseLogLevel, noopLogger, cachedLoggers, lastEnvLevel, cachedDefaultLogger, formatRequestDetails; -var init_log = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/log.mjs"() { - init_values(); - init_env(); - defaultLogLevel = "warn"; - levelNumbers = { - off: 0, - error: 200, - warn: 300, - info: 400, - debug: 500 - }; - parseLogLevel = (maybeLevel, sourceName, logger) => { - if (!maybeLevel) { - return void 0; - } - if (hasOwn(levelNumbers, maybeLevel)) { - return maybeLevel; - } - logger.warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`); - return void 0; - }; - noopLogger = { - error: noop, - warn: noop, - info: noop, - debug: noop - }; - cachedLoggers = /* @__PURE__ */ new WeakMap(); - formatRequestDetails = (details) => { - if (details.options) { - details.options = { ...details.options }; - delete details.options["headers"]; - } - if (details.headers) { - details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value2]) => [ - name, - name.toLowerCase() === "authorization" || name.toLowerCase() === "api-key" || name.toLowerCase() === "x-api-key" || name.toLowerCase() === "cookie" || name.toLowerCase() === "set-cookie" ? "***" : value2 - ])); - } - if ("retryOfRequestLogID" in details) { - if (details.retryOfRequestLogID) { - details.retryOf = details.retryOfRequestLogID; - } - delete details.retryOfRequestLogID; - } - return details; - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/uuid.mjs +// node_modules/openai/internal/utils/uuid.mjs var uuid4; var init_uuid = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/uuid.mjs"() { + "node_modules/openai/internal/utils/uuid.mjs"() { uuid4 = function() { const { crypto: crypto3 } = globalThis; if (crypto3?.randomUUID) { @@ -3261,16466 +1910,16 @@ var init_uuid = __esm({ } }); -// node_modules/@anthropic-ai/sdk/internal/utils.mjs -var init_utils2 = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils.mjs"() { - init_values(); - init_base64(); - init_env(); - init_log(); - init_uuid(); - init_sleep(); - init_query(); - } -}); - -// node_modules/@anthropic-ai/sdk/core/credentials.mjs -function validateProfileName(name) { - if (!name) { - throw new Error("profile name is empty"); - } - if (name === "." || name === "..") { - throw new Error(`profile name "${name}" is not allowed`); - } - if (name.includes("/") || name.includes("\\")) { - throw new Error(`profile name "${name}" must not contain path separators`); - } - if (!PROFILE_NAME_PATTERN.test(name)) { - throw new Error(`profile name "${name}" contains disallowed characters (allowed: letters, digits, '_', '.', '-')`); - } -} -var CREDENTIALS_FILE_VERSION, PROFILE_NAME_PATTERN, loadConfigWithSource, getCredentialsPath, getRootConfigPath, supportsLocalConfigFiles, getActiveProfileName; -var init_credentials = __esm({ - "node_modules/@anthropic-ai/sdk/core/credentials.mjs"() { - init_detect_platform(); - init_utils2(); - CREDENTIALS_FILE_VERSION = "1.0"; - PROFILE_NAME_PATTERN = /^[A-Za-z0-9_.-]+$/; - loadConfigWithSource = async (profile) => { - var _a6, _b; - const rootConfigPath = await getRootConfigPath(); - if (rootConfigPath === null) { - return null; - } - const profileName = profile ?? await getActiveProfileName(); - if (profileName === null) { - return null; - } - validateProfileName(profileName); - const { fs: fs3, path: path5 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); - const configPath = path5.join(rootConfigPath, "configs", `${profileName}.json`); - let configRaw; - try { - configRaw = await fs3.promises.readFile(configPath, "utf-8"); - } catch (err) { - if (err?.code !== "ENOENT") { - throw new Error(`failed to read config file ${configPath}: ${err}`); - } - configRaw = null; - } - if (configRaw === null) { - const organizationId = readEnv("ANTHROPIC_ORGANIZATION_ID"); - const identityTokenFile = readEnv("ANTHROPIC_IDENTITY_TOKEN_FILE"); - const federationRuleId = readEnv("ANTHROPIC_FEDERATION_RULE_ID"); - if (federationRuleId && organizationId) { - return { - fromFile: false, - config: { - organization_id: organizationId, - // A defaulted-but-empty CI variable (`ANTHROPIC_WORKSPACE_ID=""`) is - // treated as unset — readEnv coerces empty to undefined, and the body - // builder's truthy check skips it — so `"workspace_id": ""` never goes - // on the wire. - workspace_id: readEnv("ANTHROPIC_WORKSPACE_ID"), - base_url: readEnv("ANTHROPIC_BASE_URL"), - authentication: { - type: "oidc_federation", - federation_rule_id: federationRuleId, - service_account_id: readEnv("ANTHROPIC_SERVICE_ACCOUNT_ID"), - identity_token: identityTokenFile ? { source: "file", path: identityTokenFile } : void 0, - scope: readEnv("ANTHROPIC_SCOPE") - } - } - }; - } - return null; - } - let config2; - try { - config2 = JSON.parse(configRaw); - } catch (err) { - throw new Error(`failed to parse config file ${configPath}: ${err}`); - } - if (!config2.authentication) { - throw new Error(`config file ${configPath} is missing "authentication"`); - } - const authType = config2.authentication.type; - if (authType !== "oidc_federation" && authType !== "user_oauth") { - throw new Error(`authentication.type "${authType}" is not a known authentication type`); - } - config2.organization_id ?? (config2.organization_id = readEnv("ANTHROPIC_ORGANIZATION_ID")); - config2.workspace_id ?? (config2.workspace_id = readEnv("ANTHROPIC_WORKSPACE_ID")); - config2.base_url ?? (config2.base_url = readEnv("ANTHROPIC_BASE_URL")); - (_a6 = config2.authentication).scope ?? (_a6.scope = readEnv("ANTHROPIC_SCOPE")); - if (config2.authentication.type === "oidc_federation") { - if (!config2.authentication.identity_token) { - const identityTokenFile = readEnv("ANTHROPIC_IDENTITY_TOKEN_FILE"); - if (identityTokenFile) { - config2.authentication.identity_token = { - source: "file", - path: identityTokenFile - }; - } - } - if (!config2.authentication.federation_rule_id) { - config2.authentication.federation_rule_id = readEnv("ANTHROPIC_FEDERATION_RULE_ID") ?? ""; - } - (_b = config2.authentication).service_account_id ?? (_b.service_account_id = readEnv("ANTHROPIC_SERVICE_ACCOUNT_ID")); - } - return { config: config2, fromFile: true }; - }; - getCredentialsPath = async (config2, profile) => { - if (config2?.authentication.credentials_path) { - return config2.authentication.credentials_path; - } - const rootConfigPath = await getRootConfigPath(); - if (!rootConfigPath) { - return null; - } - const profileName = profile ?? await getActiveProfileName(); - if (!profileName) { - return null; - } - validateProfileName(profileName); - const { path: path5 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); - return path5.join(rootConfigPath, "credentials", `${profileName}.json`); - }; - getRootConfigPath = async () => { - if (!supportsLocalConfigFiles()) { - return null; - } - const { path: path5 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); - const configDir = readEnv("ANTHROPIC_CONFIG_DIR"); - if (configDir) { - return configDir; - } - const os2 = getPlatformHeaders()["X-Stainless-OS"]; - if (os2 === "Windows") { - const appData = readEnv("APPDATA"); - if (appData) { - return path5.join(appData, "Anthropic"); - } - const userProfile = readEnv("USERPROFILE"); - if (userProfile) { - return path5.join(userProfile, "AppData", "Roaming", "Anthropic"); - } - return null; - } - const xdgConfigHome = readEnv("XDG_CONFIG_HOME"); - if (xdgConfigHome) { - return path5.join(xdgConfigHome, "anthropic"); - } - const home = readEnv("HOME"); - if (home) { - return path5.join(home, ".config", "anthropic"); - } - return null; - }; - supportsLocalConfigFiles = () => { - const runtime = getPlatformHeaders()["X-Stainless-Runtime"]; - return runtime === "node" || runtime === "deno"; - }; - getActiveProfileName = async () => { - const rootConfigPath = await getRootConfigPath(); - if (!rootConfigPath) { - return null; - } - const profileName = readEnv("ANTHROPIC_PROFILE"); - if (profileName) { - return profileName; - } - const { fs: fs3, path: path5 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); - const filePath = path5.join(rootConfigPath, "active_config"); - try { - return (await fs3.promises.readFile(filePath, "utf-8")).trim() || "default"; - } catch (err) { - if (err?.code !== "ENOENT") { - throw new Error(`failed to read ${filePath}: ${err}`); - } - return "default"; - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/lib/credentials/identity-token.mjs -function identityTokenFromFile(path5) { - if (!path5) { - throw new AnthropicError("Identity token file path is empty"); - } - return async () => { - const { fs: fs3 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); - let content; - try { - content = await fs3.promises.readFile(path5, "utf-8"); - } catch (err) { - throw new AnthropicError(`Failed to read identity token file at ${path5}: ${err}`); - } - const token = content.trim(); - if (!token) { - throw new AnthropicError(`Identity token file at ${path5} is empty`); - } - return token; - }; -} -function identityTokenFromValue(token) { - if (!token) { - throw new AnthropicError("Identity token value is empty"); - } - return () => token; -} -var init_identity_token = __esm({ - "node_modules/@anthropic-ai/sdk/lib/credentials/identity-token.mjs"() { - init_error(); - } -}); - -// node_modules/@anthropic-ai/sdk/lib/credentials/oidc-federation.mjs -function oidcFederationProvider(config2) { - return async () => { - requireSecureTokenEndpoint(config2.baseURL); - const jwt = await config2.identityTokenProvider(); - if (jwt.length > 16 * 1024) { - throw new WorkloadIdentityError(`Identity token is ${Math.ceil(jwt.length / 1024)} KiB, exceeds the 16 KiB assertion limit`); - } - const body = { - grant_type: GRANT_TYPE_JWT_BEARER, - assertion: jwt, - federation_rule_id: config2.federationRuleId, - organization_id: config2.organizationId - }; - if (config2.serviceAccountId) { - body["service_account_id"] = config2.serviceAccountId; - } - if (config2.workspaceId) { - body["workspace_id"] = config2.workspaceId; - } - const url = `${config2.baseURL}${TOKEN_ENDPOINT}`; - let resp; - try { - resp = await config2.fetch(url, { - method: "POST", - headers: { - "Content-Type": "application/json", - "anthropic-beta": `${OAUTH_API_BETA_HEADER},${FEDERATION_BETA_HEADER}`, - "User-Agent": config2.userAgent || `anthropic-sdk-typescript/${VERSION} oidcFederationProvider` - }, - body: JSON.stringify(body) - }); - } catch (err) { - throw new WorkloadIdentityError(`Failed to reach token endpoint ${url}: ${err}`); - } - const requestId = resp.headers.get("Request-Id"); - if (!resp.ok) { - const text = await resp.text().catch(() => ""); - const redacted = redactSensitive(text); - let hint = ""; - if (resp.status === 401) { - const hintMiddle = config2.workspaceId ? "" : "If your federation rule is scoped to multiple workspaces, set the ANTHROPIC_WORKSPACE_ID environment variable, the 'workspace_id' config key, or the `workspaceId` option. "; - hint = ` Ensure your federation rule matches your identity token. ${hintMiddle}View your authentication events in the Workload identity page of Claude Console for more details.`; - } - throw new WorkloadIdentityError(`Token exchange failed with status ${resp.status}${requestId ? ` (request-id ${requestId})` : ""}: ${redacted}${hint}`, resp.status, redacted, requestId); - } - const data = await parseTokenResponse(resp, requestId); - const expiresIn = Number(data.expires_in); - if (!Number.isFinite(expiresIn)) { - throw new WorkloadIdentityError(`Token endpoint response missing required fields: ${JSON.stringify(redactSensitive(data))}`, resp.status, redactSensitive(data), requestId); - } - return { - token: data.access_token, - expiresAt: nowAsSeconds() + expiresIn - }; - }; -} -var init_oidc_federation = __esm({ - "node_modules/@anthropic-ai/sdk/lib/credentials/oidc-federation.mjs"() { - init_types(); - init_time(); - init_version2(); - } -}); - -// node_modules/@anthropic-ai/sdk/lib/credentials/user-oauth.mjs -function userOAuthProvider(config2) { - return async (opts) => { - const { fs: fs3 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); - await checkCredentialsFileSafety(config2.credentialsPath, config2.onSafetyWarning); - let raw; - try { - raw = await fs3.promises.readFile(config2.credentialsPath, "utf-8"); - } catch (err) { - throw new WorkloadIdentityError(`Credentials file not found at ${config2.credentialsPath}: ${err}`); - } - let creds; - try { - creds = JSON.parse(raw); - } catch (err) { - throw new WorkloadIdentityError(`Credentials file at ${config2.credentialsPath} is not valid JSON: ${err}`); - } - const accessToken = creds.access_token; - if (!accessToken) { - throw new WorkloadIdentityError(`Credentials file at ${config2.credentialsPath} must include 'access_token'`); - } - const expiresAt = creds.expires_at; - if (!opts?.forceRefresh && (expiresAt == null || nowAsSeconds() < expiresAt - MANDATORY_REFRESH_THRESHOLD_IN_SECONDS)) { - return { token: accessToken, expiresAt: expiresAt ?? null }; - } - const refreshToken = creds.refresh_token; - if (!config2.clientId || !refreshToken) { - throw new WorkloadIdentityError(`Access token at ${config2.credentialsPath} has expired and no refresh is available (client_id ${config2.clientId ? "set" : "empty"}, refresh_token ${refreshToken ? "set" : "empty"})`); - } - requireSecureTokenEndpoint(config2.baseURL); - const body = { - grant_type: GRANT_TYPE_REFRESH_TOKEN, - refresh_token: refreshToken, - client_id: config2.clientId - }; - const url = `${config2.baseURL}${TOKEN_ENDPOINT}`; - let resp; - try { - resp = await config2.fetch(url, { - method: "POST", - headers: { - "Content-Type": "application/json", - "anthropic-beta": OAUTH_API_BETA_HEADER, - "User-Agent": config2.userAgent || `anthropic-sdk-typescript/${VERSION} userOAuthProvider` - }, - body: JSON.stringify(body) - }); - } catch (err) { - throw new WorkloadIdentityError(`User OAuth refresh failed to reach token endpoint: ${err}`); - } - const requestId = resp.headers.get("Request-Id"); - if (!resp.ok) { - const text = await resp.text().catch(() => ""); - throw new WorkloadIdentityError(`User OAuth refresh failed (HTTP ${resp.status}): ${redactSensitive(text)}`, resp.status, redactSensitive(text), requestId); - } - const data = await parseTokenResponse(resp, requestId); - const expiresIn = Number(data.expires_in); - if (!Number.isFinite(expiresIn)) { - throw new WorkloadIdentityError(`User OAuth refresh response missing or invalid expires_in: ${JSON.stringify(redactSensitive(data))}`, resp.status, redactSensitive(data), requestId); - } - const newExpiresAt = nowAsSeconds() + expiresIn; - const newRefreshToken = data.refresh_token || refreshToken; - await writeCredentialsFileAtomic(config2.credentialsPath, { - ...creds, - version: CREDENTIALS_FILE_VERSION, - type: "oauth_token", - access_token: data.access_token, - expires_at: newExpiresAt, - refresh_token: newRefreshToken - }); - return { token: data.access_token, expiresAt: newExpiresAt }; - }; -} -var init_user_oauth = __esm({ - "node_modules/@anthropic-ai/sdk/lib/credentials/user-oauth.mjs"() { - init_credentials(); - init_types(); - init_time(); - init_version2(); - } -}); - -// node_modules/@anthropic-ai/sdk/lib/credentials/credential-chain.mjs -function resolveCredentialsFromConfig(config2, options) { - const credentialsPath = config2.authentication.credentials_path ?? null; - const effectiveBaseURL = (config2.base_url || options.baseURL).replace(/\/+$/, ""); - const provider2 = buildProvider(config2, credentialsPath, effectiveBaseURL, options); - const extraHeaders = {}; - if (config2.workspace_id && config2.authentication.type === "user_oauth") { - extraHeaders["anthropic-workspace-id"] = config2.workspace_id; - } - return { provider: provider2, extraHeaders, baseURL: config2.base_url || void 0 }; -} -async function defaultCredentials(options, profile) { - const loaded = await loadConfigWithSource(profile); - if (!loaded) { - return null; - } - const { config: config2, fromFile } = loaded; - const withPath = config2.authentication.credentials_path || !fromFile ? config2 : { - ...config2, - authentication: { - ...config2.authentication, - credentials_path: await getCredentialsPath(config2, profile) ?? void 0 - } - }; - return resolveCredentialsFromConfig(withPath, options); -} -function buildProvider(config2, credentialsPath, baseURL, options) { - switch (config2.authentication.type) { - case "oidc_federation": { - const auth = config2.authentication; - const identityProvider = resolveIdentityTokenProvider(auth); - if (!identityProvider) { - throw new WorkloadIdentityError("oidc_federation config requires an identity token (set authentication.identity_token, ANTHROPIC_IDENTITY_TOKEN_FILE, or ANTHROPIC_IDENTITY_TOKEN)"); - } - if (!auth.federation_rule_id) { - throw new WorkloadIdentityError("oidc_federation config requires 'federation_rule_id'. Set it in authentication.federation_rule_id in your profile, or via ANTHROPIC_FEDERATION_RULE_ID (profile takes precedence)."); - } - if (!config2.organization_id) { - throw new WorkloadIdentityError("oidc_federation config requires organization_id (set ANTHROPIC_ORGANIZATION_ID or config.organization_id)"); - } - const exchange = oidcFederationProvider({ - identityTokenProvider: identityProvider, - federationRuleId: auth.federation_rule_id, - organizationId: config2.organization_id, - serviceAccountId: auth.service_account_id, - workspaceId: config2.workspace_id, - baseURL, - fetch: options.fetch, - userAgent: options.userAgent - }); - if (credentialsPath) { - return cachedExchangeProvider(exchange, credentialsPath, options.onCacheWriteError, options.onSafetyWarning); - } - return exchange; - } - case "user_oauth": { - if (!credentialsPath) { - throw new WorkloadIdentityError("user_oauth config requires authentication.credentials_path (or load via a profile so it defaults to /credentials/.json)"); - } - return userOAuthProvider({ - credentialsPath, - clientId: config2.authentication.client_id, - baseURL, - fetch: options.fetch, - userAgent: options.userAgent, - onSafetyWarning: options.onSafetyWarning - }); - } - default: { - const t = config2.authentication.type; - throw new WorkloadIdentityError(`authentication.type "${t}" is not a known authentication type`); - } - } -} -function resolveIdentityTokenProvider(auth) { - if (auth.identity_token) { - const source = auth.identity_token.source; - if (source !== "file") { - throw new WorkloadIdentityError(`identity_token.source "${source}" is not supported by this SDK version (only "file")`); - } - if (!auth.identity_token.path) { - throw new WorkloadIdentityError(`identity_token.source "file" requires a non-empty path`); - } - return identityTokenFromFile(auth.identity_token.path); - } - const tokenFile = readEnv("ANTHROPIC_IDENTITY_TOKEN_FILE"); - if (tokenFile) { - return identityTokenFromFile(tokenFile); - } - const tokenValue = readEnv("ANTHROPIC_IDENTITY_TOKEN"); - if (tokenValue) { - return identityTokenFromValue(tokenValue); - } - return null; -} -function cachedExchangeProvider(exchange, credentialsPath, onCacheWriteError, onSafetyWarning) { - return async (opts) => { - const { fs: fs3 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); - await checkCredentialsFileSafety(credentialsPath, onSafetyWarning); - let existing; - try { - const raw = await fs3.promises.readFile(credentialsPath, "utf-8"); - existing = JSON.parse(raw); - const token = existing?.["access_token"]; - if (token && !opts?.forceRefresh) { - const expiresAt = existing?.["expires_at"]; - if (expiresAt == null || nowAsSeconds() < expiresAt - MANDATORY_REFRESH_THRESHOLD_IN_SECONDS) { - return { token, expiresAt: expiresAt ?? null }; - } - } - } catch (err) { - const code = err?.code; - if (code !== "ENOENT" && !(err instanceof SyntaxError)) { - onCacheWriteError?.(err); - } - } - const result = await exchange(opts); - try { - await writeCredentialsFileAtomic(credentialsPath, { - ...existing ?? {}, - version: CREDENTIALS_FILE_VERSION, - type: "oauth_token", - access_token: result.token, - expires_at: result.expiresAt - }); - } catch (err) { - onCacheWriteError?.(err); - } - return result; - }; -} -var init_credential_chain = __esm({ - "node_modules/@anthropic-ai/sdk/lib/credentials/credential-chain.mjs"() { - init_env(); - init_credentials(); - init_types(); - init_time(); - init_identity_token(); - init_oidc_federation(); - init_user_oauth(); - } -}); - -// node_modules/@anthropic-ai/sdk/internal/decoders/line.mjs -function findNewlineIndex(buffer, startIndex) { - const newline = 10; - const carriage = 13; - for (let i = startIndex ?? 0; i < buffer.length; i++) { - if (buffer[i] === newline) { - return { preceding: i, index: i + 1, carriage: false }; - } - if (buffer[i] === carriage) { - return { preceding: i, index: i + 1, carriage: true }; - } - } - return null; -} -var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex, LineDecoder; -var init_line = __esm({ - "node_modules/@anthropic-ai/sdk/internal/decoders/line.mjs"() { - init_tslib(); - init_bytes(); - LineDecoder = /* @__PURE__ */ (() => { - class LineDecoder3 { - constructor() { - _LineDecoder_buffer.set(this, void 0); - _LineDecoder_carriageReturnIndex.set(this, void 0); - __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), "f"); - __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, "f"); - } - decode(chunk) { - if (chunk == null) { - return []; - } - const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk) : typeof chunk === "string" ? encodeUTF8(chunk) : chunk; - __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, "f"), binaryChunk]), "f"); - const lines2 = []; - let patternIndex; - while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, "f"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f"))) != null) { - if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") == null) { - __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, "f"); - continue; - } - if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") != null && (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") + 1 || patternIndex.carriage)) { - lines2.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, "f").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") - 1))); - __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, "f").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f")), "f"); - __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, "f"); - continue; - } - const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, "f") !== null ? patternIndex.preceding - 1 : patternIndex.preceding; - const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, "f").subarray(0, endIndex)); - lines2.push(line); - __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, "f").subarray(patternIndex.index), "f"); - __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, "f"); - } - return lines2; - } - flush() { - if (!__classPrivateFieldGet(this, _LineDecoder_buffer, "f").length) { - return []; - } - return this.decode("\n"); - } - } - _LineDecoder_buffer = /* @__PURE__ */ new WeakMap(), _LineDecoder_carriageReturnIndex = /* @__PURE__ */ new WeakMap(); - LineDecoder3.NEWLINE_CHARS = /* @__PURE__ */ new Set(["\n", "\r"]); - LineDecoder3.NEWLINE_REGEXP = /\r\n|[\n\r]/g; - return LineDecoder3; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/core/streaming.mjs -async function* _iterSSEMessages(response, controller) { - if (!response.body) { - controller.abort(); - if (typeof globalThis.navigator !== "undefined" && globalThis.navigator.product === "ReactNative") { - throw new AnthropicError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`); - } - throw new AnthropicError(`Attempted to iterate over a response with no body`); - } - const sseDecoder = new SSEDecoder(); - const lineDecoder = new LineDecoder(); - const iter = ReadableStreamToAsyncIterable(response.body); - for await (const chunk of iter) { - for (const line of lineDecoder.decode(chunk)) { - const sse = sseDecoder.decode(line); - if (sse) - yield sse; - } - } - for (const line of lineDecoder.flush()) { - const sse = sseDecoder.decode(line); - if (sse) - yield sse; - } -} -function partition(str2, delimiter) { - const index = str2.indexOf(delimiter); - if (index !== -1) { - return [str2.substring(0, index), delimiter, str2.substring(index + delimiter.length)]; - } - return [str2, "", ""]; -} -var _Stream_client, Stream, SSEDecoder; -var init_streaming = __esm({ - "node_modules/@anthropic-ai/sdk/core/streaming.mjs"() { - init_tslib(); - init_error(); - init_shims(); - init_line(); - init_shims(); - init_errors(); - init_values(); - init_bytes(); - init_log(); - init_error(); - init_request_signal(); - Stream = /* @__PURE__ */ (() => { - class Stream3 { - constructor(iterator, controller, client) { - this.iterator = iterator; - _Stream_client.set(this, void 0); - this.controller = controller; - __classPrivateFieldSet(this, _Stream_client, client, "f"); - } - /** - * Iterate the raw Server-Sent Events from `response` — `{event, data, raw}` - * objects, before any JSON parsing or event-name filtering. - * - * This reads `response.body` directly (not a clone), so the response is - * consumed. Use this in middleware that fully replaces the stream body; for - * read-only observation of parsed events, use `ctx.parse()` instead. - */ - static rawEvents(response, controller = new AbortController()) { - return _iterSSEMessages(response, controller); - } - static fromSSEResponse(response, controller, client) { - let consumed = false; - const logger = client ? loggerFor(client) : console; - async function* iterator() { - if (consumed) { - throw new AnthropicError("Cannot iterate over a consumed stream, use `.tee()` to split the stream."); - } - consumed = true; - let done = false; - try { - for await (const sse of _iterSSEMessages(response, controller)) { - if (sse.event === "completion") { - try { - yield JSON.parse(sse.data); - } catch (e) { - logger.error(`Could not parse message into JSON:`, sse.data); - logger.error(`From chunk:`, sse.raw); - throw e; - } - } - if (sse.event === "message_start" || sse.event === "message_delta" || sse.event === "message_stop" || sse.event === "content_block_start" || sse.event === "content_block_delta" || sse.event === "content_block_stop" || sse.event === "message" || sse.event === "user.message" || sse.event === "user.interrupt" || sse.event === "user.tool_confirmation" || sse.event === "user.custom_tool_result" || sse.event === "user.tool_result" || sse.event === "agent.message" || sse.event === "agent.thinking" || sse.event === "agent.tool_use" || sse.event === "agent.tool_result" || sse.event === "agent.mcp_tool_use" || sse.event === "agent.mcp_tool_result" || sse.event === "agent.custom_tool_use" || sse.event === "agent.thread_context_compacted" || sse.event === "session.status_running" || sse.event === "session.status_idle" || sse.event === "session.status_rescheduled" || sse.event === "session.status_terminated" || sse.event === "session.error" || sse.event === "session.deleted" || sse.event === "session.updated" || sse.event === "span.model_request_start" || sse.event === "span.model_request_end" || sse.event === "span.outcome_evaluation_start" || sse.event === "span.outcome_evaluation_ongoing" || sse.event === "span.outcome_evaluation_end" || sse.event === "user.define_outcome" || sse.event === "agent.thread_message_received" || sse.event === "agent.thread_message_sent" || sse.event === "agent.session_thread_message_received" || sse.event === "agent.session_thread_message_sent" || sse.event === "session.thread_created" || sse.event === "session.thread_status_created" || sse.event === "session.thread_status_running" || sse.event === "session.thread_status_idle" || sse.event === "session.thread_status_rescheduled" || sse.event === "session.thread_status_terminated" || sse.event === "event_start" || sse.event === "event_delta" || sse.event === "system.message") { - try { - yield JSON.parse(sse.data); - } catch (e) { - logger.error(`Could not parse message into JSON:`, sse.data); - logger.error(`From chunk:`, sse.raw); - throw e; - } - } - if (sse.event === "ping") { - continue; - } - if (sse.event === "error") { - const body = safeJSON(sse.data) ?? sse.data; - const type = body?.error?.type; - throw new APIError(void 0, body, void 0, response.headers, type); - } - } - done = true; - } catch (e) { - if (isAbortError(e)) - return; - throw e; - } finally { - if (!done) - controller.abort(); - releaseRequestSignal(controller); - } - } - return new Stream3(iterator, controller, client); - } - /** - * Generates a Stream from a newline-separated ReadableStream - * where each item is a JSON value. - */ - static fromReadableStream(readableStream, controller, client) { - let consumed = false; - async function* iterLines() { - const lineDecoder = new LineDecoder(); - const iter = ReadableStreamToAsyncIterable(readableStream); - for await (const chunk of iter) { - for (const line of lineDecoder.decode(chunk)) { - yield line; - } - } - for (const line of lineDecoder.flush()) { - yield line; - } - } - async function* iterator() { - if (consumed) { - throw new AnthropicError("Cannot iterate over a consumed stream, use `.tee()` to split the stream."); - } - consumed = true; - let done = false; - try { - for await (const line of iterLines()) { - if (done) - continue; - if (line) - yield JSON.parse(line); - } - done = true; - } catch (e) { - if (isAbortError(e)) - return; - throw e; - } finally { - if (!done) - controller.abort(); - releaseRequestSignal(controller); - } - } - return new Stream3(iterator, controller, client); - } - [(_Stream_client = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() { - return this.iterator(); - } - /** - * Splits the stream into two streams which can be - * independently read from at different speeds. - */ - tee() { - const left = []; - const right = []; - const iterator = this.iterator(); - const teeIterator = (queue) => { - return { - next: () => { - if (queue.length === 0) { - const result = iterator.next(); - left.push(result); - right.push(result); - } - return queue.shift(); - } - }; - }; - return [ - new Stream3(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, "f")), - new Stream3(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, "f")) - ]; - } - /** - * Converts this stream to a newline-separated ReadableStream of - * JSON stringified values in the stream - * which can be turned back into a Stream with `Stream.fromReadableStream()`. - */ - toReadableStream() { - const self = this; - let iter; - return makeReadableStream({ - async start() { - iter = self[Symbol.asyncIterator](); - }, - async pull(ctrl) { - try { - const { value: value2, done } = await iter.next(); - if (done) - return ctrl.close(); - const bytes2 = encodeUTF8(JSON.stringify(value2) + "\n"); - ctrl.enqueue(bytes2); - } catch (err) { - ctrl.error(err); - } - }, - async cancel() { - await iter.return?.(); - } - }); - } - } - return Stream3; - })(); - SSEDecoder = class { - constructor() { - this.event = null; - this.data = []; - this.chunks = []; - } - decode(line) { - if (line.endsWith("\r")) { - line = line.substring(0, line.length - 1); - } - if (!line) { - if (!this.event && !this.data.length) - return null; - const sse = { - event: this.event, - data: this.data.join("\n"), - raw: this.chunks - }; - this.event = null; - this.data = []; - this.chunks = []; - return sse; - } - this.chunks.push(line); - if (line.startsWith(":")) { - return null; - } - let [fieldname, _, value2] = partition(line, ":"); - if (value2.startsWith(" ")) { - value2 = value2.substring(1); - } - if (fieldname === "event") { - this.event = value2; - } else if (fieldname === "data") { - this.data.push(value2); - } - return null; - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/parse.mjs -async function defaultParseResponse(client, props) { - const { response, requestLogID, retryOfRequestLogID, startTime } = props; - const body = await (async () => { - if (props.options.stream) { - loggerFor(client).debug("response", response.status, response.url, response.headers, response.body); - return Stream.fromSSEResponse(response, props.controller, client); - } - if (response.status === 204) { - return null; - } - if (props.options.__binaryResponse) { - return response; - } - const contentType = response.headers.get("content-type"); - const mediaType = contentType?.split(";")[0]?.trim(); - const isJSON = mediaType?.includes("application/json") || mediaType?.endsWith("+json"); - if (isJSON) { - const contentLength = response.headers.get("content-length"); - if (contentLength === "0") { - return void 0; - } - const json = await response.json(); - return addResponseIDs(json, response); - } - const text = await response.text(); - return text; - })().finally(() => { - if (!props.options.stream && !props.options.__binaryResponse) { - releaseRequestSignal(props.controller); - } - }); - debugLogRequestDetails(loggerFor(client), `[${requestLogID}] response parsed`, { - retryOfRequestLogID, - url: response.url, - status: response.status, - body, - durationMs: Date.now() - startTime - }); - return body; -} -function addResponseIDs(value2, response) { - if (!value2 || typeof value2 !== "object" || Array.isArray(value2)) { - return value2; - } - return Object.defineProperties(value2, { - _request_id: { value: response.headers.get("request-id"), enumerable: false }, - _workspace_id: { value: response.headers.get("anthropic-workspace-id"), enumerable: false } - }); -} -var init_parse = __esm({ - "node_modules/@anthropic-ai/sdk/internal/parse.mjs"() { - init_streaming(); - init_log(); - init_request_signal(); - } -}); - -// node_modules/@anthropic-ai/sdk/core/middleware.mjs -function isFetchOriginError(err) { - return typeof err === "object" && err !== null && fetchOriginErrors.has(err); -} -function isRetryableError(err) { - const seen = /* @__PURE__ */ new Set(); - while (typeof err === "object" && err !== null && !seen.has(err)) { - seen.add(err); - if (isFetchOriginError(err) || isAbortError(err) || err instanceof APIConnectionError || err instanceof RetryableError) { - return true; - } - err = err.cause; - } - return false; -} -function wrapFetchWithMiddleware(fetchFn, middleware, options, client) { - return async (url, init = {}) => { - if (middleware.length === 0) { - return fetchFn.call(void 0, url, init); - } - const headers = init.headers instanceof Headers ? init.headers : new Headers(init.headers); - const response = await applyMiddleware(fetchFn, middleware, options, client)({ - ...init, - headers, - url: typeof url === "string" ? url : url instanceof URL ? url.href : url.url - }); - if (response.bodyUsed || response.body?.locked) { - throw new AnthropicError("middleware consumed the response body; use response.clone() to inspect it, or return new Response(body, response) to consume and replace it"); - } - return response; - }; -} -function createMiddlewareContext(options, client) { - const cache = /* @__PURE__ */ new WeakMap(); - return { - options, - // Resolved per chain, so changes to the client's `logLevel`/`logger` - // apply to subsequent requests. - logger: client ? loggerFor(client) : defaultLogger(), - parse(response) { - if (options?.stream && response.ok) { - return parseMiddlewareResponse(response, options, client); - } - let parsed = cache.get(response); - if (!parsed) { - parsed = parseMiddlewareResponse(response, options, client); - cache.set(response, parsed); - } - return parsed; - } - }; -} -async function parseMiddlewareResponse(response, options, client) { - if (response.bodyUsed || response.body?.locked) { - throw new AnthropicError("cannot ctx.parse() a response whose body was already consumed; call ctx.parse() instead of reading the body, or read via response.clone()"); - } - if (options?.stream && response.ok) { - return Stream.fromSSEResponse(response.clone(), new AbortController(), client); - } - if (response.status === 204) { - return null; - } - if (options?.__binaryResponse) { - return response; - } - const contentType = response.headers.get("content-type"); - const mediaType = contentType?.split(";")[0]?.trim(); - const isJSON = mediaType?.includes("application/json") || mediaType?.endsWith("+json"); - if (isJSON) { - if (response.headers.get("content-length") === "0") { - return void 0; - } - return addResponseIDs(await response.clone().json(), response); - } - return await response.clone().text(); -} -function applyMiddleware(fetchFn, middleware, options, client) { - let next = async ({ url, ...init }) => { - try { - return await fetchFn.call(void 0, url, init); - } catch (err) { - const error = castToError(err); - fetchOriginErrors.add(error); - throw error; - } - }; - const ctx = createMiddlewareContext(options, client); - for (let i = middleware.length - 1; i >= 0; i--) { - const mw = middleware[i]; - const nextInner = next; - next = async (request2) => mw(request2, nextInner, ctx); - } - return next; -} -var fetchOriginErrors; -var init_middleware = __esm({ - "node_modules/@anthropic-ai/sdk/core/middleware.mjs"() { - init_errors(); - init_parse(); - init_log(); - init_error(); - init_streaming(); - fetchOriginErrors = /* @__PURE__ */ new WeakSet(); - } -}); - -// node_modules/@anthropic-ai/sdk/core/api-promise.mjs -var _APIPromise_client, APIPromise; -var init_api_promise = __esm({ - "node_modules/@anthropic-ai/sdk/core/api-promise.mjs"() { - init_tslib(); - init_parse(); - APIPromise = /* @__PURE__ */ (() => { - class APIPromise3 extends Promise { - constructor(client, responsePromise, parseResponse2 = defaultParseResponse) { - super((resolve2) => { - resolve2(null); - }); - this.responsePromise = responsePromise; - this.parseResponse = parseResponse2; - _APIPromise_client.set(this, void 0); - __classPrivateFieldSet(this, _APIPromise_client, client, "f"); - } - _thenUnwrap(transform) { - return new APIPromise3(__classPrivateFieldGet(this, _APIPromise_client, "f"), this.responsePromise, async (client, props) => addResponseIDs(transform(await this.parseResponse(client, props), props), props.response)); - } - /** - * Gets the raw `Response` instance instead of parsing the response - * data. - * - * If you want to parse the response body but still get the `Response` - * instance, you can use {@link withResponse()}. - * - * 👋 Getting the wrong TypeScript type for `Response`? - * Try setting `"moduleResolution": "NodeNext"` or add `"lib": ["DOM"]` - * to your `tsconfig.json`. - */ - asResponse() { - return this.responsePromise.then((p) => p.response); - } - /** - * Gets the parsed response data, the raw `Response` instance and the ID of the request, - * returned via the `request-id` header which is useful for debugging requests and resporting - * issues to Anthropic. - * - * If you just want to get the raw `Response` instance without parsing it, - * you can use {@link asResponse()}. - * - * 👋 Getting the wrong TypeScript type for `Response`? - * Try setting `"moduleResolution": "NodeNext"` or add `"lib": ["DOM"]` - * to your `tsconfig.json`. - */ - async withResponse() { - const [data, response] = await Promise.all([this.parse(), this.asResponse()]); - return { - data, - response, - request_id: response.headers.get("request-id"), - workspace_id: response.headers.get("anthropic-workspace-id") - }; - } - parse() { - if (!this.parsedPromise) { - this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, "f"), data)); - } - return this.parsedPromise; - } - then(onfulfilled, onrejected) { - return this.parse().then(onfulfilled, onrejected); - } - catch(onrejected) { - return this.parse().catch(onrejected); - } - finally(onfinally) { - return this.parse().finally(onfinally); - } - } - _APIPromise_client = /* @__PURE__ */ new WeakMap(); - return APIPromise3; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/core/pagination.mjs -var _AbstractPage_client, AbstractPage, PagePromise, Page, PageCursor, BidirectionalPageCursor; -var init_pagination = __esm({ - "node_modules/@anthropic-ai/sdk/core/pagination.mjs"() { - init_tslib(); - init_error(); - init_parse(); - init_api_promise(); - init_values(); - AbstractPage = /* @__PURE__ */ (() => { - class AbstractPage3 { - constructor(client, response, body, options) { - _AbstractPage_client.set(this, void 0); - __classPrivateFieldSet(this, _AbstractPage_client, client, "f"); - this.options = options; - this.response = response; - this.body = body; - } - hasNextPage() { - const items = this.getPaginatedItems(); - if (!items.length) - return false; - return this.nextPageRequestOptions() != null; - } - async getNextPage() { - const nextOptions = this.nextPageRequestOptions(); - if (!nextOptions) { - throw new AnthropicError("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`."); - } - return await __classPrivateFieldGet(this, _AbstractPage_client, "f").requestAPIList(this.constructor, nextOptions); - } - async *iterPages() { - let page2 = this; - yield page2; - while (page2.hasNextPage()) { - page2 = await page2.getNextPage(); - yield page2; - } - } - async *[(_AbstractPage_client = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() { - for await (const page2 of this.iterPages()) { - for (const item of page2.getPaginatedItems()) { - yield item; - } - } - } - } - return AbstractPage3; - })(); - PagePromise = /* @__PURE__ */ (() => { - class PagePromise3 extends APIPromise { - constructor(client, request2, Page3) { - super(client, request2, async (client2, props) => new Page3(client2, props.response, await defaultParseResponse(client2, props), props.options)); - } - /** - * Allow auto-paginating iteration on an unawaited list call, eg: - * - * for await (const item of client.items.list()) { - * console.log(item) - * } - */ - async *[Symbol.asyncIterator]() { - const page2 = await this; - for await (const item of page2) { - yield item; - } - } - } - return PagePromise3; - })(); - Page = class extends AbstractPage { - constructor(client, response, body, options) { - super(client, response, body, options); - this.data = body.data || []; - this.has_more = body.has_more || false; - this.first_id = body.first_id || null; - this.last_id = body.last_id || null; - } - getPaginatedItems() { - return this.data ?? []; - } - hasNextPage() { - if (this.has_more === false) { - return false; - } - return super.hasNextPage(); - } - nextPageRequestOptions() { - if (this.options.query?.["before_id"]) { - const first_id = this.first_id; - if (!first_id) { - return null; - } - return { - ...this.options, - query: { - ...maybeObj(this.options.query), - before_id: first_id - } - }; - } - const cursor = this.last_id; - if (!cursor) { - return null; - } - return { - ...this.options, - query: { - ...maybeObj(this.options.query), - after_id: cursor - } - }; - } - }; - PageCursor = class extends AbstractPage { - constructor(client, response, body, options) { - super(client, response, body, options); - this.data = body.data || []; - this.next_page = body.next_page || null; - } - getPaginatedItems() { - return this.data ?? []; - } - nextPageRequestOptions() { - const cursor = this.next_page; - if (!cursor) { - return null; - } - return { - ...this.options, - query: { - ...maybeObj(this.options.query), - page: cursor - } - }; - } - }; - BidirectionalPageCursor = class extends AbstractPage { - constructor(client, response, body, options) { - super(client, response, body, options); - this.data = body.data || []; - this.next_page = body.next_page || null; - this.prev_page = body.prev_page || null; - } - getPaginatedItems() { - return this.data ?? []; - } - nextPageRequestOptions() { - const cursor = this.next_page; - if (!cursor) { - return null; - } - return { - ...this.options, - query: { - ...maybeObj(this.options.query), - page: cursor - } - }; - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/uploads.mjs -function makeFile(fileBits, fileName, options) { - checkFileSupport(); - return new File(fileBits, fileName ?? "", options); -} -function getName(value2, stripPath) { - const val = typeof value2 === "object" && value2 !== null && ("name" in value2 && value2.name && String(value2.name) || "url" in value2 && value2.url && String(value2.url) || "filename" in value2 && value2.filename && String(value2.filename) || "path" in value2 && value2.path && String(value2.path)) || ""; - return stripPath ? val.split(/[\\/]/).pop() || void 0 : val; -} -function supportsFormData(fetchObject) { - const fetch3 = typeof fetchObject === "function" ? fetchObject : fetchObject.fetch; - const cached = supportsFormDataMap.get(fetch3); - if (cached) - return cached; - const promise = (async () => { - try { - const FetchResponse = "Response" in fetch3 ? fetch3.Response : (await fetch3("data:,")).constructor; - const data = new FormData(); - if (data.toString() === await new FetchResponse(data).text()) { - return false; - } - return true; - } catch { - return true; - } - })(); - supportsFormDataMap.set(fetch3, promise); - return promise; -} -var checkFileSupport, isAsyncIterable, multipartFormRequestOptions, supportsFormDataMap, createForm, addFormValue; -var init_uploads = __esm({ - "node_modules/@anthropic-ai/sdk/internal/uploads.mjs"() { - init_shims(); - checkFileSupport = () => { - if (typeof File === "undefined") { - const { process: process2 } = globalThis; - const isOldNode = typeof process2?.versions?.node === "string" && parseInt(process2.versions.node.split(".")) < 20; - throw new Error("`File` is not defined as a global, which is required for file uploads." + (isOldNode ? " Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`." : "")); - } - }; - isAsyncIterable = (value2) => value2 != null && typeof value2 === "object" && typeof value2[Symbol.asyncIterator] === "function"; - multipartFormRequestOptions = async (opts, fetch3, stripFilenames = true) => { - return { ...opts, body: await createForm(opts.body, fetch3, stripFilenames) }; - }; - supportsFormDataMap = /* @__PURE__ */ new WeakMap(); - createForm = async (body, fetch3, stripFilenames = true) => { - if (!await supportsFormData(fetch3)) { - throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class."); - } - const form = new FormData(); - await Promise.all(Object.entries(body || {}).map(([key, value2]) => addFormValue(form, key, value2, stripFilenames))); - return form; - }; - addFormValue = async (form, key, value2, stripFilenames) => { - if (value2 === void 0) - return; - if (value2 == null) { - throw new TypeError(`Received null for "${key}"; to pass null in FormData, you must use the string 'null'`); - } - if (typeof value2 === "string" || typeof value2 === "number" || typeof value2 === "boolean") { - form.append(key, String(value2)); - } else if (value2 instanceof Response) { - let options = {}; - const contentType = value2.headers.get("Content-Type"); - if (contentType) { - options = { type: contentType }; - } - form.append(key, makeFile([await value2.blob()], getName(value2, stripFilenames), options)); - } else if (isAsyncIterable(value2)) { - form.append(key, makeFile([await new Response(ReadableStreamFrom(value2)).blob()], getName(value2, stripFilenames))); - } else if (value2 instanceof Blob) { - const isFile = typeof File !== "undefined" && value2 instanceof File; - const name = isFile ? value2.name : getName(value2, stripFilenames); - form.append(key, makeFile([value2], name, { type: value2.type })); - } else if (Array.isArray(value2)) { - await Promise.all(value2.map((entry2) => addFormValue(form, key + "[]", entry2, stripFilenames))); - } else if (typeof value2.then === "function") { - throw new TypeError(`Received a Promise for "${key}"; await it first, e.g. \`await toFile(...)\``); - } else if (value2 instanceof ArrayBuffer || ArrayBuffer.isView(value2)) { - throw new TypeError(`Received ${value2.constructor.name} for "${key}"; to upload raw bytes, wrap them with \`await toFile(bytes, 'filename')\``); - } else if (typeof value2 === "object") { - await Promise.all(Object.entries(value2).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop, stripFilenames))); - } else { - throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value2} instead`); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/to-file.mjs -async function toFile(value2, name, options) { - checkFileSupport(); - value2 = await value2; - name || (name = value2 instanceof File ? value2.name : getName(value2, true)); - if (isFileLike(value2)) { - if (value2 instanceof File && name == null && options == null) { - return value2; - } - return makeFile([await value2.arrayBuffer()], name ?? value2.name, { - type: value2.type, - lastModified: value2.lastModified, - ...options - }); - } - if (isResponseLike(value2)) { - const blob = await value2.blob(); - name || (name = new URL(value2.url).pathname.split(/[\\/]/).pop()); - return makeFile(await getBytes(blob), name, options); - } - const parts = await getBytes(value2); - if (!options?.type) { - const type = parts.find((part) => typeof part === "object" && "type" in part && part.type); - if (typeof type === "string") { - options = { ...options, type }; - } - } - return makeFile(parts, name, options); -} -async function getBytes(value2) { - let parts = []; - if (typeof value2 === "string" || ArrayBuffer.isView(value2) || // includes Uint8Array, Buffer, etc. - value2 instanceof ArrayBuffer) { - parts.push(value2); - } else if (isBlobLike(value2)) { - parts.push(value2 instanceof Blob ? value2 : await value2.arrayBuffer()); - } else if (isAsyncIterable(value2)) { - for await (const chunk of value2) { - parts.push(...await getBytes(chunk)); - } - } else { - const constructor = value2?.constructor?.name; - throw new Error(`Unexpected data type: ${typeof value2}${constructor ? `; constructor: ${constructor}` : ""}${propsForError(value2)}`); - } - return parts; -} -function propsForError(value2) { - if (typeof value2 !== "object" || value2 === null) - return ""; - const props = Object.getOwnPropertyNames(value2); - return `; props: [${props.map((p) => `"${p}"`).join(", ")}]`; -} -var isBlobLike, isFileLike, isResponseLike; -var init_to_file = __esm({ - "node_modules/@anthropic-ai/sdk/internal/to-file.mjs"() { - init_uploads(); - init_uploads(); - isBlobLike = (value2) => value2 != null && typeof value2 === "object" && typeof value2.size === "number" && typeof value2.type === "string" && typeof value2.text === "function" && typeof value2.slice === "function" && typeof value2.arrayBuffer === "function"; - isFileLike = (value2) => value2 != null && typeof value2 === "object" && typeof value2.name === "string" && typeof value2.lastModified === "number" && isBlobLike(value2); - isResponseLike = (value2) => value2 != null && typeof value2 === "object" && typeof value2.url === "string" && typeof value2.blob === "function"; - } -}); - -// node_modules/@anthropic-ai/sdk/core/uploads.mjs -var init_uploads2 = __esm({ - "node_modules/@anthropic-ai/sdk/core/uploads.mjs"() { - init_to_file(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/shared.mjs -var init_shared = __esm({ - "node_modules/@anthropic-ai/sdk/resources/shared.mjs"() { - } -}); - -// node_modules/@anthropic-ai/sdk/core/resource.mjs -var APIResource; -var init_resource = __esm({ - "node_modules/@anthropic-ai/sdk/core/resource.mjs"() { - APIResource = class { - constructor(client) { - this._client = client; - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/headers.mjs -function* iterateHeaders(headers) { - if (!headers) - return; - if (brand_privateNullableHeaders in headers) { - const { values, nulls } = headers; - yield* values.entries(); - for (const name of nulls) { - yield [name, null]; - } - return; - } - let shouldClear = false; - let iter; - if (headers instanceof Headers) { - iter = headers.entries(); - } else if (isReadonlyArray(headers)) { - iter = headers; - } else { - shouldClear = true; - iter = Object.entries(headers ?? {}); - } - for (let row of iter) { - const name = row[0]; - if (typeof name !== "string") - throw new TypeError("expected header name to be a string"); - const values = isReadonlyArray(row[1]) ? row[1] : [row[1]]; - let didClear = false; - for (const value2 of values) { - if (value2 === void 0) - continue; - if (shouldClear && !didClear) { - didClear = true; - yield [name, clearSentinel]; - } - yield [name, value2]; - } - } -} -var brand_privateNullableHeaders, clearSentinel, APPEND_HEADERS, appendHeaderValue, buildHeaders; -var init_headers = __esm({ - "node_modules/@anthropic-ai/sdk/internal/headers.mjs"() { - init_values(); - brand_privateNullableHeaders = /* @__PURE__ */ Symbol.for("brand.privateNullableHeaders"); - clearSentinel = /* @__PURE__ */ Symbol("clear"); - APPEND_HEADERS = /* @__PURE__ */ new Set(["x-stainless-helper"]); - appendHeaderValue = (existing, addition) => { - const tokens = existing ? existing.split(",").map((t) => t.trim()).filter(Boolean) : []; - for (const tok of addition.split(",").map((t) => t.trim())) { - if (tok && !tokens.includes(tok)) - tokens.push(tok); - } - return tokens.join(", "); - }; - buildHeaders = (newHeaders) => { - const targetHeaders = new Headers(); - const nullHeaders = /* @__PURE__ */ new Set(); - for (const headers of newHeaders) { - const seenHeaders = /* @__PURE__ */ new Set(); - for (const [name, value2] of iterateHeaders(headers)) { - const lowerName = name.toLowerCase(); - if (APPEND_HEADERS.has(lowerName)) { - if (value2 === clearSentinel) - continue; - if (value2 === null) { - targetHeaders.delete(name); - nullHeaders.add(lowerName); - } else { - targetHeaders.set(name, appendHeaderValue(targetHeaders.get(name), value2)); - nullHeaders.delete(lowerName); - } - continue; - } - if (value2 === clearSentinel || !seenHeaders.has(lowerName)) { - targetHeaders.delete(name); - seenHeaders.add(lowerName); - if (value2 === clearSentinel) - continue; - } - if (value2 === null) { - targetHeaders.delete(name); - nullHeaders.add(lowerName); - } else { - targetHeaders.append(name, value2); - nullHeaders.delete(lowerName); - } - } - } - return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders }; - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/path.mjs -function encodeURIPath(str2) { - return str2.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g, encodeURIComponent); -} -var EMPTY, createPathTagFunction, path2; -var init_path = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/path.mjs"() { - init_error(); - EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null)); - createPathTagFunction = (pathEncoder = encodeURIPath) => function path5(statics, ...params) { - if (statics.length === 1) - return statics[0]; - let postPath = false; - const invalidSegments = []; - const path6 = statics.reduce((previousValue, currentValue, index) => { - if (/[?#]/.test(currentValue)) { - postPath = true; - } - const value2 = params[index]; - let encoded = (postPath ? encodeURIComponent : pathEncoder)("" + value2); - if (index !== params.length && (value2 == null || typeof value2 === "object" && // handle values from other realms - value2.toString === Object.getPrototypeOf(Object.getPrototypeOf(value2.hasOwnProperty ?? EMPTY) ?? EMPTY)?.toString)) { - encoded = value2 + ""; - invalidSegments.push({ - start: previousValue.length + currentValue.length, - length: encoded.length, - error: `Value of type ${Object.prototype.toString.call(value2).slice(8, -1)} is not a valid path parameter` - }); - } - return previousValue + currentValue + (index === params.length ? "" : encoded); - }, ""); - const pathOnly = path6.split(/[?#]/, 1)[0]; - const invalidSegmentPattern = /(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi; - let match; - while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) { - invalidSegments.push({ - start: match.index, - length: match[0].length, - error: `Value "${match[0]}" can't be safely passed as a path parameter` - }); - } - invalidSegments.sort((a, b) => a.start - b.start); - if (invalidSegments.length > 0) { - let lastEnd = 0; - const underline = invalidSegments.reduce((acc, segment) => { - const spaces = " ".repeat(segment.start - lastEnd); - const arrows = "^".repeat(segment.length); - lastEnd = segment.start + segment.length; - return acc + spaces + arrows; - }, ""); - throw new AnthropicError(`Path parameters result in path with invalid segments: -${invalidSegments.map((e) => e.error).join("\n")} -${path6} -${underline}`); - } - return path6; - }; - path2 = /* @__PURE__ */ createPathTagFunction(encodeURIPath); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/deployment-runs.mjs -var DeploymentRuns; -var init_deployment_runs = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/deployment-runs.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - DeploymentRuns = class extends APIResource { - /** - * Get Deployment Run - * - * @example - * ```ts - * const betaManagedAgentsDeploymentRun = - * await client.beta.deploymentRuns.retrieve( - * 'deployment_run_id', - * ); - * ``` - */ - retrieve(deploymentRunID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/deployment_runs/${deploymentRunID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List Deployment Runs - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsDeploymentRun of client.beta.deploymentRuns.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/deployment_runs?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/deployments.mjs -var Deployments; -var init_deployments = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/deployments.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Deployments = class extends APIResource { - /** - * Create Deployment - * - * @example - * ```ts - * const betaManagedAgentsDeployment = - * await client.beta.deployments.create({ - * agent: 'string', - * environment_id: 'x', - * initial_events: [ - * { - * content: [ - * { - * text: 'Where is my order #1234?', - * type: 'text', - * }, - * ], - * type: 'user.message', - * }, - * ], - * name: 'x', - * }); - * ``` - */ - create(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/deployments?beta=true", { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Get Deployment - * - * @example - * ```ts - * const betaManagedAgentsDeployment = - * await client.beta.deployments.retrieve( - * 'depl_011CZkZcDH3vPqd7xnEfwTai', - * ); - * ``` - */ - retrieve(deploymentID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/deployments/${deploymentID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Update Deployment - * - * @example - * ```ts - * const betaManagedAgentsDeployment = - * await client.beta.deployments.update( - * 'depl_011CZkZcDH3vPqd7xnEfwTai', - * ); - * ``` - */ - update(deploymentID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/deployments/${deploymentID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List Deployments - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsDeployment of client.beta.deployments.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/deployments?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Archive Deployment - * - * @example - * ```ts - * const betaManagedAgentsDeployment = - * await client.beta.deployments.archive( - * 'depl_011CZkZcDH3vPqd7xnEfwTai', - * ); - * ``` - */ - archive(deploymentID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/deployments/${deploymentID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Pause Deployment - * - * @example - * ```ts - * const betaManagedAgentsDeployment = - * await client.beta.deployments.pause( - * 'depl_011CZkZcDH3vPqd7xnEfwTai', - * ); - * ``` - */ - pause(deploymentID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/deployments/${deploymentID}/pause?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Run Deployment Now - * - * @example - * ```ts - * const betaManagedAgentsDeploymentRun = - * await client.beta.deployments.run( - * 'depl_011CZkZcDH3vPqd7xnEfwTai', - * ); - * ``` - */ - run(deploymentID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/deployments/${deploymentID}/run?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Unpause Deployment - * - * @example - * ```ts - * const betaManagedAgentsDeployment = - * await client.beta.deployments.unpause( - * 'depl_011CZkZcDH3vPqd7xnEfwTai', - * ); - * ``` - */ - unpause(deploymentID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/deployments/${deploymentID}/unpause?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/dreams.mjs -var Dreams; -var init_dreams = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/dreams.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Dreams = class extends APIResource { - /** - * Start an asynchronous job that uses past sessions to produce a reorganized - * version of a memory store and get back the dream to poll for the result. - * - * By default the dream writes its result to a new memory store and doesn't change - * the input memory store. The response has `status` set to `pending` and an empty - * `outputs` array. Poll the dream until `status` is `completed`, `failed`, or - * `canceled`. - * - * See the - * [Dreams guide](https://platform.claude.com/docs/en/managed-agents/dreams#create-a-dream) - * to learn more about creating dreams. - * - * @example - * ```ts - * const betaDream = await client.beta.dreams.create({ - * inputs: [{ memory_store_id: 'x', type: 'memory_store' }], - * model: 'string', - * }); - * ``` - */ - create(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/dreams?beta=true", { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "dreaming-2026-04-21"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Get a dream by ID to check its status, output memory store, and token usage. - * - * Archived dreams are returned too. - * - * See the - * [Dreams guide](https://platform.claude.com/docs/en/managed-agents/dreams#track-progress) - * for how to poll a dream and what each status means. - * - * @example - * ```ts - * const betaDream = await client.beta.dreams.retrieve( - * 'dream_id', - * ); - * ``` - */ - retrieve(dreamID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/dreams/${dreamID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "dreaming-2026-04-21"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List the dreams in the workspace, newest first. - * - * Archived dreams are left out unless `include_archived` is `true`. - * - * See the - * [Dreams guide](https://platform.claude.com/docs/en/managed-agents/dreams#list-dreams) - * for how to page through dreams. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaDream of client.beta.dreams.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/dreams?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "dreaming-2026-04-21"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Hide a `completed`, `failed`, or `canceled` dream from the default list of - * dreams. - * - * Archiving a `pending` or `running` dream returns a 400 error, so cancel it - * first. Archiving an archived dream returns it unchanged. An archived dream can - * still be fetched by ID. Archiving can't be undone. - * - * See the - * [Dreams guide](https://platform.claude.com/docs/en/managed-agents/dreams#archive-a-dream) - * to learn more about archiving dreams. - * - * @example - * ```ts - * const betaDream = await client.beta.dreams.archive( - * 'dream_id', - * ); - * ``` - */ - archive(dreamID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/dreams/${dreamID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "dreaming-2026-04-21"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Stop a `pending` or `running` dream. - * - * The response shows `status` as `canceled`, unless the dream reached `completed` - * or `failed` first. `usage` can keep changing after the response. Canceling a - * `canceled` dream returns it unchanged. Canceling a `completed` or `failed` dream - * returns a 400 error. - * - * See the - * [Dreams guide](https://platform.claude.com/docs/en/managed-agents/dreams#cancel-a-dream) - * to learn more about canceling dreams. - * - * @example - * ```ts - * const betaDream = await client.beta.dreams.cancel( - * 'dream_id', - * ); - * ``` - */ - cancel(dreamID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/dreams/${dreamID}/cancel?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "dreaming-2026-04-21"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/stainless-helper-header.mjs -function helperHeader(value2) { - return { [STAINLESS_HELPER_HEADER]: value2 }; -} -function wasCreatedByStainlessHelper(value2) { - return typeof value2 === "object" && value2 !== null && SDK_HELPER_SYMBOL in value2; -} -function collectStainlessHelpers(tools, messages) { - const helpers = /* @__PURE__ */ new Set(); - if (tools) { - for (const tool of tools) { - if (wasCreatedByStainlessHelper(tool)) { - helpers.add(tool[SDK_HELPER_SYMBOL]); - } - } - } - if (messages) { - for (const message of messages) { - if (wasCreatedByStainlessHelper(message)) { - helpers.add(message[SDK_HELPER_SYMBOL]); - } - const content = message.content; - if (Array.isArray(content)) { - for (const block of content) { - if (wasCreatedByStainlessHelper(block)) { - helpers.add(block[SDK_HELPER_SYMBOL]); - } - const definition = block?.tool?.definition; - if (wasCreatedByStainlessHelper(definition)) { - helpers.add(definition[SDK_HELPER_SYMBOL]); - } - } - } - } - } - return Array.from(helpers); -} -function stainlessHelperHeader(tools, messages) { - const helpers = collectStainlessHelpers(tools, messages); - if (helpers.length === 0) - return {}; - return { [STAINLESS_HELPER_HEADER]: helpers.join(", ") }; -} -function stainlessHelperHeaderFromFile(file2) { - if (wasCreatedByStainlessHelper(file2)) { - return { [STAINLESS_HELPER_HEADER]: file2[SDK_HELPER_SYMBOL] }; - } - return {}; -} -var STAINLESS_HELPER_HEADER, STAINLESS_HELPER_METHOD_HEADER, SDK_HELPER_SYMBOL; -var init_stainless_helper_header = __esm({ - "node_modules/@anthropic-ai/sdk/internal/stainless-helper-header.mjs"() { - STAINLESS_HELPER_HEADER = "x-stainless-helper"; - STAINLESS_HELPER_METHOD_HEADER = "x-stainless-helper-method"; - SDK_HELPER_SYMBOL = /* @__PURE__ */ Symbol("anthropic.sdk.stainlessHelper"); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/files.mjs -var Files; -var init_files = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/files.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_stainless_helper_header(); - init_uploads(); - init_path(); - Files = class extends APIResource { - /** - * List Files - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaFileMetadata of client.beta.files.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/files?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Delete File - * - * @example - * ```ts - * const betaDeletedFile = await client.beta.files.delete( - * 'file_id', - * ); - * ``` - */ - delete(fileID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.delete(path2`/v1/files/${fileID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Download File - * - * @example - * ```ts - * const response = await client.beta.files.download( - * 'file_id', - * ); - * - * const content = await response.blob(); - * console.log(content); - * ``` - */ - download(fileID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/files/${fileID}/content?beta=true`, { - ...options, - headers: buildHeaders([ - { - Accept: "application/binary", - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]), - __binaryResponse: true - }); - } - /** - * Get File Metadata - * - * @example - * ```ts - * const betaFileMetadata = - * await client.beta.files.retrieveMetadata('file_id'); - * ``` - */ - retrieveMetadata(fileID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/files/${fileID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Upload File - * - * @example - * ```ts - * const betaFileMetadata = await client.beta.files.upload({ - * file: fs.createReadStream('path/to/file'), - * }); - * ``` - */ - upload(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/files?beta=true", multipartFormRequestOptions({ - body, - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - stainlessHelperHeaderFromFile(body.file), - options?.headers - ]) - }, this._client)); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/models.mjs -var Models; -var init_models2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/models.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Models = class extends APIResource { - /** - * Get a specific model. - * - * The Models API response can be used to determine information about a specific - * model or resolve a model alias to a model ID. - * - * @example - * ```ts - * const betaModelInfo = await client.beta.models.retrieve( - * 'model_id', - * ); - * ``` - */ - retrieve(modelID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/models/${modelID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List available models. - * - * The Models API response can be used to determine which models are available for - * use in the API. More recently released models are listed first. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaModelInfo of client.beta.models.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/models?beta=true", Page, { - query, - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/user-profiles.mjs -var UserProfiles; -var init_user_profiles = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/user-profiles.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - UserProfiles = class extends APIResource { - /** - * Create User Profile - * - * @example - * ```ts - * const betaUserProfile = - * await client.beta.userProfiles.create(); - * ``` - */ - create(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/user_profiles?beta=true", { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "user-profiles-2026-08-18"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Get User Profile - * - * @example - * ```ts - * const betaUserProfile = - * await client.beta.userProfiles.retrieve( - * 'uprof_011CZkZCu8hGbp5mYRQgUmz9', - * ); - * ``` - */ - retrieve(userProfileID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/user_profiles/${userProfileID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "user-profiles-2026-08-18"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Update User Profile - * - * @example - * ```ts - * const betaUserProfile = - * await client.beta.userProfiles.update( - * 'uprof_011CZkZCu8hGbp5mYRQgUmz9', - * ); - * ``` - */ - update(userProfileID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/user_profiles/${userProfileID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "user-profiles-2026-08-18"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List User Profiles - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaUserProfile of client.beta.userProfiles.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/user_profiles?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "user-profiles-2026-08-18"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Create Enrollment URL - * - * @example - * ```ts - * const betaUserProfileEnrollmentURL = - * await client.beta.userProfiles.createEnrollmentURL( - * 'uprof_011CZkZCu8hGbp5mYRQgUmz9', - * ); - * ``` - */ - createEnrollmentURL(userProfileID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/user_profiles/${userProfileID}/enrollment_url?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "user-profiles-2026-08-18"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@stablelib/base64/lib/base64.js -var require_base64 = __commonJS({ - "node_modules/@stablelib/base64/lib/base64.js"(exports) { - "use strict"; - var __extends = exports && exports.__extends || /* @__PURE__ */ (function() { - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { - d2.__proto__ = b2; - } || function(d2, b2) { - for (var p in b2) if (b2.hasOwnProperty(p)) d2[p] = b2[p]; - }; - return extendStatics(d, b); - }; - return function(d, b) { - extendStatics(d, b); - function __() { - this.constructor = d; - } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; - })(); - Object.defineProperty(exports, "__esModule", { value: true }); - var INVALID_BYTE = 256; - var Coder = ( - /** @class */ - (function() { - function Coder2(_paddingCharacter) { - if (_paddingCharacter === void 0) { - _paddingCharacter = "="; - } - this._paddingCharacter = _paddingCharacter; - } - Coder2.prototype.encodedLength = function(length) { - if (!this._paddingCharacter) { - return (length * 8 + 5) / 6 | 0; - } - return (length + 2) / 3 * 4 | 0; - }; - Coder2.prototype.encode = function(data) { - var out = ""; - var i = 0; - for (; i < data.length - 2; i += 3) { - var c = data[i] << 16 | data[i + 1] << 8 | data[i + 2]; - out += this._encodeByte(c >>> 3 * 6 & 63); - out += this._encodeByte(c >>> 2 * 6 & 63); - out += this._encodeByte(c >>> 1 * 6 & 63); - out += this._encodeByte(c >>> 0 * 6 & 63); - } - var left = data.length - i; - if (left > 0) { - var c = data[i] << 16 | (left === 2 ? data[i + 1] << 8 : 0); - out += this._encodeByte(c >>> 3 * 6 & 63); - out += this._encodeByte(c >>> 2 * 6 & 63); - if (left === 2) { - out += this._encodeByte(c >>> 1 * 6 & 63); - } else { - out += this._paddingCharacter || ""; - } - out += this._paddingCharacter || ""; - } - return out; - }; - Coder2.prototype.maxDecodedLength = function(length) { - if (!this._paddingCharacter) { - return (length * 6 + 7) / 8 | 0; - } - return length / 4 * 3 | 0; - }; - Coder2.prototype.decodedLength = function(s) { - return this.maxDecodedLength(s.length - this._getPaddingLength(s)); - }; - Coder2.prototype.decode = function(s) { - if (s.length === 0) { - return new Uint8Array(0); - } - var paddingLength = this._getPaddingLength(s); - var length = s.length - paddingLength; - var out = new Uint8Array(this.maxDecodedLength(length)); - var op2 = 0; - var i = 0; - var haveBad = 0; - var v0 = 0, v1 = 0, v2 = 0, v3 = 0; - for (; i < length - 4; i += 4) { - v0 = this._decodeChar(s.charCodeAt(i + 0)); - v1 = this._decodeChar(s.charCodeAt(i + 1)); - v2 = this._decodeChar(s.charCodeAt(i + 2)); - v3 = this._decodeChar(s.charCodeAt(i + 3)); - out[op2++] = v0 << 2 | v1 >>> 4; - out[op2++] = v1 << 4 | v2 >>> 2; - out[op2++] = v2 << 6 | v3; - haveBad |= v0 & INVALID_BYTE; - haveBad |= v1 & INVALID_BYTE; - haveBad |= v2 & INVALID_BYTE; - haveBad |= v3 & INVALID_BYTE; - } - if (i < length - 1) { - v0 = this._decodeChar(s.charCodeAt(i)); - v1 = this._decodeChar(s.charCodeAt(i + 1)); - out[op2++] = v0 << 2 | v1 >>> 4; - haveBad |= v0 & INVALID_BYTE; - haveBad |= v1 & INVALID_BYTE; - } - if (i < length - 2) { - v2 = this._decodeChar(s.charCodeAt(i + 2)); - out[op2++] = v1 << 4 | v2 >>> 2; - haveBad |= v2 & INVALID_BYTE; - } - if (i < length - 3) { - v3 = this._decodeChar(s.charCodeAt(i + 3)); - out[op2++] = v2 << 6 | v3; - haveBad |= v3 & INVALID_BYTE; - } - if (haveBad !== 0) { - throw new Error("Base64Coder: incorrect characters for decoding"); - } - return out; - }; - Coder2.prototype._encodeByte = function(b) { - var result = b; - result += 65; - result += 25 - b >>> 8 & 0 - 65 - 26 + 97; - result += 51 - b >>> 8 & 26 - 97 - 52 + 48; - result += 61 - b >>> 8 & 52 - 48 - 62 + 43; - result += 62 - b >>> 8 & 62 - 43 - 63 + 47; - return String.fromCharCode(result); - }; - Coder2.prototype._decodeChar = function(c) { - var result = INVALID_BYTE; - result += (42 - c & c - 44) >>> 8 & -INVALID_BYTE + c - 43 + 62; - result += (46 - c & c - 48) >>> 8 & -INVALID_BYTE + c - 47 + 63; - result += (47 - c & c - 58) >>> 8 & -INVALID_BYTE + c - 48 + 52; - result += (64 - c & c - 91) >>> 8 & -INVALID_BYTE + c - 65 + 0; - result += (96 - c & c - 123) >>> 8 & -INVALID_BYTE + c - 97 + 26; - return result; - }; - Coder2.prototype._getPaddingLength = function(s) { - var paddingLength = 0; - if (this._paddingCharacter) { - for (var i = s.length - 1; i >= 0; i--) { - if (s[i] !== this._paddingCharacter) { - break; - } - paddingLength++; - } - if (s.length < 4 || paddingLength > 2) { - throw new Error("Base64Coder: incorrect padding"); - } - } - return paddingLength; - }; - return Coder2; - })() - ); - exports.Coder = Coder; - var stdCoder = new Coder(); - function encode3(data) { - return stdCoder.encode(data); - } - exports.encode = encode3; - function decode(s) { - return stdCoder.decode(s); - } - exports.decode = decode; - var URLSafeCoder = ( - /** @class */ - (function(_super) { - __extends(URLSafeCoder2, _super); - function URLSafeCoder2() { - return _super !== null && _super.apply(this, arguments) || this; - } - URLSafeCoder2.prototype._encodeByte = function(b) { - var result = b; - result += 65; - result += 25 - b >>> 8 & 0 - 65 - 26 + 97; - result += 51 - b >>> 8 & 26 - 97 - 52 + 48; - result += 61 - b >>> 8 & 52 - 48 - 62 + 45; - result += 62 - b >>> 8 & 62 - 45 - 63 + 95; - return String.fromCharCode(result); - }; - URLSafeCoder2.prototype._decodeChar = function(c) { - var result = INVALID_BYTE; - result += (44 - c & c - 46) >>> 8 & -INVALID_BYTE + c - 45 + 62; - result += (94 - c & c - 96) >>> 8 & -INVALID_BYTE + c - 95 + 63; - result += (47 - c & c - 58) >>> 8 & -INVALID_BYTE + c - 48 + 52; - result += (64 - c & c - 91) >>> 8 & -INVALID_BYTE + c - 65 + 0; - result += (96 - c & c - 123) >>> 8 & -INVALID_BYTE + c - 97 + 26; - return result; - }; - return URLSafeCoder2; - })(Coder) - ); - exports.URLSafeCoder = URLSafeCoder; - var urlSafeCoder = new URLSafeCoder(); - function encodeURLSafe(data) { - return urlSafeCoder.encode(data); - } - exports.encodeURLSafe = encodeURLSafe; - function decodeURLSafe(s) { - return urlSafeCoder.decode(s); - } - exports.decodeURLSafe = decodeURLSafe; - exports.encodedLength = function(length) { - return stdCoder.encodedLength(length); - }; - exports.maxDecodedLength = function(length) { - return stdCoder.maxDecodedLength(length); - }; - exports.decodedLength = function(s) { - return stdCoder.decodedLength(s); - }; - } -}); - -// node_modules/fast-sha256/sha256.js -var require_sha256 = __commonJS({ - "node_modules/fast-sha256/sha256.js"(exports, module) { - (function(root2, factory) { - var exports2 = {}; - factory(exports2); - var sha256 = exports2["default"]; - for (var k in exports2) { - sha256[k] = exports2[k]; - } - if (typeof module === "object" && typeof module.exports === "object") { - module.exports = sha256; - } else if (typeof define === "function" && define.amd) { - define(function() { - return sha256; - }); - } else { - root2.sha256 = sha256; - } - })(exports, function(exports2) { - "use strict"; - exports2.__esModule = true; - exports2.digestLength = 32; - exports2.blockSize = 64; - var K = new Uint32Array([ - 1116352408, - 1899447441, - 3049323471, - 3921009573, - 961987163, - 1508970993, - 2453635748, - 2870763221, - 3624381080, - 310598401, - 607225278, - 1426881987, - 1925078388, - 2162078206, - 2614888103, - 3248222580, - 3835390401, - 4022224774, - 264347078, - 604807628, - 770255983, - 1249150122, - 1555081692, - 1996064986, - 2554220882, - 2821834349, - 2952996808, - 3210313671, - 3336571891, - 3584528711, - 113926993, - 338241895, - 666307205, - 773529912, - 1294757372, - 1396182291, - 1695183700, - 1986661051, - 2177026350, - 2456956037, - 2730485921, - 2820302411, - 3259730800, - 3345764771, - 3516065817, - 3600352804, - 4094571909, - 275423344, - 430227734, - 506948616, - 659060556, - 883997877, - 958139571, - 1322822218, - 1537002063, - 1747873779, - 1955562222, - 2024104815, - 2227730452, - 2361852424, - 2428436474, - 2756734187, - 3204031479, - 3329325298 - ]); - function hashBlocks(w, v, p, pos, len) { - var a, b, c, d, e, f, g, h, u, i, j, t1, t2; - while (len >= 64) { - a = v[0]; - b = v[1]; - c = v[2]; - d = v[3]; - e = v[4]; - f = v[5]; - g = v[6]; - h = v[7]; - for (i = 0; i < 16; i++) { - j = pos + i * 4; - w[i] = (p[j] & 255) << 24 | (p[j + 1] & 255) << 16 | (p[j + 2] & 255) << 8 | p[j + 3] & 255; - } - for (i = 16; i < 64; i++) { - u = w[i - 2]; - t1 = (u >>> 17 | u << 32 - 17) ^ (u >>> 19 | u << 32 - 19) ^ u >>> 10; - u = w[i - 15]; - t2 = (u >>> 7 | u << 32 - 7) ^ (u >>> 18 | u << 32 - 18) ^ u >>> 3; - w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0); - } - for (i = 0; i < 64; i++) { - t1 = (((e >>> 6 | e << 32 - 6) ^ (e >>> 11 | e << 32 - 11) ^ (e >>> 25 | e << 32 - 25)) + (e & f ^ ~e & g) | 0) + (h + (K[i] + w[i] | 0) | 0) | 0; - t2 = ((a >>> 2 | a << 32 - 2) ^ (a >>> 13 | a << 32 - 13) ^ (a >>> 22 | a << 32 - 22)) + (a & b ^ a & c ^ b & c) | 0; - h = g; - g = f; - f = e; - e = d + t1 | 0; - d = c; - c = b; - b = a; - a = t1 + t2 | 0; - } - v[0] += a; - v[1] += b; - v[2] += c; - v[3] += d; - v[4] += e; - v[5] += f; - v[6] += g; - v[7] += h; - pos += 64; - len -= 64; - } - return pos; - } - var Hash = ( - /** @class */ - (function() { - function Hash2() { - this.digestLength = exports2.digestLength; - this.blockSize = exports2.blockSize; - this.state = new Int32Array(8); - this.temp = new Int32Array(64); - this.buffer = new Uint8Array(128); - this.bufferLength = 0; - this.bytesHashed = 0; - this.finished = false; - this.reset(); - } - Hash2.prototype.reset = function() { - this.state[0] = 1779033703; - this.state[1] = 3144134277; - this.state[2] = 1013904242; - this.state[3] = 2773480762; - this.state[4] = 1359893119; - this.state[5] = 2600822924; - this.state[6] = 528734635; - this.state[7] = 1541459225; - this.bufferLength = 0; - this.bytesHashed = 0; - this.finished = false; - return this; - }; - Hash2.prototype.clean = function() { - for (var i = 0; i < this.buffer.length; i++) { - this.buffer[i] = 0; - } - for (var i = 0; i < this.temp.length; i++) { - this.temp[i] = 0; - } - this.reset(); - }; - Hash2.prototype.update = function(data, dataLength) { - if (dataLength === void 0) { - dataLength = data.length; - } - if (this.finished) { - throw new Error("SHA256: can't update because hash was finished."); - } - var dataPos = 0; - this.bytesHashed += dataLength; - if (this.bufferLength > 0) { - while (this.bufferLength < 64 && dataLength > 0) { - this.buffer[this.bufferLength++] = data[dataPos++]; - dataLength--; - } - if (this.bufferLength === 64) { - hashBlocks(this.temp, this.state, this.buffer, 0, 64); - this.bufferLength = 0; - } - } - if (dataLength >= 64) { - dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength); - dataLength %= 64; - } - while (dataLength > 0) { - this.buffer[this.bufferLength++] = data[dataPos++]; - dataLength--; - } - return this; - }; - Hash2.prototype.finish = function(out) { - if (!this.finished) { - var bytesHashed = this.bytesHashed; - var left = this.bufferLength; - var bitLenHi = bytesHashed / 536870912 | 0; - var bitLenLo = bytesHashed << 3; - var padLength = bytesHashed % 64 < 56 ? 64 : 128; - this.buffer[left] = 128; - for (var i = left + 1; i < padLength - 8; i++) { - this.buffer[i] = 0; - } - this.buffer[padLength - 8] = bitLenHi >>> 24 & 255; - this.buffer[padLength - 7] = bitLenHi >>> 16 & 255; - this.buffer[padLength - 6] = bitLenHi >>> 8 & 255; - this.buffer[padLength - 5] = bitLenHi >>> 0 & 255; - this.buffer[padLength - 4] = bitLenLo >>> 24 & 255; - this.buffer[padLength - 3] = bitLenLo >>> 16 & 255; - this.buffer[padLength - 2] = bitLenLo >>> 8 & 255; - this.buffer[padLength - 1] = bitLenLo >>> 0 & 255; - hashBlocks(this.temp, this.state, this.buffer, 0, padLength); - this.finished = true; - } - for (var i = 0; i < 8; i++) { - out[i * 4 + 0] = this.state[i] >>> 24 & 255; - out[i * 4 + 1] = this.state[i] >>> 16 & 255; - out[i * 4 + 2] = this.state[i] >>> 8 & 255; - out[i * 4 + 3] = this.state[i] >>> 0 & 255; - } - return this; - }; - Hash2.prototype.digest = function() { - var out = new Uint8Array(this.digestLength); - this.finish(out); - return out; - }; - Hash2.prototype._saveState = function(out) { - for (var i = 0; i < this.state.length; i++) { - out[i] = this.state[i]; - } - }; - Hash2.prototype._restoreState = function(from, bytesHashed) { - for (var i = 0; i < this.state.length; i++) { - this.state[i] = from[i]; - } - this.bytesHashed = bytesHashed; - this.finished = false; - this.bufferLength = 0; - }; - return Hash2; - })() - ); - exports2.Hash = Hash; - var HMAC = ( - /** @class */ - (function() { - function HMAC2(key) { - this.inner = new Hash(); - this.outer = new Hash(); - this.blockSize = this.inner.blockSize; - this.digestLength = this.inner.digestLength; - var pad = new Uint8Array(this.blockSize); - if (key.length > this.blockSize) { - new Hash().update(key).finish(pad).clean(); - } else { - for (var i = 0; i < key.length; i++) { - pad[i] = key[i]; - } - } - for (var i = 0; i < pad.length; i++) { - pad[i] ^= 54; - } - this.inner.update(pad); - for (var i = 0; i < pad.length; i++) { - pad[i] ^= 54 ^ 92; - } - this.outer.update(pad); - this.istate = new Uint32Array(8); - this.ostate = new Uint32Array(8); - this.inner._saveState(this.istate); - this.outer._saveState(this.ostate); - for (var i = 0; i < pad.length; i++) { - pad[i] = 0; - } - } - HMAC2.prototype.reset = function() { - this.inner._restoreState(this.istate, this.inner.blockSize); - this.outer._restoreState(this.ostate, this.outer.blockSize); - return this; - }; - HMAC2.prototype.clean = function() { - for (var i = 0; i < this.istate.length; i++) { - this.ostate[i] = this.istate[i] = 0; - } - this.inner.clean(); - this.outer.clean(); - }; - HMAC2.prototype.update = function(data) { - this.inner.update(data); - return this; - }; - HMAC2.prototype.finish = function(out) { - if (this.outer.finished) { - this.outer.finish(out); - } else { - this.inner.finish(out); - this.outer.update(out, this.digestLength).finish(out); - } - return this; - }; - HMAC2.prototype.digest = function() { - var out = new Uint8Array(this.digestLength); - this.finish(out); - return out; - }; - return HMAC2; - })() - ); - exports2.HMAC = HMAC; - function hash(data) { - var h = new Hash().update(data); - var digest = h.digest(); - h.clean(); - return digest; - } - exports2.hash = hash; - exports2["default"] = hash; - function hmac(key, data) { - var h = new HMAC(key).update(data); - var digest = h.digest(); - h.clean(); - return digest; - } - exports2.hmac = hmac; - function fillBuffer(buffer, hmac2, info, counter) { - var num2 = counter[0]; - if (num2 === 0) { - throw new Error("hkdf: cannot expand more"); - } - hmac2.reset(); - if (num2 > 1) { - hmac2.update(buffer); - } - if (info) { - hmac2.update(info); - } - hmac2.update(counter); - hmac2.finish(buffer); - counter[0]++; - } - var hkdfSalt = new Uint8Array(exports2.digestLength); - function hkdf(key, salt, info, length) { - if (salt === void 0) { - salt = hkdfSalt; - } - if (length === void 0) { - length = 32; - } - var counter = new Uint8Array([1]); - var okm = hmac(salt, key); - var hmac_ = new HMAC(okm); - var buffer = new Uint8Array(hmac_.digestLength); - var bufpos = buffer.length; - var out = new Uint8Array(length); - for (var i = 0; i < length; i++) { - if (bufpos === buffer.length) { - fillBuffer(buffer, hmac_, info, counter); - bufpos = 0; - } - out[i] = buffer[bufpos++]; - } - hmac_.clean(); - buffer.fill(0); - counter.fill(0); - return out; - } - exports2.hkdf = hkdf; - function pbkdf2(password, salt, iterations, dkLen) { - var prf = new HMAC(password); - var len = prf.digestLength; - var ctr = new Uint8Array(4); - var t = new Uint8Array(len); - var u = new Uint8Array(len); - var dk = new Uint8Array(dkLen); - for (var i = 0; i * len < dkLen; i++) { - var c = i + 1; - ctr[0] = c >>> 24 & 255; - ctr[1] = c >>> 16 & 255; - ctr[2] = c >>> 8 & 255; - ctr[3] = c >>> 0 & 255; - prf.reset(); - prf.update(salt); - prf.update(ctr); - prf.finish(u); - for (var j = 0; j < len; j++) { - t[j] = u[j]; - } - for (var j = 2; j <= iterations; j++) { - prf.reset(); - prf.update(u).finish(u); - for (var k = 0; k < len; k++) { - t[k] ^= u[k]; - } - } - for (var j = 0; j < len && i * len + j < dkLen; j++) { - dk[i * len + j] = t[j]; - } - } - for (var i = 0; i < len; i++) { - t[i] = u[i] = 0; - } - for (var i = 0; i < 4; i++) { - ctr[i] = 0; - } - prf.clean(); - return dk; - } - exports2.pbkdf2 = pbkdf2; - }); - } -}); - -// node_modules/standardwebhooks/dist/timing_safe_equal.js -var require_timing_safe_equal = __commonJS({ - "node_modules/standardwebhooks/dist/timing_safe_equal.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.timingSafeEqual = timingSafeEqual; - function assert2(expr, msg = "") { - if (!expr) { - throw new Error(msg); - } - } - function timingSafeEqual(a, b) { - if (a.byteLength !== b.byteLength) { - return false; - } - if (!(a instanceof DataView)) { - a = new DataView(ArrayBuffer.isView(a) ? a.buffer : a); - } - if (!(b instanceof DataView)) { - b = new DataView(ArrayBuffer.isView(b) ? b.buffer : b); - } - assert2(a instanceof DataView); - assert2(b instanceof DataView); - const length = a.byteLength; - let out = 0; - let i = -1; - while (++i < length) { - out |= a.getUint8(i) ^ b.getUint8(i); - } - return out === 0; - } - } -}); - -// node_modules/standardwebhooks/dist/index.js -var require_dist = __commonJS({ - "node_modules/standardwebhooks/dist/index.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Webhook = exports.WebhookVerificationError = void 0; - var base64 = require_base64(); - var sha256 = require_sha256(); - var timing_safe_equal_1 = require_timing_safe_equal(); - var WEBHOOK_TOLERANCE_IN_SECONDS = 5 * 60; - var ExtendableError = class _ExtendableError extends Error { - constructor(message) { - super(message); - Object.setPrototypeOf(this, _ExtendableError.prototype); - this.name = "ExtendableError"; - this.stack = new Error(message).stack; - } - }; - var WebhookVerificationError = class _WebhookVerificationError extends ExtendableError { - constructor(message) { - super(message); - Object.setPrototypeOf(this, _WebhookVerificationError.prototype); - this.name = "WebhookVerificationError"; - } - }; - exports.WebhookVerificationError = WebhookVerificationError; - var Webhook2 = class _Webhook { - constructor(secret, options) { - if ((options === null || options === void 0 ? void 0 : options.format) === "raw") { - if (secret instanceof Uint8Array) { - this.key = secret; - } else { - this.key = Uint8Array.from(secret, (c) => c.charCodeAt(0)); - } - } else { - if (typeof secret !== "string") { - throw new Error("Expected secret to be of type string"); - } - if (secret.startsWith(_Webhook.prefix)) { - secret = secret.substring(_Webhook.prefix.length); - } - this.key = base64.decode(secret); - } - if (this.key.length === 0) { - throw new Error("Secret can't be empty."); - } - } - verify(payload, headers, options) { - var _a6; - const jsonParse = (_a6 = options === null || options === void 0 ? void 0 : options.jsonParse) !== null && _a6 !== void 0 ? _a6 : true; - const normalizedHeaders = {}; - for (const key of Object.keys(headers)) { - normalizedHeaders[key.toLowerCase()] = headers[key]; - } - const msgId = normalizedHeaders["webhook-id"]; - const msgSignature = normalizedHeaders["webhook-signature"]; - const msgTimestamp = normalizedHeaders["webhook-timestamp"]; - if (!msgSignature || !msgId || !msgTimestamp) { - throw new WebhookVerificationError("Missing required headers"); - } - const timestamp2 = this.verifyTimestamp(msgTimestamp); - const computedSignature = this.sign(msgId, timestamp2, payload); - const expectedSignature = computedSignature.split(",")[1]; - const passedSignatures = msgSignature.split(" "); - const encoder4 = new globalThis.TextEncoder(); - for (const versionedSignature of passedSignatures) { - const [version, signature] = versionedSignature.split(","); - if (version !== "v1") { - continue; - } - if ((0, timing_safe_equal_1.timingSafeEqual)(encoder4.encode(signature), encoder4.encode(expectedSignature))) { - const payloadString = payload.toString(); - if (payloadString === "") { - return void 0; - } - if (jsonParse) { - return JSON.parse(payloadString); - } else { - return void 0; - } - } - } - throw new WebhookVerificationError("No matching signature found"); - } - sign(msgId, timestamp2, payload) { - if (typeof payload === "string") { - } else if (payload.constructor.name === "Buffer") { - payload = payload.toString(); - } else { - throw new Error("Expected payload to be of type string or Buffer."); - } - const encoder4 = new TextEncoder(); - const timestampNumber = Math.floor(timestamp2.getTime() / 1e3); - const toSign = encoder4.encode(`${msgId}.${timestampNumber}.${payload}`); - const expectedSignature = base64.encode(sha256.hmac(this.key, toSign)); - return `v1,${expectedSignature}`; - } - verifyTimestamp(timestampHeader) { - const now = Math.floor(Date.now() / 1e3); - const timestamp2 = parseInt(timestampHeader, 10); - if (Number.isNaN(timestamp2)) { - throw new WebhookVerificationError("Invalid Signature Headers"); - } - if (now - timestamp2 > WEBHOOK_TOLERANCE_IN_SECONDS) { - throw new WebhookVerificationError("Message timestamp too old"); - } - if (timestamp2 > now + WEBHOOK_TOLERANCE_IN_SECONDS) { - throw new WebhookVerificationError("Message timestamp too new"); - } - return new Date(timestamp2 * 1e3); - } - }; - exports.Webhook = Webhook2; - Webhook2.prefix = "whsec_"; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/webhooks.mjs -var import_standardwebhooks, Webhooks; -var init_webhooks = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/webhooks.mjs"() { - init_resource(); - import_standardwebhooks = __toESM(require_dist(), 1); - Webhooks = class extends APIResource { - /** - * Parses a webhook payload into an event without verifying its signature. Prefer - * `unwrap()` unless you have already verified the signature yourself. - */ - parseUnverified(body) { - return JSON.parse(body); - } - /** - * Verifies the webhook signature from the `webhook-id`, `webhook-timestamp` and - * `webhook-signature` headers using your webhook signing key, then parses the - * payload into an event. Fails if the signature is missing or invalid. - */ - unwrap(body, options) { - const headers = options?.headers; - if (headers == null) - throw new Error("Webhook headers are required in order to verify the signature"); - const keyStr = options.key === void 0 ? this._client.webhookKey : options.key; - if (!keyStr) - throw new Error("Webhook key must not be null or empty in order to unwrap"); - const wh = new import_standardwebhooks.Webhook(keyStr); - wh.verify(body, headers); - return JSON.parse(body); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/agents/versions.mjs -var Versions; -var init_versions = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/agents/versions.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Versions = class extends APIResource { - /** - * List Agent Versions - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsAgent of client.beta.agents.versions.list( - * 'agent_011CZkYpogX7uDKUyvBTophP', - * )) { - * // ... - * } - * ``` - */ - list(agentID, params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/agents/${agentID}/versions?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/agents/agents.mjs -var Agents; -var init_agents = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/agents/agents.mjs"() { - init_resource(); - init_versions(); - init_versions(); - init_pagination(); - init_headers(); - init_path(); - Agents = /* @__PURE__ */ (() => { - class Agents3 extends APIResource { - constructor() { - super(...arguments); - this.versions = new Versions(this._client); - } - /** - * Create Agent - * - * @example - * ```ts - * const betaManagedAgentsAgent = - * await client.beta.agents.create({ - * model: 'claude-opus-5', - * name: 'My First Agent', - * }); - * ``` - */ - create(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/agents?beta=true", { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Get Agent - * - * @example - * ```ts - * const betaManagedAgentsAgent = - * await client.beta.agents.retrieve( - * 'agent_011CZkYpogX7uDKUyvBTophP', - * ); - * ``` - */ - retrieve(agentID, params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.get(path2`/v1/agents/${agentID}?beta=true`, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Update Agent - * - * @example - * ```ts - * const betaManagedAgentsAgent = - * await client.beta.agents.update( - * 'agent_011CZkYpogX7uDKUyvBTophP', - * { description: 'updated' }, - * ); - * ``` - */ - update(agentID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/agents/${agentID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List Agents - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsAgent of client.beta.agents.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/agents?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Archive Agent - * - * @example - * ```ts - * const betaManagedAgentsAgent = - * await client.beta.agents.archive( - * 'agent_011CZkYpogX7uDKUyvBTophP', - * ); - * ``` - */ - archive(agentID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/agents/${agentID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - } - Agents3.Versions = Versions; - return Agents3; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/abort.mjs -function linkAbort(external, controller) { - if (!external) - return () => { - }; - if (external.aborted) { - controller.abort(); - return () => { - }; - } - const onAbort = () => controller.abort(); - external.addEventListener("abort", onAbort); - return () => external.removeEventListener("abort", onAbort); -} -var init_abort2 = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/abort.mjs"() { - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/backoff.mjs -function isStatus(e, code) { - return e instanceof APIError && e.status === code; -} -function is4xx(e) { - return e instanceof APIError && typeof e.status === "number" && e.status >= 400 && e.status < 500; -} -function isFatal4xx(e) { - return is4xx(e) && !isStatus(e, 408) && !isStatus(e, 409) && !isStatus(e, 429); -} -function backoff(attempt, baseMs, capMs) { - return Math.min(baseMs * 2 ** attempt, capMs); -} -function jitter(lowMs, highMs) { - return lowMs + Math.random() * (highMs - lowMs); -} -function applyJitter(ms) { - return ms * (1 - Math.random() * 0.25); -} -var init_backoff = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/backoff.mjs"() { - init_error(); - } -}); - -// node_modules/@anthropic-ai/sdk/lib/helper-client.mjs -function copyClientForHelper(client, { authToken, helper }) { - if (!authToken) { - throw new AnthropicError(`copyClientForHelper: expected a non-empty authToken but received ${JSON.stringify(authToken)}`); - } - const internal = client; - const parentDefaults = internal._options.defaultHeaders; - const parentAuthExtraHeaders = internal._authState?.extraHeaders; - const inheritedAuthExtraHeaders = parentAuthExtraHeaders ? Object.fromEntries(Object.entries(parentAuthExtraHeaders).filter(([name]) => { - const lower = name.toLowerCase(); - return lower !== "authorization" && lower !== "x-api-key"; - })) : void 0; - const defaultHeaders = buildHeaders([ - inheritedAuthExtraHeaders, - parentDefaults, - { [STAINLESS_HELPER_HEADER]: helper } - ]); - return client.withOptions({ - apiKey: null, - authToken, - baseURL: client.baseURL, - credentials: void 0, - defaultHeaders - }); -} -var init_helper_client = __esm({ - "node_modules/@anthropic-ai/sdk/lib/helper-client.mjs"() { - init_error(); - init_headers(); - init_stainless_helper_header(); - } -}); - -// node_modules/@anthropic-ai/sdk/lib/environments/poller.mjs -function backoff2(attempt) { - return backoff(attempt, POLL_BACKOFF_BASE_MS, POLL_BACKOFF_CAP_MS); -} -function defaultWorkerId() { - const env = globalThis.process?.env; - const host = env?.["HOSTNAME"]; - return host ? `${host}-${uuid4()}` : uuid4(); -} -var _WorkPoller_runnerClient, _WorkPoller_consumed, _WorkPoller_controller, _WorkPoller_detachExternal, _WorkPoller_autoStop, _WorkPoller_drain, _WorkPoller_blockMs, _WorkPoller_reclaimOlderThanMs, _WorkPoller_requestOpts, _IdleLog_log, _IdleLog_environmentId, _IdleLog_idleSince, _IdleLog_lastReport, POLL_BLOCK_MS, POLL_BACKOFF_BASE_MS, POLL_BACKOFF_CAP_MS, IDLE_REPORT_INTERVAL_MS, WorkPoller, IdleLog; -var init_poller = __esm({ - "node_modules/@anthropic-ai/sdk/lib/environments/poller.mjs"() { - init_tslib(); - init_error(); - init_log(); - init_sleep(); - init_uuid(); - init_abort2(); - init_headers(); - init_backoff(); - init_helper_client(); - POLL_BLOCK_MS = 999; - POLL_BACKOFF_BASE_MS = 1e3; - POLL_BACKOFF_CAP_MS = 6e4; - IDLE_REPORT_INTERVAL_MS = 3e5; - WorkPoller = /* @__PURE__ */ (() => { - class WorkPoller2 { - constructor(opts) { - _WorkPoller_runnerClient.set(this, void 0); - _WorkPoller_consumed.set(this, false); - _WorkPoller_controller.set(this, void 0); - _WorkPoller_detachExternal.set(this, void 0); - _WorkPoller_autoStop.set(this, void 0); - _WorkPoller_drain.set(this, void 0); - _WorkPoller_blockMs.set(this, void 0); - _WorkPoller_reclaimOlderThanMs.set(this, void 0); - _WorkPoller_requestOpts.set(this, void 0); - this.client = opts.client; - this.environmentId = opts.environmentId; - this.environmentKey = opts.environmentKey; - this.workerId = opts.workerId ?? defaultWorkerId(); - __classPrivateFieldSet(this, _WorkPoller_runnerClient, copyClientForHelper(opts.client, { - authToken: opts.environmentKey, - helper: "environments-work-poller" - }), "f"); - __classPrivateFieldSet(this, _WorkPoller_autoStop, opts.autoStop ?? true, "f"); - __classPrivateFieldSet(this, _WorkPoller_drain, opts.drain ?? false, "f"); - __classPrivateFieldSet(this, _WorkPoller_blockMs, opts.blockMs === void 0 ? POLL_BLOCK_MS : opts.blockMs, "f"); - __classPrivateFieldSet(this, _WorkPoller_reclaimOlderThanMs, opts.reclaimOlderThanMs ?? null, "f"); - __classPrivateFieldSet(this, _WorkPoller_requestOpts, opts.requestOptions, "f"); - __classPrivateFieldSet(this, _WorkPoller_controller, new AbortController(), "f"); - __classPrivateFieldSet(this, _WorkPoller_detachExternal, linkAbort(opts.signal, __classPrivateFieldGet(this, _WorkPoller_controller, "f")), "f"); - } - /** Read-only view of this iterator's abort signal. */ - get signal() { - return __classPrivateFieldGet(this, _WorkPoller_controller, "f").signal; - } - /** Abort the iterator. The current `for await` will exit cleanly. */ - abort() { - __classPrivateFieldGet(this, _WorkPoller_controller, "f").abort(); - } - async *[(_WorkPoller_runnerClient = /* @__PURE__ */ new WeakMap(), _WorkPoller_consumed = /* @__PURE__ */ new WeakMap(), _WorkPoller_controller = /* @__PURE__ */ new WeakMap(), _WorkPoller_detachExternal = /* @__PURE__ */ new WeakMap(), _WorkPoller_autoStop = /* @__PURE__ */ new WeakMap(), _WorkPoller_drain = /* @__PURE__ */ new WeakMap(), _WorkPoller_blockMs = /* @__PURE__ */ new WeakMap(), _WorkPoller_reclaimOlderThanMs = /* @__PURE__ */ new WeakMap(), _WorkPoller_requestOpts = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() { - if (__classPrivateFieldGet(this, _WorkPoller_consumed, "f")) { - throw new AnthropicError("Cannot iterate over a consumed WorkPoller"); - } - __classPrivateFieldSet(this, _WorkPoller_consumed, true, "f"); - const log = loggerFor(this.client); - log.info("poller starting", { - component: "work-poller", - environment_id: this.environmentId - }); - const idle = new IdleLog(log, this.environmentId); - try { - let attempt = 0; - while (!__classPrivateFieldGet(this, _WorkPoller_controller, "f").signal.aborted) { - let work; - try { - work = await __classPrivateFieldGet(this, _WorkPoller_runnerClient, "f").beta.environments.work.poll(this.environmentId, { - "Anthropic-Worker-ID": this.workerId, - ...__classPrivateFieldGet(this, _WorkPoller_blockMs, "f") !== null ? { block_ms: __classPrivateFieldGet(this, _WorkPoller_blockMs, "f") } : {}, - ...__classPrivateFieldGet(this, _WorkPoller_reclaimOlderThanMs, "f") !== null ? { reclaim_older_than_ms: __classPrivateFieldGet(this, _WorkPoller_reclaimOlderThanMs, "f") } : {} - }, { headers: buildHeaders([__classPrivateFieldGet(this, _WorkPoller_requestOpts, "f")?.headers]), signal: __classPrivateFieldGet(this, _WorkPoller_controller, "f").signal }); - } catch (e) { - if (__classPrivateFieldGet(this, _WorkPoller_controller, "f").signal.aborted) - return; - if (isFatal4xx(e)) { - log.error("poll failed permanently, stopping poller", { error: String(e) }); - throw e; - } - const wait = applyJitter(backoff2(attempt)); - log.warn("poll failed, backing off", { error: String(e), backoff_ms: wait }); - attempt++; - await sleep(wait, __classPrivateFieldGet(this, _WorkPoller_controller, "f").signal); - continue; - } - attempt = 0; - if (work == null) { - if (__classPrivateFieldGet(this, _WorkPoller_drain, "f")) - return; - idle.onEmptyPoll(); - await sleep(jitter(1e3, 3e3), __classPrivateFieldGet(this, _WorkPoller_controller, "f").signal); - continue; - } - idle.onClaim(); - log.info("claimed work", { - component: "work-poller", - environment_id: this.environmentId, - work_id: work.id, - work_type: work.data.type - }); - try { - await __classPrivateFieldGet(this, _WorkPoller_runnerClient, "f").beta.environments.work.ack(work.id, { environment_id: work.environment_id }, { headers: buildHeaders([__classPrivateFieldGet(this, _WorkPoller_requestOpts, "f")?.headers]), signal: __classPrivateFieldGet(this, _WorkPoller_controller, "f").signal }); - } catch (e) { - log.error("ack failed", { work_id: work.id, error: String(e) }); - continue; - } - try { - yield work; - } finally { - if (__classPrivateFieldGet(this, _WorkPoller_autoStop, "f")) { - try { - await __classPrivateFieldGet(this, _WorkPoller_runnerClient, "f").beta.environments.work.stop(work.id, { environment_id: work.environment_id }, { headers: buildHeaders([__classPrivateFieldGet(this, _WorkPoller_requestOpts, "f")?.headers]) }); - } catch (e) { - if (!isStatus(e, 409)) - log.warn("stop failed", { work_id: work.id, error: String(e) }); - } - } - } - } - } finally { - __classPrivateFieldGet(this, _WorkPoller_detachExternal, "f").call(this); - } - } - } - return WorkPoller2; - })(); - IdleLog = /* @__PURE__ */ (() => { - class IdleLog2 { - constructor(log, environmentId) { - _IdleLog_log.set(this, void 0); - _IdleLog_environmentId.set(this, void 0); - _IdleLog_idleSince.set(this, void 0); - _IdleLog_lastReport.set(this, 0); - __classPrivateFieldSet(this, _IdleLog_log, log, "f"); - __classPrivateFieldSet(this, _IdleLog_environmentId, environmentId, "f"); - } - onEmptyPoll() { - const now = Date.now(); - const fields = { component: "work-poller", environment_id: __classPrivateFieldGet(this, _IdleLog_environmentId, "f") }; - if (__classPrivateFieldGet(this, _IdleLog_idleSince, "f") === void 0) { - __classPrivateFieldSet(this, _IdleLog_idleSince, __classPrivateFieldSet(this, _IdleLog_lastReport, now, "f"), "f"); - __classPrivateFieldGet(this, _IdleLog_log, "f").info("idle; polling for work", fields); - } else if (now - __classPrivateFieldGet(this, _IdleLog_lastReport, "f") >= IDLE_REPORT_INTERVAL_MS) { - __classPrivateFieldSet(this, _IdleLog_lastReport, now, "f"); - __classPrivateFieldGet(this, _IdleLog_log, "f").info(`still polling; idle for ${Math.round((now - __classPrivateFieldGet(this, _IdleLog_idleSince, "f")) / 1e3)}s`, fields); - } else { - __classPrivateFieldGet(this, _IdleLog_log, "f").debug("poll returned no work", fields); - } - } - onClaim() { - __classPrivateFieldSet(this, _IdleLog_idleSince, void 0, "f"); - } - } - _IdleLog_log = /* @__PURE__ */ new WeakMap(), _IdleLog_environmentId = /* @__PURE__ */ new WeakMap(), _IdleLog_idleSince = /* @__PURE__ */ new WeakMap(), _IdleLog_lastReport = /* @__PURE__ */ new WeakMap(); - return IdleLog2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/async-queue.mjs -var _AsyncQueue_items, _AsyncQueue_waiters, _AsyncQueue_closed, AsyncQueue; -var init_async_queue = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/async-queue.mjs"() { - init_tslib(); - AsyncQueue = /* @__PURE__ */ (() => { - class AsyncQueue2 { - constructor() { - _AsyncQueue_items.set(this, []); - _AsyncQueue_waiters.set(this, []); - _AsyncQueue_closed.set(this, false); - } - /** Enqueue an item, or hand it directly to a waiting reader. Returns `false` once closed. */ - push(item) { - if (__classPrivateFieldGet(this, _AsyncQueue_closed, "f")) - return false; - const w = __classPrivateFieldGet(this, _AsyncQueue_waiters, "f").shift(); - if (w) - w({ done: false, value: item }); - else - __classPrivateFieldGet(this, _AsyncQueue_items, "f").push(item); - return true; - } - /** Mark the queue done. Idempotent; wakes every pending reader with `done: true`. */ - close() { - if (__classPrivateFieldGet(this, _AsyncQueue_closed, "f")) - return; - __classPrivateFieldSet(this, _AsyncQueue_closed, true, "f"); - while (__classPrivateFieldGet(this, _AsyncQueue_waiters, "f").length > 0) { - const w = __classPrivateFieldGet(this, _AsyncQueue_waiters, "f").shift(); - w({ done: true, value: void 0 }); - } - } - /** - * Resolve with the next item, or `done: true` once the queue is closed and - * drained. When `signal` is supplied, aborting it resolves a pending read - * with `done: true` (cancellation is pushed down here rather than handled by - * an outer `Promise.race`). - */ - next(signal) { - if (__classPrivateFieldGet(this, _AsyncQueue_items, "f").length > 0) { - return Promise.resolve({ done: false, value: __classPrivateFieldGet(this, _AsyncQueue_items, "f").shift() }); - } - if (__classPrivateFieldGet(this, _AsyncQueue_closed, "f") || signal?.aborted) { - return Promise.resolve({ done: true, value: void 0 }); - } - return new Promise((resolve2) => { - const waiter = (r) => { - signal?.removeEventListener("abort", onAbort); - resolve2(r); - }; - const onAbort = () => { - const idx = __classPrivateFieldGet(this, _AsyncQueue_waiters, "f").indexOf(waiter); - if (idx >= 0) - __classPrivateFieldGet(this, _AsyncQueue_waiters, "f").splice(idx, 1); - resolve2({ done: true, value: void 0 }); - }; - __classPrivateFieldGet(this, _AsyncQueue_waiters, "f").push(waiter); - signal?.addEventListener("abort", onAbort, { once: true }); - }); - } - /** Synchronously remove and return the next buffered item, or `undefined` if empty. */ - tryShift() { - return __classPrivateFieldGet(this, _AsyncQueue_items, "f").shift(); - } - } - _AsyncQueue_items = /* @__PURE__ */ new WeakMap(), _AsyncQueue_waiters = /* @__PURE__ */ new WeakMap(), _AsyncQueue_closed = /* @__PURE__ */ new WeakMap(); - return AsyncQueue2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/lib/tools/ToolError.mjs -var ToolError; -var init_ToolError = __esm({ - "node_modules/@anthropic-ai/sdk/lib/tools/ToolError.mjs"() { - ToolError = /* @__PURE__ */ (() => { - class ToolError2 extends Error { - constructor(content) { - const message = typeof content === "string" ? content : content.map((block) => { - if (block.type === "text") - return block.text; - return `[${block.type}]`; - }).join(" "); - super(message); - this.name = "ToolError"; - this.content = content; - } - } - return ToolError2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/lib/tools/BetaRunnableTool.mjs -function toolName(tool) { - return "name" in tool ? tool.name : "mcp_server_name" in tool ? tool.mcp_server_name : tool.type; -} -function toolErrorContent(e) { - return e instanceof ToolError ? e.content : `Error: ${e instanceof Error ? e.message : String(e)}`; -} -async function runRunnableTool(tool, rawInput, context) { - try { - const input = tool.parse ? tool.parse(rawInput) : rawInput; - const content = await tool.run(input, context); - return { content, isError: false }; - } catch (e) { - return { content: toolErrorContent(e), isError: true }; - } -} -var init_BetaRunnableTool = __esm({ - "node_modules/@anthropic-ai/sdk/lib/tools/BetaRunnableTool.mjs"() { - init_ToolError(); - } -}); - -// node_modules/@anthropic-ai/sdk/lib/tools/SessionToolRunner.mjs -function isEndTurnIdle(ev) { - return ev.type === "session.status_idle" && ev.stop_reason?.type === "end_turn"; -} -function buildResultEvent(ev, isError, content) { - if (ev.type === "agent.custom_tool_use") { - return { type: "user.custom_tool_result", custom_tool_use_id: ev.id, is_error: isError, content }; - } - return { type: "user.tool_result", tool_use_id: ev.id, is_error: isError, content }; -} -function toSessionContent(content) { - if (typeof content === "string") - return [{ type: "text", text: content || "(no output)" }]; - const out = content.map((b) => { - if (b.type === "text") - return { type: "text", text: b.text || "(no output)" }; - if (b.type === "image" || b.type === "document") - return b; - if (b.type === "search_result") { - return { - type: "search_result", - source: b.source, - title: b.title, - content: b.content.map((c) => ({ type: "text", text: c.text })), - citations: { enabled: b.citations?.enabled ?? false } - }; - } - return { type: "text", text: JSON.stringify(b) }; - }); - return out.length > 0 ? out : [{ type: "text", text: "(no output)" }]; -} -var _IdleClock_maxIdleMs, _IdleClock_onExpire, _IdleClock_blockers, _IdleClock_armPending, _IdleClock_timer, _SessionToolRunner_instances, _SessionToolRunner_consumed, _SessionToolRunner_controller, _SessionToolRunner_detachExternal, _SessionToolRunner_requestOpts, _SessionToolRunner_toolByName, _SessionToolRunner_logger, _SessionToolRunner_seen, _SessionToolRunner_answered, _SessionToolRunner_confirmationVerdicts, _SessionToolRunner_awaitingConfirmation, _SessionToolRunner_results, _SessionToolRunner_inFlightCount, _SessionToolRunner_sendRetryWindowMs, _SessionToolRunner_onIdle, _SessionToolRunner_idleClock, _SessionToolRunner_requestOptions, _SessionToolRunner_streamLoop, _SessionToolRunner_reconcile, _SessionToolRunner_ingestHistory, _SessionToolRunner_handleStreamEvent, _SessionToolRunner_routeToolEvent, _SessionToolRunner_noteConfirmation, _SessionToolRunner_applyVerdict, _SessionToolRunner_surfaceCall, _SessionToolRunner_execute, _SessionToolRunner_sendResult, _SessionToolRunner_drain, STREAM_BACKOFF_START_MS, STREAM_BACKOFF_CAP_MS, TOOL_TIMEOUT_MS, DRAIN_TIMEOUT_MS, SEND_BACKOFF_START_MS, SEND_BACKOFF_CAP_MS, SEND_RETRY_WINDOW_MS, DEFAULT_MAX_IDLE_MS, IdleClock, SessionToolRunner; -var init_SessionToolRunner = __esm({ - "node_modules/@anthropic-ai/sdk/lib/tools/SessionToolRunner.mjs"() { - init_tslib(); - init_error(); - init_log(); - init_sleep(); - init_backoff(); - init_abort2(); - init_async_queue(); - init_headers(); - init_stainless_helper_header(); - init_BetaRunnableTool(); - STREAM_BACKOFF_START_MS = 500; - STREAM_BACKOFF_CAP_MS = 1e4; - TOOL_TIMEOUT_MS = 12e4; - DRAIN_TIMEOUT_MS = 3e4; - SEND_BACKOFF_START_MS = 1e3; - SEND_BACKOFF_CAP_MS = 3e4; - SEND_RETRY_WINDOW_MS = 5 * 6e4; - DEFAULT_MAX_IDLE_MS = 6e4; - IdleClock = /* @__PURE__ */ (() => { - class IdleClock2 { - constructor(maxIdleMs, onExpire) { - _IdleClock_maxIdleMs.set(this, void 0); - _IdleClock_onExpire.set(this, void 0); - _IdleClock_blockers.set(this, /* @__PURE__ */ new Set()); - _IdleClock_armPending.set(this, false); - _IdleClock_timer.set(this, void 0); - __classPrivateFieldSet(this, _IdleClock_maxIdleMs, maxIdleMs, "f"); - __classPrivateFieldSet(this, _IdleClock_onExpire, onExpire, "f"); - } - /** - * Arm on `status_idle{end_turn}`; disarm otherwise. `user.tool_confirmation` - * is neutral: it signals neither agent activity nor an idle, and its effect - * on the clock flows through {@link block} / {@link unblock} instead — - * disarming here would discard the pending arm the verdict is about to - * settle. - */ - noteEvent(ev) { - if (ev.type === "user.tool_confirmation") - return; - if (isEndTurnIdle(ev)) - this.arm(); - else - this.disarm(); - } - /** Register gated work that must resolve before an idle countdown starts. */ - block(toolUseId) { - __classPrivateFieldGet(this, _IdleClock_blockers, "f").add(toolUseId); - if (__classPrivateFieldGet(this, _IdleClock_timer, "f") !== void 0) { - __classPrivateFieldSet(this, _IdleClock_armPending, true, "f"); - clearTimeout(__classPrivateFieldGet(this, _IdleClock_timer, "f")); - __classPrivateFieldSet(this, _IdleClock_timer, void 0, "f"); - } - } - /** - * Retire gated work (a no-op for ids never blocked); applies a pending arm — - * with a fresh full `maxIdleMs` window — once the last blocker retires. - */ - unblock(toolUseId) { - __classPrivateFieldGet(this, _IdleClock_blockers, "f").delete(toolUseId); - if (__classPrivateFieldGet(this, _IdleClock_blockers, "f").size === 0 && __classPrivateFieldGet(this, _IdleClock_armPending, "f")) - this.arm(); - } - /** - * (Re)start the idle countdown — or, while blockers are outstanding, hold - * the arm pending instead. Stopping then would drop a held call when its - * verdict later arrives, or cut the runner off before a released call's - * result can drive the next turn. - */ - arm() { - if (__classPrivateFieldGet(this, _IdleClock_maxIdleMs, "f") <= 0) - return; - if (__classPrivateFieldGet(this, _IdleClock_blockers, "f").size > 0) { - __classPrivateFieldSet(this, _IdleClock_armPending, true, "f"); - return; - } - __classPrivateFieldSet(this, _IdleClock_armPending, false, "f"); - if (__classPrivateFieldGet(this, _IdleClock_timer, "f") !== void 0) - clearTimeout(__classPrivateFieldGet(this, _IdleClock_timer, "f")); - __classPrivateFieldSet(this, _IdleClock_timer, setTimeout(__classPrivateFieldGet(this, _IdleClock_onExpire, "f"), __classPrivateFieldGet(this, _IdleClock_maxIdleMs, "f")), "f"); - } - /** - * Cancel the idle countdown and any pending arm. Blockers persist — they - * track real outstanding work, retired only by {@link unblock}. - */ - disarm() { - __classPrivateFieldSet(this, _IdleClock_armPending, false, "f"); - if (__classPrivateFieldGet(this, _IdleClock_timer, "f") !== void 0) { - clearTimeout(__classPrivateFieldGet(this, _IdleClock_timer, "f")); - __classPrivateFieldSet(this, _IdleClock_timer, void 0, "f"); - } - } - } - _IdleClock_maxIdleMs = /* @__PURE__ */ new WeakMap(), _IdleClock_onExpire = /* @__PURE__ */ new WeakMap(), _IdleClock_blockers = /* @__PURE__ */ new WeakMap(), _IdleClock_armPending = /* @__PURE__ */ new WeakMap(), _IdleClock_timer = /* @__PURE__ */ new WeakMap(); - return IdleClock2; - })(); - SessionToolRunner = /* @__PURE__ */ (() => { - class SessionToolRunner2 { - constructor(sessionId, opts) { - _SessionToolRunner_instances.add(this); - _SessionToolRunner_consumed.set(this, false); - _SessionToolRunner_controller.set(this, void 0); - _SessionToolRunner_detachExternal.set(this, void 0); - _SessionToolRunner_requestOpts.set(this, void 0); - _SessionToolRunner_toolByName.set(this, void 0); - _SessionToolRunner_logger.set(this, void 0); - _SessionToolRunner_seen.set(this, /* @__PURE__ */ new Set()); - _SessionToolRunner_answered.set(this, /* @__PURE__ */ new Set()); - _SessionToolRunner_confirmationVerdicts.set(this, /* @__PURE__ */ new Map()); - _SessionToolRunner_awaitingConfirmation.set(this, /* @__PURE__ */ new Map()); - _SessionToolRunner_results.set(this, new AsyncQueue()); - _SessionToolRunner_inFlightCount.set(this, 0); - _SessionToolRunner_sendRetryWindowMs.set(this, SEND_RETRY_WINDOW_MS); - _SessionToolRunner_onIdle.set(this, null); - _SessionToolRunner_idleClock.set(this, void 0); - this.client = opts.client; - this.sessionId = sessionId; - this.tools = opts.tools; - this.maxIdleMs = opts.maxIdleMs ?? DEFAULT_MAX_IDLE_MS; - __classPrivateFieldSet(this, _SessionToolRunner_logger, loggerFor(opts.client), "f"); - __classPrivateFieldSet(this, _SessionToolRunner_toolByName, new Map(opts.tools.map((t) => [toolName(t), t])), "f"); - __classPrivateFieldSet(this, _SessionToolRunner_controller, new AbortController(), "f"); - __classPrivateFieldSet(this, _SessionToolRunner_detachExternal, linkAbort(opts.signal, __classPrivateFieldGet(this, _SessionToolRunner_controller, "f")), "f"); - __classPrivateFieldSet(this, _SessionToolRunner_requestOpts, opts.requestOptions, "f"); - __classPrivateFieldSet(this, _SessionToolRunner_idleClock, new IdleClock(this.maxIdleMs, () => { - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").info("session idle after end_turn; stopping", { - component: "session-tool-runner", - session_id: this.sessionId, - max_idle_ms: this.maxIdleMs - }); - __classPrivateFieldGet(this, _SessionToolRunner_controller, "f").abort(); - }), "f"); - } - /** Read-only view of this runner's abort signal. */ - get signal() { - return __classPrivateFieldGet(this, _SessionToolRunner_controller, "f").signal; - } - /** Abort the runner. Background tasks will wind down and `for await` will exit cleanly. */ - abort() { - __classPrivateFieldGet(this, _SessionToolRunner_controller, "f").abort(); - } - /** - * @internal - * `EnvironmentWorker` keeps this equal to the lease TTL each heartbeat - * reports; applies to a send already retrying. - */ - _setSendRetryWindow(ms) { - __classPrivateFieldSet(this, _SessionToolRunner_sendRetryWindowMs, ms, "f"); - } - async *[(_SessionToolRunner_consumed = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_controller = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_detachExternal = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_requestOpts = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_toolByName = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_logger = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_seen = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_answered = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_confirmationVerdicts = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_awaitingConfirmation = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_results = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_inFlightCount = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_sendRetryWindowMs = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_onIdle = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_idleClock = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_instances = /* @__PURE__ */ new WeakSet(), Symbol.asyncIterator)]() { - if (__classPrivateFieldGet(this, _SessionToolRunner_consumed, "f")) { - throw new AnthropicError("Cannot iterate over a consumed SessionToolRunner"); - } - __classPrivateFieldSet(this, _SessionToolRunner_consumed, true, "f"); - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").info("session tool runner starting", { - component: "session-tool-runner", - session_id: this.sessionId - }); - const streamPromise = __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_streamLoop).call(this).catch((e) => { - if (!__classPrivateFieldGet(this, _SessionToolRunner_controller, "f").signal.aborted) { - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").error("stream loop failed", { error: String(e) }); - } - __classPrivateFieldGet(this, _SessionToolRunner_controller, "f").abort(); - }); - try { - while (true) { - const next = await __classPrivateFieldGet(this, _SessionToolRunner_results, "f").next(__classPrivateFieldGet(this, _SessionToolRunner_controller, "f").signal); - if (next.done) - break; - yield next.value; - } - await streamPromise; - let pending; - while ((pending = __classPrivateFieldGet(this, _SessionToolRunner_results, "f").tryShift()) !== void 0) { - yield pending; - } - } finally { - __classPrivateFieldGet(this, _SessionToolRunner_controller, "f").abort(); - __classPrivateFieldGet(this, _SessionToolRunner_idleClock, "f").disarm(); - await streamPromise; - try { - await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_drain).call(this); - } catch (e) { - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").warn("drain failed", { error: String(e) }); - } - __classPrivateFieldGet(this, _SessionToolRunner_results, "f").close(); - for (const t of this.tools) { - try { - await t.close?.(); - } catch (e) { - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").warn("tool.close failed", { tool: toolName(t), error: String(e) }); - } - } - __classPrivateFieldGet(this, _SessionToolRunner_detachExternal, "f").call(this); - } - } - } - _SessionToolRunner_requestOptions = function _SessionToolRunner_requestOptions2() { - return { - ...__classPrivateFieldGet(this, _SessionToolRunner_requestOpts, "f"), - headers: buildHeaders([helperHeader("session-tool-runner"), __classPrivateFieldGet(this, _SessionToolRunner_requestOpts, "f")?.headers]), - signal: __classPrivateFieldGet(this, _SessionToolRunner_controller, "f").signal - }; - }, _SessionToolRunner_streamLoop = // ===== event stream ===== - async function _SessionToolRunner_streamLoop2() { - const ctrl = __classPrivateFieldGet(this, _SessionToolRunner_controller, "f"); - let backoff3 = STREAM_BACKOFF_START_MS; - while (!ctrl.signal.aborted) { - try { - const stream5 = await this.client.beta.sessions.events.stream(this.sessionId, {}, __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_requestOptions).call(this)); - await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_reconcile).call(this); - for await (const ev of stream5) { - backoff3 = STREAM_BACKOFF_START_MS; - if (await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_handleStreamEvent).call(this, ev)) - return; - } - } catch (e) { - ctrl.signal.throwIfAborted(); - if (isFatal4xx(e)) { - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").error("permanent stream failure, shutting down", { error: String(e) }); - ctrl.abort(); - throw e; - } - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").warn("stream disconnected, reconnecting", { - error: String(e), - backoff_ms: backoff3 - }); - } - ctrl.signal.throwIfAborted(); - await sleep(backoff3, ctrl.signal); - backoff3 = Math.min(backoff3 * 2, STREAM_BACKOFF_CAP_MS); - } - }, _SessionToolRunner_reconcile = /** - * Read full history before dispatching so a `tool_use` whose result appears - * later in the same history is not re-executed. Runs after the live stream is - * already attached (see {@link SessionToolRunner.#streamLoop}). - */ - async function _SessionToolRunner_reconcile2() { - const ctrl = __classPrivateFieldGet(this, _SessionToolRunner_controller, "f"); - const pending = []; - let lastWasEndTurn = false; - try { - for await (const ev of this.client.beta.sessions.events.list(this.sessionId, { limit: 1e3 }, __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_requestOptions).call(this))) { - __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_ingestHistory).call(this, ev, pending); - lastWasEndTurn = isEndTurnIdle(ev); - } - } catch (e) { - ctrl.signal.throwIfAborted(); - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").warn("reconcile list failed", { error: String(e) }); - for (const ev of pending) - __classPrivateFieldGet(this, _SessionToolRunner_seen, "f").delete(ev.id); - return; - } - const unanswered = pending.filter((ev) => !__classPrivateFieldGet(this, _SessionToolRunner_answered, "f").has(ev.id)); - __classPrivateFieldGet(this, _SessionToolRunner_idleClock, "f").disarm(); - for (const ev of unanswered) - await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_routeToolEvent).call(this, ev); - for (const held of [...__classPrivateFieldGet(this, _SessionToolRunner_awaitingConfirmation, "f").values()]) { - const verdict = __classPrivateFieldGet(this, _SessionToolRunner_confirmationVerdicts, "f").get(held.id); - if (verdict !== void 0) - await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_applyVerdict).call(this, held, verdict); - } - const outstanding = unanswered.filter((ev) => !__classPrivateFieldGet(this, _SessionToolRunner_answered, "f").has(ev.id) && !__classPrivateFieldGet(this, _SessionToolRunner_awaitingConfirmation, "f").has(ev.id)); - if (lastWasEndTurn && outstanding.length === 0) - __classPrivateFieldGet(this, _SessionToolRunner_idleClock, "f").arm(); - else - __classPrivateFieldGet(this, _SessionToolRunner_idleClock, "f").disarm(); - }, _SessionToolRunner_ingestHistory = function _SessionToolRunner_ingestHistory2(ev, pending) { - if (ev.type === "agent.tool_use" || ev.type === "agent.custom_tool_use") { - __classPrivateFieldGet(this, _SessionToolRunner_seen, "f").add(ev.id); - if (!__classPrivateFieldGet(this, _SessionToolRunner_answered, "f").has(ev.id)) - pending.push(ev); - } else if (ev.type === "user.tool_result") { - __classPrivateFieldGet(this, _SessionToolRunner_answered, "f").add(ev.tool_use_id); - } else if (ev.type === "user.custom_tool_result") { - __classPrivateFieldGet(this, _SessionToolRunner_answered, "f").add(ev.custom_tool_use_id); - } else if (ev.type === "user.tool_confirmation") { - if (!__classPrivateFieldGet(this, _SessionToolRunner_answered, "f").has(ev.tool_use_id)) - __classPrivateFieldGet(this, _SessionToolRunner_confirmationVerdicts, "f").set(ev.tool_use_id, ev.result); - } - }, _SessionToolRunner_handleStreamEvent = /** Returns true when the runner should exit. */ - async function _SessionToolRunner_handleStreamEvent2(ev) { - __classPrivateFieldGet(this, _SessionToolRunner_idleClock, "f").noteEvent(ev); - switch (ev.type) { - case "agent.tool_use": - case "agent.custom_tool_use": - if (!__classPrivateFieldGet(this, _SessionToolRunner_seen, "f").has(ev.id)) { - __classPrivateFieldGet(this, _SessionToolRunner_seen, "f").add(ev.id); - await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_routeToolEvent).call(this, ev); - } - return false; - case "user.tool_confirmation": - await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_noteConfirmation).call(this, ev); - return false; - case "user.tool_result": - __classPrivateFieldGet(this, _SessionToolRunner_answered, "f").add(ev.tool_use_id); - return false; - case "user.custom_tool_result": - __classPrivateFieldGet(this, _SessionToolRunner_answered, "f").add(ev.custom_tool_use_id); - return false; - case "session.status_terminated": - case "session.deleted": - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").info("session terminated", { - component: "session-tool-runner", - session_id: this.sessionId - }); - __classPrivateFieldGet(this, _SessionToolRunner_controller, "f").abort(); - return true; - default: - return false; - } - }, _SessionToolRunner_routeToolEvent = // ===== confirmation gating (always_ask tools) ===== - /** - * Dispatch `ev`, honoring its evaluated permission. A call the server gated - * (`evaluated_permission == "ask"`) is held until its `user.tool_confirmation` - * arrives. Fails closed: only an explicit `allow` verdict releases a gated - * call; a server-side `deny` overrides any recorded verdict; an unrecognized - * permission is held like `ask` and an unrecognized verdict is denied. - */ - async function _SessionToolRunner_routeToolEvent2(ev) { - const permission = ev.evaluated_permission; - const verdict = permission === "deny" ? "deny" : __classPrivateFieldGet(this, _SessionToolRunner_confirmationVerdicts, "f").get(ev.id); - if (verdict === void 0) { - if (permission === void 0 || permission === "allow") { - await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_execute).call(this, ev, void 0); - } else if (!__classPrivateFieldGet(this, _SessionToolRunner_awaitingConfirmation, "f").has(ev.id)) { - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").info("tool call awaiting confirmation; holding", { - component: "session-tool-runner", - session_id: this.sessionId, - tool: ev.name, - tool_use_id: ev.id - }); - __classPrivateFieldGet(this, _SessionToolRunner_awaitingConfirmation, "f").set(ev.id, ev); - __classPrivateFieldGet(this, _SessionToolRunner_idleClock, "f").block(ev.id); - } - return; - } - await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_applyVerdict).call(this, ev, verdict); - }, _SessionToolRunner_noteConfirmation = /** Record an allow/deny verdict and release the held call it gates, if any. */ - async function _SessionToolRunner_noteConfirmation2(ev) { - __classPrivateFieldGet(this, _SessionToolRunner_confirmationVerdicts, "f").set(ev.tool_use_id, ev.result); - const held = __classPrivateFieldGet(this, _SessionToolRunner_awaitingConfirmation, "f").get(ev.tool_use_id); - if (held === void 0) - return; - await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_applyVerdict).call(this, held, ev.result); - }, _SessionToolRunner_applyVerdict = /** - * Dispatch or resolve a gated call according to its verdict. - * - * The idle-clock blocker accounting lives here: a denial retires the held - * call's blocker, while an allow keeps one on the call — taking it now if the - * verdict was already known when the call was routed, so it was never held — - * until `#execute` has finished with it. The countdown must not run over - * gated work that is still in flight. - */ - async function _SessionToolRunner_applyVerdict2(ev, verdict) { - const wasHeld = __classPrivateFieldGet(this, _SessionToolRunner_awaitingConfirmation, "f").delete(ev.id); - if (verdict === "allow") { - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").info("tool call confirmed", { - component: "session-tool-runner", - session_id: this.sessionId, - tool: ev.name, - tool_use_id: ev.id - }); - if (!wasHeld) - __classPrivateFieldGet(this, _SessionToolRunner_idleClock, "f").block(ev.id); - try { - await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_execute).call(this, ev, "allow"); - } finally { - __classPrivateFieldGet(this, _SessionToolRunner_idleClock, "f").unblock(ev.id); - } - return; - } - if (wasHeld) - __classPrivateFieldGet(this, _SessionToolRunner_idleClock, "f").unblock(ev.id); - __classPrivateFieldGet(this, _SessionToolRunner_answered, "f").add(ev.id); - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").info("tool call denied; not executing", { - component: "session-tool-runner", - session_id: this.sessionId, - tool: ev.name, - tool_use_id: ev.id - }); - __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_surfaceCall).call(this, { - event: ev, - toolUseId: ev.id, - name: ev.name, - isError: false, - posted: false, - confirmation: "deny" - }); - }, _SessionToolRunner_surfaceCall = function _SessionToolRunner_surfaceCall2(call) { - __classPrivateFieldGet(this, _SessionToolRunner_results, "f").push(call); - }, _SessionToolRunner_execute = // ===== tool execution ===== - async function _SessionToolRunner_execute2(ev, confirmation) { - var _a6, _b; - if (__classPrivateFieldGet(this, _SessionToolRunner_answered, "f").has(ev.id)) - return; - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").info("executing tool", { - component: "session-tool-runner", - session_id: this.sessionId, - tool: ev.name, - tool_use_id: ev.id - }); - __classPrivateFieldSet(this, _SessionToolRunner_inFlightCount, (_a6 = __classPrivateFieldGet(this, _SessionToolRunner_inFlightCount, "f"), _a6++, _a6), "f"); - try { - const tool = __classPrivateFieldGet(this, _SessionToolRunner_toolByName, "f").get(ev.name); - if (!tool) { - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").info("tool not owned by this runner; leaving the tool_use_id pending for its owner", { - component: "session-tool-runner", - session_id: this.sessionId, - tool: ev.name, - tool_use_id: ev.id - }); - __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_surfaceCall).call(this, { - event: ev, - toolUseId: ev.id, - name: ev.name, - isError: false, - posted: false, - confirmation - }); - return; - } - let content; - let isError; - const toolCtrl = new AbortController(); - const detachTool = linkAbort(__classPrivateFieldGet(this, _SessionToolRunner_controller, "f").signal, toolCtrl); - const timer = setTimeout(() => toolCtrl.abort(), TOOL_TIMEOUT_MS); - try { - const outcome = await runRunnableTool(tool, ev.input, { - toolUse: ev, - toolUseBlock: ev, - signal: toolCtrl.signal - }); - content = outcome.content; - isError = outcome.isError; - } finally { - clearTimeout(timer); - detachTool(); - } - const result = buildResultEvent(ev, isError, toSessionContent(content)); - const posted = await __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_sendResult).call(this, result, ev.id); - __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_surfaceCall).call(this, { - event: ev, - result, - toolUseId: ev.id, - name: ev.name, - isError, - posted, - confirmation - }); - } finally { - __classPrivateFieldSet(this, _SessionToolRunner_inFlightCount, (_b = __classPrivateFieldGet(this, _SessionToolRunner_inFlightCount, "f"), _b--, _b), "f"); - if (__classPrivateFieldGet(this, _SessionToolRunner_inFlightCount, "f") === 0) - __classPrivateFieldGet(this, _SessionToolRunner_onIdle, "f")?.call(this); - } - }, _SessionToolRunner_sendResult = async function _SessionToolRunner_sendResult2(result, toolUseId) { - const ctrl = __classPrivateFieldGet(this, _SessionToolRunner_controller, "f"); - const start = Date.now(); - let lastErr; - let attempt = 0; - while (true) { - attempt++; - ctrl.signal.throwIfAborted(); - try { - await this.client.beta.sessions.events.send(this.sessionId, { events: [result] }, __classPrivateFieldGet(this, _SessionToolRunner_instances, "m", _SessionToolRunner_requestOptions).call(this)); - __classPrivateFieldGet(this, _SessionToolRunner_answered, "f").add(toolUseId); - return true; - } catch (e) { - lastErr = e; - if (isFatal4xx(e)) - break; - const remainingMs = __classPrivateFieldGet(this, _SessionToolRunner_sendRetryWindowMs, "f") - (Date.now() - start); - if (remainingMs <= 0) - break; - const waitMs = Math.min(applyJitter(backoff(attempt - 1, SEND_BACKOFF_START_MS, SEND_BACKOFF_CAP_MS)), remainingMs); - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").warn("tool result send failed; retrying", { - tool_use_id: toolUseId, - attempt, - backoff_ms: waitMs, - error: String(e) - }); - await sleep(waitMs, ctrl.signal); - } - } - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").error("failed to send tool result", { - tool_use_id: toolUseId, - attempts: attempt, - error: String(lastErr) - }); - return false; - }, _SessionToolRunner_drain = /** Wait (bounded) for in-flight tool executions to finish during teardown. */ - async function _SessionToolRunner_drain2() { - if (__classPrivateFieldGet(this, _SessionToolRunner_inFlightCount, "f") === 0) - return; - await Promise.race([new Promise((r) => __classPrivateFieldSet(this, _SessionToolRunner_onIdle, r, "f")), sleep(DRAIN_TIMEOUT_MS)]); - __classPrivateFieldSet(this, _SessionToolRunner_onIdle, null, "f"); - if (__classPrivateFieldGet(this, _SessionToolRunner_inFlightCount, "f") > 0) { - __classPrivateFieldGet(this, _SessionToolRunner_logger, "f").warn("drain timeout exceeded"); - } - }; - return SessionToolRunner2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/tools/agent-toolset/sync-interval.mjs -function checkMemorySyncInterval(ms, option) { - if (!(ms >= MIN_MEMORY_SYNC_INTERVAL_MS)) { - throw new AnthropicError(`${option} must be at least ${MIN_MEMORY_SYNC_INTERVAL_MS}ms (got ${ms}); to run without memory sync, pass \`memorySyncIntervalMs: null\` to the worker instead`); - } -} -var DEFAULT_MEMORY_SYNC_INTERVAL_MS, MIN_MEMORY_SYNC_INTERVAL_MS; -var init_sync_interval = __esm({ - "node_modules/@anthropic-ai/sdk/tools/agent-toolset/sync-interval.mjs"() { - init_error(); - DEFAULT_MEMORY_SYNC_INTERVAL_MS = 15e3; - MIN_MEMORY_SYNC_INTERVAL_MS = 5e3; - } -}); - -// node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.mjs -var node_browser_exports2 = {}; -__export(node_browser_exports2, { - BashSession: () => BashSession, - BashTimeoutError: () => BashTimeoutError, - DEFAULT_MEMORY_SYNC_INTERVAL_MS: () => DEFAULT_MEMORY_SYNC_INTERVAL_MS, - MARKER_PATH: () => MARKER_PATH, - MEMORY_FLUSH_TIMEOUT_MS: () => MEMORY_FLUSH_TIMEOUT_MS, - MIN_MEMORY_SYNC_INTERVAL_MS: () => MIN_MEMORY_SYNC_INTERVAL_MS, - SessionMemoryError: () => SessionMemoryError, - SessionMemoryStores: () => SessionMemoryStores, - betaAgentToolset20260401: () => betaAgentToolset20260401, - betaBashTool: () => betaBashTool, - betaEditTool: () => betaEditTool, - betaGlobTool: () => betaGlobTool, - betaGrepTool: () => betaGrepTool, - betaReadTool: () => betaReadTool, - betaWriteTool: () => betaWriteTool, - extractSkillArchive: () => extractSkillArchive, - resolvePath: () => resolvePath, - setupSkills: () => setupSkills -}); -function nodeOnly(name) { - throw new AnthropicError(`${name} requires Node.js or a Node-compatible runtime`); -} -function setupSkills(_ctx) { - return nodeOnly("setupSkills"); -} -function extractSkillArchive(_resp, _dest) { - return nodeOnly("extractSkillArchive"); -} -function betaAgentToolset20260401(_ctx) { - return nodeOnly("betaAgentToolset20260401"); -} -function resolvePath(_ctx, _p) { - return nodeOnly("resolvePath"); -} -function betaBashTool(_ctx) { - return nodeOnly("betaBashTool"); -} -function betaReadTool(_ctx) { - return nodeOnly("betaReadTool"); -} -function betaWriteTool(_ctx) { - return nodeOnly("betaWriteTool"); -} -function betaEditTool(_ctx) { - return nodeOnly("betaEditTool"); -} -function betaGlobTool(_ctx) { - return nodeOnly("betaGlobTool"); -} -function betaGrepTool(_ctx) { - return nodeOnly("betaGrepTool"); -} -var MEMORY_FLUSH_TIMEOUT_MS, MARKER_PATH, SessionMemoryError, SessionMemoryStores, BashTimeoutError, BashSession; -var init_node_browser2 = __esm({ - "node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.mjs"() { - init_error(); - init_sync_interval(); - MEMORY_FLUSH_TIMEOUT_MS = 3e4; - MARKER_PATH = ".anthropic-memory-store"; - SessionMemoryError = class extends AnthropicError { - constructor(message, cause) { - super(message); - this.name = "SessionMemoryError"; - if (cause !== void 0) - this.cause = cause; - } - }; - SessionMemoryStores = class { - constructor(_client, _opts) { - nodeOnly("SessionMemoryStores"); - } - get roots() { - return nodeOnly("SessionMemoryStores"); - } - get readOnlyRoots() { - return nodeOnly("SessionMemoryStores"); - } - download(_session) { - return nodeOnly("SessionMemoryStores"); - } - finish() { - return nodeOnly("SessionMemoryStores"); - } - /** @internal */ - syncAll(_final) { - return nodeOnly("SessionMemoryStores"); - } - syncIfDue() { - return nodeOnly("SessionMemoryStores"); - } - flushWrites(_signal) { - return nodeOnly("SessionMemoryStores"); - } - dispose() { - return nodeOnly("SessionMemoryStores"); - } - }; - BashTimeoutError = class extends AnthropicError { - constructor(timeoutMs) { - super(`bash command timed out after ${timeoutMs}ms`); - this.name = "BashTimeoutError"; - this.timeoutMs = timeoutMs; - } - }; - BashSession = class { - constructor(_dir, _env) { - nodeOnly("BashSession"); - } - get closed() { - return nodeOnly("BashSession"); - } - exec(_command, _opts = {}) { - return nodeOnly("BashSession"); - } - close() { - nodeOnly("BashSession"); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/lib/environments/worker.mjs -function hasMemoryStore(session) { - return session.resources.some((r) => r.type === "memory_store"); -} -function sessionsTokenFromSecret(secret) { - if (!secret) - return null; - let parsed; - try { - const normalized = secret.replace(/-/g, "+").replace(/_/g, "/"); - const padded = normalized.padEnd(Math.ceil(normalized.length / 4) * 4, "="); - parsed = JSON.parse(decodeUTF8(fromBase64(padded))); - } catch { - return null; - } - if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) - return null; - const token = parsed.sessions_token; - return typeof token === "string" && token !== "" ? token : null; -} -async function withTimeout(p, ms) { - let timer; - try { - return await Promise.race([ - p.then(() => false, () => false), - new Promise((resolve2) => { - timer = setTimeout(() => resolve2(true), ms); - }) - ]); - } finally { - if (timer !== void 0) - clearTimeout(timer); - } -} -async function forceStop(client, work, log, requestOptions) { - try { - await client.beta.environments.work.stop( - work.id, - { environment_id: work.environment_id, force: true }, - // Caller's headers pass through; the helper-tag header is on the scoped - // sub-client's default_headers via copyClientForHelper, so no per-call - // re-stamping needed. - { ...requestOptions, headers: buildHeaders([requestOptions?.headers]) } - ); - } catch (e) { - if (!isStatus(e, 409)) { - log.error("force-stop on exit failed", { work_id: work.id, error: String(e) }); - } - } -} -function serverLeaseState(e) { - let node = e instanceof APIError ? e.error : void 0; - for (const key of ["error", "details", "current_state"]) { - if (!isObj(node)) - return {}; - node = node[key]; - } - return isObj(node) ? node : {}; -} -async function heartbeatLoop(client, work, lease, logger, requestOptions, onLeaseTtl) { - let intervalMs = HEARTBEAT_DEFAULT_MS; - let ttlMs = HEARTBEAT_TTL_DEFAULT_MS; - let lastSuccessMs = Date.now(); - let last = NO_HEARTBEAT_SENTINEL; - const beat = async () => { - const beatCtrl = new AbortController(); - const detach = linkAbort(lease.signal, beatCtrl); - const cutoff = setTimeout(() => beatCtrl.abort(), intervalMs); - try { - const resp = await client.beta.environments.work.heartbeat(work.id, { environment_id: work.environment_id, expected_last_heartbeat: last }, { ...requestOptions, headers: buildHeaders([requestOptions?.headers]), signal: beatCtrl.signal }); - lastSuccessMs = Date.now(); - last = resp.last_heartbeat; - if (resp.ttl_seconds > 0) { - ttlMs = resp.ttl_seconds * 1e3; - intervalMs = Math.max(1e3, Math.min(ttlMs / 2, HEARTBEAT_DEFAULT_MS)); - onLeaseTtl?.(ttlMs); - } - if (resp.state === "stopping" || resp.state === "stopped") { - logger.info("heartbeat signals shutdown", { work_id: work.id, state: resp.state }); - lease.finish("control_plane_stop"); - } - if (!resp.lease_extended) { - logger.warn("lease not extended, shutting down", { work_id: work.id }); - lease.finish("control_plane_stop"); - } - } catch (e) { - lease.signal.throwIfAborted(); - if (isStatus(e, 412)) { - const server = serverLeaseState(e); - logger.error("lease lost: heartbeat precondition failed", { - work_id: work.id, - server_state: server["state"], - server_ttl_seconds: server["ttl_seconds"], - server_last_heartbeat: server["last_heartbeat"] - }); - lease.finish("lease_lost"); - return; - } - if (isFatal4xx(e)) { - logger.error("permanent heartbeat failure", { work_id: work.id, error: String(e) }); - lease.finish("heartbeat_rejected"); - throw e; - } - if (Date.now() - lastSuccessMs > ttlMs) { - logger.error("lease assumed lost: no successful heartbeat in ttl", { - work_id: work.id, - ttl_ms: ttlMs, - error: String(e) - }); - lease.finish("assumed_lost"); - return; - } - logger.warn("transient heartbeat failure", { work_id: work.id, error: String(e) }); - } finally { - clearTimeout(cutoff); - detach(); - } - }; - await beat(); - while (!lease.signal.aborted) { - await sleep(intervalMs, lease.signal); - lease.signal.throwIfAborted(); - await beat(); - } -} -var _EnvironmentWorker_instances, _EnvironmentWorker_signal, _EnvironmentWorker_handleItem, _Lease_ctrl, _Lease_endReason, HEARTBEAT_DEFAULT_MS, HEARTBEAT_TTL_DEFAULT_MS, NO_HEARTBEAT_SENTINEL, EnvironmentWorker, Lease; -var init_worker = __esm({ - "node_modules/@anthropic-ai/sdk/lib/environments/worker.mjs"() { - init_tslib(); - init_error(); - init_log(); - init_base64(); - init_bytes(); - init_env(); - init_sleep(); - init_backoff(); - init_abort2(); - init_values(); - init_headers(); - init_SessionToolRunner(); - init_poller(); - init_helper_client(); - init_sync_interval(); - HEARTBEAT_DEFAULT_MS = 3e4; - HEARTBEAT_TTL_DEFAULT_MS = 9e4; - NO_HEARTBEAT_SENTINEL = "NO_HEARTBEAT"; - EnvironmentWorker = /* @__PURE__ */ (() => { - class EnvironmentWorker2 { - constructor(opts) { - _EnvironmentWorker_instances.add(this); - _EnvironmentWorker_signal.set(this, void 0); - if (opts.unrestrictedPaths !== void 0) { - throw new AnthropicError("The `unrestrictedPaths` option you passed to EnvironmentWorker (or client.beta.environments.work.worker()) is no longer supported. The worker's file tools (read, write, edit, glob, grep) are now always confined to `workdir` plus the session's memory folders. Remove `unrestrictedPaths` from your options; to let the file tools reach any other directory, add it to `AgentToolContext.allowedRoots` from a `tools` factory."); - } - this.client = opts.client; - this.environmentId = opts.environmentId; - this.environmentKey = opts.environmentKey; - this.tools = opts.tools; - this.workdir = opts.workdir ?? process.cwd(); - this.maxFileBytes = opts.maxFileBytes; - this.maxIdleMs = opts.maxIdleMs; - if (opts.memorySyncIntervalMs != null) { - checkMemorySyncInterval(opts.memorySyncIntervalMs, "memorySyncIntervalMs"); - } - this.memorySyncIntervalMs = opts.memorySyncIntervalMs; - this.memorySyncDeletions = opts.memorySyncDeletions ?? "enabled"; - this.workerId = opts.workerId; - this.requestOptions = opts.requestOptions; - __classPrivateFieldSet(this, _EnvironmentWorker_signal, opts.signal, "f"); - } - /** - * Poll the environment and service each claimed session until the supplied - * signal (or the one passed to the constructor) aborts. Throws if - * `environmentId` / `environmentKey` were not provided to the constructor. - */ - async run(signal) { - const { environmentId, environmentKey } = this; - if (environmentId === void 0 || environmentKey === void 0) { - throw new AnthropicError("EnvironmentWorker.run: environmentId and environmentKey are required to poll for work"); - } - const externalSignal = signal ?? __classPrivateFieldGet(this, _EnvironmentWorker_signal, "f"); - const poller = new WorkPoller({ - client: this.client, - environmentId, - environmentKey, - ...this.workerId !== void 0 ? { workerId: this.workerId } : {}, - ...externalSignal ? { signal: externalSignal } : {}, - ...this.requestOptions !== void 0 ? { requestOptions: this.requestOptions } : {}, - // The per-item handler stops or releases every work item on exit; let it - // be the single owner of `work.stop` rather than double-posting from the - // poller. - autoStop: false - }); - for await (const work of poller) { - try { - await __classPrivateFieldGet(this, _EnvironmentWorker_instances, "m", _EnvironmentWorker_handleItem).call(this, work, environmentKey, poller.signal); - } catch (e) { - if (poller.signal?.aborted) - throw e; - loggerFor(this.client).error("work item failed", { work_id: work.id, error: String(e) }); - } - } - } - /** - * Service a single, already-claimed work item without the poll loop: build the - * per-session {@link AgentToolContext} (workdir from this worker's options), - * download the session agent's skills (`setupSkills`), run a - * {@link SessionToolRunner} for the session while heartbeating the work-item - * lease, and force-stop the work item on exit (whether the runner finishes - * normally, throws, or the control plane signals shutdown). The one - * exception is a lost lease: the item then belongs to the queue or another - * worker and is left alone. - * - * Use this when something else does the claiming — e.g. a `worker poll - * --on-work` script that hands an already-claimed item to a fresh process. The - * work id / environment id / session id each fall back to `ANTHROPIC_WORK_ID` / - * `ANTHROPIC_ENVIRONMENT_ID` / `ANTHROPIC_SESSION_ID` (the env vars that - * command sets) when not passed; the environment key resolves from this - * option, then the worker's own `environmentKey`, then - * `ANTHROPIC_ENVIRONMENT_KEY`, and is needed only when the work item's - * `secret` yields no sessions token — a host that receives only the - * per-item secret runs without ever holding the key. With no arguments - * inside that command it just works. Throws a clear error naming the first - * required value still missing after resolution, and — rather than ever - * running unauthenticated — when neither a sessions token nor an - * environment key resolved. Throws `SessionMemoryError` when the - * session has memory stores attached but they cannot be mounted — the work - * item carried no sessions token (unless `memorySyncIntervalMs` turned - * memory off), or a store failed to download. - * - * `workSecret` is the work item's per-item `secret` payload from the poll - * response, falling back to `ANTHROPIC_WORK_SECRET`; unlike the others it is - * optional — when present, the sessions token extracted from it is preferred - * as the Bearer credential for this item's heartbeat / force-stop / session - * calls; when absent (or undecodable) those calls use the environment key. - */ - async handleItem(opts) { - const workId = opts?.workId ?? readEnv("ANTHROPIC_WORK_ID"); - const environmentId = opts?.environmentId ?? readEnv("ANTHROPIC_ENVIRONMENT_ID"); - const sessionId = opts?.sessionId ?? readEnv("ANTHROPIC_SESSION_ID"); - const environmentKey = (opts?.environmentKey ?? this.environmentKey ?? readEnv("ANTHROPIC_ENVIRONMENT_KEY")) || void 0; - const workSecret = opts?.workSecret || readEnv("ANTHROPIC_WORK_SECRET") || null; - if (!workId) { - throw new AnthropicError("handleItem: workId is required \u2014 pass it or set ANTHROPIC_WORK_ID"); - } - if (!environmentId) { - throw new AnthropicError("handleItem: environmentId is required \u2014 pass it or set ANTHROPIC_ENVIRONMENT_ID"); - } - if (!sessionId) { - throw new AnthropicError("handleItem: sessionId is required \u2014 pass it or set ANTHROPIC_SESSION_ID"); - } - if (!environmentKey && !workSecret) { - throw new AnthropicError("handleItem: environmentKey is required when there is no work secret \u2014 pass it, construct the worker with it, or set ANTHROPIC_ENVIRONMENT_KEY"); - } - const work = { - id: workId, - environment_id: environmentId, - secret: workSecret, - data: { type: "session", id: sessionId } - }; - await __classPrivateFieldGet(this, _EnvironmentWorker_instances, "m", _EnvironmentWorker_handleItem).call(this, work, environmentKey, opts?.signal ?? __classPrivateFieldGet(this, _EnvironmentWorker_signal, "f")); - } - } - _EnvironmentWorker_signal = /* @__PURE__ */ new WeakMap(), _EnvironmentWorker_instances = /* @__PURE__ */ new WeakSet(), _EnvironmentWorker_handleItem = /** - * The per-item body shared by {@link EnvironmentWorker.run}'s poll loop and - * {@link EnvironmentWorker.handleItem}: run a {@link SessionToolRunner} for the - * work item's session while heartbeating its lease, force-stopping on exit - * unless the lease was lost. Non-session work items are ignored. - * - * When the poll response carried a per-item `secret` (a short-lived payload - * scoped to this work item), the sessions token extracted from it is - * preferred over `environmentKey` as the Bearer credential for those - * per-item calls; a missing/undecodable secret falls back to - * `environmentKey` unchanged. - */ - async function _EnvironmentWorker_handleItem2(work, environmentKey, externalSignal) { - const log = loggerFor(this.client); - const sessionsToken = sessionsTokenFromSecret(work.secret); - const itemCredential = sessionsToken ?? environmentKey; - if (itemCredential === void 0) { - throw new AnthropicError("handleItem: the work item carried a secret payload but no sessions token could be extracted, and there is no environment key to fall back to; the poller must issue a secret whose payload carries `sessions_token`, or provide the environment key (pass it, construct the worker with it, or set ANTHROPIC_ENVIRONMENT_KEY)"); - } - if (work.secret && sessionsToken === null) { - log.warn("work item carried a secret payload but no sessions token could be extracted; falling back to the environment key", { work_id: work.id }); - } - const sessionClient = copyClientForHelper(this.client, { - authToken: itemCredential, - helper: "environments-worker" - }); - const sessionId = work.data.id; - const ctrl = new AbortController(); - const detachExternal = linkAbort(externalSignal, ctrl); - const lease = new Lease(ctrl); - const agentToolset = await Promise.resolve().then(() => (init_node_browser2(), node_browser_exports2)); - let leaseTtlMs; - let runner; - const heartbeatPromise = heartbeatLoop(sessionClient, work, lease, log, this.requestOptions, (ttlMs) => { - leaseTtlMs = ttlMs; - runner?._setSendRetryWindow(ttlMs); - }).catch((e) => { - if (!ctrl.signal.aborted) - log.error("heartbeat loop failed", { work_id: work.id, error: String(e) }); - ctrl.abort(); - }); - let cleanupSkills = async () => { - }; - let stores; - let cleanEnd = false; - try { - if (work.data.type !== "session") { - log.debug("skipping non-session work item", { work_id: work.id, type: work.data.type }); - return; - } - const session = await sessionClient.beta.sessions.retrieve(sessionId); - if (sessionsToken === null && this.memorySyncIntervalMs !== null && hasMemoryStore(session)) { - throw new agentToolset.SessionMemoryError(`cannot mount the session's memories: the work item carried no sessions token (work_id=${work.id}, session_id=${sessionId}); the memory endpoints reject the environment key, so the poller must issue a per-item \`secret\` carrying \`sessions_token\`, or set \`memorySyncIntervalMs: null\` to run without memory`); - } - const ctx = { - workdir: this.workdir, - // The scoped sub-client, not the parent: the skill download - // `setupSkills` performs for this session rides the same per-item - // credential as every other per-item call. - client: sessionClient, - session, - ...this.maxFileBytes !== void 0 ? { maxFileBytes: this.maxFileBytes } : {} - }; - try { - cleanupSkills = await agentToolset.setupSkills(ctx); - } catch (e) { - log.warn("skill setup failed", { session_id: sessionId, work_id: work.id, error: String(e) }); - } - if (sessionsToken !== null && this.memorySyncIntervalMs !== null) { - stores = new agentToolset.SessionMemoryStores(sessionClient, { - workdir: this.workdir, - ...this.memorySyncIntervalMs !== void 0 ? { syncIntervalMs: this.memorySyncIntervalMs } : {}, - syncDeletions: this.memorySyncDeletions - }); - await stores.download(session); - ctx.allowedRoots = stores.roots; - ctx.readOnlyRoots = stores.readOnlyRoots; - } else { - log.debug("memory stores disabled for this item", { work_id: work.id }); - } - const tools = typeof this.tools === "function" ? this.tools(ctx) : this.tools ?? agentToolset.betaAgentToolset20260401(ctx); - runner = new SessionToolRunner(sessionId, { - client: sessionClient, - tools, - ...this.maxIdleMs !== void 0 ? { maxIdleMs: this.maxIdleMs } : {}, - ...this.requestOptions !== void 0 ? { requestOptions: this.requestOptions } : {}, - signal: ctrl.signal - }); - if (leaseTtlMs !== void 0) - runner._setSendRetryWindow(leaseTtlMs); - for await (const _ of runner) { - if (stores) - await stores.syncIfDue(); - } - cleanEnd = !ctrl.signal.aborted; - } finally { - try { - await cleanupSkills().catch((e) => { - log.warn("skill cleanup failed", { session_id: sessionId, work_id: work.id, error: String(e) }); - }); - } finally { - if (stores) { - const boundMs = agentToolset.MEMORY_FLUSH_TIMEOUT_MS; - if (cleanEnd) { - const finishCutOff = await withTimeout(stores.finish(), boundMs); - if (finishCutOff) { - log.warn(`final memory sync cut off after ${boundMs}ms; the flush that follows still uploads changed files`, { session_id: sessionId, work_id: work.id }); - } - } - const flushBound = new AbortController(); - const flushCutOff = await withTimeout(stores.flushWrites(flushBound.signal), boundMs); - if (flushCutOff) { - flushBound.abort(); - log.warn(`memory flush cut off after ${boundMs}ms; changed files it had not uploaded yet are not saved`, { session_id: sessionId, work_id: work.id }); - } - await stores.dispose().catch((e) => { - log.warn("memory store cleanup failed", { - session_id: sessionId, - work_id: work.id, - error: String(e) - }); - }); - } - } - lease.finish("runner_done"); - detachExternal(); - await heartbeatPromise; - if (lease.lost) { - log.info("lease lost; released without stopping it", { session_id: sessionId, work_id: work.id }); - } else { - await forceStop(sessionClient, work, log, this.requestOptions); - } - } - }; - return EnvironmentWorker2; - })(); - Lease = /* @__PURE__ */ (() => { - class Lease2 { - constructor(ctrl) { - _Lease_ctrl.set(this, void 0); - _Lease_endReason.set(this, void 0); - __classPrivateFieldSet(this, _Lease_ctrl, ctrl, "f"); - } - get signal() { - return __classPrivateFieldGet(this, _Lease_ctrl, "f").signal; - } - finish(reason) { - __classPrivateFieldSet(this, _Lease_endReason, __classPrivateFieldGet(this, _Lease_endReason, "f") ?? reason, "f"); - __classPrivateFieldGet(this, _Lease_ctrl, "f").abort(); - } - /** True once the item belongs to the queue or another worker. */ - get lost() { - return __classPrivateFieldGet(this, _Lease_endReason, "f") === "lease_lost" || __classPrivateFieldGet(this, _Lease_endReason, "f") === "assumed_lost"; - } - } - _Lease_ctrl = /* @__PURE__ */ new WeakMap(), _Lease_endReason = /* @__PURE__ */ new WeakMap(); - return Lease2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/environments/work.mjs -var Work; -var init_work = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/environments/work.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - init_poller(); - init_worker(); - Work = /* @__PURE__ */ (() => { - class Work2 extends APIResource { - /** - * Note: these endpoints are called automatically by the pre-built environment - * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted - * sandbox environments. They are included here as a reference; you do not need to - * invoke them directly. - * - * Retrieve detailed information about a specific work item. - * - * @example - * ```ts - * const betaSelfHostedWork = - * await client.beta.environments.work.retrieve('work_id', { - * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * }); - * ``` - */ - retrieve(workID, params, options) { - const { environment_id, betas, workspace_id } = params; - return this._client.get(path2`/v1/environments/${environment_id}/work/${workID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Note: these endpoints are called automatically by the pre-built environment - * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted - * sandbox environments. They are included here as a reference; you do not need to - * invoke them directly. - * - * Update work item metadata with merge semantics. - * - * @example - * ```ts - * const betaSelfHostedWork = - * await client.beta.environments.work.update('work_id', { - * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * metadata: { foo: 'string' }, - * }); - * ``` - */ - update(workID, params, options) { - const { environment_id, betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/environments/${environment_id}/work/${workID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Note: these endpoints are called automatically by the pre-built environment - * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted - * sandbox environments. They are included here as a reference; you do not need to - * invoke them directly. - * - * List work items in an environment. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaSelfHostedWork of client.beta.environments.work.list( - * 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * )) { - * // ... - * } - * ``` - */ - list(environmentID, params = {}, options) { - const { betas, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/environments/${environmentID}/work?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString() }, - options?.headers - ]) - }); - } - /** - * Note: these endpoints are called automatically by the pre-built environment - * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted - * sandbox environments. They are included here as a reference; you do not need to - * invoke them directly. - * - * Acknowledge receipt of a work item, transitioning it from 'queued' to 'starting' - * and removing it from the queue. - * - * @example - * ```ts - * const betaSelfHostedWork = - * await client.beta.environments.work.ack('work_id', { - * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * }); - * ``` - */ - ack(workID, params, options) { - const { environment_id, betas } = params; - return this._client.post(path2`/v1/environments/${environment_id}/work/${workID}/ack?beta=true`, { - ...options, - headers: buildHeaders([ - { "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString() }, - options?.headers - ]) - }); - } - /** - * Note: these endpoints are called automatically by the pre-built environment - * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted - * sandbox environments. They are included here as a reference; you do not need to - * invoke them directly. - * - * Record a heartbeat for a work item to maintain the lease. - * - * @example - * ```ts - * const betaSelfHostedWorkHeartbeatResponse = - * await client.beta.environments.work.heartbeat('work_id', { - * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * }); - * ``` - */ - heartbeat(workID, params, options) { - const { environment_id, desired_ttl_seconds, expected_last_heartbeat, betas } = params; - return this._client.post(path2`/v1/environments/${environment_id}/work/${workID}/heartbeat?beta=true`, { - query: { desired_ttl_seconds, expected_last_heartbeat }, - ...options, - headers: buildHeaders([ - { "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString() }, - options?.headers - ]) - }); - } - /** - * Note: these endpoints are called automatically by the pre-built environment - * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted - * sandbox environments. They are included here as a reference; you do not need to - * invoke them directly. - * - * Long poll for work items in the queue. - * - * @example - * ```ts - * const betaSelfHostedWork = - * await client.beta.environments.work.poll( - * 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * ); - * ``` - */ - poll(environmentID, params = {}, options) { - const { betas, "Anthropic-Worker-ID": anthropicWorkerID, ...query } = params ?? {}; - return this._client.get(path2`/v1/environments/${environmentID}/work/poll?beta=true`, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...anthropicWorkerID != null ? { "Anthropic-Worker-ID": anthropicWorkerID } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Get statistics about the work queue for an environment. - * - * @example - * ```ts - * const betaSelfHostedWorkQueueStats = - * await client.beta.environments.work.stats( - * 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * ); - * ``` - */ - stats(environmentID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/environments/${environmentID}/work/stats?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Note: these endpoints are called automatically by the pre-built environment - * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted - * sandbox environments. They are included here as a reference; you do not need to - * invoke them directly. - * - * Stop a work item, initiating graceful or forced shutdown. - * - * @example - * ```ts - * const betaSelfHostedWork = - * await client.beta.environments.work.stop('work_id', { - * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * }); - * ``` - */ - stop(workID, params, options) { - const { environment_id, betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/environments/${environment_id}/work/${workID}/stop?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Continuously claim work from a self-hosted environment, ack each item, - * and yield it. Posts `stop` automatically when the consumer's loop body - * returns or when iteration ends. - * - * @example - * ```ts - * for await (const work of client.beta.environments.work.poller({ - * environmentId, - * environmentKey, - * })) { - * if (work.data.type !== 'session') continue; - * // ...service the work... - * } - * ``` - */ - poller(opts) { - return new WorkPoller({ ...opts, client: this._client }); - } - worker(opts) { - return new EnvironmentWorker({ ...opts, client: this._client }); - } - } - Work2.WorkPoller = WorkPoller; - Work2.EnvironmentWorker = EnvironmentWorker; - return Work2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/environments/environments.mjs -var Environments; -var init_environments = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/environments/environments.mjs"() { - init_resource(); - init_work(); - init_work(); - init_pagination(); - init_headers(); - init_path(); - Environments = /* @__PURE__ */ (() => { - class Environments3 extends APIResource { - constructor() { - super(...arguments); - this.work = new Work(this._client); - } - /** - * Create a new environment with the specified configuration. - * - * @example - * ```ts - * const betaEnvironment = - * await client.beta.environments.create({ - * name: 'python-data-analysis', - * }); - * ``` - */ - create(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/environments?beta=true", { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Retrieve a specific environment by ID. - * - * @example - * ```ts - * const betaEnvironment = - * await client.beta.environments.retrieve( - * 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * ); - * ``` - */ - retrieve(environmentID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/environments/${environmentID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Update an existing environment's configuration. - * - * @example - * ```ts - * const betaEnvironment = - * await client.beta.environments.update( - * 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * ); - * ``` - */ - update(environmentID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/environments/${environmentID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List environments with pagination support. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaEnvironment of client.beta.environments.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/environments?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Delete an environment by ID. Returns a confirmation of the deletion. - * - * @example - * ```ts - * const betaEnvironmentDeleteResponse = - * await client.beta.environments.delete( - * 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * ); - * ``` - */ - delete(environmentID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.delete(path2`/v1/environments/${environmentID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Archive an environment by ID. Archived environments cannot be used to create new - * sessions. - * - * @example - * ```ts - * const betaEnvironment = - * await client.beta.environments.archive( - * 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * ); - * ``` - */ - archive(environmentID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/environments/${environmentID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - } - Environments3.Work = Work; - return Environments3; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memories.mjs -var Memories; -var init_memories = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memories.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Memories = class extends APIResource { - /** - * Create a memory - * - * @example - * ```ts - * const betaManagedAgentsMemory = - * await client.beta.memoryStores.memories.create( - * 'memory_store_id', - * { content: 'content', path: 'xx' }, - * ); - * ``` - */ - create(memoryStoreID, params, options) { - const { view: view2, betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/memory_stores/${memoryStoreID}/memories?beta=true`, { - query: { view: view2 }, - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Retrieve a memory - * - * @example - * ```ts - * const betaManagedAgentsMemory = - * await client.beta.memoryStores.memories.retrieve( - * 'memory_id', - * { memory_store_id: 'memory_store_id' }, - * ); - * ``` - */ - retrieve(memoryID, params, options) { - const { memory_store_id, betas, workspace_id, ...query } = params; - return this._client.get(path2`/v1/memory_stores/${memory_store_id}/memories/${memoryID}?beta=true`, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Update a memory - * - * @example - * ```ts - * const betaManagedAgentsMemory = - * await client.beta.memoryStores.memories.update( - * 'memory_id', - * { memory_store_id: 'memory_store_id' }, - * ); - * ``` - */ - update(memoryID, params, options) { - const { memory_store_id, view: view2, betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/memory_stores/${memory_store_id}/memories/${memoryID}?beta=true`, { - query: { view: view2 }, - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List memories - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsMemoryListItem of client.beta.memoryStores.memories.list( - * 'memory_store_id', - * )) { - * // ... - * } - * ``` - */ - list(memoryStoreID, params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/memory_stores/${memoryStoreID}/memories?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Delete a memory - * - * @example - * ```ts - * const betaManagedAgentsDeletedMemory = - * await client.beta.memoryStores.memories.delete( - * 'memory_id', - * { memory_store_id: 'memory_store_id' }, - * ); - * ``` - */ - delete(memoryID, params, options) { - const { memory_store_id, expected_content_sha256, betas, workspace_id } = params; - return this._client.delete(path2`/v1/memory_stores/${memory_store_id}/memories/${memoryID}?beta=true`, { - query: { expected_content_sha256 }, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-versions.mjs -var MemoryVersions; -var init_memory_versions = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-versions.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - MemoryVersions = class extends APIResource { - /** - * Retrieve a memory version - * - * @example - * ```ts - * const betaManagedAgentsMemoryVersion = - * await client.beta.memoryStores.memoryVersions.retrieve( - * 'memory_version_id', - * { memory_store_id: 'memory_store_id' }, - * ); - * ``` - */ - retrieve(memoryVersionID, params, options) { - const { memory_store_id, betas, workspace_id, ...query } = params; - return this._client.get(path2`/v1/memory_stores/${memory_store_id}/memory_versions/${memoryVersionID}?beta=true`, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List memory versions - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsMemoryVersion of client.beta.memoryStores.memoryVersions.list( - * 'memory_store_id', - * )) { - * // ... - * } - * ``` - */ - list(memoryStoreID, params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/memory_stores/${memoryStoreID}/memory_versions?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Redact a memory version - * - * @example - * ```ts - * const betaManagedAgentsMemoryVersion = - * await client.beta.memoryStores.memoryVersions.redact( - * 'memory_version_id', - * { memory_store_id: 'memory_store_id' }, - * ); - * ``` - */ - redact(memoryVersionID, params, options) { - const { memory_store_id, betas, workspace_id } = params; - return this._client.post(path2`/v1/memory_stores/${memory_store_id}/memory_versions/${memoryVersionID}/redact?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-stores.mjs -var MemoryStores; -var init_memory_stores = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-stores.mjs"() { - init_resource(); - init_memories(); - init_memories(); - init_memory_versions(); - init_memory_versions(); - init_pagination(); - init_headers(); - init_path(); - MemoryStores = /* @__PURE__ */ (() => { - class MemoryStores2 extends APIResource { - constructor() { - super(...arguments); - this.memories = new Memories(this._client); - this.memoryVersions = new MemoryVersions(this._client); - } - /** - * Create a memory store - * - * @example - * ```ts - * const betaManagedAgentsMemoryStore = - * await client.beta.memoryStores.create({ name: 'x' }); - * ``` - */ - create(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/memory_stores?beta=true", { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Retrieve a memory store - * - * @example - * ```ts - * const betaManagedAgentsMemoryStore = - * await client.beta.memoryStores.retrieve( - * 'memory_store_id', - * ); - * ``` - */ - retrieve(memoryStoreID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/memory_stores/${memoryStoreID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Update a memory store - * - * @example - * ```ts - * const betaManagedAgentsMemoryStore = - * await client.beta.memoryStores.update('memory_store_id'); - * ``` - */ - update(memoryStoreID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/memory_stores/${memoryStoreID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List memory stores - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsMemoryStore of client.beta.memoryStores.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/memory_stores?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Delete a memory store - * - * @example - * ```ts - * const betaManagedAgentsDeletedMemoryStore = - * await client.beta.memoryStores.delete('memory_store_id'); - * ``` - */ - delete(memoryStoreID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.delete(path2`/v1/memory_stores/${memoryStoreID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Archive a memory store - * - * @example - * ```ts - * const betaManagedAgentsMemoryStore = - * await client.beta.memoryStores.archive('memory_store_id'); - * ``` - */ - archive(memoryStoreID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/memory_stores/${memoryStoreID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - } - MemoryStores2.Memories = Memories; - MemoryStores2.MemoryVersions = MemoryVersions; - return MemoryStores2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/error.mjs -var init_error2 = __esm({ - "node_modules/@anthropic-ai/sdk/error.mjs"() { - init_error(); - } -}); - -// node_modules/@anthropic-ai/sdk/internal/decoders/jsonl.mjs -var JSONLDecoder; -var init_jsonl = __esm({ - "node_modules/@anthropic-ai/sdk/internal/decoders/jsonl.mjs"() { - init_error(); - init_shims(); - init_line(); - JSONLDecoder = /* @__PURE__ */ (() => { - class JSONLDecoder2 { - constructor(iterator, controller) { - this.iterator = iterator; - this.controller = controller; - } - async *decoder() { - const lineDecoder = new LineDecoder(); - for await (const chunk of this.iterator) { - for (const line of lineDecoder.decode(chunk)) { - yield JSON.parse(line); - } - } - for (const line of lineDecoder.flush()) { - yield JSON.parse(line); - } - } - [Symbol.asyncIterator]() { - return this.decoder(); - } - static fromResponse(response, controller) { - if (!response.body) { - controller.abort(); - if (typeof globalThis.navigator !== "undefined" && globalThis.navigator.product === "ReactNative") { - throw new AnthropicError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`); - } - throw new AnthropicError(`Attempted to iterate over a response with no body`); - } - return new JSONLDecoder2(ReadableStreamToAsyncIterable(response.body), controller); - } - } - return JSONLDecoder2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/messages/batches.mjs -var Batches; -var init_batches = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/messages/batches.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_jsonl(); - init_error2(); - init_path(); - Batches = class extends APIResource { - /** - * Send a batch of Message creation requests. - * - * The Message Batches API can be used to process multiple Messages API requests at - * once. Once a Message Batch is created, it begins processing immediately. Batches - * can take up to 24 hours to complete. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * const betaMessageBatch = - * await client.beta.messages.batches.create({ - * requests: [ - * { - * custom_id: 'my-custom-id-1', - * params: { - * max_tokens: 1024, - * messages: [ - * { content: 'Hello, world', role: 'user' }, - * ], - * model: 'claude-opus-5', - * }, - * }, - * ], - * }); - * ``` - */ - create(params, options) { - const { betas, user_profile_id, workspace_id, ...body } = params; - return this._client.post("/v1/messages/batches?beta=true", { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), - ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * This endpoint is idempotent and can be used to poll for Message Batch - * completion. To access the results of a Message Batch, make a request to the - * `results_url` field in the response. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * const betaMessageBatch = - * await client.beta.messages.batches.retrieve( - * 'message_batch_id', - * ); - * ``` - */ - retrieve(messageBatchID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/messages/batches/${messageBatchID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List all Message Batches within a Workspace. Most recently created batches are - * returned first. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaMessageBatch of client.beta.messages.batches.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/messages/batches?beta=true", Page, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Delete a Message Batch. - * - * Message Batches can only be deleted once they've finished processing. If you'd - * like to delete an in-progress batch, you must first cancel it. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * const betaDeletedMessageBatch = - * await client.beta.messages.batches.delete( - * 'message_batch_id', - * ); - * ``` - */ - delete(messageBatchID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.delete(path2`/v1/messages/batches/${messageBatchID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Batches may be canceled any time before processing ends. Once cancellation is - * initiated, the batch enters a `canceling` state, at which time the system may - * complete any in-progress, non-interruptible requests before finalizing - * cancellation. - * - * The number of canceled requests is specified in `request_counts`. To determine - * which requests were canceled, check the individual results within the batch. - * Note that cancellation may not result in any canceled requests if they were - * non-interruptible. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * const betaMessageBatch = - * await client.beta.messages.batches.cancel( - * 'message_batch_id', - * ); - * ``` - */ - cancel(messageBatchID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/messages/batches/${messageBatchID}/cancel?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Streams the results of a Message Batch as a `.jsonl` file. - * - * Each line in the file is a JSON object containing the result of a single request - * in the Message Batch. Results are not guaranteed to be in the same order as - * requests. Use the `custom_id` field to match results to requests. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * const betaMessageBatchIndividualResponse = - * await client.beta.messages.batches.results( - * 'message_batch_id', - * ); - * ``` - */ - async results(messageBatchID, params = {}, options) { - const batch = await this.retrieve(messageBatchID, params, options); - if (!batch.results_url) { - throw new AnthropicError(`No batch \`results_url\`; Has it finished processing? ${batch.processing_status} - ${batch.id}`); - } - const { betas, workspace_id } = params ?? {}; - return this._client.get(batch.results_url, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), - Accept: "application/binary", - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]), - stream: true, - __binaryResponse: true - })._thenUnwrap((_, props) => JSONLDecoder.fromResponse(props.response, props.controller)); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/internal/constants.mjs -var MODEL_NONSTREAMING_TOKENS; -var init_constants = __esm({ - "node_modules/@anthropic-ai/sdk/internal/constants.mjs"() { - MODEL_NONSTREAMING_TOKENS = { - "claude-opus-4@20250514": 8192, - "anthropic.claude-opus-4-1-20250805-v1:0": 8192, - "claude-opus-4-1@20250805": 8192 - }; - } -}); - -// node_modules/@anthropic-ai/sdk/lib/beta-parser.mjs -function getOutputFormat(params) { - return params?.output_format ?? params?.output_config?.format; -} -function maybeParseBetaMessage(message, params, opts) { - const outputFormat = getOutputFormat(params); - if (!params || !("parse" in (outputFormat ?? {}))) { - return { - ...message, - content: message.content.map((block) => { - if (block.type === "text") { - const parsedBlock = Object.defineProperty({ ...block }, "parsed_output", { - value: null, - enumerable: false - }); - return Object.defineProperty(parsedBlock, "parsed", { - get() { - opts.logger.warn("The `parsed` property on `text` blocks is deprecated, please use `parsed_output` instead."); - return null; - }, - enumerable: false - }); - } - return block; - }), - parsed_output: null - }; - } - return parseBetaMessage(message, params, opts); -} -function parseBetaMessage(message, params, opts) { - let firstParsedOutput = null; - const content = message.content.map((block) => { - if (block.type === "text") { - const parsedOutput = parseBetaOutputFormat(params, block.text); - if (firstParsedOutput === null) { - firstParsedOutput = parsedOutput; - } - const parsedBlock = Object.defineProperty({ ...block }, "parsed_output", { - value: parsedOutput, - enumerable: false - }); - return Object.defineProperty(parsedBlock, "parsed", { - get() { - opts.logger.warn("The `parsed` property on `text` blocks is deprecated, please use `parsed_output` instead."); - return parsedOutput; - }, - enumerable: false - }); - } - return block; - }); - return { - ...message, - content, - parsed_output: firstParsedOutput - }; -} -function parseBetaOutputFormat(params, content) { - const outputFormat = getOutputFormat(params); - if (outputFormat?.type !== "json_schema") { - return null; - } - try { - if ("parse" in outputFormat) { - return outputFormat.parse(content); - } - return JSON.parse(content); - } catch (error) { - throw new AnthropicError(`Failed to parse structured output: ${error}`); - } -} -var init_beta_parser = __esm({ - "node_modules/@anthropic-ai/sdk/lib/beta-parser.mjs"() { - init_error(); - } -}); - -// node_modules/@anthropic-ai/sdk/streaming.mjs -var init_streaming2 = __esm({ - "node_modules/@anthropic-ai/sdk/streaming.mjs"() { - init_streaming(); - } -}); - -// node_modules/@anthropic-ai/sdk/_vendor/partial-json-parser/parser.mjs -var tokenize, strip, unstrip, generate, partialParse; -var init_parser = __esm({ - "node_modules/@anthropic-ai/sdk/_vendor/partial-json-parser/parser.mjs"() { - tokenize = (input) => { - let current = 0; - let tokens = []; - while (current < input.length) { - let char = input[current]; - if (char === "\\") { - current++; - continue; - } - if (char === "{") { - tokens.push({ - type: "brace", - value: "{" - }); - current++; - continue; - } - if (char === "}") { - tokens.push({ - type: "brace", - value: "}" - }); - current++; - continue; - } - if (char === "[") { - tokens.push({ - type: "paren", - value: "[" - }); - current++; - continue; - } - if (char === "]") { - tokens.push({ - type: "paren", - value: "]" - }); - current++; - continue; - } - if (char === ":") { - tokens.push({ - type: "separator", - value: ":" - }); - current++; - continue; - } - if (char === ",") { - tokens.push({ - type: "delimiter", - value: "," - }); - current++; - continue; - } - if (char === '"') { - const start = current + 1; - let end = start; - let danglingQuote = false; - while (true) { - end = input.indexOf('"', end); - if (end === -1) { - danglingQuote = true; - break; - } - let backslashes = 0; - let i = end - 1; - while (i >= start && input[i] === "\\") { - backslashes++; - i--; - } - if (backslashes % 2 === 0) - break; - end++; - } - if (danglingQuote) { - current = input.length; - } else { - tokens.push({ - type: "string", - value: input.slice(start, end) - }); - current = end + 1; - } - continue; - } - let WHITESPACE = /\s/; - if (char && WHITESPACE.test(char)) { - current++; - continue; - } - let NUMBERS = /[0-9]/; - if (char && NUMBERS.test(char) || char === "-" || char === ".") { - let value2 = ""; - if (char === "-") { - value2 += char; - char = input[++current]; - } - while (char && (NUMBERS.test(char) || char === "." || // exponent marker, e.g. `1e10` or `1.5E-9` - char === "e" || char === "E" || // exponent sign, only valid immediately after the exponent marker - (char === "-" || char === "+") && (value2[value2.length - 1] === "e" || value2[value2.length - 1] === "E"))) { - value2 += char; - char = input[++current]; - } - tokens.push({ - type: "number", - value: value2, - unterminated: current === input.length - }); - continue; - } - let LETTERS = /[a-z]/i; - if (char && LETTERS.test(char)) { - let value2 = ""; - while (char && LETTERS.test(char)) { - if (current === input.length) { - break; - } - value2 += char; - char = input[++current]; - } - if (value2 == "true" || value2 == "false" || value2 === "null") { - tokens.push({ - type: "name", - value: value2 - }); - } else { - current++; - continue; - } - continue; - } - current++; - } - return tokens; - }; - strip = (tokens) => { - let open = []; - for (const token of tokens) { - if (token.type === "brace" || token.type === "paren") { - if (token.value === "{" || token.value === "[") { - open.push(token.value); - } else { - open.pop(); - } - } - } - let innermostOpenBracket = open[open.length - 1]; - let length = tokens.length; - let JSON_NUMBER = /^-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][-+]?[0-9]+)?$/; - while (length > 0) { - let lastToken = tokens[length - 1]; - switch (lastToken.type) { - case "separator": - length--; - continue; - case "number": - if (lastToken.unterminated || !JSON_NUMBER.test(lastToken.value)) { - length--; - continue; - } - break; - case "string": - let tokenBeforeTheLastToken = tokens[length - 2]; - if (innermostOpenBracket === "{" && (tokenBeforeTheLastToken?.type === "delimiter" || tokenBeforeTheLastToken?.type === "brace" && tokenBeforeTheLastToken.value === "{")) { - length--; - continue; - } - break; - case "delimiter": - length--; - break; - } - break; - } - return tokens.slice(0, length); - }; - unstrip = (tokens) => { - let tail = []; - tokens.map((token) => { - if (token.type === "brace") { - if (token.value === "{") { - tail.push("}"); - } else { - tail.splice(tail.lastIndexOf("}"), 1); - } - } - if (token.type === "paren") { - if (token.value === "[") { - tail.push("]"); - } else { - tail.splice(tail.lastIndexOf("]"), 1); - } - } - }); - if (tail.length > 0) { - tail.reverse().map((item) => { - if (item === "}") { - tokens.push({ - type: "brace", - value: "}" - }); - } else if (item === "]") { - tokens.push({ - type: "paren", - value: "]" - }); - } - }); - } - return tokens; - }; - generate = (tokens) => { - let output = ""; - tokens.map((token) => { - switch (token.type) { - case "string": - output += '"' + token.value + '"'; - break; - default: - output += token.value; - break; - } - }); - return output; - }; - partialParse = (input) => JSON.parse(generate(unstrip(strip(tokenize(input))))); - } -}); - -// node_modules/@anthropic-ai/sdk/internal/message-stream-utils.mjs -function withLazyInput(prev, jsonBuf) { - const next = {}; - for (const key of Object.keys(prev)) { - if (key !== "input") - next[key] = prev[key]; - } - Object.defineProperty(next, JSON_BUF_PROPERTY, { value: jsonBuf, enumerable: false, writable: true }); - let input; - let parsed = false; - Object.defineProperty(next, "input", { - enumerable: true, - configurable: true, - get() { - if (!parsed) { - input = jsonBuf ? partialParse(jsonBuf) : {}; - parsed = true; - } - return input; - } - }); - return next; -} -var JSON_BUF_PROPERTY; -var init_message_stream_utils = __esm({ - "node_modules/@anthropic-ai/sdk/internal/message-stream-utils.mjs"() { - init_parser(); - JSON_BUF_PROPERTY = "__json_buf"; - } -}); - -// node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.mjs -function tracksToolInput(content) { - return content.type === "tool_use" || content.type === "server_tool_use" || content.type === "mcp_tool_use"; -} -var _BetaMessageStream_instances, _BetaMessageStream_currentMessageSnapshot, _BetaMessageStream_params, _BetaMessageStream_connectedPromise, _BetaMessageStream_resolveConnectedPromise, _BetaMessageStream_rejectConnectedPromise, _BetaMessageStream_endPromise, _BetaMessageStream_resolveEndPromise, _BetaMessageStream_rejectEndPromise, _BetaMessageStream_listeners, _BetaMessageStream_ended, _BetaMessageStream_errored, _BetaMessageStream_aborted, _BetaMessageStream_catchingPromiseCreated, _BetaMessageStream_response, _BetaMessageStream_request_id, _BetaMessageStream_workspace_id, _BetaMessageStream_logger, _BetaMessageStream_getFinalMessage, _BetaMessageStream_getFinalText, _BetaMessageStream_handleError, _BetaMessageStream_beginRequest, _BetaMessageStream_addStreamEvent, _BetaMessageStream_endRequest, _BetaMessageStream_accumulateMessage, _BetaMessageStream_toolInputParseError, BetaMessageStream; -var init_BetaMessageStream = __esm({ - "node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.mjs"() { - init_tslib(); - init_stainless_helper_header(); - init_error2(); - init_errors(); - init_values(); - init_streaming2(); - init_beta_parser(); - init_message_stream_utils(); - BetaMessageStream = /* @__PURE__ */ (() => { - class BetaMessageStream2 { - constructor(params, opts) { - _BetaMessageStream_instances.add(this); - this.messages = []; - this.receivedMessages = []; - _BetaMessageStream_currentMessageSnapshot.set(this, void 0); - _BetaMessageStream_params.set(this, null); - this.controller = new AbortController(); - _BetaMessageStream_connectedPromise.set(this, void 0); - _BetaMessageStream_resolveConnectedPromise.set(this, () => { - }); - _BetaMessageStream_rejectConnectedPromise.set(this, () => { - }); - _BetaMessageStream_endPromise.set(this, void 0); - _BetaMessageStream_resolveEndPromise.set(this, () => { - }); - _BetaMessageStream_rejectEndPromise.set(this, () => { - }); - _BetaMessageStream_listeners.set(this, {}); - _BetaMessageStream_ended.set(this, false); - _BetaMessageStream_errored.set(this, false); - _BetaMessageStream_aborted.set(this, false); - _BetaMessageStream_catchingPromiseCreated.set(this, false); - _BetaMessageStream_response.set(this, void 0); - _BetaMessageStream_request_id.set(this, void 0); - _BetaMessageStream_workspace_id.set(this, void 0); - _BetaMessageStream_logger.set(this, void 0); - _BetaMessageStream_handleError.set(this, (error) => { - __classPrivateFieldSet(this, _BetaMessageStream_errored, true, "f"); - if (isAbortError(error)) { - error = new APIUserAbortError(); - } - if (error instanceof APIUserAbortError) { - __classPrivateFieldSet(this, _BetaMessageStream_aborted, true, "f"); - return this._emit("abort", error); - } - if (error instanceof AnthropicError) { - return this._emit("error", error); - } - if (error instanceof Error) { - const anthropicError = new AnthropicError(error.message); - anthropicError.cause = error; - return this._emit("error", anthropicError); - } - return this._emit("error", new AnthropicError(String(error))); - }); - __classPrivateFieldSet(this, _BetaMessageStream_connectedPromise, new Promise((resolve2, reject2) => { - __classPrivateFieldSet(this, _BetaMessageStream_resolveConnectedPromise, resolve2, "f"); - __classPrivateFieldSet(this, _BetaMessageStream_rejectConnectedPromise, reject2, "f"); - }), "f"); - __classPrivateFieldSet(this, _BetaMessageStream_endPromise, new Promise((resolve2, reject2) => { - __classPrivateFieldSet(this, _BetaMessageStream_resolveEndPromise, resolve2, "f"); - __classPrivateFieldSet(this, _BetaMessageStream_rejectEndPromise, reject2, "f"); - }), "f"); - __classPrivateFieldGet(this, _BetaMessageStream_connectedPromise, "f").catch(() => { - }); - __classPrivateFieldGet(this, _BetaMessageStream_endPromise, "f").catch(() => { - }); - __classPrivateFieldSet(this, _BetaMessageStream_params, params, "f"); - __classPrivateFieldSet(this, _BetaMessageStream_logger, opts?.logger ?? console, "f"); - } - get response() { - return __classPrivateFieldGet(this, _BetaMessageStream_response, "f"); - } - get request_id() { - return __classPrivateFieldGet(this, _BetaMessageStream_request_id, "f"); - } - get workspace_id() { - return __classPrivateFieldGet(this, _BetaMessageStream_workspace_id, "f"); - } - /** - * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request, - * returned vie the `request-id` header which is useful for debugging requests and resporting - * issues to Anthropic. - * - * This is the same as the `APIPromise.withResponse()` method. - * - * This method will raise an error if you created the stream using `MessageStream.fromReadableStream` - * as no `Response` is available. - */ - async withResponse() { - __classPrivateFieldSet(this, _BetaMessageStream_catchingPromiseCreated, true, "f"); - const response = await __classPrivateFieldGet(this, _BetaMessageStream_connectedPromise, "f"); - if (!response) { - throw new Error("Could not resolve a `Response` object"); - } - return { - data: this, - response, - request_id: response.headers.get("request-id"), - workspace_id: response.headers.get("anthropic-workspace-id") - }; - } - /** - * Intended for use on the frontend, consuming a stream produced with - * `.toReadableStream()` on the backend. - * - * Note that messages sent to the model do not appear in `.on('message')` - * in this context. - */ - static fromReadableStream(stream5) { - const runner = new BetaMessageStream2(null); - runner._run(() => runner._fromReadableStream(stream5)); - return runner; - } - static createMessage(messages, params, options, { logger } = {}) { - const runner = new BetaMessageStream2(params, { logger }); - for (const message of params.messages) { - runner._addMessageParam(message); - } - __classPrivateFieldSet(runner, _BetaMessageStream_params, { ...params, stream: true }, "f"); - runner._run(() => runner._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, [STAINLESS_HELPER_METHOD_HEADER]: "stream" } })); - return runner; - } - _run(executor) { - executor().then(() => { - this._emitFinal(); - this._emit("end"); - }, __classPrivateFieldGet(this, _BetaMessageStream_handleError, "f")); - } - _addMessageParam(message) { - this.messages.push(message); - } - _addMessage(message, emit = true) { - this.receivedMessages.push(message); - if (emit) { - this._emit("message", message); - } - } - async _createMessage(messages, params, options) { - const signal = options?.signal; - let abortHandler; - if (signal) { - if (signal.aborted) - this.controller.abort(); - abortHandler = this.controller.abort.bind(this.controller); - signal.addEventListener("abort", abortHandler); - } - try { - __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_beginRequest).call(this); - const { response, data: stream5 } = await messages.create({ ...params, stream: true }, { ...options, signal: this.controller.signal }).withResponse(); - this._connected(response); - for await (const event of stream5) { - __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_addStreamEvent).call(this, event); - } - if (stream5.controller.signal?.aborted) { - throw new APIUserAbortError(); - } - __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_endRequest).call(this); - } finally { - if (signal && abortHandler) { - signal.removeEventListener("abort", abortHandler); - } - } - } - _connected(response) { - if (this.ended) - return; - __classPrivateFieldSet(this, _BetaMessageStream_response, response, "f"); - __classPrivateFieldSet(this, _BetaMessageStream_request_id, response?.headers.get("request-id"), "f"); - __classPrivateFieldSet(this, _BetaMessageStream_workspace_id, response?.headers.get("anthropic-workspace-id"), "f"); - __classPrivateFieldGet(this, _BetaMessageStream_resolveConnectedPromise, "f").call(this, response); - this._emit("connect"); - } - get ended() { - return __classPrivateFieldGet(this, _BetaMessageStream_ended, "f"); - } - get errored() { - return __classPrivateFieldGet(this, _BetaMessageStream_errored, "f"); - } - get aborted() { - return __classPrivateFieldGet(this, _BetaMessageStream_aborted, "f"); - } - abort() { - this.controller.abort(); - } - /** - * Adds the listener function to the end of the listeners array for the event. - * No checks are made to see if the listener has already been added. Multiple calls passing - * the same combination of event and listener will result in the listener being added, and - * called, multiple times. - * @returns this MessageStream, so that calls can be chained - */ - on(event, listener) { - const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] = []); - listeners.push({ listener }); - return this; - } - /** - * Removes the specified listener from the listener array for the event. - * off() will remove, at most, one instance of a listener from the listener array. If any single - * listener has been added multiple times to the listener array for the specified event, then - * off() must be called multiple times to remove each instance. - * @returns this MessageStream, so that calls can be chained - */ - off(event, listener) { - const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event]; - if (!listeners) - return this; - const index = listeners.findIndex((l) => l.listener === listener); - if (index >= 0) - listeners.splice(index, 1); - return this; - } - /** - * Adds a one-time listener function for the event. The next time the event is triggered, - * this listener is removed and then invoked. - * @returns this MessageStream, so that calls can be chained - */ - once(event, listener) { - const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] = []); - listeners.push({ listener, once: true }); - return this; - } - /** - * This is similar to `.once()`, but returns a Promise that resolves the next time - * the event is triggered, instead of calling a listener callback. - * @returns a Promise that resolves the next time given event is triggered, - * or rejects if an error is emitted. (If you request the 'error' event, - * returns a promise that resolves with the error). - * - * Example: - * - * const message = await stream.emitted('message') // rejects if the stream errors - */ - emitted(event) { - return new Promise((resolve2, reject2) => { - __classPrivateFieldSet(this, _BetaMessageStream_catchingPromiseCreated, true, "f"); - if (event !== "error") - this.once("error", reject2); - this.once(event, resolve2); - }); - } - async done() { - __classPrivateFieldSet(this, _BetaMessageStream_catchingPromiseCreated, true, "f"); - await __classPrivateFieldGet(this, _BetaMessageStream_endPromise, "f"); - } - get currentMessage() { - return __classPrivateFieldGet(this, _BetaMessageStream_currentMessageSnapshot, "f"); - } - /** - * @returns a promise that resolves with the the final assistant Message response, - * or rejects if an error occurred or the stream ended prematurely without producing a Message. - * If structured outputs were used, this will be a ParsedMessage with a `parsed` field. - */ - async finalMessage() { - await this.done(); - return __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalMessage).call(this); - } - /** - * @returns a promise that resolves with the the final assistant Message's text response, concatenated - * together if there are more than one text blocks. - * Rejects if an error occurred or the stream ended prematurely without producing a Message. - */ - async finalText() { - await this.done(); - return __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalText).call(this); - } - _emit(event, ...args) { - if (__classPrivateFieldGet(this, _BetaMessageStream_ended, "f")) - return; - if (event === "end") { - __classPrivateFieldSet(this, _BetaMessageStream_ended, true, "f"); - __classPrivateFieldGet(this, _BetaMessageStream_resolveEndPromise, "f").call(this); - } - const listeners = __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event]; - if (listeners) { - __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f")[event] = listeners.filter((l) => !l.once); - listeners.forEach(({ listener }) => listener(...args)); - } - if (event === "abort") { - const error = args[0]; - if (!__classPrivateFieldGet(this, _BetaMessageStream_catchingPromiseCreated, "f") && !listeners?.length) { - Promise.reject(error); - } - __classPrivateFieldGet(this, _BetaMessageStream_rejectConnectedPromise, "f").call(this, error); - __classPrivateFieldGet(this, _BetaMessageStream_rejectEndPromise, "f").call(this, error); - this._emit("end"); - return; - } - if (event === "error") { - const error = args[0]; - if (!__classPrivateFieldGet(this, _BetaMessageStream_catchingPromiseCreated, "f") && !listeners?.length) { - Promise.reject(error); - } - __classPrivateFieldGet(this, _BetaMessageStream_rejectConnectedPromise, "f").call(this, error); - __classPrivateFieldGet(this, _BetaMessageStream_rejectEndPromise, "f").call(this, error); - this._emit("end"); - } - } - _emitFinal() { - const finalMessage = this.receivedMessages.at(-1); - if (finalMessage) { - this._emit("finalMessage", __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalMessage).call(this)); - } - } - async _fromReadableStream(readableStream, options) { - const signal = options?.signal; - let abortHandler; - if (signal) { - if (signal.aborted) - this.controller.abort(); - abortHandler = this.controller.abort.bind(this.controller); - signal.addEventListener("abort", abortHandler); - } - try { - __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_beginRequest).call(this); - this._connected(null); - const stream5 = Stream.fromReadableStream(readableStream, this.controller); - for await (const event of stream5) { - __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_addStreamEvent).call(this, event); - } - if (stream5.controller.signal?.aborted) { - throw new APIUserAbortError(); - } - __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_endRequest).call(this); - } finally { - if (signal && abortHandler) { - signal.removeEventListener("abort", abortHandler); - } - } - } - [(_BetaMessageStream_currentMessageSnapshot = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_params = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_connectedPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_resolveConnectedPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_rejectConnectedPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_endPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_resolveEndPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_rejectEndPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_listeners = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_ended = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_errored = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_aborted = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_catchingPromiseCreated = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_response = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_request_id = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_workspace_id = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_logger = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_handleError = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_instances = /* @__PURE__ */ new WeakSet(), _BetaMessageStream_getFinalMessage = function _BetaMessageStream_getFinalMessage2() { - if (this.receivedMessages.length === 0) { - throw new AnthropicError("stream ended without producing a Message with role=assistant"); - } - return this.receivedMessages.at(-1); - }, _BetaMessageStream_getFinalText = function _BetaMessageStream_getFinalText2() { - if (this.receivedMessages.length === 0) { - throw new AnthropicError("stream ended without producing a Message with role=assistant"); - } - const textBlocks = this.receivedMessages.at(-1).content.filter((block) => block.type === "text").map((block) => block.text); - if (textBlocks.length === 0) { - throw new AnthropicError("stream ended without producing a content block with type=text"); - } - return textBlocks.join(" "); - }, _BetaMessageStream_beginRequest = function _BetaMessageStream_beginRequest2() { - if (this.ended) - return; - __classPrivateFieldSet(this, _BetaMessageStream_currentMessageSnapshot, void 0, "f"); - }, _BetaMessageStream_addStreamEvent = function _BetaMessageStream_addStreamEvent2(event) { - if (this.ended) - return; - const messageSnapshot = __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_accumulateMessage).call(this, event); - this._emit("streamEvent", event, messageSnapshot); - switch (event.type) { - case "content_block_delta": { - const content = messageSnapshot.content.at(-1); - switch (event.delta.type) { - case "text_delta": { - if (content.type === "text") { - this._emit("text", event.delta.text, content.text || ""); - } - break; - } - case "citations_delta": { - if (content.type === "text") { - this._emit("citation", event.delta.citation, content.citations ?? []); - } - break; - } - case "input_json_delta": { - if (tracksToolInput(content) && __classPrivateFieldGet(this, _BetaMessageStream_listeners, "f").inputJson?.length) { - let jsonSnapshot; - try { - jsonSnapshot = content.input; - } catch (err) { - __classPrivateFieldGet(this, _BetaMessageStream_handleError, "f").call(this, __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_toolInputParseError).call(this, content, err)); - break; - } - this._emit("inputJson", event.delta.partial_json, jsonSnapshot); - } - break; - } - case "thinking_delta": { - if (content.type === "thinking") { - this._emit("thinking", event.delta.thinking, content.thinking); - } - break; - } - case "signature_delta": { - if (content.type === "thinking") { - this._emit("signature", content.signature); - } - break; - } - case "compaction_delta": { - if (content.type === "compaction" && content.content) { - this._emit("compaction", content.content); - } - break; - } - default: - checkNever(event.delta); - } - break; - } - case "message_stop": { - this._addMessageParam(messageSnapshot); - this._addMessage(maybeParseBetaMessage(messageSnapshot, __classPrivateFieldGet(this, _BetaMessageStream_params, "f"), { logger: __classPrivateFieldGet(this, _BetaMessageStream_logger, "f") }), true); - break; - } - case "content_block_stop": { - this._emit("contentBlock", messageSnapshot.content.at(-1)); - break; - } - case "message_start": { - __classPrivateFieldSet(this, _BetaMessageStream_currentMessageSnapshot, messageSnapshot, "f"); - break; - } - case "content_block_start": - case "message_delta": - break; - } - }, _BetaMessageStream_endRequest = function _BetaMessageStream_endRequest2() { - if (this.ended) { - throw new AnthropicError(`stream has ended, this shouldn't happen`); - } - const snapshot = __classPrivateFieldGet(this, _BetaMessageStream_currentMessageSnapshot, "f"); - if (!snapshot) { - throw new AnthropicError(`request ended without sending any chunks`); - } - __classPrivateFieldSet(this, _BetaMessageStream_currentMessageSnapshot, void 0, "f"); - return maybeParseBetaMessage(snapshot, __classPrivateFieldGet(this, _BetaMessageStream_params, "f"), { logger: __classPrivateFieldGet(this, _BetaMessageStream_logger, "f") }); - }, _BetaMessageStream_accumulateMessage = function _BetaMessageStream_accumulateMessage2(event) { - let snapshot = __classPrivateFieldGet(this, _BetaMessageStream_currentMessageSnapshot, "f"); - if (event.type === "message_start") { - if (snapshot) { - throw new AnthropicError(`Unexpected event order, got ${event.type} before receiving "message_stop"`); - } - return event.message; - } - if (!snapshot) { - throw new AnthropicError(`Unexpected event order, got ${event.type} before "message_start"`); - } - switch (event.type) { - case "message_stop": - return snapshot; - case "message_delta": - snapshot.stop_reason = event.delta.stop_reason; - snapshot.stop_sequence = event.delta.stop_sequence; - snapshot.stop_details = event.delta.stop_details; - snapshot.usage.output_tokens = event.usage.output_tokens; - if (event.delta.container != null) { - snapshot.container = event.delta.container; - } - if (event.context_management != null) { - snapshot.context_management = event.context_management; - } - if (event.input_transformations != null) { - snapshot.input_transformations = event.input_transformations; - } - if (event.usage.input_tokens != null) { - snapshot.usage.input_tokens = event.usage.input_tokens; - } - if (event.usage.cache_creation_input_tokens != null) { - snapshot.usage.cache_creation_input_tokens = event.usage.cache_creation_input_tokens; - } - if (event.usage.cache_read_input_tokens != null) { - snapshot.usage.cache_read_input_tokens = event.usage.cache_read_input_tokens; - } - if (event.usage.server_tool_use != null) { - snapshot.usage.server_tool_use = event.usage.server_tool_use; - } - if (event.usage.iterations != null) { - snapshot.usage.iterations = event.usage.iterations; - } - if (event.usage.fallback_credit != null) { - snapshot.usage.fallback_credit = event.usage.fallback_credit; - } - if (event.usage.output_tokens_details != null) { - snapshot.usage.output_tokens_details = event.usage.output_tokens_details; - } - return snapshot; - case "content_block_start": - snapshot.content.push(event.content_block); - if (event.content_block.type === "fallback") { - snapshot.model = event.content_block.to.model; - } - return snapshot; - case "content_block_delta": { - const snapshotContent = snapshot.content.at(event.index); - switch (event.delta.type) { - case "text_delta": { - if (snapshotContent?.type === "text") { - snapshot.content[event.index] = { - ...snapshotContent, - text: (snapshotContent.text || "") + event.delta.text - }; - } - break; - } - case "citations_delta": { - if (snapshotContent?.type === "text") { - snapshot.content[event.index] = { - ...snapshotContent, - citations: [...snapshotContent.citations ?? [], event.delta.citation] - }; - } - break; - } - case "input_json_delta": { - if (snapshotContent && tracksToolInput(snapshotContent)) { - const jsonBuf = (snapshotContent[JSON_BUF_PROPERTY] || "") + event.delta.partial_json; - snapshot.content[event.index] = withLazyInput(snapshotContent, jsonBuf); - } - break; - } - case "thinking_delta": { - if (snapshotContent?.type === "thinking") { - snapshot.content[event.index] = { - ...snapshotContent, - thinking: snapshotContent.thinking + event.delta.thinking - }; - } - break; - } - case "signature_delta": { - if (snapshotContent?.type === "thinking") { - snapshot.content[event.index] = { - ...snapshotContent, - signature: event.delta.signature - }; - } - break; - } - case "compaction_delta": { - if (snapshotContent?.type === "compaction") { - const block = { ...snapshotContent, content: event.delta.content }; - if ("encrypted_content" in event.delta) { - block.encrypted_content = event.delta.encrypted_content; - } - snapshot.content[event.index] = block; - } - break; - } - default: - checkNever(event.delta); - } - return snapshot; - } - case "content_block_stop": { - const snapshotContent = snapshot.content.at(event.index); - if (snapshotContent && tracksToolInput(snapshotContent) && JSON_BUF_PROPERTY in snapshotContent) { - let input; - try { - input = snapshotContent.input; - } catch (err) { - input = {}; - __classPrivateFieldGet(this, _BetaMessageStream_handleError, "f").call(this, __classPrivateFieldGet(this, _BetaMessageStream_instances, "m", _BetaMessageStream_toolInputParseError).call(this, snapshotContent, err)); - } - Object.defineProperty(snapshotContent, "input", { - value: input, - enumerable: true, - configurable: true, - writable: true - }); - } - return snapshot; - } - } - }, _BetaMessageStream_toolInputParseError = function _BetaMessageStream_toolInputParseError2(block, err) { - const jsonBuf = block[JSON_BUF_PROPERTY]; - return new AnthropicError(`Unable to parse tool parameter JSON from model. Please retry your request or adjust your prompt. Error: ${err}. JSON: ${jsonBuf}`); - }, Symbol.asyncIterator)]() { - const pushQueue = []; - const readQueue = []; - let done = false; - this.on("streamEvent", (event) => { - const reader = readQueue.shift(); - if (reader) { - reader.resolve(event); - } else { - pushQueue.push(event); - } - }); - this.on("end", () => { - done = true; - for (const reader of readQueue) { - reader.resolve(void 0); - } - readQueue.length = 0; - }); - this.on("abort", (err) => { - done = true; - for (const reader of readQueue) { - reader.reject(err); - } - readQueue.length = 0; - }); - this.on("error", (err) => { - done = true; - for (const reader of readQueue) { - reader.reject(err); - } - readQueue.length = 0; - }); - return { - next: async () => { - if (!pushQueue.length) { - if (done) { - return { value: void 0, done: true }; - } - return new Promise((resolve2, reject2) => readQueue.push({ resolve: resolve2, reject: reject2 })).then((chunk2) => chunk2 ? { value: chunk2, done: false } : { value: void 0, done: true }); - } - const chunk = pushQueue.shift(); - return { value: chunk, done: false }; - }, - return: async () => { - this.abort(); - return { value: void 0, done: true }; - } - }; - } - toReadableStream() { - const stream5 = new Stream(this[Symbol.asyncIterator].bind(this), this.controller); - return stream5.toReadableStream(); - } - } - return BetaMessageStream2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/lib/internal/BetaToolRunnerStream.mjs -var _BetaToolRunnerStream_instances, _BetaToolRunnerStream_onToolCall, _BetaToolRunnerStream_emitted, _BetaToolRunnerStream_readers, _BetaToolRunnerStream_toolCalls, _BetaToolRunnerStream_closed, _BetaToolRunnerStream_ready, _BetaToolRunnerStream_fallback, _BetaToolRunnerStream_track, _BetaToolRunnerStream_release, _BetaToolRunnerStream_removeReader, BetaToolRunnerStream; -var init_BetaToolRunnerStream = __esm({ - "node_modules/@anthropic-ai/sdk/lib/internal/BetaToolRunnerStream.mjs"() { - init_tslib(); - init_stainless_helper_header(); - init_BetaMessageStream(); - BetaToolRunnerStream = /* @__PURE__ */ (() => { - class BetaToolRunnerStream2 extends BetaMessageStream { - constructor(params, onToolCall) { - super(params); - _BetaToolRunnerStream_instances.add(this); - _BetaToolRunnerStream_onToolCall.set(this, void 0); - _BetaToolRunnerStream_emitted.set(this, 0); - _BetaToolRunnerStream_readers.set(this, []); - _BetaToolRunnerStream_toolCalls.set(this, []); - _BetaToolRunnerStream_closed.set(this, void 0); - _BetaToolRunnerStream_ready.set(this, []); - _BetaToolRunnerStream_fallback.set(this, false); - __classPrivateFieldSet(this, _BetaToolRunnerStream_onToolCall, onToolCall, "f"); - } - /** The `tool_use` blocks that have finished streaming, in the model's order */ - get toolCalls() { - return __classPrivateFieldGet(this, _BetaToolRunnerStream_toolCalls, "f"); - } - /** Sends the request as `client.beta.messages.stream()` does. */ - static start(messages, params, options, onToolCall) { - const stream5 = new BetaToolRunnerStream2({ ...params, stream: true }, onToolCall); - for (const message of params.messages) { - stream5._addMessageParam(message); - } - stream5._run(() => stream5._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, [STAINLESS_HELPER_METHOD_HEADER]: "stream" } })); - return stream5; - } - _emit(event, ...args) { - var _a6; - if (event !== "streamEvent" || this.ended) { - super._emit(event, ...args); - return; - } - __classPrivateFieldSet(this, _BetaToolRunnerStream_emitted, (_a6 = __classPrivateFieldGet(this, _BetaToolRunnerStream_emitted, "f"), _a6++, _a6), "f"); - const [streamEvent, snapshot] = args; - const block = streamEvent.type === "content_block_stop" ? snapshot.content[streamEvent.index] : void 0; - const closed = block?.type === "tool_use" ? block : void 0; - if (closed) { - __classPrivateFieldGet(this, _BetaToolRunnerStream_toolCalls, "f").push(closed); - } - super._emit(event, ...args); - __classPrivateFieldGet(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_track).call(this, streamEvent, closed); - __classPrivateFieldGet(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_release).call(this); - } - [(_BetaToolRunnerStream_onToolCall = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_emitted = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_readers = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_toolCalls = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_closed = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_ready = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_fallback = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_instances = /* @__PURE__ */ new WeakSet(), Symbol.asyncIterator)]() { - const iterator = super[Symbol.asyncIterator](); - const reader = { handled: __classPrivateFieldGet(this, _BetaToolRunnerStream_emitted, "f") }; - __classPrivateFieldGet(this, _BetaToolRunnerStream_readers, "f").push(reader); - let holdsEvent = false; - return { - next: async () => { - if (holdsEvent) { - holdsEvent = false; - reader.handled++; - __classPrivateFieldGet(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_release).call(this); - } - try { - const result = await iterator.next(); - holdsEvent = !result.done; - if (result.done) { - __classPrivateFieldGet(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_removeReader).call(this, reader); - } - return result; - } catch (error) { - __classPrivateFieldGet(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_removeReader).call(this, reader); - throw error; - } - }, - return: async () => { - const result = iterator.return?.(); - __classPrivateFieldGet(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_removeReader).call(this, reader); - return await result ?? { value: void 0, done: true }; - } - }; - } - } - _BetaToolRunnerStream_track = function _BetaToolRunnerStream_track2(event, closed) { - if (__classPrivateFieldGet(this, _BetaToolRunnerStream_fallback, "f")) { - return; - } - if (event.type === "content_block_start" && event.content_block.type === "fallback") { - __classPrivateFieldSet(this, _BetaToolRunnerStream_fallback, true, "f"); - __classPrivateFieldSet(this, _BetaToolRunnerStream_closed, void 0, "f"); - return; - } - const movedOn = event.type === "content_block_start" || event.type === "message_delta" && event.delta.stop_reason === "tool_use"; - if (__classPrivateFieldGet(this, _BetaToolRunnerStream_closed, "f") && movedOn) { - __classPrivateFieldGet(this, _BetaToolRunnerStream_ready, "f").push({ toolUse: __classPrivateFieldGet(this, _BetaToolRunnerStream_closed, "f"), event: __classPrivateFieldGet(this, _BetaToolRunnerStream_emitted, "f") }); - __classPrivateFieldSet(this, _BetaToolRunnerStream_closed, void 0, "f"); - } - if (closed) { - __classPrivateFieldSet(this, _BetaToolRunnerStream_closed, closed, "f"); - } - }, _BetaToolRunnerStream_release = function _BetaToolRunnerStream_release2() { - if (this.errored || this.controller.signal.aborted) { - return; - } - const handled = Math.min(__classPrivateFieldGet(this, _BetaToolRunnerStream_emitted, "f"), ...__classPrivateFieldGet(this, _BetaToolRunnerStream_readers, "f").map((reader) => reader.handled)); - while (__classPrivateFieldGet(this, _BetaToolRunnerStream_ready, "f")[0] && __classPrivateFieldGet(this, _BetaToolRunnerStream_ready, "f")[0].event <= handled) { - __classPrivateFieldGet(this, _BetaToolRunnerStream_onToolCall, "f").call(this, __classPrivateFieldGet(this, _BetaToolRunnerStream_ready, "f").shift().toolUse); - } - }, _BetaToolRunnerStream_removeReader = function _BetaToolRunnerStream_removeReader2(reader) { - const index = __classPrivateFieldGet(this, _BetaToolRunnerStream_readers, "f").indexOf(reader); - if (index >= 0) { - __classPrivateFieldGet(this, _BetaToolRunnerStream_readers, "f").splice(index, 1); - __classPrivateFieldGet(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_release).call(this); - } - }; - return BetaToolRunnerStream2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/internal/utils/promise.mjs -function promiseWithResolvers() { - let resolve2; - let reject2; - const promise = new Promise((res, rej) => { - resolve2 = res; - reject2 = rej; - }); - return { promise, resolve: resolve2, reject: reject2 }; -} -var init_promise = __esm({ - "node_modules/@anthropic-ai/sdk/internal/utils/promise.mjs"() { - } -}); - -// node_modules/@anthropic-ai/sdk/lib/tools/BetaToolRunner.mjs -function rejectCompactionParam(params) { - if ("compaction" in params && params.compaction != null) { - throw new AnthropicError("`compaction` cannot be set on a tool runner: every request in the loop would compact again. Call `runner.compactBeforeNextTurn()` when the conversation should be compacted instead."); - } -} -function rejectCompactionControl(params) { - if ("compactionControl" in params && params.compactionControl != null) { - throw new AnthropicError("`compactionControl` has been removed from the tool runner. Use server-side compaction instead: call `runner.compactBeforeNextTurn()` when the conversation should be compacted."); - } -} -function rejectRunToolsEagerlyWithoutStream(params) { - if (params.runToolsEagerly && !params.stream) { - throw new TypeError("`runToolsEagerly: true` needs `stream: true` in the tool runner's params, because a reply that isn't streamed arrives whole."); - } -} -function rejectCompactionEdit(params) { - if (params.context_management?.edits?.some((edit) => edit.type.startsWith("compact_"))) { - throw new AnthropicError("`compactBeforeNextTurn()` can't be used while `context_management` has a compaction edit, because the API doesn't accept a compaction block together with one. Remove the edit first."); - } -} -function withoutCompactionIncompatibleParams(params) { - const { context_management, stop_sequences, output_format, ...kept } = params; - const withoutFormat = ({ format, ...outputConfig }) => outputConfig; - if (kept.tool_choice?.type === "any" || kept.tool_choice?.type === "tool") { - delete kept.tool_choice; - } - if (kept.output_config) { - kept.output_config = withoutFormat(kept.output_config); - } - if (Array.isArray(kept.fallbacks)) { - kept.fallbacks = kept.fallbacks.map((fallback) => fallback.output_config ? { ...fallback, output_config: withoutFormat(fallback.output_config) } : fallback); - } - return kept; -} -async function generateToolResponse(runnable, available, lastMessage, requestOptions, calls) { - if (!lastMessage || lastMessage.role !== "assistant" || !lastMessage.content || typeof lastMessage.content === "string") { - return null; - } - const toolUseBlocks = lastMessage.content.filter((content) => content.type === "tool_use"); - if (toolUseBlocks.length === 0) { - return null; - } - const toolResults = await Promise.all(toolUseBlocks.map((toolUse) => { - const call = calls?.get(toolUse.id); - if (call?.status === "started") { - return call.result; - } - const result = runToolCall(runnable, available, toolUse, requestOptions); - calls?.set(toolUse.id, { status: "started", result }); - return result; - })); - return { - role: "user", - content: toolResults - }; -} -async function runToolCall(runnable, available, toolUse, requestOptions) { - const tool = available.has(toolUse.name) ? runnable.get(toolUse.name) : void 0; - if (!tool) { - return toolNotFoundResult(toolUse); - } - try { - let input = toolUse.input; - if ("parse" in tool && tool.parse) { - input = tool.parse(input); - } - const result = await tool.run(input, { - toolUse, - toolUseBlock: toolUse, - signal: requestOptions?.signal - }); - return { - type: "tool_result", - tool_use_id: toolUse.id, - content: result - }; - } catch (error) { - return { - type: "tool_result", - tool_use_id: toolUse.id, - content: error instanceof ToolError ? error.content : `Error: ${error instanceof Error ? error.message : String(error)}`, - is_error: true - }; - } -} -function asContentParam(content) { - return content; -} -function toolNotFoundResult(toolUse) { - return { - type: "tool_result", - tool_use_id: toolUse.id, - content: `Error: Tool '${toolUse.name}' not found`, - is_error: true - }; -} -function applyToolChange(block, available) { - switch (block.type) { - case "tool_removal": - case "tool_addition": - applyToolReference(block, available); - break; - } -} -function applyToolReference(block, available) { - const name = changedToolName(block.tool); - if (name === void 0) - return; - if (block.type === "tool_removal") { - available.delete(name); - } else { - available.add(name); - } -} -function changedToolName(tool) { - switch (tool.type) { - case "tool_reference": - return tool.name; - case "tool_definition": - return "name" in tool.definition ? tool.definition.name : void 0; - default: - return void 0; - } -} -function determineNextStepFromStopReason(stopReason) { - if (stopReason === null) - return "stop"; - switch (stopReason) { - case "tool_use": - return "run_tools"; - case "pause_turn": - // pause_after_compaction hands the turn back before the model answers; sending it back - // unchanged continues it. - case "compaction": - return "resume"; - case "end_turn": - case "stop_sequence": - case "max_tokens": - case "model_context_window_exceeded": - case "refusal": - return "stop"; - default: - checkNever(stopReason); - return "stop"; - } -} -var _BetaToolRunner_instances, _BetaToolRunner_consumed, _BetaToolRunner_mutated, _BetaToolRunner_state, _BetaToolRunner_options, _BetaToolRunner_message, _BetaToolRunner_stream, _BetaToolRunner_toolResponse, _BetaToolRunner_completion, _BetaToolRunner_iterationCount, _BetaToolRunner_compaction, _BetaToolRunner_calls, _BetaToolRunner_lastStopReason, _BetaToolRunner_toolOverrides, _BetaToolRunner_pendingToolChanges, _BetaToolRunner_send, _BetaToolRunner_streamThatStartsTools, _BetaToolRunner_startedCallsSettled, _BetaToolRunner_compact, _BetaToolRunner_runnableTools, _BetaToolRunner_availableToolNames, _BetaToolRunner_recordRemovalsFromHistory, _BetaToolRunner_compactAfterFinalTurn, _BetaToolRunner_generateToolResponse, _BetaToolRunner_flushPendingToolChanges, _BetaToolRunner_pendingToolChangesMessage, BetaToolRunner; -var init_BetaToolRunner = __esm({ - "node_modules/@anthropic-ai/sdk/lib/tools/BetaToolRunner.mjs"() { - init_tslib(); - init_ToolError(); - init_error(); - init_BetaToolRunnerStream(); - init_headers(); - init_promise(); - init_values(); - init_log(); - init_stainless_helper_header(); - BetaToolRunner = /* @__PURE__ */ (() => { - class BetaToolRunner2 { - constructor(client, params, options) { - _BetaToolRunner_instances.add(this); - this.client = client; - _BetaToolRunner_consumed.set(this, false); - _BetaToolRunner_mutated.set(this, false); - _BetaToolRunner_state.set(this, void 0); - _BetaToolRunner_options.set(this, void 0); - _BetaToolRunner_message.set(this, void 0); - _BetaToolRunner_stream.set(this, void 0); - _BetaToolRunner_toolResponse.set(this, void 0); - _BetaToolRunner_completion.set(this, void 0); - _BetaToolRunner_iterationCount.set(this, 0); - _BetaToolRunner_compaction.set(this, { status: "idle" }); - _BetaToolRunner_calls.set(this, void 0); - _BetaToolRunner_lastStopReason.set(this, null); - _BetaToolRunner_toolOverrides.set(this, /* @__PURE__ */ new Map()); - _BetaToolRunner_pendingToolChanges.set(this, []); - rejectCompactionParam(params); - rejectCompactionControl(params); - rejectRunToolsEagerlyWithoutStream(params); - __classPrivateFieldSet(this, _BetaToolRunner_state, { - params: { - // You can't clone the entire params since there are functions as handlers. - // You also don't really need to clone params.messages, but it probably will prevent a foot gun - // somewhere. - ...params, - // Not structuredClone(): it throws on a function, and a runnable tool written by value into a - // `tool_addition` block has `run`. A JSON copy is the messages as they are sent, which drops it. - messages: JSON.parse(JSON.stringify(params.messages)) - } - }, "f"); - const collected = collectStainlessHelpers(params.tools, params.messages); - __classPrivateFieldSet(this, _BetaToolRunner_options, { - ...options, - headers: buildHeaders([ - helperHeader("BetaToolRunner"), - collected.length ? { [STAINLESS_HELPER_HEADER]: collected.join(", ") } : void 0, - options?.headers - ]) - }, "f"); - __classPrivateFieldSet(this, _BetaToolRunner_completion, promiseWithResolvers(), "f"); - } - async *[(_BetaToolRunner_consumed = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_mutated = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_state = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_options = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_message = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_stream = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_toolResponse = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_completion = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_iterationCount = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_compaction = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_calls = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_lastStopReason = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_toolOverrides = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_pendingToolChanges = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_instances = /* @__PURE__ */ new WeakSet(), Symbol.asyncIterator)]() { - var _a6; - if (__classPrivateFieldGet(this, _BetaToolRunner_consumed, "f")) { - throw new AnthropicError("Cannot iterate over a consumed stream"); - } - __classPrivateFieldSet(this, _BetaToolRunner_consumed, true, "f"); - __classPrivateFieldSet(this, _BetaToolRunner_mutated, true, "f"); - __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, void 0, "f"); - try { - while (true) { - try { - if (__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.max_iterations && __classPrivateFieldGet(this, _BetaToolRunner_iterationCount, "f") >= __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.max_iterations) { - break; - } - __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_flushPendingToolChanges).call(this); - if (__classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").status === "scheduled" && determineNextStepFromStopReason(__classPrivateFieldGet(this, _BetaToolRunner_lastStopReason, "f")) !== "resume") { - yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compact).call(this, __classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").config); - continue; - } - __classPrivateFieldSet(this, _BetaToolRunner_mutated, false, "f"); - __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, void 0, "f"); - __classPrivateFieldSet(this, _BetaToolRunner_iterationCount, (_a6 = __classPrivateFieldGet(this, _BetaToolRunner_iterationCount, "f"), _a6++, _a6), "f"); - __classPrivateFieldSet(this, _BetaToolRunner_message, void 0, "f"); - const { max_iterations, runToolsEagerly, ...params } = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params; - yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_send).call(this, params); - if (!__classPrivateFieldGet(this, _BetaToolRunner_mutated, "f")) { - const message = await __classPrivateFieldGet(this, _BetaToolRunner_message, "f"); - const nextStep = determineNextStepFromStopReason(message.stop_reason); - __classPrivateFieldSet(this, _BetaToolRunner_lastStopReason, message.stop_reason, "f"); - __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.push({ - role: message.role, - content: asContentParam(message.content) - }); - const { container } = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params; - if (message.container) { - if (container == null) { - __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.container = message.container.id; - } else if (typeof container === "object" && container.id == null) { - __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.container = { ...container, id: message.container.id }; - } - } - if (nextStep === "stop") { - yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compactAfterFinalTurn).call(this); - break; - } - if (nextStep === "resume") { - continue; - } - } else { - __classPrivateFieldSet(this, _BetaToolRunner_lastStopReason, null, "f"); - } - const toolMessage = await __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_generateToolResponse).call(this, __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.at(-1)); - if (toolMessage) { - __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.push(toolMessage); - } else if (!__classPrivateFieldGet(this, _BetaToolRunner_mutated, "f")) { - yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compactAfterFinalTurn).call(this); - break; - } - } finally { - __classPrivateFieldGet(this, _BetaToolRunner_stream, "f")?.abort(); - __classPrivateFieldSet(this, _BetaToolRunner_stream, void 0, "f"); - } - } - await __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_startedCallsSettled).call(this); - if (!__classPrivateFieldGet(this, _BetaToolRunner_message, "f")) { - throw new AnthropicError("ToolRunner concluded without a message from the server"); - } - __classPrivateFieldGet(this, _BetaToolRunner_completion, "f").resolve(await __classPrivateFieldGet(this, _BetaToolRunner_message, "f")); - } catch (error) { - __classPrivateFieldSet(this, _BetaToolRunner_consumed, false, "f"); - __classPrivateFieldGet(this, _BetaToolRunner_completion, "f").promise.catch(() => { - }); - __classPrivateFieldGet(this, _BetaToolRunner_completion, "f").reject(error); - __classPrivateFieldSet(this, _BetaToolRunner_completion, promiseWithResolvers(), "f"); - throw error; - } - } - setMessagesParams(paramsOrMutator) { - const params = typeof paramsOrMutator === "function" ? paramsOrMutator(__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params) : paramsOrMutator; - rejectCompactionParam(params); - rejectRunToolsEagerlyWithoutStream(params); - if (__classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").status !== "idle") { - rejectCompactionEdit(params); - } - if (__classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").status === "in_flight" && params.messages !== __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages) { - throw new AnthropicError("Message params can't be changed while the conversation is being compacted, because the compaction response is about to replace them. Change them after this iteration instead."); - } - __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params = params; - __classPrivateFieldSet(this, _BetaToolRunner_mutated, true, "f"); - __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, void 0, "f"); - } - setRequestOptions(optionsOrMutator) { - if (typeof optionsOrMutator === "function") { - __classPrivateFieldSet(this, _BetaToolRunner_options, optionsOrMutator(__classPrivateFieldGet(this, _BetaToolRunner_options, "f")), "f"); - } else { - __classPrivateFieldSet(this, _BetaToolRunner_options, { ...__classPrivateFieldGet(this, _BetaToolRunner_options, "f"), ...optionsOrMutator }, "f"); - } - } - /** - * Get the tool response for the last message from the assistant. - * Avoids redundant tool executions by caching results. With `runToolsEagerly`, it reuses the calls of - * the reply that have started and runs the rest, including the ones `deferToolCall()` is holding, so that no - * call runs twice. - * - * @returns A promise that resolves to a BetaMessageParam containing tool results, or null if no tools need to be executed - * - * @example - * const toolResponse = await runner.generateToolResponse(); - * if (toolResponse) { - * console.log('Tool results:', toolResponse.content); - * } - */ - async generateToolResponse(signal = __classPrivateFieldGet(this, _BetaToolRunner_options, "f").signal) { - const message = await __classPrivateFieldGet(this, _BetaToolRunner_message, "f") ?? this.params.messages.at(-1); - if (!message) { - return null; - } - return __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_generateToolResponse).call(this, message, signal); - } - /** - * Hold a tool call of the current reply until you are done with the reply, which is when it runs without - * streaming: at the end of the loop body, or when you call `generateToolResponse()`. - * - * With `runToolsEagerly` the runner otherwise starts each call while the reply streams, as soon as - * the model has moved on from it: when the next block starts, or the reply stops with `tool_use`. A call - * never starts before your stream listeners and any `for await` over the stream have handled that event, so - * you can call this from either once you have seen the call. The other calls of the reply still start early. - * It does nothing for a call that has started, outside the loop body, and without `runToolsEagerly`. - * - * @param toolUse - The `tool_use` block of the call, or its id - * - * @example - * for await (const stream of runner) { - * stream.on('contentBlock', (block) => { - * if (block.type === 'tool_use' && block.name === 'delete_file') { - * runner.deferToolCall(block); - * } - * }); - * await stream.finalMessage(); - * // No `delete_file` call has started yet. - * } - */ - deferToolCall(toolUse) { - const id = typeof toolUse === "string" ? toolUse : toolUse.id; - if (__classPrivateFieldGet(this, _BetaToolRunner_calls, "f") && !__classPrivateFieldGet(this, _BetaToolRunner_calls, "f").has(id)) { - __classPrivateFieldGet(this, _BetaToolRunner_calls, "f").set(id, { status: "held" }); - } - } - /** - * The tool calls of the current reply that `deferToolCall()` is holding, in the model's order, as their - * `tool_use` blocks. A call is in the list once its block has finished streaming, so read the list when you - * are done with the stream. A call that has started is not in it. It is empty without - * `runToolsEagerly`. - * - * Held calls are listed whatever the reply's `stop_reason`, because `generateToolResponse()` runs them - * whatever it is. After `max_tokens` the input of the last call can be cut off. - * - * @example - * for await (const stream of runner) { - * stream.on('contentBlock', (block) => { - * if (block.type === 'tool_use' && block.name === 'delete_file') { - * runner.deferToolCall(block); - * } - * }); - * await stream.finalMessage(); - * - * const held = runner.deferredToolCalls; - * if (held.length > 0 && !(await confirm(held))) break; - * } - */ - get deferredToolCalls() { - const stream5 = __classPrivateFieldGet(this, _BetaToolRunner_stream, "f"); - const calls = __classPrivateFieldGet(this, _BetaToolRunner_calls, "f"); - if (!(stream5 instanceof BetaToolRunnerStream) || !calls) { - return []; - } - return stream5.toolCalls.filter((toolUse) => calls.get(toolUse.id)?.status === "held"); - } - /** - * Wait for the async iterator to complete. This works even if the async iterator hasn't yet started, and - * will wait for an instance to start and go to completion. - * - * @returns A promise that resolves to the final BetaMessage when the iterator completes - * - * @example - * // Start consuming the iterator - * for await (const message of runner) { - * console.log('Message:', message.content); - * } - * - * // Meanwhile, wait for completion from another part of the code - * const finalMessage = await runner.done(); - * console.log('Final response:', finalMessage.content); - */ - done() { - return __classPrivateFieldGet(this, _BetaToolRunner_completion, "f").promise; - } - /** - * Returns a promise indicating that the stream is done. Unlike .done(), this will eagerly read the stream: - * * If the iterator has not been consumed, consume the entire iterator and return the final message from the - * assistant. - * * If the iterator has been consumed, waits for it to complete and returns the final message. - * - * @returns A promise that resolves to the final BetaMessage from the conversation - * @throws {AnthropicError} If no messages were processed during the conversation - * - * @example - * const finalMessage = await runner.runUntilDone(); - * console.log('Final response:', finalMessage.content); - */ - async runUntilDone() { - if (!__classPrivateFieldGet(this, _BetaToolRunner_consumed, "f")) { - for await (const _ of this) { - } - } - return this.done(); - } - /** - * Get the current parameters being used by the ToolRunner. - * - * @returns A readonly view of the current ToolRunnerParams - * - * @example - * const currentParams = runner.params; - * console.log('Current model:', currentParams.model); - * console.log('Message count:', currentParams.messages.length); - */ - get params() { - return __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params; - } - /** - * Add one or more messages to the conversation history. - * - * @param messages - One or more BetaMessageParam objects to add to the conversation - * - * @example - * runner.pushMessages( - * { role: 'user', content: 'Also, what about the weather in NYC?' } - * ); - * - * @example - * // Adding multiple messages - * runner.pushMessages( - * { role: 'user', content: 'What about NYC?' }, - * { role: 'user', content: 'And Boston?' } - * ); - */ - pushMessages(...messages) { - this.setMessagesParams((params) => ({ - ...params, - messages: [...params.messages, ...messages] - })); - } - /** - * Schedule a compaction of the conversation. Once the current turn has finished, including any tool - * calls, the runner requests a summary and replaces the message history with the compaction response, - * which is yielded like any other message. Requires the `compact-2026-09-04` beta. - * - * @param compaction - The config to send, as `messages.create()` takes it. Defaults to `{ type: 'summarize' }` - * - * @example - * for await (const message of runner) { - * if (message.usage.input_tokens > 100_000) { - * runner.compactBeforeNextTurn(); - * } - * } - */ - compactBeforeNextTurn(compaction) { - if (__classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").status === "in_flight") { - return; - } - rejectCompactionEdit(__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params); - __classPrivateFieldSet(this, _BetaToolRunner_compaction, { status: "scheduled", config: compaction ?? { type: "summarize" } }, "f"); - } - /** - * Give the model more tools without changing `params.tools`, which would miss the prompt cache. - * - * Each tool's whole definition is sent in a `tool_addition` block with the next request, and a - * runnable tool replaces a runnable tool of the same name straight away, even for a call already in - * the message being handled. A call that started while the reply streamed keeps the old one. A raw - * definition is only sent: the runner never runs it, and stops running a tool of the same name. - * Requires the `inline-tools-2026-09-15` beta, which the runner does not add for you. - * - * @param tools - Runnable tools (for example from `betaZodTool()`) or raw tool definitions - * - * @example - * runner.addTools(queryDatabaseTool); - */ - addTools(...tools) { - for (const tool of tools) { - if ("name" in tool) { - __classPrivateFieldGet(this, _BetaToolRunner_toolOverrides, "f").set(tool.name, "run" in tool ? tool : null); - } - __classPrivateFieldGet(this, _BetaToolRunner_pendingToolChanges, "f").push({ type: "addition", tool }); - } - } - /** - * Take tools away from the model without changing `params.tools`, which would miss the prompt cache. - * - * The tools stop being run straight away: a call to one of them, even one in the message being - * handled, gets the same "not found" error result as a call to an unknown tool. A call that started - * while the reply streamed finishes as usual. The model is told in a `tool_removal` block with the - * next request. Use {@link addTools} to bring a tool back. - * Requires the `inline-tools-2026-09-15` beta, which the runner does not add for you. - * - * @param tools - The tools to remove, or their names - * - * @example - * runner.removeTools('query_database'); - */ - removeTools(...tools) { - for (const tool of tools) { - const name = typeof tool === "string" ? tool : tool.name; - __classPrivateFieldGet(this, _BetaToolRunner_toolOverrides, "f").set(name, null); - __classPrivateFieldGet(this, _BetaToolRunner_pendingToolChanges, "f").push({ type: "removal", name }); - } - } - /** - * Makes the ToolRunner directly awaitable, equivalent to calling .runUntilDone() - * This allows using `await runner` instead of `await runner.runUntilDone()` - */ - then(onfulfilled, onrejected) { - return this.runUntilDone().then(onfulfilled, onrejected); - } - } - _BetaToolRunner_send = /** - * Sends one request and yields its message, or its stream when streaming. `#message` and `#stream` are set - * before the yield, so they are there while the caller handles the item; the loop aborts the stream at the - * end of the iteration. - */ - async function* _BetaToolRunner_send2(params) { - await __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_startedCallsSettled).call(this); - __classPrivateFieldSet(this, _BetaToolRunner_calls, void 0, "f"); - if (params.stream) { - __classPrivateFieldSet(this, _BetaToolRunner_stream, __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.runToolsEagerly ? __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_streamThatStartsTools).call(this, params) : this.client.beta.messages.stream({ ...params }, __classPrivateFieldGet(this, _BetaToolRunner_options, "f")), "f"); - __classPrivateFieldSet(this, _BetaToolRunner_message, __classPrivateFieldGet(this, _BetaToolRunner_stream, "f").finalMessage(), "f"); - __classPrivateFieldGet(this, _BetaToolRunner_message, "f").catch(() => { - }); - yield __classPrivateFieldGet(this, _BetaToolRunner_stream, "f"); - } else { - __classPrivateFieldSet(this, _BetaToolRunner_message, this.client.beta.messages.create({ ...params, stream: false }, __classPrivateFieldGet(this, _BetaToolRunner_options, "f")), "f"); - yield __classPrivateFieldGet(this, _BetaToolRunner_message, "f"); - } - }, _BetaToolRunner_streamThatStartsTools = function _BetaToolRunner_streamThatStartsTools2(params) { - const calls = /* @__PURE__ */ new Map(); - __classPrivateFieldSet(this, _BetaToolRunner_calls, calls, "f"); - return BetaToolRunnerStream.start(this.client.beta.messages, params, __classPrivateFieldGet(this, _BetaToolRunner_options, "f"), (toolUse) => { - if (calls.has(toolUse.id)) { - return; - } - const result = runToolCall(__classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_runnableTools).call(this), __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_availableToolNames).call(this), toolUse, __classPrivateFieldGet(this, _BetaToolRunner_options, "f")); - result.catch(() => { - }); - calls.set(toolUse.id, { status: "started", result }); - }); - }, _BetaToolRunner_startedCallsSettled = /** Waits for the calls of the last streamed reply that have started, whether or not their results were sent. */ - async function _BetaToolRunner_startedCallsSettled2() { - const started = [...__classPrivateFieldGet(this, _BetaToolRunner_calls, "f")?.values() ?? []].filter((call) => call.status === "started"); - await Promise.allSettled(started.map((call) => call.result)); - }, _BetaToolRunner_compact = async function* _BetaToolRunner_compact2(compaction) { - rejectCompactionEdit(__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params); - const { max_iterations, runToolsEagerly, ...requestParams } = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params; - const params = withoutCompactionIncompatibleParams(requestParams); - __classPrivateFieldSet(this, _BetaToolRunner_compaction, { status: "in_flight" }, "f"); - __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, void 0, "f"); - const lastMessage = __classPrivateFieldGet(this, _BetaToolRunner_message, "f"); - try { - yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_send).call(this, { ...params, compaction }); - const message = await __classPrivateFieldGet(this, _BetaToolRunner_message, "f"); - if (message.content.some((block) => block.type === "compaction" && block.content)) { - __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_recordRemovalsFromHistory).call(this); - __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages = [{ role: message.role, content: message.content }]; - } else { - loggerFor(this.client).warn("Compaction produced no summary; keeping the conversation as it is."); - __classPrivateFieldSet(this, _BetaToolRunner_message, lastMessage, "f"); - } - } finally { - __classPrivateFieldSet(this, _BetaToolRunner_compaction, { status: "idle" }, "f"); - } - }, _BetaToolRunner_runnableTools = function _BetaToolRunner_runnableTools2() { - const runnable = /* @__PURE__ */ new Map(); - for (const tool of __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.tools) { - if ("run" in tool) { - runnable.set(tool.name, tool); - } - } - for (const [name, tool] of __classPrivateFieldGet(this, _BetaToolRunner_toolOverrides, "f")) { - if (tool) { - runnable.set(name, tool); - } else { - runnable.delete(name); - } - } - return runnable; - }, _BetaToolRunner_availableToolNames = function _BetaToolRunner_availableToolNames2() { - const available = new Set(__classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_runnableTools).call(this).keys()); - for (const message of [...__classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages, __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_pendingToolChangesMessage).call(this)]) { - if (typeof message.content === "string") { - continue; - } - for (const block of message.content) { - if (message.role === "system") { - applyToolChange(block, available); - } else if (message.role === "assistant" && block.type === "compaction") { - for (const change of block.tool_changes ?? []) { - applyToolChange(change, available); - } - } - } - } - return available; - }, _BetaToolRunner_recordRemovalsFromHistory = function _BetaToolRunner_recordRemovalsFromHistory2() { - const available = __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_availableToolNames).call(this); - for (const name of __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_runnableTools).call(this).keys()) { - if (!available.has(name)) { - __classPrivateFieldGet(this, _BetaToolRunner_toolOverrides, "f").set(name, null); - } - } - }, _BetaToolRunner_compactAfterFinalTurn = async function* _BetaToolRunner_compactAfterFinalTurn2() { - if (__classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").status !== "scheduled") { - return; - } - const lastContent = __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.at(-1)?.content; - if (Array.isArray(lastContent) && lastContent.some((block) => block.type === "tool_use")) { - loggerFor(this.client).warn("The pending compaction was skipped because the last turn ended with tool calls that were not run. Call `compactBeforeNextTurn()` again if you continue the conversation."); - __classPrivateFieldSet(this, _BetaToolRunner_compaction, { status: "idle" }, "f"); - return; - } - yield* __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compact).call(this, __classPrivateFieldGet(this, _BetaToolRunner_compaction, "f").config); - }, _BetaToolRunner_generateToolResponse = async function _BetaToolRunner_generateToolResponse2(lastMessage, signal = __classPrivateFieldGet(this, _BetaToolRunner_options, "f").signal) { - if (__classPrivateFieldGet(this, _BetaToolRunner_toolResponse, "f") !== void 0) { - return __classPrivateFieldGet(this, _BetaToolRunner_toolResponse, "f"); - } - __classPrivateFieldSet(this, _BetaToolRunner_toolResponse, generateToolResponse(__classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_runnableTools).call(this), __classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_availableToolNames).call(this), lastMessage, { ...__classPrivateFieldGet(this, _BetaToolRunner_options, "f"), signal }, __classPrivateFieldGet(this, _BetaToolRunner_calls, "f")), "f"); - return __classPrivateFieldGet(this, _BetaToolRunner_toolResponse, "f"); - }, _BetaToolRunner_flushPendingToolChanges = function _BetaToolRunner_flushPendingToolChanges2() { - if (__classPrivateFieldGet(this, _BetaToolRunner_lastStopReason, "f") === "pause_turn" || __classPrivateFieldGet(this, _BetaToolRunner_pendingToolChanges, "f").length === 0) { - return; - } - __classPrivateFieldGet(this, _BetaToolRunner_state, "f").params.messages.push(__classPrivateFieldGet(this, _BetaToolRunner_instances, "m", _BetaToolRunner_pendingToolChangesMessage).call(this)); - __classPrivateFieldSet(this, _BetaToolRunner_pendingToolChanges, [], "f"); - }, _BetaToolRunner_pendingToolChangesMessage = function _BetaToolRunner_pendingToolChangesMessage2() { - const content = []; - for (const change of __classPrivateFieldGet(this, _BetaToolRunner_pendingToolChanges, "f")) { - if (change.type === "removal") { - content.push({ type: "tool_removal", tool: { type: "tool_reference", name: change.name } }); - continue; - } - let definition = change.tool; - if ("run" in change.tool) { - const { run: run2, parse: parse2, close, ...rest } = change.tool; - definition = rest; - } - content.push({ type: "tool_addition", tool: { type: "tool_definition", definition } }); - } - return { role: "system", content }; - }; - return BetaToolRunner2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.mjs -function transformOutputFormat(params) { - if (!params.output_format) { - return params; - } - if (params.output_config?.format) { - throw new AnthropicError("Both output_format and output_config.format were provided. Please use only output_config.format (output_format is deprecated)."); - } - const { output_format, ...rest } = params; - return { - ...rest, - output_config: { - ...params.output_config, - format: output_format - } - }; -} -var DEPRECATED_MODELS, MODELS_TO_WARN_WITH_THINKING_ENABLED, Messages; -var init_messages = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.mjs"() { - init_error2(); - init_batches(); - init_resource(); - init_constants(); - init_headers(); - init_stainless_helper_header(); - init_beta_parser(); - init_BetaMessageStream(); - init_BetaToolRunner(); - init_ToolError(); - init_batches(); - DEPRECATED_MODELS = {}; - MODELS_TO_WARN_WITH_THINKING_ENABLED = ["claude-mythos-preview", "claude-opus-4-6"]; - Messages = /* @__PURE__ */ (() => { - class Messages5 extends APIResource { - constructor() { - super(...arguments); - this.batches = new Batches(this._client); - } - create(params, options) { - const modifiedParams = transformOutputFormat(params); - const { betas, user_profile_id, workspace_id, ...body } = modifiedParams; - if (body.model in DEPRECATED_MODELS) { - console.warn(`The model '${body.model}' is deprecated and will reach end-of-life on ${DEPRECATED_MODELS[body.model]} -Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`); - } - if (MODELS_TO_WARN_WITH_THINKING_ENABLED.includes(body.model) && body.thinking && body.thinking.type === "enabled") { - console.warn(`Using Claude with ${body.model} and 'thinking.type=enabled' is deprecated. Use 'thinking.type=adaptive' instead which results in better model performance in our testing: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking`); - } - let timeout = options?.timeout ?? this._client._options.timeout; - if (!body.stream && timeout == null) { - const maxNonstreamingTokens = MODEL_NONSTREAMING_TOKENS[body.model] ?? void 0; - timeout = this._client.calculateNonstreamingTimeout(body.max_tokens, maxNonstreamingTokens); - } - const helperHeader2 = stainlessHelperHeader(body.tools, body.messages); - return this._client.post("/v1/messages?beta=true", { - body, - timeout: timeout ?? 6e5, - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - helperHeader2, - options?.headers - ]), - stream: modifiedParams.stream ?? false - }); - } - /** - * Send a structured list of input messages with text and/or image content, along with an expected `output_format` and - * the response will be automatically parsed and available in the `parsed_output` property of the message. - * - * @example - * ```ts - * const message = await client.beta.messages.parse({ - * model: 'claude-3-5-sonnet-20241022', - * max_tokens: 1024, - * messages: [{ role: 'user', content: 'What is 2+2?' }], - * output_format: zodOutputFormat(z.object({ answer: z.number() }), 'math'), - * }); - * - * console.log(message.parsed_output?.answer); // 4 - * ``` - */ - parse(params, options) { - options = { - ...options, - headers: buildHeaders([ - { "anthropic-beta": [...params.betas ?? [], "structured-outputs-2025-12-15"].toString() }, - options?.headers - ]) - }; - return this.create(params, options).then((message) => parseBetaMessage(message, params, { logger: this._client.logger ?? console })); - } - /** - * Create a Message stream - */ - stream(body, options) { - return BetaMessageStream.createMessage(this, body, options); - } - /** - * Count the number of tokens in a Message. - * - * The Token Count API can be used to count the number of tokens in a Message, - * including tools, images, and documents, without creating it. - * - * Learn more about token counting in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/token-counting) - * - * @example - * ```ts - * const betaMessageTokensCount = - * await client.beta.messages.countTokens({ - * messages: [{ content: 'Hello, world', role: 'user' }], - * model: 'claude-opus-5', - * }); - * ``` - */ - countTokens(params, options) { - const modifiedParams = transformOutputFormat(params); - const { betas, user_profile_id, workspace_id, ...body } = modifiedParams; - return this._client.post("/v1/messages/count_tokens?beta=true", { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "token-counting-2024-11-01"].toString(), - ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - toolRunner(body, options) { - return new BetaToolRunner(this._client, body, options); - } - } - Messages5.Batches = Batches; - Messages5.BetaToolRunner = BetaToolRunner; - Messages5.ToolError = ToolError; - return Messages5; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.mjs -var APIKeys; -var init_api_keys = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.mjs"() { - init_resource(); - init_pagination(); - init_path(); - APIKeys = class extends APIResource { - /** - * Get API Key - * - * @example - * ```ts - * const betaAPIKey = - * await client.beta.organization.apiKeys.retrieve( - * 'api_key_id', - * ); - * ``` - */ - retrieve(apiKeyID, options) { - return this._client.get(path2`/v1/organizations/api_keys/${apiKeyID}?beta=true`, options); - } - /** - * Update API Key - * - * @example - * ```ts - * const betaAPIKey = - * await client.beta.organization.apiKeys.update( - * 'api_key_id', - * ); - * ``` - */ - update(apiKeyID, body, options) { - return this._client.post(path2`/v1/organizations/api_keys/${apiKeyID}?beta=true`, { body, ...options }); - } - /** - * List API Keys - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaAPIKey of client.beta.organization.apiKeys.list()) { - * // ... - * } - * ``` - */ - list(query = {}, options) { - return this._client.getAPIList("/v1/organizations/api_keys?beta=true", Page, { - query, - ...options - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.mjs -var ComplianceSettings; -var init_compliance_settings = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.mjs"() { - init_resource(); - ComplianceSettings = class extends APIResource { - /** - * Retrieve your organization's Compliance Settings. - * - * Compliance Settings is a singleton resource: there is exactly one per - * organization, addressed without an identifier. The `state` field reflects - * whether the Compliance API is enabled. An organization with a parent - * organization reads the state inherited from the parent's configuration. - * - * @example - * ```ts - * const betaComplianceSettings = - * await client.beta.organization.complianceSettings.retrieve(); - * ``` - */ - retrieve(options) { - return this._client.get("/v1/organizations/compliance_settings?beta=true", options); - } - /** - * Update your organization's Compliance Settings. - * - * Setting `state` to `enabled` turns on the Compliance API and begins capturing - * organization activity events. Setting it to `disabled` turns both off. `state` - * reflects whether the Compliance API is enabled. - * - * A request that sets `state` to its current value succeeds and leaves the - * resource unchanged. A `disabled` request stays in effect until a later `enabled` - * request or the organization's next provisioning action that enables Access - * Transparency: enabling Access Transparency also enables the Compliance API, - * which serves its activity events, so such provisioning (including re-runs) - * re-enables the Compliance API even after a `disabled` request. Automated - * provisioning never disables compliance settings. - * - * @example - * ```ts - * const betaComplianceSettings = - * await client.beta.organization.complianceSettings.update({ - * state: { type: 'enabled' }, - * }); - * ``` - */ - update(body, options) { - return this._client.post("/v1/organizations/compliance_settings?beta=true", { body, ...options }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.mjs -var ExternalKeys; -var init_external_keys = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.mjs"() { - init_resource(); - init_pagination(); - init_path(); - ExternalKeys = class extends APIResource { - /** - * Create an external key config owned by the caller's organization. - * - * @example - * ```ts - * const betaExternalKey = - * await client.beta.organization.externalKeys.create({ - * provider_config: { - * kms_arn: - * 'arn:aws:kms:us-east-1:111122223333:key/abcd1234-5678-90ab-cdef-000011112222', - * type: 'aws', - * }, - * }); - * ``` - */ - create(body, options) { - return this._client.post("/v1/organizations/external_keys?beta=true", { body, ...options }); - } - /** - * Retrieve a single external key config in the caller's organization by ID. - * - * @example - * ```ts - * const betaExternalKey = - * await client.beta.organization.externalKeys.retrieve( - * 'external_key_id', - * ); - * ``` - */ - retrieve(externalKeyID, options) { - return this._client.get(path2`/v1/organizations/external_keys/${externalKeyID}?beta=true`, options); - } - /** - * Partially update an external key config. Omitted fields are left unchanged. - * - * `display_name` is always editable. `geo` and `provider_config` cannot be changed - * once any workspace references this config, because previously encrypted data - * requires the original key identity to decrypt. - * - * @example - * ```ts - * const betaExternalKey = - * await client.beta.organization.externalKeys.update( - * 'external_key_id', - * ); - * ``` - */ - update(externalKeyID, body, options) { - return this._client.post(path2`/v1/organizations/external_keys/${externalKeyID}?beta=true`, { - body, - ...options - }); - } - /** - * List external key configs in the caller's organization. - * - * Results are ordered by creation time (newest first). Use the `next_page` cursor - * from the response to fetch subsequent pages. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaExternalKey of client.beta.organization.externalKeys.list()) { - * // ... - * } - * ``` - */ - list(query = {}, options) { - return this._client.getAPIList("/v1/organizations/external_keys?beta=true", PageCursor, { - query, - ...options - }); - } - /** - * Delete an external key config. - * - * The request is rejected if any workspace still references this config. - * - * @example - * ```ts - * const externalKey = - * await client.beta.organization.externalKeys.delete( - * 'external_key_id', - * ); - * ``` - */ - delete(externalKeyID, options) { - return this._client.delete(path2`/v1/organizations/external_keys/${externalKeyID}?beta=true`, options); - } - /** - * Validate an external key config against the customer's KMS. - * - * Anthropic performs an encrypt/decrypt roundtrip against the configured KMS key - * and waits up to 30 seconds for the result. The response status is `success` if - * the roundtrip succeeded, or `failure` with an error message if it failed or - * timed out. - * - * @example - * ```ts - * const response = - * await client.beta.organization.externalKeys.validate( - * 'external_key_id', - * ); - * ``` - */ - validate(externalKeyID, options) { - return this._client.post(path2`/v1/organizations/external_keys/${externalKeyID}/validate?beta=true`, options); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.mjs -var Invites; -var init_invites = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.mjs"() { - init_resource(); - init_pagination(); - init_path(); - Invites = class extends APIResource { - /** - * Invite a user to join the organization by email. - * - * On plans that draw members from a finite pool of purchased seats, the invite - * automatically consumes a seat from the lowest tier with availability; there is - * no seat-tier parameter. When no seat is free the request fails with a 400 error - * rather than purchasing a seat. - * - * @example - * ```ts - * const betaOrganizationInvite = - * await client.beta.organization.invites.create({ - * email: 'user@emaildomain.com', - * role: 'user', - * }); - * ``` - */ - create(body, options) { - return this._client.post("/v1/organizations/invites?beta=true", { body, ...options }); - } - /** - * Retrieve an invite by ID. - * - * @example - * ```ts - * const betaOrganizationInvite = - * await client.beta.organization.invites.retrieve( - * 'invite_id', - * ); - * ``` - */ - retrieve(inviteID, options) { - return this._client.get(path2`/v1/organizations/invites/${inviteID}?beta=true`, options); - } - /** - * List the organization's invites. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaOrganizationInvite of client.beta.organization.invites.list()) { - * // ... - * } - * ``` - */ - list(query = {}, options) { - return this._client.getAPIList("/v1/organizations/invites?beta=true", Page, { - query, - ...options - }); - } - /** - * Delete a pending invite. - * - * @example - * ```ts - * const invite = - * await client.beta.organization.invites.delete( - * 'invite_id', - * ); - * ``` - */ - delete(inviteID, options) { - return this._client.delete(path2`/v1/organizations/invites/${inviteID}?beta=true`, options); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.mjs -var RateLimits; -var init_rate_limits = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.mjs"() { - init_resource(); - init_pagination(); - RateLimits = class extends APIResource { - /** - * List Messages API rate limits for your organization. - * - * Each entry corresponds to one rate-limit group (either a model family or an - * API-surface category such as the Files API or Message Batches) and contains the - * set of limiter values that apply to it. - * - * When `limit` is omitted, every matching entry is returned in a single page; when - * `limit` truncates the result, follow `next_page` to fetch the remaining entries. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaOrganizationRateLimit of client.beta.organization.rateLimits.list()) { - * // ... - * } - * ``` - */ - list(query = {}, options) { - return this._client.getAPIList("/v1/organizations/rate_limits?beta=true", PageCursor, { query, ...options }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/users.mjs -var Users; -var init_users = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/users.mjs"() { - init_resource(); - init_pagination(); - init_path(); - Users = class extends APIResource { - /** - * Retrieve a member of the organization by user ID. - * - * @example - * ```ts - * const betaOrganizationUser = - * await client.beta.organization.users.retrieve('user_id'); - * ``` - */ - retrieve(userID, options) { - return this._client.get(path2`/v1/organizations/users/${userID}?beta=true`, options); - } - /** - * Update a member's organization role. - * - * @example - * ```ts - * const betaOrganizationUser = - * await client.beta.organization.users.update('user_id', { - * role: 'user', - * }); - * ``` - */ - update(userID, body, options) { - return this._client.post(path2`/v1/organizations/users/${userID}?beta=true`, { body, ...options }); - } - /** - * List the organization's members. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaOrganizationUser of client.beta.organization.users.list()) { - * // ... - * } - * ``` - */ - list(query = {}, options) { - return this._client.getAPIList("/v1/organizations/users?beta=true", Page, { - query, - ...options - }); - } - /** - * Remove a member from the organization. - * - * @example - * ```ts - * const user = await client.beta.organization.users.remove( - * 'user_id', - * ); - * ``` - */ - remove(userID, options) { - return this._client.delete(path2`/v1/organizations/users/${userID}?beta=true`, options); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.mjs -var Issuers; -var init_issuers = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Issuers = class extends APIResource { - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Register an OIDC issuer that Anthropic will trust for workload identity - * federation in your organization. - * - * The `jwks` field controls how the issuer's signing keys are obtained and takes - * one of three shapes selected by `type`: `discovery` (resolve keys through OIDC - * discovery), `explicit_url` (fetch keys from a fixed JWKS URL), or `inline` - * (provide a static key set). When `jwks.type` is `discovery` and no - * `discovery_base` is set, the issuer URL must be publicly reachable over HTTPS so - * Anthropic can fetch the discovery document; for `explicit_url` and `inline` - * modes the issuer URL is only matched as the JWT's `iss` claim and is not - * fetched. - * - * @example - * ```ts - * const betaFederationIssuer = - * await client.beta.organization.federation.issuers.create({ - * issuer_url: 'x', - * name: 'x', - * }); - * ``` - */ - create(params, options) { - const { betas, ...body } = params; - return this._client.post("/v1/organizations/federation_issuers?beta=true", { - body, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Retrieve a federation issuer by its ID (`fdis_...`). - * - * @example - * ```ts - * const betaFederationIssuer = - * await client.beta.organization.federation.issuers.retrieve( - * 'federation_issuer_id', - * ); - * ``` - */ - retrieve(federationIssuerID, params = {}, options) { - const { betas } = params ?? {}; - return this._client.get(path2`/v1/organizations/federation_issuers/${federationIssuerID}?beta=true`, { - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Partially update a federation issuer. - * - * Setting `jwks` replaces the full JWKS shape at once. Archived issuers cannot be - * updated; this returns 400. Create a new issuer instead. - * - * Updating an issuer that backs a rule with a scope outside `workspace:developer` - * or `workspace:inference` requires a Console session. - * - * @example - * ```ts - * const betaFederationIssuer = - * await client.beta.organization.federation.issuers.update( - * 'federation_issuer_id', - * ); - * ``` - */ - update(federationIssuerID, params, options) { - const { betas, ...body } = params; - return this._client.post(path2`/v1/organizations/federation_issuers/${federationIssuerID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * List federation issuers in your organization. - * - * Archived issuers are excluded unless `include_archived=true`. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaFederationIssuer of client.beta.organization.federation.issuers.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, ...query } = params ?? {}; - return this._client.getAPIList("/v1/organizations/federation_issuers?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Archive a federation issuer. - * - * Idempotent; re-archiving returns the issuer with its original `archived_at`. - * Rejected with 400 if any live (non-archived) federation rule still references - * the issuer; archive those rules first (a rule's issuer cannot be changed), or - * recreate them against another issuer. - * - * @example - * ```ts - * const betaFederationIssuer = - * await client.beta.organization.federation.issuers.archive( - * 'federation_issuer_id', - * ); - * ``` - */ - archive(federationIssuerID, params = {}, options) { - const { betas } = params ?? {}; - return this._client.post(path2`/v1/organizations/federation_issuers/${federationIssuerID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.mjs -var Workspaces; -var init_workspaces = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Workspaces = class extends APIResource { - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * List workspaces where this federation rule is enabled. - * - * Returns all workspace enablements in a single response; the `limit` and `page` - * parameters are accepted but have no effect, and `next_page` is always `null`. - * Returns explicit per-workspace enablements only; for rules with - * `applies_to_all_workspaces` or a legacy single `workspace_id`, check those - * fields on the rule itself. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaFederationRuleWorkspace of client.beta.organization.federation.rules.workspaces.list( - * 'federation_rule_id', - * )) { - * // ... - * } - * ``` - */ - list(federationRuleID, params = {}, options) { - const { betas, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/organizations/federation_rules/${federationRuleID}/workspaces?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Enable a federation rule for a workspace. - * - * Idempotent; re-enabling returns the existing enablement. The rule and workspace - * must both belong to your organization. Membership of the rule's target service - * account in this workspace is not checked at enablement: token exchange into this - * workspace is rejected unless the target is a member (it is implicitly a member - * of the default workspace). Archived rules are rejected with 400. OAuth callers - * may only manage rules whose `oauth_scope` is `workspace:developer` or - * `workspace:inference`; other scopes require a Console session. - * - * @example - * ```ts - * const betaFederationRuleWorkspace = - * await client.beta.organization.federation.rules.workspaces.add( - * 'federation_rule_id', - * { workspace_id: 'workspace_id' }, - * ); - * ``` - */ - add(federationRuleID, params, options) { - const { betas, ...body } = params; - return this._client.post(path2`/v1/organizations/federation_rules/${federationRuleID}/workspaces?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Disable a federation rule for a workspace. - * - * Idempotent; succeeds even if the enablement was already removed. OAuth callers - * may only manage rules whose `oauth_scope` is `workspace:developer` or - * `workspace:inference`; other scopes require a Console session. - * - * @example - * ```ts - * const workspace = - * await client.beta.organization.federation.rules.workspaces.remove( - * 'workspace_id', - * { federation_rule_id: 'federation_rule_id' }, - * ); - * ``` - */ - remove(workspaceID, params, options) { - const { federation_rule_id, betas } = params; - return this._client.delete(path2`/v1/organizations/federation_rules/${federation_rule_id}/workspaces/${workspaceID}?beta=true`, { - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.mjs -var Rules; -var init_rules = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.mjs"() { - init_resource(); - init_workspaces(); - init_workspaces(); - init_pagination(); - init_headers(); - init_path(); - Rules = /* @__PURE__ */ (() => { - class Rules2 extends APIResource { - constructor() { - super(...arguments); - this.workspaces = new Workspaces(this._client); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Create a federation rule owned by your organization. - * - * The referenced issuer and the target service account must already exist in the - * same organization; invalid references are rejected with a 400 error. The - * workspace reference is validated. Membership is not checked at rule creation: - * token exchange resolves a single enabled workspace per call and is rejected - * unless the target service account is a member of that workspace (it is - * implicitly a member of the default workspace). Rules on well-known shared - * issuers (GitHub Actions, GitLab, Buildkite, Terraform Cloud, Google) must - * constrain tenant identity via an identity-bearing claim, a tenant-pinning - * subject prefix (such as `repo:YOUR_ORG/...`), or a CEL condition referencing one - * of those identity claims (e.g. `claims.repository_owner`). OAuth callers may - * only manage rules whose `oauth_scope` is `workspace:developer` or - * `workspace:inference`; other scopes require a Console session. - * - * @example - * ```ts - * const betaFederationRule = - * await client.beta.organization.federation.rules.create({ - * issuer_id: 'issuer_id', - * match: {}, - * name: 'x', - * oauth_scope: 'x', - * target: { - * service_account_id: 'svac_01SDCCSbTxrXDpWc1phhtcfK', - * type: 'service_account', - * }, - * }); - * ``` - */ - create(params, options) { - const { betas, ...body } = params; - return this._client.post("/v1/organizations/federation_rules?beta=true", { - body, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Retrieve a federation rule by its ID (`fdrl_...`). - * - * @example - * ```ts - * const betaFederationRule = - * await client.beta.organization.federation.rules.retrieve( - * 'federation_rule_id', - * ); - * ``` - */ - retrieve(federationRuleID, params = {}, options) { - const { betas } = params ?? {}; - return this._client.get(path2`/v1/organizations/federation_rules/${federationRuleID}?beta=true`, { - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Partially update a federation rule. - * - * `issuer_id` is immutable. `match` and `target` are replaced as whole objects - * when set. Referenced service accounts and workspaces must exist in your - * organization; invalid references are rejected with a 400 error. Archived rules - * cannot be updated; this returns 400. Create a new rule instead. Rules on - * well-known shared issuers (GitHub Actions, GitLab, Buildkite, Terraform Cloud, - * Google) must constrain tenant identity via an identity-bearing claim, a - * tenant-pinning subject prefix (such as `repo:YOUR_ORG/...`), or a CEL condition - * referencing one of those identity claims (e.g. `claims.repository_owner`). On - * these issuers the requirement is re-checked on every update; if an existing - * rule's stored match does not yet constrain tenant identity, any update (even a - * rename or description change) must also supply a conforming `match` in the same - * request. OAuth callers may only manage rules whose `oauth_scope` is - * `workspace:developer` or `workspace:inference`; other scopes require a Console - * session. - * - * @example - * ```ts - * const betaFederationRule = - * await client.beta.organization.federation.rules.update( - * 'federation_rule_id', - * ); - * ``` - */ - update(federationRuleID, params, options) { - const { betas, ...body } = params; - return this._client.post(path2`/v1/organizations/federation_rules/${federationRuleID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * List federation rules in your organization. - * - * Optionally filter by issuer with `issuer_id`. Archived rules are excluded unless - * `include_archived=true`. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaFederationRule of client.beta.organization.federation.rules.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, ...query } = params ?? {}; - return this._client.getAPIList("/v1/organizations/federation_rules?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Archive a federation rule. - * - * Token exchange through this rule stops immediately. Idempotent; re-archiving - * returns the rule with its original `archived_at`. Archiving clears the rule's - * workspace targeting (`workspace_id` and `workspace_ids` are emptied). Tokens - * already minted before archive remain valid until they expire. OAuth callers may - * only manage rules whose `oauth_scope` is `workspace:developer` or - * `workspace:inference`; other scopes require a Console session. - * - * @example - * ```ts - * const betaFederationRule = - * await client.beta.organization.federation.rules.archive( - * 'federation_rule_id', - * ); - * ``` - */ - archive(federationRuleID, params = {}, options) { - const { betas } = params ?? {}; - return this._client.post(path2`/v1/organizations/federation_rules/${federationRuleID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - } - Rules2.Workspaces = Workspaces; - return Rules2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.mjs -var Federation; -var init_federation = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.mjs"() { - init_resource(); - init_issuers(); - init_issuers(); - init_rules(); - init_rules(); - Federation = /* @__PURE__ */ (() => { - class Federation2 extends APIResource { - constructor() { - super(...arguments); - this.issuers = new Issuers(this._client); - this.rules = new Rules(this._client); - } - } - Federation2.Issuers = Issuers; - Federation2.Rules = Rules; - return Federation2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.mjs -var Workspaces2; -var init_workspaces2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Workspaces2 = class extends APIResource { - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * List the workspaces a service account is a member of. - * - * Each entry includes the service account's `workspace_role` in that workspace. - * Use `limit` and the `next_page` cursor to paginate. When the service account has - * no explicit default-workspace membership, the implicit (`implicit: true`) - * membership is returned as the first entry on the first page; with `limit=1` the - * first page may return up to 2 entries (the implicit entry plus one explicit - * membership) so a pagination cursor can be derived. Memberships are returned only - * while the service account is active. Without a `page` cursor, an archived - * service account returns an empty list. A `page` cursor that does not match an - * active membership returns a 400 invalid-request error. A cursor stops matching - * when the membership is removed, the workspace is deleted, or the service account - * is archived. Restart pagination from the first page to recover. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaServiceAccountWorkspaceMember of client.beta.organization.serviceAccounts.workspaces.list( - * 'service_account_id', - * )) { - * // ... - * } - * ``` - */ - list(serviceAccountID, params = {}, options) { - const { betas, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/organizations/service_accounts/${serviceAccountID}/workspaces?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Add a service account to a workspace with the given `workspace_role`. - * - * Mirror of `POST /workspaces/{workspace_id}/service_accounts`, addressed from the - * service-account side; both create the same membership. If the service account is - * already an explicit member of the workspace, its `workspace_role` is replaced - * with the value supplied here. Archived workspaces return 400. Archived service - * accounts cannot be added and are rejected. - * - * @example - * ```ts - * const betaServiceAccountWorkspaceMember = - * await client.beta.organization.serviceAccounts.workspaces.add( - * 'service_account_id', - * { - * workspace_id: 'workspace_id', - * workspace_role: 'workspace_admin', - * }, - * ); - * ``` - */ - add(serviceAccountID, params, options) { - const { betas, ...body } = params; - return this._client.post(path2`/v1/organizations/service_accounts/${serviceAccountID}/workspaces?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Remove a service account from a workspace. - * - * Mirror of - * `DELETE /workspaces/{workspace_id}/service_accounts/{service_account_id}`, - * addressed from the service-account side. Removal is idempotent (returns 200 even - * if the membership was already removed). A DELETE against the implicit - * default-workspace membership returns 200 but is a no-op and the membership - * persists; deleting an explicit default-workspace row reverts to the implicit - * `workspace_user` membership. Archived workspaces return 400. - * - * @example - * ```ts - * const workspace = - * await client.beta.organization.serviceAccounts.workspaces.remove( - * 'workspace_id', - * { service_account_id: 'service_account_id' }, - * ); - * ``` - */ - remove(workspaceID, params, options) { - const { service_account_id, betas } = params; - return this._client.delete(path2`/v1/organizations/service_accounts/${service_account_id}/workspaces/${workspaceID}?beta=true`, { - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.mjs -var ServiceAccounts; -var init_service_accounts = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.mjs"() { - init_resource(); - init_workspaces2(); - init_workspaces2(); - init_pagination(); - init_headers(); - init_path(); - ServiceAccounts = /* @__PURE__ */ (() => { - class ServiceAccounts4 extends APIResource { - constructor() { - super(...arguments); - this.workspaces = new Workspaces2(this._client); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Create a service account. - * - * A service account is a named workload identity that federation rules target. - * `organization_role` is `developer` (default) or `admin`; a rule may only be - * created or retargeted to grant `org:admin` scope when the target's - * `organization_role` is `admin`. Creating an `admin`-role service account - * requires an interactive credential (a user OAuth token or a Console session) — a - * workload may only create `developer`-role service accounts. - * - * @example - * ```ts - * const betaServiceAccount = - * await client.beta.organization.serviceAccounts.create({ - * name: 'ci-deploy-bot', - * }); - * ``` - */ - create(params, options) { - const { betas, ...body } = params; - return this._client.post("/v1/organizations/service_accounts?beta=true", { - body, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Retrieve a service account by its ID (`svac_...`). - * - * @example - * ```ts - * const betaServiceAccount = - * await client.beta.organization.serviceAccounts.retrieve( - * 'service_account_id', - * ); - * ``` - */ - retrieve(serviceAccountID, params = {}, options) { - const { betas } = params ?? {}; - return this._client.get(path2`/v1/organizations/service_accounts/${serviceAccountID}?beta=true`, { - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Update a service account. - * - * Only `description` and `organization_role` are mutable; `name` cannot be - * changed. Archived service accounts cannot be updated; this returns 400. Setting - * `organization_role` to `admin` (even when unchanged) requires an interactive - * credential (a user OAuth token or a Console session). - * - * @example - * ```ts - * const betaServiceAccount = - * await client.beta.organization.serviceAccounts.update( - * 'service_account_id', - * ); - * ``` - */ - update(serviceAccountID, params, options) { - const { betas, ...body } = params; - return this._client.post(path2`/v1/organizations/service_accounts/${serviceAccountID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * List service accounts in the caller's organization. - * - * Results are ordered by creation time, newest first. Use `limit` and the - * `next_page` cursor to paginate; set `include_archived=true` to include archived - * service accounts. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaServiceAccount of client.beta.organization.serviceAccounts.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, ...query } = params ?? {}; - return this._client.getAPIList("/v1/organizations/service_accounts?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Archive a service account. - * - * Idempotent; re-archiving returns the service account with its original - * `archived_at`. Rejected with 400 if any live (non-archived) federation rule - * still targets this service account, same as issuer archival; archive those rules - * first or change their target to another service account. - * - * @example - * ```ts - * const betaServiceAccount = - * await client.beta.organization.serviceAccounts.archive( - * 'service_account_id', - * ); - * ``` - */ - archive(serviceAccountID, params = {}, options) { - const { betas } = params ?? {}; - return this._client.post(path2`/v1/organizations/service_accounts/${serviceAccountID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - } - ServiceAccounts4.Workspaces = Workspaces2; - return ServiceAccounts4; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.mjs -var Members; -var init_members = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.mjs"() { - init_resource(); - init_pagination(); - init_path(); - Members = class extends APIResource { - /** - * Get Workspace Member - * - * @example - * ```ts - * const betaWorkspaceMember = - * await client.beta.organization.workspaces.members.retrieve( - * 'user_id', - * { workspace_id: 'workspace_id' }, - * ); - * ``` - */ - retrieve(userID, params, options) { - const { workspace_id } = params; - return this._client.get(path2`/v1/organizations/workspaces/${workspace_id}/members/${userID}?beta=true`, options); - } - /** - * Update Workspace Member - * - * @example - * ```ts - * const betaWorkspaceMember = - * await client.beta.organization.workspaces.members.update( - * 'user_id', - * { - * workspace_id: 'workspace_id', - * workspace_role: 'workspace_admin', - * }, - * ); - * ``` - */ - update(userID, params, options) { - const { workspace_id, ...body } = params; - return this._client.post(path2`/v1/organizations/workspaces/${workspace_id}/members/${userID}?beta=true`, { - body, - ...options - }); - } - /** - * List Workspace Members - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaWorkspaceMember of client.beta.organization.workspaces.members.list( - * 'workspace_id', - * )) { - * // ... - * } - * ``` - */ - list(workspaceID, query = {}, options) { - return this._client.getAPIList(path2`/v1/organizations/workspaces/${workspaceID}/members?beta=true`, Page, { query, ...options }); - } - /** - * Create Workspace Member - * - * @example - * ```ts - * const betaWorkspaceMember = - * await client.beta.organization.workspaces.members.add( - * 'workspace_id', - * { - * user_id: 'user_01WCz1FkmYMm4gnmykNKUu3Q', - * workspace_role: 'workspace_admin', - * }, - * ); - * ``` - */ - add(workspaceID, body, options) { - return this._client.post(path2`/v1/organizations/workspaces/${workspaceID}/members?beta=true`, { - body, - ...options - }); - } - /** - * Delete Workspace Member - * - * @example - * ```ts - * const member = - * await client.beta.organization.workspaces.members.remove( - * 'user_id', - * { workspace_id: 'workspace_id' }, - * ); - * ``` - */ - remove(userID, params, options) { - const { workspace_id } = params; - return this._client.delete(path2`/v1/organizations/workspaces/${workspace_id}/members/${userID}?beta=true`, options); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.mjs -var RateLimits2; -var init_rate_limits2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.mjs"() { - init_resource(); - init_pagination(); - init_path(); - RateLimits2 = class extends APIResource { - /** - * List a workspace's rate limits. - * - * By default, returns only the groups and limiter types that have a - * workspace-level override. With `include_inherited=true`, returns every group - * with organization-level limits the workspace can see, listing for each the - * values it inherits from the organization as well as its own overrides. Each - * value's `source` says which it is. - * - * When `limit` is omitted, every matching entry is returned in a single page; when - * `limit` truncates the result, follow `next_page` to fetch the remaining entries. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaWorkspaceRateLimit of client.beta.organization.workspaces.rateLimits.list( - * 'workspace_id', - * )) { - * // ... - * } - * ``` - */ - list(workspaceID, query = {}, options) { - return this._client.getAPIList(path2`/v1/organizations/workspaces/${workspaceID}/rate_limits?beta=true`, PageCursor, { query, ...options }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.mjs -var ServiceAccounts2; -var init_service_accounts2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - ServiceAccounts2 = class extends APIResource { - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Retrieve a service account's membership in a workspace. - * - * Returns the membership record, including the service account's `workspace_role` - * in this workspace. Archived workspaces return 400. For the default workspace, - * returns the implicit (`implicit: true`) membership when no explicit membership - * exists; an explicitly added membership is returned with its assigned role. An - * archived service account returns 404. - * - * @example - * ```ts - * const betaServiceAccountWorkspaceMember = - * await client.beta.organization.workspaces.serviceAccounts.retrieve( - * 'service_account_id', - * { workspace_id: 'workspace_id' }, - * ); - * ``` - */ - retrieve(serviceAccountID, params, options) { - const { workspace_id, betas } = params; - return this._client.get(path2`/v1/organizations/workspaces/${workspace_id}/service_accounts/${serviceAccountID}?beta=true`, { - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Change a service account's role in a workspace. - * - * The new `workspace_role` replaces the current one. Only explicit memberships can - * be updated; to set a role on the implicit default-workspace membership, add the - * service account explicitly with - * `POST /workspaces/{workspace_id}/service_accounts`. Archived workspaces - * return 400. Archived service accounts cannot be updated and are rejected. - * - * @example - * ```ts - * const betaServiceAccountWorkspaceMember = - * await client.beta.organization.workspaces.serviceAccounts.update( - * 'service_account_id', - * { - * workspace_id: 'workspace_id', - * workspace_role: 'workspace_admin', - * }, - * ); - * ``` - */ - update(serviceAccountID, params, options) { - const { workspace_id, betas, ...body } = params; - return this._client.post(path2`/v1/organizations/workspaces/${workspace_id}/service_accounts/${serviceAccountID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * List the service accounts that are members of a workspace. - * - * Each entry includes the service account's `workspace_role`. Use `limit` and the - * `next_page` cursor to paginate. Archived workspaces return 400; use - * `GET /service_accounts/{id}/workspaces` to audit memberships of an archived - * workspace. The implicit default-workspace membership is not included in this - * list. Memberships of archived service accounts are omitted from the results. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaServiceAccountWorkspaceMember of client.beta.organization.workspaces.serviceAccounts.list( - * 'workspace_id', - * )) { - * // ... - * } - * ``` - */ - list(workspaceID, params = {}, options) { - const { betas, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/organizations/workspaces/${workspaceID}/service_accounts?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Add a service account to a workspace with the given `workspace_role`. - * - * The role determines what the service account can do in the workspace and which - * workspace-scoped permissions it can be granted when authenticating through - * federation. Every service account is already an implicit `workspace_user` member - * of the default workspace; adding it explicitly assigns a chosen role. If the - * service account is already an explicit member of the workspace, its - * `workspace_role` is replaced with the value supplied here. Archived workspaces - * return 400. Archived service accounts cannot be added and are rejected. - * - * @example - * ```ts - * const betaServiceAccountWorkspaceMember = - * await client.beta.organization.workspaces.serviceAccounts.add( - * 'workspace_id', - * { - * service_account_id: 'service_account_id', - * workspace_role: 'workspace_admin', - * }, - * ); - * ``` - */ - add(workspaceID, params, options) { - const { betas, ...body } = params; - return this._client.post(path2`/v1/organizations/workspaces/${workspaceID}/service_accounts?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * **Requires an OAuth access token with the `org:admin` scope**, from - * `ant auth login --scope org:admin` or a workload identity federation rule; Admin - * API keys are not accepted. See - * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). - * - * Remove a service account from a workspace. - * - * Removal is idempotent (returns 200 even if the membership was already removed). - * A DELETE against the implicit default-workspace membership returns 200 but is a - * no-op and the membership persists; deleting an explicit default-workspace row - * reverts to the implicit `workspace_user` membership. Archived workspaces - * return 400. - * - * @example - * ```ts - * const serviceAccount = - * await client.beta.organization.workspaces.serviceAccounts.remove( - * 'service_account_id', - * { workspace_id: 'workspace_id' }, - * ); - * ``` - */ - remove(serviceAccountID, params, options) { - const { workspace_id, betas } = params; - return this._client.delete(path2`/v1/organizations/workspaces/${workspace_id}/service_accounts/${serviceAccountID}?beta=true`, { - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.mjs -var Workspaces3; -var init_workspaces3 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.mjs"() { - init_resource(); - init_members(); - init_members(); - init_rate_limits2(); - init_rate_limits2(); - init_service_accounts2(); - init_service_accounts2(); - init_pagination(); - init_headers(); - init_path(); - Workspaces3 = /* @__PURE__ */ (() => { - class Workspaces4 extends APIResource { - constructor() { - super(...arguments); - this.rateLimits = new RateLimits2(this._client); - this.members = new Members(this._client); - this.serviceAccounts = new ServiceAccounts2(this._client); - } - /** - * Create Workspace - * - * @example - * ```ts - * const betaWorkspace = - * await client.beta.organization.workspaces.create({ - * name: 'x', - * }); - * ``` - */ - create(params, options) { - const { betas, ...body } = params; - return this._client.post("/v1/organizations/workspaces?beta=true", { - body, - ...options, - headers: buildHeaders([ - { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, - options?.headers - ]) - }); - } - /** - * Get Workspace - * - * @example - * ```ts - * const betaWorkspace = - * await client.beta.organization.workspaces.retrieve( - * 'workspace_id', - * ); - * ``` - */ - retrieve(workspaceID, options) { - return this._client.get(path2`/v1/organizations/workspaces/${workspaceID}?beta=true`, options); - } - /** - * Update Workspace - * - * @example - * ```ts - * const betaWorkspace = - * await client.beta.organization.workspaces.update( - * 'workspace_id', - * ); - * ``` - */ - update(workspaceID, body, options) { - return this._client.post(path2`/v1/organizations/workspaces/${workspaceID}?beta=true`, { - body, - ...options - }); - } - /** - * List Workspaces - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaWorkspace of client.beta.organization.workspaces.list()) { - * // ... - * } - * ``` - */ - list(query = {}, options) { - return this._client.getAPIList("/v1/organizations/workspaces?beta=true", Page, { - query, - ...options - }); - } - /** - * Archive Workspace - * - * @example - * ```ts - * const betaWorkspace = - * await client.beta.organization.workspaces.archive( - * 'workspace_id', - * ); - * ``` - */ - archive(workspaceID, options) { - return this._client.post(path2`/v1/organizations/workspaces/${workspaceID}/archive?beta=true`, options); - } - } - Workspaces4.RateLimits = RateLimits2; - Workspaces4.Members = Members; - Workspaces4.ServiceAccounts = ServiceAccounts2; - return Workspaces4; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.mjs -var Organization; -var init_organization = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.mjs"() { - init_resource(); - init_api_keys(); - init_api_keys(); - init_compliance_settings(); - init_compliance_settings(); - init_external_keys(); - init_external_keys(); - init_invites(); - init_invites(); - init_rate_limits(); - init_rate_limits(); - init_users(); - init_users(); - init_federation(); - init_federation(); - init_service_accounts(); - init_service_accounts(); - init_workspaces3(); - init_workspaces3(); - Organization = /* @__PURE__ */ (() => { - class Organization3 extends APIResource { - constructor() { - super(...arguments); - this.apiKeys = new APIKeys(this._client); - this.externalKeys = new ExternalKeys(this._client); - this.federation = new Federation(this._client); - this.invites = new Invites(this._client); - this.serviceAccounts = new ServiceAccounts(this._client); - this.users = new Users(this._client); - this.workspaces = new Workspaces3(this._client); - this.rateLimits = new RateLimits(this._client); - this.complianceSettings = new ComplianceSettings(this._client); - } - /** - * Retrieve information about the organization associated with the authenticated - * API key. - * - * @example - * ```ts - * const betaOrganization = - * await client.beta.organization.retrieve(); - * ``` - */ - retrieve(options) { - return this._client.get("/v1/organizations/me?beta=true", options); - } - } - Organization3.APIKeys = APIKeys; - Organization3.ExternalKeys = ExternalKeys; - Organization3.Federation = Federation; - Organization3.Invites = Invites; - Organization3.ServiceAccounts = ServiceAccounts; - Organization3.Users = Users; - Organization3.Workspaces = Workspaces3; - Organization3.RateLimits = RateLimits; - Organization3.ComplianceSettings = ComplianceSettings; - return Organization3; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/sessions/events.mjs -var Events; -var init_events = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/sessions/events.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - init_SessionToolRunner(); - Events = /* @__PURE__ */ (() => { - class Events4 extends APIResource { - /** - * List Events - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsSessionEvent of client.beta.sessions.events.list( - * 'sesn_011CZkZAtmR3yMPDzynEDxu7', - * )) { - * // ... - * } - * ``` - */ - list(sessionID, params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/sessions/${sessionID}/events?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Send Events - * - * @example - * ```ts - * const betaManagedAgentsSendSessionEvents = - * await client.beta.sessions.events.send( - * 'sesn_011CZkZAtmR3yMPDzynEDxu7', - * { - * events: [ - * { - * content: [ - * { - * text: 'Where is my order #1234?', - * type: 'text', - * }, - * ], - * type: 'user.message', - * }, - * ], - * }, - * ); - * ``` - */ - send(sessionID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/sessions/${sessionID}/events?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Stream Events - * - * @example - * ```ts - * const betaManagedAgentsStreamSessionEvents = - * await client.beta.sessions.events.stream( - * 'sesn_011CZkZAtmR3yMPDzynEDxu7', - * ); - * ``` - */ - stream(sessionID, params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.get(path2`/v1/sessions/${sessionID}/events/stream?beta=true`, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]), - stream: true - }); - } - /** - * Attach to a session and dispatch every incoming `agent.tool_use` and - * `agent.custom_tool_use` event to a local tool registry, sending the matching - * result back (`user.tool_result` / `user.custom_tool_result`). The - * sessions-side counterpart to `client.beta.messages.toolRunner`: yields one - * entry per completed tool call so callers can observe each dispatch (and - * `break` to abort cleanly). - * - * @example - * ```ts - * import { betaAgentToolset20260401 } from '@anthropic-ai/sdk/tools/agent-toolset/node'; - * - * for await (const call of client.beta.sessions.events.toolRunner(work.data.id, { - * tools: [...betaAgentToolset20260401({ workdir }), myTool], - * })) { - * console.log(`${call.name} -> ${call.isError ? 'error' : 'ok'}`); - * } - * ``` - */ - toolRunner(sessionID, opts) { - return new SessionToolRunner(sessionID, { ...opts, client: this._client }); - } - } - Events4.SessionToolRunner = SessionToolRunner; - return Events4; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/sessions/resources.mjs -var Resources; -var init_resources = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/sessions/resources.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Resources = class extends APIResource { - /** - * Get Session Resource - * - * @example - * ```ts - * const resource = - * await client.beta.sessions.resources.retrieve( - * 'sesrsc_011CZkZBJq5dWxk9fVLNcPht', - * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, - * ); - * ``` - */ - retrieve(resourceID, params, options) { - const { session_id, betas, workspace_id } = params; - return this._client.get(path2`/v1/sessions/${session_id}/resources/${resourceID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Update Session Resource - * - * @example - * ```ts - * const resource = - * await client.beta.sessions.resources.update( - * 'sesrsc_011CZkZBJq5dWxk9fVLNcPht', - * { - * session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7', - * authorization_token: 'ghp_exampletoken', - * }, - * ); - * ``` - */ - update(resourceID, params, options) { - const { session_id, betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/sessions/${session_id}/resources/${resourceID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List Session Resources - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsSessionResource of client.beta.sessions.resources.list( - * 'sesn_011CZkZAtmR3yMPDzynEDxu7', - * )) { - * // ... - * } - * ``` - */ - list(sessionID, params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/sessions/${sessionID}/resources?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Delete Session Resource - * - * @example - * ```ts - * const betaManagedAgentsDeleteSessionResource = - * await client.beta.sessions.resources.delete( - * 'sesrsc_011CZkZBJq5dWxk9fVLNcPht', - * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, - * ); - * ``` - */ - delete(resourceID, params, options) { - const { session_id, betas, workspace_id } = params; - return this._client.delete(path2`/v1/sessions/${session_id}/resources/${resourceID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Add Session Resource - * - * @example - * ```ts - * const betaManagedAgentsFileResource = - * await client.beta.sessions.resources.add( - * 'sesn_011CZkZAtmR3yMPDzynEDxu7', - * { - * file_id: 'file_011CNha8iCJcU1wXNR6q4V8w', - * type: 'file', - * }, - * ); - * ``` - */ - add(sessionID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/sessions/${sessionID}/resources?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/events.mjs -var Events2; -var init_events2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/events.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Events2 = class extends APIResource { - /** - * List Session Thread Events - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsSessionEvent of client.beta.sessions.threads.events.list( - * 'sthr_011CZkZVWa6oIjw0rgXZpnBt', - * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, - * )) { - * // ... - * } - * ``` - */ - list(threadID, params, options) { - const { session_id, betas, workspace_id, ...query } = params; - return this._client.getAPIList(path2`/v1/sessions/${session_id}/threads/${threadID}/events?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Stream Session Thread Events - * - * @example - * ```ts - * const betaManagedAgentsStreamSessionThreadEvents = - * await client.beta.sessions.threads.events.stream( - * 'sthr_011CZkZVWa6oIjw0rgXZpnBt', - * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, - * ); - * ``` - */ - stream(threadID, params, options) { - const { session_id, betas, workspace_id, ...query } = params; - return this._client.get(path2`/v1/sessions/${session_id}/threads/${threadID}/stream?beta=true`, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]), - stream: true - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/threads.mjs -var Threads; -var init_threads = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/threads.mjs"() { - init_resource(); - init_events2(); - init_events2(); - init_pagination(); - init_headers(); - init_path(); - Threads = /* @__PURE__ */ (() => { - class Threads4 extends APIResource { - constructor() { - super(...arguments); - this.events = new Events2(this._client); - } - /** - * Get Session Thread - * - * @example - * ```ts - * const betaManagedAgentsSessionThread = - * await client.beta.sessions.threads.retrieve( - * 'sthr_011CZkZVWa6oIjw0rgXZpnBt', - * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, - * ); - * ``` - */ - retrieve(threadID, params, options) { - const { session_id, betas, workspace_id } = params; - return this._client.get(path2`/v1/sessions/${session_id}/threads/${threadID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List Session Threads - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsSessionThread of client.beta.sessions.threads.list( - * 'sesn_011CZkZAtmR3yMPDzynEDxu7', - * )) { - * // ... - * } - * ``` - */ - list(sessionID, params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/sessions/${sessionID}/threads?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Archive Session Thread - * - * @example - * ```ts - * const betaManagedAgentsSessionThread = - * await client.beta.sessions.threads.archive( - * 'sthr_011CZkZVWa6oIjw0rgXZpnBt', - * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, - * ); - * ``` - */ - archive(threadID, params, options) { - const { session_id, betas, workspace_id } = params; - return this._client.post(path2`/v1/sessions/${session_id}/threads/${threadID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - } - Threads4.Events = Events2; - return Threads4; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/sessions/sessions.mjs -var Sessions; -var init_sessions = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/sessions/sessions.mjs"() { - init_resource(); - init_events(); - init_events(); - init_resources(); - init_resources(); - init_threads(); - init_threads(); - init_pagination(); - init_headers(); - init_path(); - Sessions = /* @__PURE__ */ (() => { - class Sessions6 extends APIResource { - constructor() { - super(...arguments); - this.events = new Events(this._client); - this.resources = new Resources(this._client); - this.threads = new Threads(this._client); - } - /** - * Create Session - * - * @example - * ```ts - * const betaManagedAgentsSession = - * await client.beta.sessions.create({ - * agent: 'agent_011CZkYpogX7uDKUyvBTophP', - * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', - * }); - * ``` - */ - create(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/sessions?beta=true", { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Get Session - * - * @example - * ```ts - * const betaManagedAgentsSession = - * await client.beta.sessions.retrieve( - * 'sesn_011CZkZAtmR3yMPDzynEDxu7', - * ); - * ``` - */ - retrieve(sessionID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/sessions/${sessionID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Update Session - * - * @example - * ```ts - * const betaManagedAgentsSession = - * await client.beta.sessions.update( - * 'sesn_011CZkZAtmR3yMPDzynEDxu7', - * ); - * ``` - */ - update(sessionID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/sessions/${sessionID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List Sessions - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsSession of client.beta.sessions.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/sessions?beta=true", BidirectionalPageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Delete Session - * - * @example - * ```ts - * const betaManagedAgentsDeletedSession = - * await client.beta.sessions.delete( - * 'sesn_011CZkZAtmR3yMPDzynEDxu7', - * ); - * ``` - */ - delete(sessionID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.delete(path2`/v1/sessions/${sessionID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Archive Session - * - * @example - * ```ts - * const betaManagedAgentsSession = - * await client.beta.sessions.archive( - * 'sesn_011CZkZAtmR3yMPDzynEDxu7', - * ); - * ``` - */ - archive(sessionID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/sessions/${sessionID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - } - Sessions6.Events = Events; - Sessions6.Resources = Resources; - Sessions6.Threads = Threads; - return Sessions6; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.mjs -var Versions2; -var init_versions2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_uploads(); - init_path(); - Versions2 = class extends APIResource { - /** - * Create Skill Version - * - * @example - * ```ts - * const betaSkillVersion = - * await client.beta.skills.versions.create('skill_id', { - * files: [fs.createReadStream('path/to/file')], - * }); - * ``` - */ - create(skillID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/skills/${skillID}/versions?beta=true`, multipartFormRequestOptions({ - body, - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }, this._client, false)); - } - /** - * Get Skill Version - * - * @example - * ```ts - * const betaSkillVersion = - * await client.beta.skills.versions.retrieve('version', { - * skill_id: 'skill_id', - * }); - * ``` - */ - retrieve(version, params, options) { - const { skill_id, betas, workspace_id } = params; - return this._client.get(path2`/v1/skills/${skill_id}/versions/${version}?beta=true`, { - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List Skill Versions - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaSkillVersion of client.beta.skills.versions.list( - * 'skill_id', - * )) { - * // ... - * } - * ``` - */ - list(skillID, params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/skills/${skillID}/versions?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Delete Skill Version - * - * @example - * ```ts - * const betaDeletedSkillVersion = - * await client.beta.skills.versions.delete('version', { - * skill_id: 'skill_id', - * }); - * ``` - */ - delete(version, params, options) { - const { skill_id, betas, workspace_id } = params; - return this._client.delete(path2`/v1/skills/${skill_id}/versions/${version}?beta=true`, { - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Download a skill version's content as a zip archive. - * - * @example - * ```ts - * const response = await client.beta.skills.versions.download( - * 'version', - * { skill_id: 'skill_id' }, - * ); - * - * const content = await response.blob(); - * console.log(content); - * ``` - */ - download(version, params, options) { - const { skill_id, betas, workspace_id } = params; - return this._client.get(path2`/v1/skills/${skill_id}/versions/${version}/content?beta=true`, { - ...options, - headers: buildHeaders([ - { - Accept: "application/binary", - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]), - __binaryResponse: true - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.mjs -var Skills; -var init_skills = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.mjs"() { - init_resource(); - init_versions2(); - init_versions2(); - init_pagination(); - init_headers(); - init_uploads(); - init_path(); - Skills = /* @__PURE__ */ (() => { - class Skills4 extends APIResource { - constructor() { - super(...arguments); - this.versions = new Versions2(this._client); - } - /** - * Create Skill - * - * @example - * ```ts - * const betaSkill = await client.beta.skills.create({ - * files: [fs.createReadStream('path/to/file')], - * }); - * ``` - */ - create(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/skills?beta=true", multipartFormRequestOptions({ - body, - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }, this._client, false)); - } - /** - * Get Skill - * - * @example - * ```ts - * const betaSkill = await client.beta.skills.retrieve( - * 'skill_id', - * ); - * ``` - */ - retrieve(skillID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/skills/${skillID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List Skills - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaSkill of client.beta.skills.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/skills?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Delete Skill - * - * @example - * ```ts - * const betaDeletedSkill = await client.beta.skills.delete( - * 'skill_id', - * ); - * ``` - */ - delete(skillID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.delete(path2`/v1/skills/${skillID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - } - Skills4.Versions = Versions2; - return Skills4; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/tunnels/certificates.mjs -var Certificates; -var init_certificates = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/tunnels/certificates.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Certificates = class extends APIResource { - /** - * The Tunnels API is in research preview. It requires the - * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a - * deprecation period. It supersedes the Admin API endpoints at - * `/v1/organizations/tunnels`, which remain available during a migration window. - * - * Registers a public CA certificate on a tunnel. Anthropic verifies the gateway's - * server certificate against this CA when it terminates the inner TLS session. A - * tunnel holds at most two non-archived certificates. - * - * @example - * ```ts - * const betaTunnelCertificate = - * await client.beta.tunnels.certificates.create( - * 'tunnel_id', - * { ca_certificate_pem: 'ca_certificate_pem' }, - * ); - * ``` - */ - create(tunnelID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/tunnels/${tunnelID}/certificates?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * The Tunnels API is in research preview. It requires the - * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a - * deprecation period. It supersedes the Admin API endpoints at - * `/v1/organizations/tunnels`, which remain available during a migration window. - * - * Fetches a tunnel certificate by ID. - * - * @example - * ```ts - * const betaTunnelCertificate = - * await client.beta.tunnels.certificates.retrieve( - * 'certificate_id', - * { tunnel_id: 'tunnel_id' }, - * ); - * ``` - */ - retrieve(certificateID, params, options) { - const { tunnel_id, betas, workspace_id } = params; - return this._client.get(path2`/v1/tunnels/${tunnel_id}/certificates/${certificateID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * The Tunnels API is in research preview. It requires the - * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a - * deprecation period. It supersedes the Admin API endpoints at - * `/v1/organizations/tunnels`, which remain available during a migration window. - * - * Lists the certificates registered on a tunnel. Archived certificates are - * excluded unless include_archived is set. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaTunnelCertificate of client.beta.tunnels.certificates.list( - * 'tunnel_id', - * )) { - * // ... - * } - * ``` - */ - list(tunnelID, params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/tunnels/${tunnelID}/certificates?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * The Tunnels API is in research preview. It requires the - * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a - * deprecation period. It supersedes the Admin API endpoints at - * `/v1/organizations/tunnels`, which remain available during a migration window. - * - * Archives a tunnel certificate, removing it from the set Anthropic trusts for the - * tunnel. The certificate record is retained. Archiving the last non-archived - * certificate is permitted; the tunnel rejects MCP traffic until a new certificate - * is added. - * - * @example - * ```ts - * const betaTunnelCertificate = - * await client.beta.tunnels.certificates.archive( - * 'certificate_id', - * { tunnel_id: 'tunnel_id' }, - * ); - * ``` - */ - archive(certificateID, params, options) { - const { tunnel_id, betas, workspace_id } = params; - return this._client.post(path2`/v1/tunnels/${tunnel_id}/certificates/${certificateID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/tunnels/tunnels.mjs -var Tunnels; -var init_tunnels = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/tunnels/tunnels.mjs"() { - init_resource(); - init_certificates(); - init_certificates(); - init_pagination(); - init_headers(); - init_path(); - Tunnels = /* @__PURE__ */ (() => { - class Tunnels2 extends APIResource { - constructor() { - super(...arguments); - this.certificates = new Certificates(this._client); - } - /** - * The Tunnels API is in research preview. It requires the - * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a - * deprecation period. It supersedes the Admin API endpoints at - * `/v1/organizations/tunnels`, which remain available during a migration window. - * - * Creates a tunnel. Creation allocates a fresh hostname and provisions the tunnel; - * it is not idempotent. The new tunnel rejects MCP traffic until at least one CA - * certificate is added. - * - * @example - * ```ts - * const betaTunnel = await client.beta.tunnels.create(); - * ``` - */ - create(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/tunnels?beta=true", { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * The Tunnels API is in research preview. It requires the - * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a - * deprecation period. It supersedes the Admin API endpoints at - * `/v1/organizations/tunnels`, which remain available during a migration window. - * - * Fetches a tunnel by ID. - * - * @example - * ```ts - * const betaTunnel = await client.beta.tunnels.retrieve( - * 'tunnel_id', - * ); - * ``` - */ - retrieve(tunnelID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/tunnels/${tunnelID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * The Tunnels API is in research preview. It requires the - * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a - * deprecation period. It supersedes the Admin API endpoints at - * `/v1/organizations/tunnels`, which remain available during a migration window. - * - * Lists tunnels. Results are ordered by creation time, newest first; archived - * tunnels are excluded unless include_archived is set. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaTunnel of client.beta.tunnels.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/tunnels?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * The Tunnels API is in research preview. It requires the - * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a - * deprecation period. It supersedes the Admin API endpoints at - * `/v1/organizations/tunnels`, which remain available during a migration window. - * - * Archives a tunnel. Archival is irreversible: every non-archived certificate on - * the tunnel is archived in the same operation, the hostname is retired and never - * re-allocated, and the tunnel token is invalidated. Retrying against an - * already-archived tunnel returns the existing record unchanged. - * - * @example - * ```ts - * const betaTunnel = await client.beta.tunnels.archive( - * 'tunnel_id', - * ); - * ``` - */ - archive(tunnelID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/tunnels/${tunnelID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * The Tunnels API is in research preview. It requires the - * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a - * deprecation period. It supersedes the Admin API endpoints at - * `/v1/organizations/tunnels`, which remain available during a migration window. - * - * Reveals a tunnel's connector token. The value is fetched live on each call; - * Anthropic does not store it. Repeated calls return the same value until the - * token is rotated. Exposed as POST so the token does not appear in intermediary - * access logs. - * - * @example - * ```ts - * const betaTunnelToken = - * await client.beta.tunnels.revealToken('tunnel_id'); - * ``` - */ - revealToken(tunnelID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/tunnels/${tunnelID}/reveal_token?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * The Tunnels API is in research preview. It requires the - * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a - * deprecation period. It supersedes the Admin API endpoints at - * `/v1/organizations/tunnels`, which remain available during a migration window. - * - * Rotates a tunnel's connector token. Rotation invalidates the current token for - * new connections and returns a fresh value; established connections are not - * severed. A connector restarted after rotation must use the new value. - * - * @example - * ```ts - * const betaTunnelToken = - * await client.beta.tunnels.rotateToken('tunnel_id'); - * ``` - */ - rotateToken(tunnelID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/tunnels/${tunnelID}/rotate_token?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - } - Tunnels2.Certificates = Certificates; - return Tunnels2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/vaults/credentials.mjs -var Credentials; -var init_credentials2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/vaults/credentials.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Credentials = class extends APIResource { - /** - * Create Credential - * - * @example - * ```ts - * const betaManagedAgentsCredential = - * await client.beta.vaults.credentials.create( - * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', - * { - * auth: { - * token: 'bearer_exampletoken', - * mcp_server_url: - * 'https://example-server.modelcontextprotocol.io/sse', - * type: 'static_bearer', - * }, - * }, - * ); - * ``` - */ - create(vaultID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/vaults/${vaultID}/credentials?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Get Credential - * - * @example - * ```ts - * const betaManagedAgentsCredential = - * await client.beta.vaults.credentials.retrieve( - * 'vcrd_011CZkZEMt8gZan2iYOQfSkw', - * { vault_id: 'vlt_011CZkZDLs7fYzm1hXNPeRjv' }, - * ); - * ``` - */ - retrieve(credentialID, params, options) { - const { vault_id, betas, workspace_id } = params; - return this._client.get(path2`/v1/vaults/${vault_id}/credentials/${credentialID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Update Credential - * - * @example - * ```ts - * const betaManagedAgentsCredential = - * await client.beta.vaults.credentials.update( - * 'vcrd_011CZkZEMt8gZan2iYOQfSkw', - * { vault_id: 'vlt_011CZkZDLs7fYzm1hXNPeRjv' }, - * ); - * ``` - */ - update(credentialID, params, options) { - const { vault_id, betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/vaults/${vault_id}/credentials/${credentialID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List Credentials - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsCredential of client.beta.vaults.credentials.list( - * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', - * )) { - * // ... - * } - * ``` - */ - list(vaultID, params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/vaults/${vaultID}/credentials?beta=true`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Delete Credential - * - * @example - * ```ts - * const betaManagedAgentsDeletedCredential = - * await client.beta.vaults.credentials.delete( - * 'vcrd_011CZkZEMt8gZan2iYOQfSkw', - * { vault_id: 'vlt_011CZkZDLs7fYzm1hXNPeRjv' }, - * ); - * ``` - */ - delete(credentialID, params, options) { - const { vault_id, betas, workspace_id } = params; - return this._client.delete(path2`/v1/vaults/${vault_id}/credentials/${credentialID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Archive Credential - * - * @example - * ```ts - * const betaManagedAgentsCredential = - * await client.beta.vaults.credentials.archive( - * 'vcrd_011CZkZEMt8gZan2iYOQfSkw', - * { vault_id: 'vlt_011CZkZDLs7fYzm1hXNPeRjv' }, - * ); - * ``` - */ - archive(credentialID, params, options) { - const { vault_id, betas, workspace_id } = params; - return this._client.post(path2`/v1/vaults/${vault_id}/credentials/${credentialID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Validate Credential - * - * @example - * ```ts - * const betaManagedAgentsCredentialValidation = - * await client.beta.vaults.credentials.mcpOAuthValidate( - * 'vcrd_011CZkZEMt8gZan2iYOQfSkw', - * { vault_id: 'vlt_011CZkZDLs7fYzm1hXNPeRjv' }, - * ); - * ``` - */ - mcpOAuthValidate(credentialID, params, options) { - const { vault_id, betas, workspace_id } = params; - return this._client.post(path2`/v1/vaults/${vault_id}/credentials/${credentialID}/mcp_oauth_validate?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/vaults/vaults.mjs -var Vaults; -var init_vaults = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/vaults/vaults.mjs"() { - init_resource(); - init_credentials2(); - init_credentials2(); - init_pagination(); - init_headers(); - init_path(); - Vaults = /* @__PURE__ */ (() => { - class Vaults3 extends APIResource { - constructor() { - super(...arguments); - this.credentials = new Credentials(this._client); - } - /** - * Create Vault - * - * @example - * ```ts - * const betaManagedAgentsVault = - * await client.beta.vaults.create({ - * display_name: 'Example vault', - * }); - * ``` - */ - create(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/vaults?beta=true", { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Get Vault - * - * @example - * ```ts - * const betaManagedAgentsVault = - * await client.beta.vaults.retrieve( - * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', - * ); - * ``` - */ - retrieve(vaultID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/vaults/${vaultID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Update Vault - * - * @example - * ```ts - * const betaManagedAgentsVault = - * await client.beta.vaults.update( - * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', - * ); - * ``` - */ - update(vaultID, params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post(path2`/v1/vaults/${vaultID}?beta=true`, { - body, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List Vaults - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const betaManagedAgentsVault of client.beta.vaults.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/vaults?beta=true", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Delete Vault - * - * @example - * ```ts - * const betaManagedAgentsDeletedVault = - * await client.beta.vaults.delete( - * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', - * ); - * ``` - */ - delete(vaultID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.delete(path2`/v1/vaults/${vaultID}?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * Archive Vault - * - * @example - * ```ts - * const betaManagedAgentsVault = - * await client.beta.vaults.archive( - * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', - * ); - * ``` - */ - archive(vaultID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.post(path2`/v1/vaults/${vaultID}/archive?beta=true`, { - ...options, - headers: buildHeaders([ - { - "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - } - Vaults3.Credentials = Credentials; - return Vaults3; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/beta/beta.mjs -var Beta; -var init_beta = __esm({ - "node_modules/@anthropic-ai/sdk/resources/beta/beta.mjs"() { - init_resource(); - init_deployment_runs(); - init_deployment_runs(); - init_deployments(); - init_deployments(); - init_dreams(); - init_dreams(); - init_files(); - init_files(); - init_models2(); - init_models2(); - init_user_profiles(); - init_user_profiles(); - init_webhooks(); - init_webhooks(); - init_agents(); - init_agents(); - init_environments(); - init_environments(); - init_memory_stores(); - init_memory_stores(); - init_messages(); - init_messages(); - init_organization(); - init_organization(); - init_sessions(); - init_sessions(); - init_skills(); - init_skills(); - init_tunnels(); - init_tunnels(); - init_vaults(); - init_vaults(); - Beta = /* @__PURE__ */ (() => { - class Beta3 extends APIResource { - constructor() { - super(...arguments); - this.models = new Models(this._client); - this.messages = new Messages(this._client); - this.agents = new Agents(this._client); - this.environments = new Environments(this._client); - this.sessions = new Sessions(this._client); - this.deployments = new Deployments(this._client); - this.deploymentRuns = new DeploymentRuns(this._client); - this.vaults = new Vaults(this._client); - this.memoryStores = new MemoryStores(this._client); - this.files = new Files(this._client); - this.skills = new Skills(this._client); - this.webhooks = new Webhooks(this._client); - this.userProfiles = new UserProfiles(this._client); - this.dreams = new Dreams(this._client); - this.tunnels = new Tunnels(this._client); - this.organization = new Organization(this._client); - } - } - Beta3.Models = Models; - Beta3.Messages = Messages; - Beta3.Agents = Agents; - Beta3.Environments = Environments; - Beta3.Sessions = Sessions; - Beta3.Deployments = Deployments; - Beta3.DeploymentRuns = DeploymentRuns; - Beta3.Vaults = Vaults; - Beta3.MemoryStores = MemoryStores; - Beta3.Files = Files; - Beta3.Skills = Skills; - Beta3.Webhooks = Webhooks; - Beta3.UserProfiles = UserProfiles; - Beta3.Dreams = Dreams; - Beta3.Tunnels = Tunnels; - Beta3.Organization = Organization; - return Beta3; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/completions.mjs -var Completions; -var init_completions = __esm({ - "node_modules/@anthropic-ai/sdk/resources/completions.mjs"() { - init_resource(); - init_headers(); - Completions = class extends APIResource { - create(params, options) { - const { betas, workspace_id, ...body } = params; - return this._client.post("/v1/complete", { - body, - timeout: this._client._options.timeout ?? 6e5, - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]), - stream: params.stream ?? false - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/files.mjs -var Files2; -var init_files2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/files.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_stainless_helper_header(); - init_uploads(); - init_path(); - Files2 = class extends APIResource { - /** - * List Files - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const fileMetadata of client.files.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/files", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - /** - * Delete File - * - * @example - * ```ts - * const deletedFile = await client.files.delete('file_id'); - * ``` - */ - delete(fileID, params = {}, options) { - const { workspace_id } = params ?? {}; - return this._client.delete(path2`/v1/files/${fileID}`, { - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - /** - * Download File - * - * @example - * ```ts - * const response = await client.files.download('file_id'); - * - * const content = await response.blob(); - * console.log(content); - * ``` - */ - download(fileID, params = {}, options) { - const { workspace_id } = params ?? {}; - return this._client.get(path2`/v1/files/${fileID}/content`, { - ...options, - headers: buildHeaders([ - { - Accept: "application/binary", - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]), - __binaryResponse: true - }); - } - /** - * Get File Metadata - * - * @example - * ```ts - * const fileMetadata = await client.files.retrieveMetadata( - * 'file_id', - * ); - * ``` - */ - retrieveMetadata(fileID, params = {}, options) { - const { workspace_id } = params ?? {}; - return this._client.get(path2`/v1/files/${fileID}`, { - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - /** - * Upload File - * - * @example - * ```ts - * const fileMetadata = await client.files.upload({ - * file: fs.createReadStream('path/to/file'), - * }); - * ``` - */ - upload(params, options) { - const { workspace_id, ...body } = params; - return this._client.post("/v1/files", multipartFormRequestOptions({ - body, - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - stainlessHelperHeaderFromFile(body.file), - options?.headers - ]) - }, this._client)); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/lib/parser.mjs -function getOutputFormat2(params) { - return params?.output_config?.format; -} -function maybeParseMessage(message, params, opts) { - const outputFormat = getOutputFormat2(params); - if (!params || !("parse" in (outputFormat ?? {}))) { - return { - ...message, - content: message.content.map((block) => { - if (block.type === "text") { - const parsedBlock = Object.defineProperty({ ...block }, "parsed_output", { - value: null, - enumerable: false - }); - return parsedBlock; - } - return block; - }), - parsed_output: null - }; - } - return parseMessage(message, params, opts); -} -function parseMessage(message, params, opts) { - let firstParsedOutput = null; - const content = message.content.map((block) => { - if (block.type === "text") { - const parsedOutput = parseOutputFormat(params, block.text); - if (firstParsedOutput === null) { - firstParsedOutput = parsedOutput; - } - const parsedBlock = Object.defineProperty({ ...block }, "parsed_output", { - value: parsedOutput, - enumerable: false - }); - return parsedBlock; - } - return block; - }); - return { - ...message, - content, - parsed_output: firstParsedOutput - }; -} -function parseOutputFormat(params, content) { - const outputFormat = getOutputFormat2(params); - if (outputFormat?.type !== "json_schema") { - return null; - } - try { - if ("parse" in outputFormat) { - return outputFormat.parse(content); - } - return JSON.parse(content); - } catch (error) { - throw new AnthropicError(`Failed to parse structured output: ${error}`); - } -} -var init_parser2 = __esm({ - "node_modules/@anthropic-ai/sdk/lib/parser.mjs"() { - init_error(); - } -}); - -// node_modules/@anthropic-ai/sdk/lib/MessageStream.mjs -function tracksToolInput2(content) { - return content.type === "tool_use" || content.type === "server_tool_use"; -} -var _MessageStream_instances, _MessageStream_currentMessageSnapshot, _MessageStream_params, _MessageStream_connectedPromise, _MessageStream_resolveConnectedPromise, _MessageStream_rejectConnectedPromise, _MessageStream_endPromise, _MessageStream_resolveEndPromise, _MessageStream_rejectEndPromise, _MessageStream_listeners, _MessageStream_ended, _MessageStream_errored, _MessageStream_aborted, _MessageStream_catchingPromiseCreated, _MessageStream_response, _MessageStream_request_id, _MessageStream_workspace_id, _MessageStream_logger, _MessageStream_getFinalMessage, _MessageStream_getFinalText, _MessageStream_handleError, _MessageStream_beginRequest, _MessageStream_addStreamEvent, _MessageStream_endRequest, _MessageStream_accumulateMessage, MessageStream; -var init_MessageStream = __esm({ - "node_modules/@anthropic-ai/sdk/lib/MessageStream.mjs"() { - init_tslib(); - init_stainless_helper_header(); - init_errors(); - init_values(); - init_error2(); - init_streaming2(); - init_parser2(); - init_message_stream_utils(); - MessageStream = /* @__PURE__ */ (() => { - class MessageStream2 { - constructor(params, opts) { - _MessageStream_instances.add(this); - this.messages = []; - this.receivedMessages = []; - _MessageStream_currentMessageSnapshot.set(this, void 0); - _MessageStream_params.set(this, null); - this.controller = new AbortController(); - _MessageStream_connectedPromise.set(this, void 0); - _MessageStream_resolveConnectedPromise.set(this, () => { - }); - _MessageStream_rejectConnectedPromise.set(this, () => { - }); - _MessageStream_endPromise.set(this, void 0); - _MessageStream_resolveEndPromise.set(this, () => { - }); - _MessageStream_rejectEndPromise.set(this, () => { - }); - _MessageStream_listeners.set(this, {}); - _MessageStream_ended.set(this, false); - _MessageStream_errored.set(this, false); - _MessageStream_aborted.set(this, false); - _MessageStream_catchingPromiseCreated.set(this, false); - _MessageStream_response.set(this, void 0); - _MessageStream_request_id.set(this, void 0); - _MessageStream_workspace_id.set(this, void 0); - _MessageStream_logger.set(this, void 0); - _MessageStream_handleError.set(this, (error) => { - __classPrivateFieldSet(this, _MessageStream_errored, true, "f"); - if (isAbortError(error)) { - error = new APIUserAbortError(); - } - if (error instanceof APIUserAbortError) { - __classPrivateFieldSet(this, _MessageStream_aborted, true, "f"); - return this._emit("abort", error); - } - if (error instanceof AnthropicError) { - return this._emit("error", error); - } - if (error instanceof Error) { - const anthropicError = new AnthropicError(error.message); - anthropicError.cause = error; - return this._emit("error", anthropicError); - } - return this._emit("error", new AnthropicError(String(error))); - }); - __classPrivateFieldSet(this, _MessageStream_connectedPromise, new Promise((resolve2, reject2) => { - __classPrivateFieldSet(this, _MessageStream_resolveConnectedPromise, resolve2, "f"); - __classPrivateFieldSet(this, _MessageStream_rejectConnectedPromise, reject2, "f"); - }), "f"); - __classPrivateFieldSet(this, _MessageStream_endPromise, new Promise((resolve2, reject2) => { - __classPrivateFieldSet(this, _MessageStream_resolveEndPromise, resolve2, "f"); - __classPrivateFieldSet(this, _MessageStream_rejectEndPromise, reject2, "f"); - }), "f"); - __classPrivateFieldGet(this, _MessageStream_connectedPromise, "f").catch(() => { - }); - __classPrivateFieldGet(this, _MessageStream_endPromise, "f").catch(() => { - }); - __classPrivateFieldSet(this, _MessageStream_params, params, "f"); - __classPrivateFieldSet(this, _MessageStream_logger, opts?.logger ?? console, "f"); - } - get response() { - return __classPrivateFieldGet(this, _MessageStream_response, "f"); - } - get request_id() { - return __classPrivateFieldGet(this, _MessageStream_request_id, "f"); - } - get workspace_id() { - return __classPrivateFieldGet(this, _MessageStream_workspace_id, "f"); - } - /** - * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request, - * returned vie the `request-id` header which is useful for debugging requests and resporting - * issues to Anthropic. - * - * This is the same as the `APIPromise.withResponse()` method. - * - * This method will raise an error if you created the stream using `MessageStream.fromReadableStream` - * as no `Response` is available. - */ - async withResponse() { - __classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f"); - const response = await __classPrivateFieldGet(this, _MessageStream_connectedPromise, "f"); - if (!response) { - throw new Error("Could not resolve a `Response` object"); - } - return { - data: this, - response, - request_id: response.headers.get("request-id"), - workspace_id: response.headers.get("anthropic-workspace-id") - }; - } - /** - * Intended for use on the frontend, consuming a stream produced with - * `.toReadableStream()` on the backend. - * - * Note that messages sent to the model do not appear in `.on('message')` - * in this context. - */ - static fromReadableStream(stream5) { - const runner = new MessageStream2(null); - runner._run(() => runner._fromReadableStream(stream5)); - return runner; - } - static createMessage(messages, params, options, { logger } = {}) { - const runner = new MessageStream2(params, { logger }); - for (const message of params.messages) { - runner._addMessageParam(message); - } - __classPrivateFieldSet(runner, _MessageStream_params, { ...params, stream: true }, "f"); - runner._run(() => runner._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, [STAINLESS_HELPER_METHOD_HEADER]: "stream" } })); - return runner; - } - _run(executor) { - executor().then(() => { - this._emitFinal(); - this._emit("end"); - }, __classPrivateFieldGet(this, _MessageStream_handleError, "f")); - } - _addMessageParam(message) { - this.messages.push(message); - } - _addMessage(message, emit = true) { - this.receivedMessages.push(message); - if (emit) { - this._emit("message", message); - } - } - async _createMessage(messages, params, options) { - const signal = options?.signal; - let abortHandler; - if (signal) { - if (signal.aborted) - this.controller.abort(); - abortHandler = this.controller.abort.bind(this.controller); - signal.addEventListener("abort", abortHandler); - } - try { - __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_beginRequest).call(this); - const { response, data: stream5 } = await messages.create({ ...params, stream: true }, { ...options, signal: this.controller.signal }).withResponse(); - this._connected(response); - for await (const event of stream5) { - __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event); - } - if (stream5.controller.signal?.aborted) { - throw new APIUserAbortError(); - } - __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this); - } finally { - if (signal && abortHandler) { - signal.removeEventListener("abort", abortHandler); - } - } - } - _connected(response) { - if (this.ended) - return; - __classPrivateFieldSet(this, _MessageStream_response, response, "f"); - __classPrivateFieldSet(this, _MessageStream_request_id, response?.headers.get("request-id"), "f"); - __classPrivateFieldSet(this, _MessageStream_workspace_id, response?.headers.get("anthropic-workspace-id"), "f"); - __classPrivateFieldGet(this, _MessageStream_resolveConnectedPromise, "f").call(this, response); - this._emit("connect"); - } - get ended() { - return __classPrivateFieldGet(this, _MessageStream_ended, "f"); - } - get errored() { - return __classPrivateFieldGet(this, _MessageStream_errored, "f"); - } - get aborted() { - return __classPrivateFieldGet(this, _MessageStream_aborted, "f"); - } - abort() { - this.controller.abort(); - } - /** - * Adds the listener function to the end of the listeners array for the event. - * No checks are made to see if the listener has already been added. Multiple calls passing - * the same combination of event and listener will result in the listener being added, and - * called, multiple times. - * @returns this MessageStream, so that calls can be chained - */ - on(event, listener) { - const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = []); - listeners.push({ listener }); - return this; - } - /** - * Removes the specified listener from the listener array for the event. - * off() will remove, at most, one instance of a listener from the listener array. If any single - * listener has been added multiple times to the listener array for the specified event, then - * off() must be called multiple times to remove each instance. - * @returns this MessageStream, so that calls can be chained - */ - off(event, listener) { - const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event]; - if (!listeners) - return this; - const index = listeners.findIndex((l) => l.listener === listener); - if (index >= 0) - listeners.splice(index, 1); - return this; - } - /** - * Adds a one-time listener function for the event. The next time the event is triggered, - * this listener is removed and then invoked. - * @returns this MessageStream, so that calls can be chained - */ - once(event, listener) { - const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] || (__classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = []); - listeners.push({ listener, once: true }); - return this; - } - /** - * This is similar to `.once()`, but returns a Promise that resolves the next time - * the event is triggered, instead of calling a listener callback. - * @returns a Promise that resolves the next time given event is triggered, - * or rejects if an error is emitted. (If you request the 'error' event, - * returns a promise that resolves with the error). - * - * Example: - * - * const message = await stream.emitted('message') // rejects if the stream errors - */ - emitted(event) { - return new Promise((resolve2, reject2) => { - __classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f"); - if (event !== "error") - this.once("error", reject2); - this.once(event, resolve2); - }); - } - async done() { - __classPrivateFieldSet(this, _MessageStream_catchingPromiseCreated, true, "f"); - await __classPrivateFieldGet(this, _MessageStream_endPromise, "f"); - } - get currentMessage() { - return __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f"); - } - /** - * @returns a promise that resolves with the the final assistant Message response, - * or rejects if an error occurred or the stream ended prematurely without producing a Message. - * If structured outputs were used, this will be a ParsedMessage with a `parsed_output` field. - */ - async finalMessage() { - await this.done(); - return __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this); - } - /** - * @returns a promise that resolves with the the final assistant Message's text response, concatenated - * together if there are more than one text blocks. - * Rejects if an error occurred or the stream ended prematurely without producing a Message. - */ - async finalText() { - await this.done(); - return __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalText).call(this); - } - _emit(event, ...args) { - if (__classPrivateFieldGet(this, _MessageStream_ended, "f")) - return; - if (event === "end") { - __classPrivateFieldSet(this, _MessageStream_ended, true, "f"); - __classPrivateFieldGet(this, _MessageStream_resolveEndPromise, "f").call(this); - } - const listeners = __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event]; - if (listeners) { - __classPrivateFieldGet(this, _MessageStream_listeners, "f")[event] = listeners.filter((l) => !l.once); - listeners.forEach(({ listener }) => listener(...args)); - } - if (event === "abort") { - const error = args[0]; - if (!__classPrivateFieldGet(this, _MessageStream_catchingPromiseCreated, "f") && !listeners?.length) { - Promise.reject(error); - } - __classPrivateFieldGet(this, _MessageStream_rejectConnectedPromise, "f").call(this, error); - __classPrivateFieldGet(this, _MessageStream_rejectEndPromise, "f").call(this, error); - this._emit("end"); - return; - } - if (event === "error") { - const error = args[0]; - if (!__classPrivateFieldGet(this, _MessageStream_catchingPromiseCreated, "f") && !listeners?.length) { - Promise.reject(error); - } - __classPrivateFieldGet(this, _MessageStream_rejectConnectedPromise, "f").call(this, error); - __classPrivateFieldGet(this, _MessageStream_rejectEndPromise, "f").call(this, error); - this._emit("end"); - } - } - _emitFinal() { - const finalMessage = this.receivedMessages.at(-1); - if (finalMessage) { - this._emit("finalMessage", __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this)); - } - } - async _fromReadableStream(readableStream, options) { - const signal = options?.signal; - let abortHandler; - if (signal) { - if (signal.aborted) - this.controller.abort(); - abortHandler = this.controller.abort.bind(this.controller); - signal.addEventListener("abort", abortHandler); - } - try { - __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_beginRequest).call(this); - this._connected(null); - const stream5 = Stream.fromReadableStream(readableStream, this.controller); - for await (const event of stream5) { - __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event); - } - if (stream5.controller.signal?.aborted) { - throw new APIUserAbortError(); - } - __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this); - } finally { - if (signal && abortHandler) { - signal.removeEventListener("abort", abortHandler); - } - } - } - [(_MessageStream_currentMessageSnapshot = /* @__PURE__ */ new WeakMap(), _MessageStream_params = /* @__PURE__ */ new WeakMap(), _MessageStream_connectedPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_resolveConnectedPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_rejectConnectedPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_endPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_resolveEndPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_rejectEndPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_listeners = /* @__PURE__ */ new WeakMap(), _MessageStream_ended = /* @__PURE__ */ new WeakMap(), _MessageStream_errored = /* @__PURE__ */ new WeakMap(), _MessageStream_aborted = /* @__PURE__ */ new WeakMap(), _MessageStream_catchingPromiseCreated = /* @__PURE__ */ new WeakMap(), _MessageStream_response = /* @__PURE__ */ new WeakMap(), _MessageStream_request_id = /* @__PURE__ */ new WeakMap(), _MessageStream_workspace_id = /* @__PURE__ */ new WeakMap(), _MessageStream_logger = /* @__PURE__ */ new WeakMap(), _MessageStream_handleError = /* @__PURE__ */ new WeakMap(), _MessageStream_instances = /* @__PURE__ */ new WeakSet(), _MessageStream_getFinalMessage = function _MessageStream_getFinalMessage2() { - if (this.receivedMessages.length === 0) { - throw new AnthropicError("stream ended without producing a Message with role=assistant"); - } - return this.receivedMessages.at(-1); - }, _MessageStream_getFinalText = function _MessageStream_getFinalText2() { - if (this.receivedMessages.length === 0) { - throw new AnthropicError("stream ended without producing a Message with role=assistant"); - } - const textBlocks = this.receivedMessages.at(-1).content.filter((block) => block.type === "text").map((block) => block.text); - if (textBlocks.length === 0) { - throw new AnthropicError("stream ended without producing a content block with type=text"); - } - return textBlocks.join(" "); - }, _MessageStream_beginRequest = function _MessageStream_beginRequest2() { - if (this.ended) - return; - __classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, void 0, "f"); - }, _MessageStream_addStreamEvent = function _MessageStream_addStreamEvent2(event) { - if (this.ended) - return; - const messageSnapshot = __classPrivateFieldGet(this, _MessageStream_instances, "m", _MessageStream_accumulateMessage).call(this, event); - this._emit("streamEvent", event, messageSnapshot); - switch (event.type) { - case "content_block_delta": { - const content = messageSnapshot.content.at(-1); - switch (event.delta.type) { - case "text_delta": { - if (content.type === "text") { - this._emit("text", event.delta.text, content.text || ""); - } - break; - } - case "citations_delta": { - if (content.type === "text") { - this._emit("citation", event.delta.citation, content.citations ?? []); - } - break; - } - case "input_json_delta": { - if (tracksToolInput2(content) && __classPrivateFieldGet(this, _MessageStream_listeners, "f").inputJson?.length) { - this._emit("inputJson", event.delta.partial_json, content.input); - } - break; - } - case "thinking_delta": { - if (content.type === "thinking") { - this._emit("thinking", event.delta.thinking, content.thinking); - } - break; - } - case "signature_delta": { - if (content.type === "thinking") { - this._emit("signature", content.signature); - } - break; - } - default: - checkNever(event.delta); - } - break; - } - case "message_stop": { - this._addMessageParam(messageSnapshot); - this._addMessage(maybeParseMessage(messageSnapshot, __classPrivateFieldGet(this, _MessageStream_params, "f"), { logger: __classPrivateFieldGet(this, _MessageStream_logger, "f") }), true); - break; - } - case "content_block_stop": { - this._emit("contentBlock", messageSnapshot.content.at(-1)); - break; - } - case "message_start": { - __classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, messageSnapshot, "f"); - break; - } - case "content_block_start": - case "message_delta": - break; - } - }, _MessageStream_endRequest = function _MessageStream_endRequest2() { - if (this.ended) { - throw new AnthropicError(`stream has ended, this shouldn't happen`); - } - const snapshot = __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f"); - if (!snapshot) { - throw new AnthropicError(`request ended without sending any chunks`); - } - __classPrivateFieldSet(this, _MessageStream_currentMessageSnapshot, void 0, "f"); - return maybeParseMessage(snapshot, __classPrivateFieldGet(this, _MessageStream_params, "f"), { logger: __classPrivateFieldGet(this, _MessageStream_logger, "f") }); - }, _MessageStream_accumulateMessage = function _MessageStream_accumulateMessage2(event) { - let snapshot = __classPrivateFieldGet(this, _MessageStream_currentMessageSnapshot, "f"); - if (event.type === "message_start") { - if (snapshot) { - throw new AnthropicError(`Unexpected event order, got ${event.type} before receiving "message_stop"`); - } - return event.message; - } - if (!snapshot) { - throw new AnthropicError(`Unexpected event order, got ${event.type} before "message_start"`); - } - switch (event.type) { - case "message_stop": - return snapshot; - case "message_delta": - snapshot.stop_reason = event.delta.stop_reason; - snapshot.stop_sequence = event.delta.stop_sequence; - snapshot.stop_details = event.delta.stop_details; - snapshot.usage.output_tokens = event.usage.output_tokens; - if (event.delta.container != null) { - snapshot.container = event.delta.container; - } - if (event.usage.input_tokens != null) { - snapshot.usage.input_tokens = event.usage.input_tokens; - } - if (event.usage.cache_creation_input_tokens != null) { - snapshot.usage.cache_creation_input_tokens = event.usage.cache_creation_input_tokens; - } - if (event.usage.cache_read_input_tokens != null) { - snapshot.usage.cache_read_input_tokens = event.usage.cache_read_input_tokens; - } - if (event.usage.server_tool_use != null) { - snapshot.usage.server_tool_use = event.usage.server_tool_use; - } - if (event.usage.output_tokens_details != null) { - snapshot.usage.output_tokens_details = event.usage.output_tokens_details; - } - return snapshot; - case "content_block_start": - snapshot.content.push({ ...event.content_block }); - return snapshot; - case "content_block_delta": { - const snapshotContent = snapshot.content.at(event.index); - switch (event.delta.type) { - case "text_delta": { - if (snapshotContent?.type === "text") { - snapshot.content[event.index] = { - ...snapshotContent, - text: (snapshotContent.text || "") + event.delta.text - }; - } - break; - } - case "citations_delta": { - if (snapshotContent?.type === "text") { - snapshot.content[event.index] = { - ...snapshotContent, - citations: [...snapshotContent.citations ?? [], event.delta.citation] - }; - } - break; - } - case "input_json_delta": { - if (snapshotContent && tracksToolInput2(snapshotContent)) { - const jsonBuf = (snapshotContent[JSON_BUF_PROPERTY] || "") + event.delta.partial_json; - snapshot.content[event.index] = withLazyInput(snapshotContent, jsonBuf); - } - break; - } - case "thinking_delta": { - if (snapshotContent?.type === "thinking") { - snapshot.content[event.index] = { - ...snapshotContent, - thinking: snapshotContent.thinking + event.delta.thinking - }; - } - break; - } - case "signature_delta": { - if (snapshotContent?.type === "thinking") { - snapshot.content[event.index] = { - ...snapshotContent, - signature: event.delta.signature - }; - } - break; - } - default: - checkNever(event.delta); - } - return snapshot; - } - case "content_block_stop": { - const snapshotContent = snapshot.content.at(event.index); - if (snapshotContent && tracksToolInput2(snapshotContent) && JSON_BUF_PROPERTY in snapshotContent) { - Object.defineProperty(snapshotContent, "input", { - value: snapshotContent.input, - enumerable: true, - configurable: true, - writable: true - }); - } - return snapshot; - } - } - }, Symbol.asyncIterator)]() { - const pushQueue = []; - const readQueue = []; - let done = false; - this.on("streamEvent", (event) => { - const reader = readQueue.shift(); - if (reader) { - reader.resolve(event); - } else { - pushQueue.push(event); - } - }); - this.on("end", () => { - done = true; - for (const reader of readQueue) { - reader.resolve(void 0); - } - readQueue.length = 0; - }); - this.on("abort", (err) => { - done = true; - for (const reader of readQueue) { - reader.reject(err); - } - readQueue.length = 0; - }); - this.on("error", (err) => { - done = true; - for (const reader of readQueue) { - reader.reject(err); - } - readQueue.length = 0; - }); - return { - next: async () => { - if (!pushQueue.length) { - if (done) { - return { value: void 0, done: true }; - } - return new Promise((resolve2, reject2) => readQueue.push({ resolve: resolve2, reject: reject2 })).then((chunk2) => chunk2 ? { value: chunk2, done: false } : { value: void 0, done: true }); - } - const chunk = pushQueue.shift(); - return { value: chunk, done: false }; - }, - return: async () => { - this.abort(); - return { value: void 0, done: true }; - } - }; - } - toReadableStream() { - const stream5 = new Stream(this[Symbol.asyncIterator].bind(this), this.controller); - return stream5.toReadableStream(); - } - } - return MessageStream2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/messages/batches.mjs -var Batches2; -var init_batches2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/messages/batches.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_jsonl(); - init_error2(); - init_path(); - Batches2 = class extends APIResource { - /** - * Send a batch of Message creation requests. - * - * The Message Batches API can be used to process multiple Messages API requests at - * once. Once a Message Batch is created, it begins processing immediately. Batches - * can take up to 24 hours to complete. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * const messageBatch = await client.messages.batches.create({ - * requests: [ - * { - * custom_id: 'my-custom-id-1', - * params: { - * max_tokens: 1024, - * messages: [ - * { content: 'Hello, world', role: 'user' }, - * ], - * model: 'claude-opus-5', - * }, - * }, - * ], - * }); - * ``` - */ - create(params, options) { - const { user_profile_id, workspace_id, ...body } = params; - return this._client.post("/v1/messages/batches", { - body, - ...options, - headers: buildHeaders([ - { - ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * This endpoint is idempotent and can be used to poll for Message Batch - * completion. To access the results of a Message Batch, make a request to the - * `results_url` field in the response. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * const messageBatch = await client.messages.batches.retrieve( - * 'message_batch_id', - * ); - * ``` - */ - retrieve(messageBatchID, params = {}, options) { - const { workspace_id } = params ?? {}; - return this._client.get(path2`/v1/messages/batches/${messageBatchID}`, { - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - /** - * List all Message Batches within a Workspace. Most recently created batches are - * returned first. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const messageBatch of client.messages.batches.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/messages/batches", Page, { - query, - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - /** - * Delete a Message Batch. - * - * Message Batches can only be deleted once they've finished processing. If you'd - * like to delete an in-progress batch, you must first cancel it. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * const deletedMessageBatch = - * await client.messages.batches.delete('message_batch_id'); - * ``` - */ - delete(messageBatchID, params = {}, options) { - const { workspace_id } = params ?? {}; - return this._client.delete(path2`/v1/messages/batches/${messageBatchID}`, { - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - /** - * Batches may be canceled any time before processing ends. Once cancellation is - * initiated, the batch enters a `canceling` state, at which time the system may - * complete any in-progress, non-interruptible requests before finalizing - * cancellation. - * - * The number of canceled requests is specified in `request_counts`. To determine - * which requests were canceled, check the individual results within the batch. - * Note that cancellation may not result in any canceled requests if they were - * non-interruptible. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * const messageBatch = await client.messages.batches.cancel( - * 'message_batch_id', - * ); - * ``` - */ - cancel(messageBatchID, params = {}, options) { - const { workspace_id } = params ?? {}; - return this._client.post(path2`/v1/messages/batches/${messageBatchID}/cancel`, { - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - /** - * Streams the results of a Message Batch as a `.jsonl` file. - * - * Each line in the file is a JSON object containing the result of a single request - * in the Message Batch. Results are not guaranteed to be in the same order as - * requests. Use the `custom_id` field to match results to requests. - * - * Learn more about the Message Batches API in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) - * - * @example - * ```ts - * const messageBatchIndividualResponse = - * await client.messages.batches.results('message_batch_id'); - * ``` - */ - async results(messageBatchID, params = {}, options) { - const batch = await this.retrieve(messageBatchID, params, options); - if (!batch.results_url) { - throw new AnthropicError(`No batch \`results_url\`; Has it finished processing? ${batch.processing_status} - ${batch.id}`); - } - const { workspace_id } = params ?? {}; - return this._client.get(batch.results_url, { - ...options, - headers: buildHeaders([ - { - Accept: "application/binary", - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]), - stream: true, - __binaryResponse: true - })._thenUnwrap((_, props) => JSONLDecoder.fromResponse(props.response, props.controller)); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/messages/messages.mjs -var Messages2, DEPRECATED_MODELS2, MODELS_TO_WARN_WITH_THINKING_ENABLED2; -var init_messages2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/messages/messages.mjs"() { - init_resource(); - init_headers(); - init_stainless_helper_header(); - init_MessageStream(); - init_parser2(); - init_batches2(); - init_batches2(); - init_constants(); - Messages2 = /* @__PURE__ */ (() => { - class Messages5 extends APIResource { - constructor() { - super(...arguments); - this.batches = new Batches2(this._client); - } - create(params, options) { - const { user_profile_id, workspace_id, ...body } = params; - if (body.model in DEPRECATED_MODELS2) { - console.warn(`The model '${body.model}' is deprecated and will reach end-of-life on ${DEPRECATED_MODELS2[body.model]} -Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`); - } - if (MODELS_TO_WARN_WITH_THINKING_ENABLED2.includes(body.model) && body.thinking && body.thinking.type === "enabled") { - console.warn(`Using Claude with ${body.model} and 'thinking.type=enabled' is deprecated. Use 'thinking.type=adaptive' instead which results in better model performance in our testing: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking`); - } - let timeout = options?.timeout ?? this._client._options.timeout; - if (!body.stream && timeout == null) { - const maxNonstreamingTokens = MODEL_NONSTREAMING_TOKENS[body.model] ?? void 0; - timeout = this._client.calculateNonstreamingTimeout(body.max_tokens, maxNonstreamingTokens); - } - const helperHeader2 = stainlessHelperHeader(body.tools, body.messages); - return this._client.post("/v1/messages", { - body, - timeout: timeout ?? 6e5, - ...options, - headers: buildHeaders([ - { - ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - helperHeader2, - options?.headers - ]), - stream: params.stream ?? false - }); - } - /** - * Send a structured list of input messages with text and/or image content, along with an expected `output_config.format` and - * the response will be automatically parsed and available in the `parsed_output` property of the message. - * - * @example - * ```ts - * const message = await client.messages.parse({ - * model: 'claude-sonnet-4-5-20250929', - * max_tokens: 1024, - * messages: [{ role: 'user', content: 'What is 2+2?' }], - * output_config: { - * format: zodOutputFormat(z.object({ answer: z.number() })), - * }, - * }); - * - * console.log(message.parsed_output?.answer); // 4 - * ``` - */ - parse(params, options) { - return this.create(params, options).then((message) => parseMessage(message, params, { logger: this._client.logger ?? console })); - } - /** - * Create a Message stream. - * - * If `output_config.format` is provided with a parseable format (like `zodOutputFormat()`), - * the final message will include a `parsed_output` property with the parsed content. - * - * @example - * ```ts - * const stream = client.messages.stream({ - * model: 'claude-sonnet-4-5-20250929', - * max_tokens: 1024, - * messages: [{ role: 'user', content: 'What is 2+2?' }], - * output_config: { - * format: zodOutputFormat(z.object({ answer: z.number() })), - * }, - * }); - * - * const message = await stream.finalMessage(); - * console.log(message.parsed_output?.answer); // 4 - * ``` - */ - stream(body, options) { - return MessageStream.createMessage(this, body, options, { logger: this._client.logger ?? console }); - } - /** - * Count the number of tokens in a Message. - * - * The Token Count API can be used to count the number of tokens in a Message, - * including tools, images, and documents, without creating it. - * - * Learn more about token counting in our - * [user guide](https://platform.claude.com/docs/en/build-with-claude/token-counting) - * - * @example - * ```ts - * const messageTokensCount = - * await client.messages.countTokens({ - * messages: [{ content: 'Hello, world', role: 'user' }], - * model: 'claude-opus-5', - * }); - * ``` - */ - countTokens(params, options) { - const { user_profile_id, workspace_id, ...body } = params; - return this._client.post("/v1/messages/count_tokens", { - body, - ...options, - headers: buildHeaders([ - { - ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - } - Messages5.Batches = Batches2; - return Messages5; - })(); - DEPRECATED_MODELS2 = {}; - MODELS_TO_WARN_WITH_THINKING_ENABLED2 = ["claude-mythos-preview", "claude-opus-4-6"]; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/models.mjs -var Models2; -var init_models3 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/models.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_path(); - Models2 = class extends APIResource { - /** - * Get a specific model. - * - * The Models API response can be used to determine information about a specific - * model or resolve a model alias to a model ID. - * - * @example - * ```ts - * const modelInfo = await client.models.retrieve('model_id'); - * ``` - */ - retrieve(modelID, params = {}, options) { - const { betas, workspace_id } = params ?? {}; - return this._client.get(path2`/v1/models/${modelID}`, { - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - /** - * List available models. - * - * The Models API response can be used to determine which models are available for - * use in the API. More recently released models are listed first. - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const modelInfo of client.models.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { betas, workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/models", Page, { - query, - ...options, - headers: buildHeaders([ - { - ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, - ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 - }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/skills/versions.mjs -var Versions3; -var init_versions3 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/skills/versions.mjs"() { - init_resource(); - init_pagination(); - init_headers(); - init_uploads(); - init_path(); - Versions3 = class extends APIResource { - /** - * Create Skill Version - * - * @example - * ```ts - * const skillVersion = await client.skills.versions.create( - * 'skill_id', - * { files: [fs.createReadStream('path/to/file')] }, - * ); - * ``` - */ - create(skillID, params, options) { - const { workspace_id, ...body } = params; - return this._client.post(path2`/v1/skills/${skillID}/versions`, multipartFormRequestOptions({ - body, - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }, this._client, false)); - } - /** - * Get Skill Version - * - * @example - * ```ts - * const skillVersion = await client.skills.versions.retrieve( - * 'version', - * { skill_id: 'skill_id' }, - * ); - * ``` - */ - retrieve(version, params, options) { - const { skill_id, workspace_id } = params; - return this._client.get(path2`/v1/skills/${skill_id}/versions/${version}`, { - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - /** - * List Skill Versions - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const skillVersion of client.skills.versions.list( - * 'skill_id', - * )) { - * // ... - * } - * ``` - */ - list(skillID, params = {}, options) { - const { workspace_id, ...query } = params ?? {}; - return this._client.getAPIList(path2`/v1/skills/${skillID}/versions`, PageCursor, { - query, - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - /** - * Delete Skill Version - * - * @example - * ```ts - * const deletedSkillVersion = - * await client.skills.versions.delete('version', { - * skill_id: 'skill_id', - * }); - * ``` - */ - delete(version, params, options) { - const { skill_id, workspace_id } = params; - return this._client.delete(path2`/v1/skills/${skill_id}/versions/${version}`, { - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - }; - } -}); - -// node_modules/@anthropic-ai/sdk/resources/skills/skills.mjs -var Skills2; -var init_skills2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/skills/skills.mjs"() { - init_resource(); - init_versions3(); - init_versions3(); - init_pagination(); - init_headers(); - init_uploads(); - init_path(); - Skills2 = /* @__PURE__ */ (() => { - class Skills4 extends APIResource { - constructor() { - super(...arguments); - this.versions = new Versions3(this._client); - } - /** - * Create Skill - * - * @example - * ```ts - * const skill = await client.skills.create({ - * files: [fs.createReadStream('path/to/file')], - * }); - * ``` - */ - create(params, options) { - const { workspace_id, ...body } = params; - return this._client.post("/v1/skills", multipartFormRequestOptions({ - body, - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }, this._client, false)); - } - /** - * Get Skill - * - * @example - * ```ts - * const skill = await client.skills.retrieve('skill_id'); - * ``` - */ - retrieve(skillID, params = {}, options) { - const { workspace_id } = params ?? {}; - return this._client.get(path2`/v1/skills/${skillID}`, { - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - /** - * List Skills - * - * @example - * ```ts - * // Automatically fetches more pages as needed. - * for await (const skill of client.skills.list()) { - * // ... - * } - * ``` - */ - list(params = {}, options) { - const { workspace_id, ...query } = params ?? {}; - return this._client.getAPIList("/v1/skills", PageCursor, { - query, - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - /** - * Delete Skill - * - * @example - * ```ts - * const deletedSkill = await client.skills.delete('skill_id'); - * ``` - */ - delete(skillID, params = {}, options) { - const { workspace_id } = params ?? {}; - return this._client.delete(path2`/v1/skills/${skillID}`, { - ...options, - headers: buildHeaders([ - { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, - options?.headers - ]) - }); - } - } - Skills4.Versions = Versions3; - return Skills4; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/resources/index.mjs -var init_resources2 = __esm({ - "node_modules/@anthropic-ai/sdk/resources/index.mjs"() { - init_shared(); - init_beta(); - init_completions(); - init_files2(); - init_messages2(); - init_models3(); - init_skills2(); - } -}); - -// node_modules/@anthropic-ai/sdk/client.mjs -var _BaseAnthropic_instances, _a, _BaseAnthropic_encoder, _BaseAnthropic_baseURLOverridden, HUMAN_PROMPT, AI_PROMPT, BaseAnthropic, Anthropic; -var init_client = __esm({ - "node_modules/@anthropic-ai/sdk/client.mjs"() { - init_tslib(); - init_values(); - init_sleep(); - init_errors(); - init_detect_platform(); - init_request_signal(); - init_shims(); - init_request_options(); - init_query(); - init_version2(); - init_error(); - init_types(); - init_token_cache(); - init_credential_chain(); - init_middleware(); - init_pagination(); - init_uploads2(); - init_resources2(); - init_api_promise(); - init_completions(); - init_files2(); - init_models3(); - init_beta(); - init_messages2(); - init_skills2(); - init_detect_platform(); - init_headers(); - init_env(); - init_log(); - init_values(); - HUMAN_PROMPT = "\\n\\nHuman:"; - AI_PROMPT = "\\n\\nAssistant:"; - BaseAnthropic = /* @__PURE__ */ (() => { - class BaseAnthropic2 { - /** - * The active credential provider. Default credential resolution runs once - * at construction time. If it fails, the error is surfaced on every - * request and the client must be reconstructed — there is no retry path. - * - * Clones returned by {@link withOptions} share the parent's auth state - * (provider, token cache, pending resolution, and any resolution error) - * unless the caller passes an explicit `apiKey`, `authToken`, - * `credentials`, `config`, or `profile` override. - */ - get credentials() { - return this._authState.provider; - } - /** - * API Client for interfacing with the Anthropic API. - * - * @param {string | null | undefined} [opts.apiKey=process.env['ANTHROPIC_API_KEY'] ?? null] - * @param {string | null | undefined} [opts.authToken=process.env['ANTHROPIC_AUTH_TOKEN'] ?? null] - * @param {string | null | undefined} [opts.webhookKey=process.env['ANTHROPIC_WEBHOOK_SIGNING_KEY'] ?? null] - * @param {string} [opts.baseURL=process.env['ANTHROPIC_BASE_URL'] ?? https://api.anthropic.com] - Override the default base URL for the API. - * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out. - * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls. - * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation. - * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request. - * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API. - * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API. - * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers. - */ - constructor({ baseURL = readEnv("ANTHROPIC_BASE_URL"), apiKey, authToken, webhookKey = readEnv("ANTHROPIC_WEBHOOK_SIGNING_KEY") ?? null, ...opts } = {}) { - _BaseAnthropic_instances.add(this); - this._requestAuthFlags = /* @__PURE__ */ new WeakMap(); - _BaseAnthropic_encoder.set(this, void 0); - if (apiKey === void 0) { - apiKey = opts.profile != null ? null : readEnv("ANTHROPIC_API_KEY") ?? null; - } - if (authToken === void 0) { - authToken = opts.profile != null ? null : readEnv("ANTHROPIC_AUTH_TOKEN") ?? null; - } - if (opts.profile != null && (opts.credentials != null || opts.config != null)) { - throw new TypeError("Pass at most one of `profile`, `credentials`, or `config`."); - } - const options = { - apiKey, - authToken, - webhookKey, - ...opts, - baseURL: baseURL || `https://api.anthropic.com` - }; - if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) { - throw new AnthropicError("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew Anthropic({ apiKey, dangerouslyAllowBrowser: true });\n"); - } - this.baseURL = options.baseURL; - this._baseURLIsExplicit = opts.__baseURLIsExplicit ?? !!baseURL; - this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT; - this.logger = options.logger ?? console; - this.logLevel = defaultLogLevel; - this.logLevel = parseLogLevel(options.logLevel, "ClientOptions.logLevel", loggerFor(this)) ?? parseLogLevel(readEnv("ANTHROPIC_LOG"), "process.env['ANTHROPIC_LOG']", loggerFor(this)) ?? defaultLogLevel; - this.fetchOptions = options.fetchOptions; - this.maxRetries = validatePositiveInteger("maxRetries", options.maxRetries ?? 2); - this.fetch = options.fetch ?? getDefaultFetch(); - __classPrivateFieldSet(this, _BaseAnthropic_encoder, FallbackEncoder, "f"); - this.middleware = [...options.middleware ?? []]; - const customHeadersEnv = readEnv("ANTHROPIC_CUSTOM_HEADERS"); - if (customHeadersEnv) { - const parsed = {}; - for (const line of customHeadersEnv.split("\n")) { - const colon = line.indexOf(":"); - if (colon >= 0) { - parsed[line.substring(0, colon).trim()] = line.substring(colon + 1).trim(); - } - } - options.defaultHeaders = { ...parsed, ...options.defaultHeaders }; - } - const inherited = opts.__auth; - delete options.__auth; - delete options.__baseURLIsExplicit; - this._options = options; - this.apiKey = typeof apiKey === "string" ? apiKey : null; - this.authToken = authToken; - this.webhookKey = webhookKey; - if (inherited) { - this._authState = inherited; - if (!this._baseURLIsExplicit && inherited.baseURL) { - this.baseURL = inherited.baseURL; - } - } else { - this._authState = { provider: null, tokenCache: null, resolution: null, error: null, extraHeaders: {} }; - if (this.apiKey == null && this.authToken == null) { - const credentials = options.credentials ?? null; - if (credentials) { - this._authState.provider = credentials; - this._authState.tokenCache = this._makeTokenCache(credentials); - } else if (options.config != null) { - const result = resolveCredentialsFromConfig(options.config, this._credentialResolverOptions()); - this._authState.provider = result.provider; - this._authState.tokenCache = this._makeTokenCache(result.provider); - this._authState.extraHeaders = result.extraHeaders; - this._applyCredentialBaseURL(result.baseURL); - } else if (options.profile != null) { - this._authState.resolution = this._resolveDefaultCredentials(options.profile); - } else if (this._shouldResolveDefaultCredentials()) { - this._authState.resolution = this._resolveDefaultCredentials(); - } - } - } - } - /** - * Whether to lazily resolve auth from the default credential chain when no - * explicit auth is configured. Called once from the constructor, so - * overrides must not depend on subclass instance state. Subclasses that - * bring their own auth scheme return false so unrelated local credentials - * are never resolved or allowed to supply a base URL. - */ - _shouldResolveDefaultCredentials() { - return true; - } - /** - * Stores a profile/config-supplied base URL on the shared auth state and, if - * the caller did not pin `baseURL` via constructor option or env, adopts it - * as this client's outbound API host. Precedence: ctor opt > env > profile > - * hardcoded default. - */ - _applyCredentialBaseURL(baseURL) { - if (!baseURL) - return; - const normalized = baseURL.replace(/\/+$/, ""); - this._authState.baseURL = normalized; - if (!this._baseURLIsExplicit) { - this.baseURL = normalized; - } - } - /** - * Options bag passed into the credential chain. `baseURL` here is only the - * fallback host for the token-exchange POST when the config itself omits - * `base_url`; the chain returns the config's own `base_url` (if any) on - * {@link CredentialResult.baseURL}, which {@link _applyCredentialBaseURL} - * then adopts for outbound API requests. The two are deliberately decoupled - * so this fallback never round-trips into precedence. - */ - _credentialResolverOptions() { - return { - baseURL: this.baseURL, - fetch: this._credentialsFetch(), - userAgent: this.getUserAgent(), - onCacheWriteError: (err) => { - loggerFor(this).debug("credential cache write failed (best-effort)", err); - }, - onSafetyWarning: (msg) => { - loggerFor(this).warn(msg); - } - }; - } - /** - * A `Fetch` for first-party credential token-exchange requests (OIDC - * federation jwt-bearer grants, user-OAuth refresh grants) that routes - * through this client's middleware chain, so middleware observes token - * traffic like any other request. Only client-level middleware applies: - * a minted token is shared across requests, so attributing the exchange - * to any one request's per-request middleware would be arbitrary. For the - * same reason, `ctx.options` is undefined for these requests. - */ - _credentialsFetch() { - return wrapFetchWithMiddleware(this.fetch, this.middleware, void 0, this); - } - _makeTokenCache(provider2) { - return new TokenCache(provider2, (err) => { - loggerFor(this).debug("advisory token refresh failed; serving cached token", err); - }); - } - /** - * Create a new client instance re-using the same options given to the - * current client with optional overriding. - */ - withOptions(options) { - const overridesStructuredAuth = "credentials" in options || "config" in options || "profile" in options; - const overridesAuth = "apiKey" in options || "authToken" in options || overridesStructuredAuth; - const internal = { - ...this._options, - // Only forward baseURL when the caller (or env) explicitly chose it. - // For a non-explicit parent, this.baseURL may have been mutated to the - // profile-resolved host; pinning that as the clone's options.baseURL - // would make _options on the clone misreport caller intent and would - // leave the clone stuck on the parent's host across an auth override. - // The clone instead receives the construction-time value via - // ...this._options above and re-adopts the profile host through the - // shared _authState.baseURL + __baseURLIsExplicit=false path. - ...this._baseURLIsExplicit ? { baseURL: this.baseURL } : {}, - maxRetries: this.maxRetries, - timeout: this.timeout, - logger: this.logger, - logLevel: this.logLevel, - fetch: this.fetch, - fetchOptions: this.fetchOptions, - middleware: this.middleware, - apiKey: this.apiKey, - authToken: this.authToken, - webhookKey: this.webhookKey, - // credentials: this.credentials is a no-op when __auth is shared (the - // ctor takes the inherited path and ignores options.credentials); when - // overridesAuth is true via apiKey/authToken only, it lets the clone - // build a fresh TokenCache around the parent's provider. - credentials: this.credentials, - // When the caller passes a structured-credential override, drop inherited - // structured-credential options so only `...options` supplies them — - // otherwise an inherited `credentials`/`config`/`profile` would trip the - // mutual-exclusion check or precedence over the override. - ...overridesStructuredAuth ? { credentials: void 0, config: void 0, profile: void 0 } : {}, - ...options, - // Always set __auth so any stale value from ...this._options is - // overwritten. undefined means "build fresh auth from these options". - __auth: overridesAuth ? void 0 : this._authState, - __baseURLIsExplicit: "baseURL" in options ? true : this._baseURLIsExplicit - }; - return new this.constructor(internal); - } - /** - * Lazily resolves credentials from config files or environment variables. - * Called once from the constructor when no explicit auth is provided, or - * when an explicit `profile` was passed (in which case a missing/unresolved - * profile is surfaced as an error instead of falling through to "no auth"). - * The returned promise is stored and awaited on the first request. - */ - async _resolveDefaultCredentials(profile) { - try { - const result = await defaultCredentials(this._credentialResolverOptions(), profile); - if (result) { - this._authState.provider = result.provider; - this._authState.tokenCache = this._makeTokenCache(result.provider); - this._authState.extraHeaders = result.extraHeaders; - this._applyCredentialBaseURL(result.baseURL); - } else if (profile != null) { - throw new AnthropicError(`Profile "${profile}" could not be resolved (no /configs/${profile}.json found).`); - } - } catch (err) { - this._authState.error = err; - } finally { - this._authState.resolution = null; - } - } - defaultQuery() { - return this._options.defaultQuery; - } - validateHeaders({ values, nulls }) { - if (values.get("x-api-key") || values.get("authorization")) { - return; - } - if (this._authState.error) { - throw this._authState.error; - } - if (this._authState.tokenCache || this._authState.resolution) { - return; - } - if (this.apiKey && values.get("x-api-key")) { - return; - } - if (nulls.has("x-api-key")) { - return; - } - if (this.authToken && values.get("authorization")) { - return; - } - if (nulls.has("authorization")) { - return; - } - throw new Error('Could not resolve authentication method. Expected one of apiKey, authToken, credentials, config, or profile to be set. Or for one of the "X-Api-Key" or "Authorization" headers to be explicitly omitted'); - } - _authFlags(opts) { - let flags = this._requestAuthFlags.get(opts); - if (!flags) { - flags = { usedTokenCache: false, didRefreshFor401: false }; - this._requestAuthFlags.set(opts, flags); - } - return flags; - } - async authHeaders(opts) { - if (this._authState.resolution) { - await this._authState.resolution; - } - if (this._authState.error) { - return void 0; - } - if (this._authState.tokenCache && this.apiKey == null) { - const token = await this._authState.tokenCache.getToken(); - this._authFlags(opts).usedTokenCache = true; - return buildHeaders([{ Authorization: `Bearer ${token}` }]); - } - return buildHeaders([await this.apiKeyAuth(opts), await this.bearerAuth(opts)]); - } - async apiKeyAuth(opts) { - if (this.apiKey == null) { - return void 0; - } - return buildHeaders([{ "X-Api-Key": this.apiKey }]); - } - async bearerAuth(opts) { - if (this.authToken == null) { - return void 0; - } - return buildHeaders([{ Authorization: `Bearer ${this.authToken}` }]); - } - stringifyQuery(query) { - return stringifyQuery(query); - } - getUserAgent() { - return `Anthropic/JS ${VERSION}`; - } - makeStatusError(status, error, message, headers) { - return APIError.generate(status, error, message, headers); - } - buildURL(path5, query, defaultBaseURL) { - const baseURL = !__classPrivateFieldGet(this, _BaseAnthropic_instances, "m", _BaseAnthropic_baseURLOverridden).call(this) && defaultBaseURL || this.baseURL; - const url = isAbsoluteURL(path5) ? new URL(path5) : new URL(baseURL + (baseURL.endsWith("/") && path5.startsWith("/") ? path5.slice(1) : path5)); - const defaultQuery = this.defaultQuery(); - const pathQuery = Object.fromEntries(url.searchParams); - if (!isEmptyObj(defaultQuery) || !isEmptyObj(pathQuery)) { - query = { ...pathQuery, ...defaultQuery, ...query }; - } - if (typeof query === "object" && query && !Array.isArray(query)) { - url.search = this.stringifyQuery(query); - } - return url.toString(); - } - _calculateNonstreamingTimeout(maxTokens) { - const defaultTimeout = 10 * 60; - const expectedTimeout = 60 * 60 * maxTokens / 128e3; - if (expectedTimeout > defaultTimeout) { - throw new AnthropicError("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#streaming-responses for more details"); - } - return defaultTimeout * 1e3; - } - /** - * Used as a callback for mutating the given `FinalRequestOptions` object. - */ - async prepareOptions(options) { - } - /** - * Used as a callback for mutating the given `RequestInit` object. - * - * This is useful for cases where you want to add certain headers based off of - * the request properties, e.g. `method` or `url`. - * - * Runs after all middleware (including {@link backendMiddleware}), - * immediately before each underlying fetch call, so it sees exactly what - * goes over the wire. Middleware may replay a request by calling `next()` - * more than once, so this hook can run multiple times per attempt: - * overrides must be idempotent and overwrite headers from a previous - * invocation rather than append to them. - */ - async prepareRequest(request2, { url, options }) { - if (this._authState.tokenCache && this.apiKey == null) { - const headers = request2.headers instanceof Headers ? request2.headers : new Headers(request2.headers); - for (const [k, v] of Object.entries(this._authState.extraHeaders)) { - if (!headers.has(k)) - headers.set(k, v); - } - const existing = headers.get("anthropic-beta")?.split(",").map((s) => s.trim()); - if (!existing?.includes(OAUTH_API_BETA_HEADER)) { - headers.set("anthropic-beta", [...existing ?? [], OAUTH_API_BETA_HEADER].join(",")); - } - request2.headers = headers; - } - } - /** - * Internal {@link Middleware} composed innermost in the chain — inside both - * client-level and per-request middleware, immediately around the underlying - * `fetch`. Subclasses for third-party backends override this to adapt the - * canonical Anthropic-shaped request to the backend's wire shape (URL/body - * rewriting, request signing) and to normalize the wire response back to the - * canonical shape (e.g. AWS EventStream to SSE). - * - * Running inside the user's middleware means user middleware always observes - * canonical Anthropic-shaped traffic, and the adaptation re-runs (e.g. - * re-signs) on every `next()` invocation, covering whatever the middleware - * mutated. - * - * Errors thrown here follow the middleware error policy: they propagate to - * the caller as-is — no retries, no `APIConnectionError` wrapping — unless - * retryable (see {@link Middleware}); throw a `RetryableError` to opt into - * the retry path. - */ - backendMiddleware() { - return []; - } - get(path5, opts) { - return this.methodRequest("get", path5, opts); - } - post(path5, opts) { - return this.methodRequest("post", path5, opts); - } - patch(path5, opts) { - return this.methodRequest("patch", path5, opts); - } - put(path5, opts) { - return this.methodRequest("put", path5, opts); - } - delete(path5, opts) { - return this.methodRequest("delete", path5, opts); - } - methodRequest(method, path5, opts) { - return this.request(Promise.resolve(opts).then((opts2) => { - return { method, path: path5, ...opts2 }; - })); - } - request(options, remainingRetries = null) { - return new APIPromise(this, this.makeRequest(options, remainingRetries, void 0)); - } - async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) { - const options = await optionsInput; - let maxRetries = validatePositiveInteger("maxRetries", options.maxRetries ?? this.maxRetries); - if (this.isStreamBody(options.body)) { - maxRetries = 0; - } - if (retriesRemaining == null) { - retriesRemaining = maxRetries; - this._requestAuthFlags.delete(options); - } - await this.prepareOptions(options); - const { req, url, timeout } = await this.buildRequest(options, { - retryCount: maxRetries - retriesRemaining - }); - const requestLogID = "log_" + (Math.random() * (1 << 24) | 0).toString(16).padStart(6, "0"); - const retryLogStr = retryOfRequestLogID === void 0 ? "" : `, retryOf: ${retryOfRequestLogID}`; - const startTime = Date.now(); - if (options.signal?.aborted) { - throw new APIUserAbortError(); - } - const controller = new AbortController(); - const response = await this.fetchWithTimeout(url, req, timeout, controller, options, { - requestLogID, - retryOfRequestLogID - }).catch(castToError); - const headersTime = Date.now(); - if (response instanceof globalThis.Error) { - releaseRequestSignal(controller); - const retryMessage = `retrying, ${retriesRemaining} attempts remaining`; - if (options.signal?.aborted) { - throw new APIUserAbortError(); - } - const isTimeout = isAbortError(response) || /timed? ?out/i.test(String(response) + ("cause" in response ? String(response.cause) : "")); - const hasMiddleware = this.middleware.length > 0 || !!options.middleware?.length || this.backendMiddleware().length > 0; - if (hasMiddleware && !isTimeout && !isRetryableError(response)) { - loggerFor(this).info(`[${requestLogID}] middleware error (not retryable)`); - debugLogRequestDetails(loggerFor(this), `[${requestLogID}] middleware error (not retryable)`, { - retryOfRequestLogID, - url, - durationMs: headersTime - startTime, - message: response.message - }); - throw response; - } - if (retriesRemaining) { - loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} - ${retryMessage}`); - debugLogRequestDetails(loggerFor(this), `[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} (${retryMessage})`, { - retryOfRequestLogID, - url, - durationMs: headersTime - startTime, - message: response.message - }); - return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID); - } - loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} - error; no more retries left`); - debugLogRequestDetails(loggerFor(this), `[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} (error; no more retries left)`, { - retryOfRequestLogID, - url, - durationMs: headersTime - startTime, - message: response.message - }); - if (isTimeout) { - throw new APIConnectionTimeoutError(); - } - if (hasMiddleware && !isFetchOriginError(response)) { - throw response; - } - throw new APIConnectionError({ cause: response }); - } - const specialHeaders = [...response.headers.entries()].filter(([name]) => name === "request-id" || name === "anthropic-workspace-id").map(([name, value2]) => ", " + name + ": " + JSON.stringify(value2)).join(""); - const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? "succeeded" : "failed"} with status ${response.status} in ${headersTime - startTime}ms`; - if (!response.ok) { - const shouldRetry = await this.shouldRetry(response, options); - if (retriesRemaining && shouldRetry) { - const retryMessage2 = `retrying, ${retriesRemaining} attempts remaining`; - await CancelReadableStream(response.body); - releaseRequestSignal(controller); - loggerFor(this).info(`${responseInfo} - ${retryMessage2}`); - debugLogRequestDetails(loggerFor(this), `[${requestLogID}] response error (${retryMessage2})`, { - retryOfRequestLogID, - url: response.url, - status: response.status, - headers: response.headers, - durationMs: headersTime - startTime - }); - return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers); - } - const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`; - loggerFor(this).info(`${responseInfo} - ${retryMessage}`); - const errText = await response.text().catch((err2) => castToError(err2).message); - const errJSON = safeJSON(errText); - const errMessage = errJSON ? void 0 : errText; - debugLogRequestDetails(loggerFor(this), `[${requestLogID}] response error (${retryMessage})`, { - retryOfRequestLogID, - url: response.url, - status: response.status, - headers: response.headers, - message: errMessage, - durationMs: Date.now() - startTime - }); - releaseRequestSignal(controller); - const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers); - throw err; - } - loggerFor(this).info(responseInfo); - debugLogRequestDetails(loggerFor(this), `[${requestLogID}] response start`, { - retryOfRequestLogID, - url: response.url, - status: response.status, - headers: response.headers, - durationMs: headersTime - startTime - }); - armAbandonmentBackstop(response.body ?? response, controller); - return { response, options, controller, requestLogID, retryOfRequestLogID, startTime }; - } - getAPIList(path5, Page3, opts) { - return this.requestAPIList(Page3, opts && "then" in opts ? opts.then((opts2) => ({ method: "get", path: path5, ...opts2 })) : { method: "get", path: path5, ...opts }); - } - requestAPIList(Page3, options) { - const request2 = this.makeRequest(options, null, void 0); - return new PagePromise(this, request2, Page3); - } - async fetchWithTimeout(url, init, ms, controller, requestOptions, logCtx) { - const { signal, method, ...options } = init || {}; - const abort = this._makeAbort(controller); - if (signal) { - signal.addEventListener("abort", abort, { once: true }); - registerRequestSignalCleanup(controller, signal, abort); - } - const isReadableBody = globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream || typeof options.body === "object" && options.body !== null && Symbol.asyncIterator in options.body; - const fetchOptions = { - signal: controller.signal, - ...isReadableBody ? { duplex: "half" } : {}, - method: "GET", - ...options - }; - if (method) { - fetchOptions.method = method.toUpperCase(); - } - const baseFetch = this.fetch; - const timedFetch = async (innerUrl, innerInit) => { - const timeout = setTimeout(abort, ms); - try { - return await baseFetch.call(void 0, innerUrl, innerInit); - } finally { - clearTimeout(timeout); - } - }; - const innerFetch = requestOptions === void 0 ? timedFetch : (async (innerUrl, innerInit = {}) => { - const innerUrlStr = typeof innerUrl === "string" ? innerUrl : innerUrl instanceof URL ? innerUrl.href : innerUrl.url; - innerInit.headers = innerInit.headers instanceof Headers ? innerInit.headers : new Headers(innerInit.headers); - await this.prepareRequest(innerInit, { url: innerUrlStr, options: requestOptions }); - if (logCtx) { - debugLogRequestDetails(loggerFor(this), `[${logCtx.requestLogID}] sending request`, { - retryOfRequestLogID: logCtx.retryOfRequestLogID, - method: innerInit.method, - url: innerUrlStr, - options: requestOptions, - headers: innerInit.headers - }); - } - return timedFetch(innerUrl, innerInit); - }); - const requestMiddleware = requestOptions?.middleware; - const backendMiddleware = this.backendMiddleware(); - const allMiddleware = requestMiddleware?.length || backendMiddleware.length ? [...this.middleware, ...requestMiddleware ?? [], ...backendMiddleware] : this.middleware; - return await wrapFetchWithMiddleware(innerFetch, allMiddleware, requestOptions, this)(url, fetchOptions); - } - async shouldRetry(response, options) { - const flags = this._authFlags(options); - if (response.status === 401 && this._authState.tokenCache && flags.usedTokenCache && !flags.didRefreshFor401) { - flags.didRefreshFor401 = true; - this._authState.tokenCache.invalidate(); - return true; - } - const shouldRetryHeader = response.headers.get("x-should-retry"); - if (shouldRetryHeader === "true") - return true; - if (shouldRetryHeader === "false") - return false; - if (response.status === 408) - return true; - if (response.status === 409) - return true; - if (response.status === 429) - return true; - if (response.status >= 500) - return true; - return false; - } - async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) { - let timeoutMillis; - const retryAfterMillisHeader = responseHeaders?.get("retry-after-ms"); - if (retryAfterMillisHeader) { - const timeoutMs = parseFloat(retryAfterMillisHeader); - if (!Number.isNaN(timeoutMs)) { - timeoutMillis = timeoutMs; - } - } - const retryAfterHeader = responseHeaders?.get("retry-after"); - if (retryAfterHeader && !timeoutMillis) { - const timeoutSeconds = parseFloat(retryAfterHeader); - if (!Number.isNaN(timeoutSeconds)) { - timeoutMillis = timeoutSeconds * 1e3; - } else { - timeoutMillis = Date.parse(retryAfterHeader) - Date.now(); - } - } - if (timeoutMillis === void 0 || !(timeoutMillis > 0 && timeoutMillis <= 2 ** 31 - 1)) { - const maxRetries = options.maxRetries ?? this.maxRetries; - timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries); - } - await sleep(timeoutMillis, options.signal ?? void 0); - return this.makeRequest(options, retriesRemaining - 1, requestLogID); - } - calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) { - const initialRetryDelay = 0.5; - const maxRetryDelay = 8; - const numRetries = maxRetries - retriesRemaining; - const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay); - const jitter2 = 1 - Math.random() * 0.25; - return sleepSeconds * jitter2 * 1e3; - } - calculateNonstreamingTimeout(maxTokens, maxNonstreamingTokens) { - const maxTime = 60 * 60 * 1e3; - const defaultTime = 60 * 10 * 1e3; - const expectedTime = maxTime * maxTokens / 128e3; - if (expectedTime > defaultTime || maxNonstreamingTokens != null && maxTokens > maxNonstreamingTokens) { - throw new AnthropicError("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#long-requests for more details"); - } - return defaultTime; - } - async buildRequest(inputOptions, { retryCount = 0 } = {}) { - const options = { ...inputOptions }; - const { method, path: path5, query, defaultBaseURL } = options; - if (this._authState.resolution) { - await this._authState.resolution; - } - if (!this._baseURLIsExplicit && this._authState.baseURL && this.baseURL !== this._authState.baseURL) { - this.baseURL = this._authState.baseURL; - } - const url = this.buildURL(path5, query, defaultBaseURL); - if ("timeout" in options) - validatePositiveInteger("timeout", options.timeout); - options.timeout = options.timeout ?? this.timeout; - const { bodyHeaders, body } = this.buildBody({ options }); - const reqHeaders = await this.buildHeaders({ - options: inputOptions, - method, - bodyHeaders, - retryCount, - timeout: options.timeout - }); - const req = { - method, - headers: reqHeaders, - ...options.signal && { signal: options.signal }, - ...globalThis.ReadableStream && body instanceof globalThis.ReadableStream && { duplex: "half" }, - ...body && { body }, - ...this.fetchOptions ?? {}, - ...options.fetchOptions ?? {} - }; - return { req, url, timeout: options.timeout }; - } - async buildHeaders({ options, method, bodyHeaders, retryCount, timeout }) { - const headers = buildHeaders([ - { - Accept: "application/json", - "User-Agent": this.getUserAgent(), - "X-Stainless-Retry-Count": String(retryCount), - "X-Stainless-Timeout": String(Math.trunc(timeout / 1e3)), - ...getPlatformHeaders(), - ...this._options.dangerouslyAllowBrowser ? { "anthropic-dangerous-direct-browser-access": "true" } : void 0, - "anthropic-version": "2023-06-01" - }, - await this.authHeaders(options), - this._options.defaultHeaders, - bodyHeaders, - options.headers - ]); - this.validateHeaders(headers); - return headers.values; - } - _makeAbort(controller) { - return () => controller.abort(); - } - buildBody({ options: { body, headers: rawHeaders } }) { - if (!body) { - return { bodyHeaders: void 0, body: void 0 }; - } - const headers = buildHeaders([rawHeaders]); - if ( - // Pass raw type verbatim - ArrayBuffer.isView(body) || body instanceof ArrayBuffer || body instanceof DataView || typeof body === "string" && // Preserve legacy string encoding behavior for now - headers.values.has("content-type") || // `Blob` is superset of `File` - globalThis.Blob && body instanceof globalThis.Blob || // `FormData` -> `multipart/form-data` - body instanceof FormData || // `URLSearchParams` -> `application/x-www-form-urlencoded` - body instanceof URLSearchParams || // Send chunked stream (each chunk has own `length`) - globalThis.ReadableStream && body instanceof globalThis.ReadableStream - ) { - return { bodyHeaders: void 0, body }; - } else if (this.isStreamBody(body)) { - return { bodyHeaders: void 0, body: ReadableStreamFrom(body) }; - } else if (typeof body === "object" && headers.values.get("content-type") === "application/x-www-form-urlencoded") { - return { - bodyHeaders: { "content-type": "application/x-www-form-urlencoded" }, - body: this.stringifyQuery(body) - }; - } else { - return __classPrivateFieldGet(this, _BaseAnthropic_encoder, "f").call(this, { body, headers }); - } - } - /** - * Whether `body` is sent as a stream, which can be read only once: - * a `ReadableStream`, an async iterable or an iterator. - */ - isStreamBody(body) { - if (globalThis.ReadableStream && body instanceof globalThis.ReadableStream) { - return true; - } - return typeof body === "object" && body !== null && (Symbol.asyncIterator in body || Symbol.iterator in body && "next" in body && typeof body.next === "function"); - } - } - _a = BaseAnthropic2, _BaseAnthropic_encoder = /* @__PURE__ */ new WeakMap(), _BaseAnthropic_instances = /* @__PURE__ */ new WeakSet(), _BaseAnthropic_baseURLOverridden = function _BaseAnthropic_baseURLOverridden2() { - return this.baseURL !== "https://api.anthropic.com"; - }; - BaseAnthropic2.Anthropic = _a; - BaseAnthropic2.DEFAULT_TIMEOUT = 6e5; - BaseAnthropic2.AnthropicError = AnthropicError; - BaseAnthropic2.APIError = APIError; - BaseAnthropic2.APIConnectionError = APIConnectionError; - BaseAnthropic2.APIConnectionTimeoutError = APIConnectionTimeoutError; - BaseAnthropic2.APIUserAbortError = APIUserAbortError; - BaseAnthropic2.NotFoundError = NotFoundError; - BaseAnthropic2.ConflictError = ConflictError; - BaseAnthropic2.RateLimitError = RateLimitError; - BaseAnthropic2.BadRequestError = BadRequestError; - BaseAnthropic2.AuthenticationError = AuthenticationError; - BaseAnthropic2.InternalServerError = InternalServerError; - BaseAnthropic2.PermissionDeniedError = PermissionDeniedError; - BaseAnthropic2.UnprocessableEntityError = UnprocessableEntityError; - BaseAnthropic2.toFile = toFile; - BaseAnthropic2.HUMAN_PROMPT = HUMAN_PROMPT; - BaseAnthropic2.AI_PROMPT = AI_PROMPT; - return BaseAnthropic2; - })(); - Anthropic = /* @__PURE__ */ (() => { - class Anthropic2 extends BaseAnthropic { - constructor() { - super(...arguments); - this.completions = new Completions(this); - this.messages = new Messages2(this); - this.models = new Models2(this); - this.files = new Files2(this); - this.skills = new Skills2(this); - this.beta = new Beta(this); - } - } - Anthropic2.Completions = Completions; - Anthropic2.Messages = Messages2; - Anthropic2.Models = Models2; - Anthropic2.Files = Files2; - Anthropic2.Skills = Skills2; - Anthropic2.Beta = Beta; - return Anthropic2; - })(); - } -}); - -// node_modules/@anthropic-ai/sdk/index.mjs -var init_sdk = __esm({ - "node_modules/@anthropic-ai/sdk/index.mjs"() { - init_client(); - } -}); - -// node_modules/@earendil-works/pi-ai/dist/utils/provider-env.js -function getBunSandboxEnvValue(name) { - if (typeof process === "undefined" || !process.versions?.bun || Object.keys(process.env).length > 0) { - return void 0; - } - if (procEnvCache === null) { - procEnvCache = /* @__PURE__ */ new Map(); - try { - const { readFileSync } = __require("node:fs"); - const data = readFileSync("/proc/self/environ", "utf-8"); - for (const entry2 of data.split("\0")) { - const idx = entry2.indexOf("="); - if (idx > 0) { - procEnvCache.set(entry2.slice(0, idx), entry2.slice(idx + 1)); - } - } - } catch { - } - } - return procEnvCache.get(name); -} -function getProviderEnvValue(name, env) { - return env?.[name] || (typeof process !== "undefined" ? process.env[name] : void 0) || getBunSandboxEnvValue(name) || void 0; -} -var procEnvCache; -var init_provider_env = __esm({ - "node_modules/@earendil-works/pi-ai/dist/utils/provider-env.js"() { - procEnvCache = null; - } -}); - -// node_modules/@earendil-works/pi-ai/dist/env-api-keys.js -var __rewriteRelativeImportExtension2, _existsSync, _homedir, _join, dynamicImport, NODE_FS_SPECIFIER, NODE_OS_SPECIFIER, NODE_PATH_SPECIFIER, ANTHROPIC_FEDERATION_RULE_ID_ENV, ANTHROPIC_ORGANIZATION_ID_ENV, ANTHROPIC_SERVICE_ACCOUNT_ID_ENV, ANTHROPIC_IDENTITY_TOKEN_FILE_ENV, ANTHROPIC_WORKSPACE_ID_ENV; -var init_env_api_keys = __esm({ - "node_modules/@earendil-works/pi-ai/dist/env-api-keys.js"() { - __rewriteRelativeImportExtension2 = function(path5, preserveJsx) { - if (typeof path5 === "string" && /^\.\.?\//.test(path5)) { - return path5.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function(m, tsx, d, ext, cm) { - return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : d + ext + "." + cm.toLowerCase() + "js"; - }); - } - return path5; - }; - _existsSync = null; - _homedir = null; - _join = null; - dynamicImport = (specifier) => import(__rewriteRelativeImportExtension2(specifier)); - NODE_FS_SPECIFIER = "node:fs"; - NODE_OS_SPECIFIER = "node:os"; - NODE_PATH_SPECIFIER = "node:path"; - if (typeof process !== "undefined" && (process.versions?.node || process.versions?.bun)) { - dynamicImport(NODE_FS_SPECIFIER).then((m) => { - _existsSync = m.existsSync; - }); - dynamicImport(NODE_OS_SPECIFIER).then((m) => { - _homedir = m.homedir; - }); - dynamicImport(NODE_PATH_SPECIFIER).then((m) => { - _join = m.join; - }); - } - ANTHROPIC_FEDERATION_RULE_ID_ENV = "ANTHROPIC_FEDERATION_RULE_ID"; - ANTHROPIC_ORGANIZATION_ID_ENV = "ANTHROPIC_ORGANIZATION_ID"; - ANTHROPIC_SERVICE_ACCOUNT_ID_ENV = "ANTHROPIC_SERVICE_ACCOUNT_ID"; - ANTHROPIC_IDENTITY_TOKEN_FILE_ENV = "ANTHROPIC_IDENTITY_TOKEN_FILE"; - ANTHROPIC_WORKSPACE_ID_ENV = "ANTHROPIC_WORKSPACE_ID"; - } -}); - -// node_modules/@earendil-works/pi-ai/dist/utils/headers.js -function headersToRecord(headers) { - const result = {}; - for (const [key, value2] of headers.entries()) { - result[key] = value2; - } - return result; -} -var init_headers2 = __esm({ - "node_modules/@earendil-works/pi-ai/dist/utils/headers.js"() { - } -}); - -// node_modules/partial-json/dist/options.js -var require_options = __commonJS({ - "node_modules/partial-json/dist/options.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Allow = exports.ALL = exports.COLLECTION = exports.ATOM = exports.SPECIAL = exports.INF = exports._INFINITY = exports.INFINITY = exports.NAN = exports.BOOL = exports.NULL = exports.OBJ = exports.ARR = exports.NUM = exports.STR = void 0; - exports.STR = 1; - exports.NUM = 2; - exports.ARR = 4; - exports.OBJ = 8; - exports.NULL = 16; - exports.BOOL = 32; - exports.NAN = 64; - exports.INFINITY = 128; - exports._INFINITY = 256; - exports.INF = exports.INFINITY | exports._INFINITY; - exports.SPECIAL = exports.NULL | exports.BOOL | exports.INF | exports.NAN; - exports.ATOM = exports.STR | exports.NUM | exports.SPECIAL; - exports.COLLECTION = exports.ARR | exports.OBJ; - exports.ALL = exports.ATOM | exports.COLLECTION; - exports.Allow = { STR: exports.STR, NUM: exports.NUM, ARR: exports.ARR, OBJ: exports.OBJ, NULL: exports.NULL, BOOL: exports.BOOL, NAN: exports.NAN, INFINITY: exports.INFINITY, _INFINITY: exports._INFINITY, INF: exports.INF, SPECIAL: exports.SPECIAL, ATOM: exports.ATOM, COLLECTION: exports.COLLECTION, ALL: exports.ALL }; - exports.default = exports.Allow; - } -}); - -// node_modules/partial-json/dist/index.js -var require_dist2 = __commonJS({ - "node_modules/partial-json/dist/index.js"(exports) { - "use strict"; - var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) { - if (k2 === void 0) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - }) : (function(o, m, k, k2) { - if (k2 === void 0) k2 = k; - o[k2] = m[k]; - })); - var __exportStar = exports && exports.__exportStar || function(m, exports2) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) __createBinding(exports2, m, p); - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Allow = exports.MalformedJSON = exports.PartialJSON = exports.parseJSON = exports.parse = void 0; - var options_1 = require_options(); - Object.defineProperty(exports, "Allow", { enumerable: true, get: function() { - return options_1.Allow; - } }); - __exportStar(require_options(), exports); - var PartialJSON2 = class extends Error { - }; - exports.PartialJSON = PartialJSON2; - var MalformedJSON2 = class extends Error { - }; - exports.MalformedJSON = MalformedJSON2; - function parseJSON2(jsonString, allowPartial = options_1.Allow.ALL) { - if (typeof jsonString !== "string") { - throw new TypeError(`expecting str, got ${typeof jsonString}`); - } - if (!jsonString.trim()) { - throw new Error(`${jsonString} is empty`); - } - return _parseJSON2(jsonString.trim(), allowPartial); - } - exports.parseJSON = parseJSON2; - var _parseJSON2 = (jsonString, allow) => { - const length = jsonString.length; - let index = 0; - const markPartialJSON = (msg) => { - throw new PartialJSON2(`${msg} at position ${index}`); - }; - const throwMalformedError = (msg) => { - throw new MalformedJSON2(`${msg} at position ${index}`); - }; - const parseAny = () => { - skipBlank(); - if (index >= length) - markPartialJSON("Unexpected end of input"); - if (jsonString[index] === '"') - return parseStr(); - if (jsonString[index] === "{") - return parseObj(); - if (jsonString[index] === "[") - return parseArr(); - if (jsonString.substring(index, index + 4) === "null" || options_1.Allow.NULL & allow && length - index < 4 && "null".startsWith(jsonString.substring(index))) { - index += 4; - return null; - } - if (jsonString.substring(index, index + 4) === "true" || options_1.Allow.BOOL & allow && length - index < 4 && "true".startsWith(jsonString.substring(index))) { - index += 4; - return true; - } - if (jsonString.substring(index, index + 5) === "false" || options_1.Allow.BOOL & allow && length - index < 5 && "false".startsWith(jsonString.substring(index))) { - index += 5; - return false; - } - if (jsonString.substring(index, index + 8) === "Infinity" || options_1.Allow.INFINITY & allow && length - index < 8 && "Infinity".startsWith(jsonString.substring(index))) { - index += 8; - return Infinity; - } - if (jsonString.substring(index, index + 9) === "-Infinity" || options_1.Allow._INFINITY & allow && 1 < length - index && length - index < 9 && "-Infinity".startsWith(jsonString.substring(index))) { - index += 9; - return -Infinity; - } - if (jsonString.substring(index, index + 3) === "NaN" || options_1.Allow.NAN & allow && length - index < 3 && "NaN".startsWith(jsonString.substring(index))) { - index += 3; - return NaN; - } - return parseNum(); - }; - const parseStr = () => { - const start = index; - let escape2 = false; - index++; - while (index < length && (jsonString[index] !== '"' || escape2 && jsonString[index - 1] === "\\")) { - escape2 = jsonString[index] === "\\" ? !escape2 : false; - index++; - } - if (jsonString.charAt(index) == '"') { - try { - return JSON.parse(jsonString.substring(start, ++index - Number(escape2))); - } catch (e) { - throwMalformedError(String(e)); - } - } else if (options_1.Allow.STR & allow) { - try { - return JSON.parse(jsonString.substring(start, index - Number(escape2)) + '"'); - } catch (e) { - return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf("\\")) + '"'); - } - } - markPartialJSON("Unterminated string literal"); - }; - const parseObj = () => { - index++; - skipBlank(); - const obj2 = {}; - try { - while (jsonString[index] !== "}") { - skipBlank(); - if (index >= length && options_1.Allow.OBJ & allow) - return obj2; - const key = parseStr(); - skipBlank(); - index++; - try { - const value2 = parseAny(); - obj2[key] = value2; - } catch (e) { - if (options_1.Allow.OBJ & allow) - return obj2; - else - throw e; - } - skipBlank(); - if (jsonString[index] === ",") - index++; - } - } catch (e) { - if (options_1.Allow.OBJ & allow) - return obj2; - else - markPartialJSON("Expected '}' at end of object"); - } - index++; - return obj2; - }; - const parseArr = () => { - index++; - const arr2 = []; - try { - while (jsonString[index] !== "]") { - arr2.push(parseAny()); - skipBlank(); - if (jsonString[index] === ",") { - index++; - } - } - } catch (e) { - if (options_1.Allow.ARR & allow) { - return arr2; - } - markPartialJSON("Expected ']' at end of array"); - } - index++; - return arr2; - }; - const parseNum = () => { - if (index === 0) { - if (jsonString === "-") - throwMalformedError("Not sure what '-' is"); - try { - return JSON.parse(jsonString); - } catch (e) { - if (options_1.Allow.NUM & allow) - try { - return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf("e"))); - } catch (e2) { - } - throwMalformedError(String(e)); - } - } - const start = index; - if (jsonString[index] === "-") - index++; - while (jsonString[index] && ",]}".indexOf(jsonString[index]) === -1) - index++; - if (index == length && !(options_1.Allow.NUM & allow)) - markPartialJSON("Unterminated number literal"); - try { - return JSON.parse(jsonString.substring(start, index)); - } catch (e) { - if (jsonString.substring(start, index) === "-") - markPartialJSON("Not sure what '-' is"); - try { - return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf("e"))); - } catch (e2) { - throwMalformedError(String(e2)); - } - } - }; - const skipBlank = () => { - while (index < length && " \n\r ".includes(jsonString[index])) { - index++; - } - }; - return parseAny(); - }; - var parse2 = parseJSON2; - exports.parse = parse2; - } -}); - -// node_modules/@earendil-works/pi-ai/dist/utils/json-parse.js -function isControlCharacter(char) { - const codePoint = char.codePointAt(0); - return codePoint !== void 0 && codePoint >= 0 && codePoint <= 31; -} -function escapeControlCharacter(char) { - switch (char) { - case "\b": - return "\\b"; - case "\f": - return "\\f"; - case "\n": - return "\\n"; - case "\r": - return "\\r"; - case " ": - return "\\t"; - default: - return `\\u${char.codePointAt(0)?.toString(16).padStart(4, "0") ?? "0000"}`; - } -} -function repairJson(json) { - let repaired = ""; - let inString = false; - for (let index = 0; index < json.length; index++) { - const char = json[index]; - if (!inString) { - repaired += char; - if (char === '"') { - inString = true; - } - continue; - } - if (char === '"') { - repaired += char; - inString = false; - continue; - } - if (char === "\\") { - const nextChar = json[index + 1]; - if (nextChar === void 0) { - repaired += "\\\\"; - continue; - } - if (nextChar === "u") { - const unicodeDigits = json.slice(index + 2, index + 6); - if (/^[0-9a-fA-F]{4}$/.test(unicodeDigits)) { - repaired += `\\u${unicodeDigits}`; - index += 5; - continue; - } - } - if (VALID_JSON_ESCAPES.has(nextChar)) { - repaired += `\\${nextChar}`; - index += 1; - continue; - } - repaired += "\\\\"; - continue; - } - repaired += isControlCharacter(char) ? escapeControlCharacter(char) : char; - } - return repaired; -} -function parseJsonWithRepair(json) { - try { - return JSON.parse(json); - } catch (error) { - const repairedJson = repairJson(json); - if (repairedJson !== json) { - return JSON.parse(repairedJson); - } - throw error; - } -} -function parseToolCallArguments(json) { - if (!json?.trim()) - return { arguments: {} }; - try { - const parsed = parseJsonWithRepair(json); - if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) { - throw new Error("Tool arguments must be a JSON object"); - } - return { arguments: parsed }; - } catch (error) { - return { - arguments: {}, - argumentsError: `${error instanceof Error ? error.message : String(error)} - -Received arguments: -${json}` - }; - } -} -var import_partial_json, VALID_JSON_ESCAPES; -var init_json_parse = __esm({ - "node_modules/@earendil-works/pi-ai/dist/utils/json-parse.js"() { - import_partial_json = __toESM(require_dist2(), 1); - VALID_JSON_ESCAPES = /* @__PURE__ */ new Set(['"', "\\", "/", "b", "f", "n", "r", "t"]); - } -}); - -// node_modules/@earendil-works/pi-ai/dist/utils/openrouter-cost.js -function isValidCost(value2) { - return typeof value2 === "number" && Number.isFinite(value2) && value2 >= 0; -} -function isOpenRouterModel(model2) { - return model2.provider === "openrouter" || model2.baseUrl.includes("openrouter.ai"); -} -function applyOpenRouterReportedCost(usage, reported) { - if (!isValidCost(reported.cost)) - return; - if (reported.is_byok === false) { - usage.cost.total = reported.cost; - usage.cost.totalFromProvider = true; - return; - } - if (reported.is_byok === true) { - const details = reported.cost_details; - if (!details) - return; - let upstreamCost = details.upstream_inference_cost; - if (upstreamCost === null) { - if (!isValidCost(details.upstream_inference_prompt_cost) || !isValidCost(details.upstream_inference_completions_cost)) { - return; - } - upstreamCost = details.upstream_inference_prompt_cost + details.upstream_inference_completions_cost; - } - if (!isValidCost(upstreamCost)) - return; - usage.cost.total = reported.cost + upstreamCost; - usage.cost.totalFromProvider = true; - } -} -var init_openrouter_cost = __esm({ - "node_modules/@earendil-works/pi-ai/dist/utils/openrouter-cost.js"() { - } -}); - -// node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js -function isProviderError(error) { - if (!(error instanceof Error) || !("status" in error) || !("headers" in error)) - return false; - return (error.status === void 0 || typeof error.status === "number") && (error.headers === void 0 || error.headers instanceof Headers); -} -function isRetryableProviderError(error) { - const shouldRetry = error.headers?.get("x-should-retry"); - if (shouldRetry === "true") - return true; - if (shouldRetry === "false") - return false; - if (error.status === void 0) - return true; - return error.status === 408 || error.status === 409 || error.status === 429 || typeof error.status === "number" && error.status >= 500; -} -function validateServerRetryDelayMs(delayMs, maxRetryDelayMs, providerErrorMessage) { - const maxDelayMs = maxRetryDelayMs ?? DEFAULT_MAX_RETRY_DELAY_MS; - if (maxDelayMs > 0 && delayMs > maxDelayMs) { - throw new Error(`Server requested ${Math.ceil(delayMs / 1e3)}s retry delay (max: ${Math.ceil(maxDelayMs / 1e3)}s). ${providerErrorMessage}`); - } - return delayMs; -} -function getRetryDelayMs(error, retryIndex, maxRetryDelayMs) { - const retryAfterMs = error.headers?.get("retry-after-ms"); - if (retryAfterMs) { - const value2 = Number.parseFloat(retryAfterMs); - if (Number.isFinite(value2)) - return validateServerRetryDelayMs(value2, maxRetryDelayMs, error.message); - } - const retryAfter = error.headers?.get("retry-after"); - if (retryAfter) { - const seconds = Number.parseFloat(retryAfter); - const delayMs = Number.isNaN(seconds) ? Date.parse(retryAfter) - Date.now() : seconds * 1e3; - if (Number.isFinite(delayMs)) - return validateServerRetryDelayMs(delayMs, maxRetryDelayMs, error.message); - } - const exponentialDelay = Math.min(0.5 * 2 ** retryIndex, 8) * 1e3; - return exponentialDelay * (1 - Math.random() * 0.25); -} -function createAbortError() { - const error = new Error("Request aborted"); - error.name = "AbortError"; - return error; -} -function abortableSleep(ms, signal) { - return new Promise((resolve2, reject2) => { - if (signal?.aborted) { - reject2(createAbortError()); - return; - } - const onAbort = () => { - clearTimeout(timeout); - reject2(createAbortError()); - }; - const timeout = setTimeout(() => { - signal?.removeEventListener("abort", onAbort); - resolve2(); - }, Math.max(0, ms)); - signal?.addEventListener("abort", onAbort, { once: true }); - }); -} -async function retryProviderRequest(request2, options = {}) { - const maxRetries = options.maxRetries ?? 0; - let retriesRemaining = maxRetries; - for (; ; ) { - try { - return await request2(); - } catch (error) { - if (options.signal?.aborted) - throw createAbortError(); - if (retriesRemaining <= 0 || !isProviderError(error) || !isRetryableProviderError(error)) - throw error; - if (error.status !== void 0 && options.noRetryStatuses?.includes(error.status)) - throw error; - const retryIndex = maxRetries - retriesRemaining; - retriesRemaining--; - await abortableSleep(getRetryDelayMs(error, retryIndex, options.maxRetryDelayMs), options.signal); - } - } -} -var DEFAULT_MAX_RETRY_DELAY_MS; -var init_provider_retry = __esm({ - "node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js"() { - DEFAULT_MAX_RETRY_DELAY_MS = 6e4; - } -}); - -// node_modules/@earendil-works/pi-ai/dist/utils/sanitize-unicode.js -function sanitizeSurrogates(text) { - return text.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?= "0" && char <= "9" || char >= "a" && char <= "f" || char >= "A" && char <= "F"; -} -function scalarValue(token) { - for (const [literal, value2] of LITERALS) - if (token === literal) - return value2; - return NUMBER.test(token) ? Number(token) : void 0; -} -function pendingScalarValue(token) { - for (const [literal, value2] of LITERALS) - if (literal.startsWith(token)) - return value2; - if (NUMBER.test(token)) - return Number(token); - const mantissa = NUMBER_WITHOUT_EXPONENT_DIGITS.exec(token); - return mantissa === null ? void 0 : Number(mantissa[1]); -} -function setSlot(container, slot, value2) { - if (slot.kind === "element") - container[slot.index] = value2; - else if (slot.kind === "member") - setMember(container, slot.key, value2); -} -function setMember(members, key, value2) { - if (key === "__proto__") { - Object.defineProperty(members, key, { value: value2, writable: true, enumerable: true, configurable: true }); - } else { - members[key] = value2; - } -} -var MAX_REPORTED_DEPTH, ROOT_SLOT, CREDIT_PER_APPEND, CREDIT_PER_CHARACTER, MAX_PENDING_SCALAR_LENGTH, NUMBER, NUMBER_WITHOUT_EXPONENT_DIGITS, LITERALS, QUOTE, BACKSLASH, StreamingJsonParser, ToolCallArgumentsStream, SIMPLE_ESCAPES; -var init_streaming_json = __esm({ - "node_modules/@earendil-works/pi-ai/dist/utils/streaming-json.js"() { - init_json_parse(); - MAX_REPORTED_DEPTH = 32; - ROOT_SLOT = { kind: "root" }; - CREDIT_PER_APPEND = 256; - CREDIT_PER_CHARACTER = 8; - MAX_PENDING_SCALAR_LENGTH = 64; - NUMBER = /^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?$/; - NUMBER_WITHOUT_EXPONENT_DIGITS = /^(-?(?:0|[1-9]\d*)(?:\.\d+)?)[eE][+-]?$/; - LITERALS = [ - ["true", true], - ["false", false], - ["null", null] - ]; - QUOTE = 34; - BACKSLASH = 92; - StreamingJsonParser = class { - #root = void 0; - #done = false; - #stack = []; - #string = void 0; - #scalar = ""; - #scalarSlot = void 0; - /** Sum of `size + 1` over the open path: what a fresh snapshot copies. */ - #pathCost = 0; - #credit = 0; - #dirty = false; - #snapshot = void 0; - /** Changes of the piece being read. */ - #changes = []; - /** - * Read the next piece of text; returns the changes it made, in order. Costs time linear in `text.length`. - */ - append(text) { - this.#credit += CREDIT_PER_APPEND + CREDIT_PER_CHARACTER * text.length; - this.#changes = []; - if (this.#string !== void 0) - this.#string.change = void 0; - let index = 0; - while (index < text.length && !this.#done) { - const open = this.#string; - if (open !== void 0) - index = this.#readString(open, text, index); - else if (this.#scalar !== "") - index = this.#readScalar(text, index); - else - this.#structural(text[index++]); - } - return this.#changes; - } - /** - * The value of the text read so far: `undefined` before a value starts, otherwise a plain JSON value that never - * changes afterwards. Returns the previous snapshot while the text read since did not change the value, or while a - * fresh copy of the open path is not yet paid for (see the module comment). - */ - snapshot() { - if (!this.#dirty) - return this.#snapshot; - const pending = this.#pendingScalar(); - const cost = this.#pathCost + (pending === void 0 ? 0 : 1); - if (cost > this.#credit) - return this.#snapshot; - this.#credit -= cost; - this.#dirty = false; - this.#snapshot = this.#copyOpenPath(pending); - return this.#snapshot; - } - /** Read string characters from `start` until the string ends or the text does; returns the next index. */ - #readString(open, text, start) { - let runStart = start; - for (let index = start; index < text.length; index++) { - const code = text.charCodeAt(index); - if (open.escape !== "") { - if (this.#continueEscape(open, text[index])) { - runStart = index + 1; - continue; - } - runStart = index; - } - if (code === QUOTE) { - if (index > runStart) - this.#appendString(open, text.slice(runStart, index)); - this.#endString(open); - return index + 1; - } - if (code === BACKSLASH) { - if (index > runStart) - this.#appendString(open, text.slice(runStart, index)); - open.escape = "\\"; - runStart = index + 1; - } - } - if (text.length > runStart) - this.#appendString(open, text.slice(runStart)); - return text.length; - } - /** Read number or literal characters from `start` up to the next delimiter; returns the delimiter's index. */ - #readScalar(text, start) { - let end = start; - while (end < text.length && !isDelimiter(text[end])) - end++; - if (end > start) { - this.#scalar += text.slice(start, end); - if (this.#scalarSlot !== void 0) - this.#dirty = true; - } - if (end < text.length) - this.#endScalar(); - return end; - } - /** Handle one character outside strings. */ - #structural(char) { - switch (char) { - case " ": - case " ": - case "\n": - case "\r": - return; - case '"': - this.#startString(); - return; - case "{": - case "[": - this.#openContainer(char === "{" ? {} : []); - return; - case "}": - case "]": - this.#closeContainer(); - return; - case ":": { - const frame = this.#stack.at(-1); - if (frame !== void 0 && !Array.isArray(frame.container) && frame.phase === "colon") - frame.phase = "value"; - return; - } - case ",": { - const frame = this.#stack.at(-1); - if (frame !== void 0) - frame.phase = Array.isArray(frame.container) ? "value" : "key"; - return; - } - default: - this.#scalar = char; - this.#scalarSlot = this.#valueSlot(); - if (this.#scalarSlot !== void 0) - this.#dirty = true; - } - } - /** Where a value starting now goes, or `undefined` when this position takes no value. */ - #valueSlot() { - const frame = this.#stack.at(-1); - if (frame === void 0) - return this.#root === void 0 ? ROOT_SLOT : void 0; - if (Array.isArray(frame.container)) - return { kind: "element", index: frame.container.length }; - if ((frame.phase === "value" || frame.phase === "colon") && frame.key !== void 0) { - return { kind: "member", key: frame.key }; - } - return void 0; - } - #startString() { - const frame = this.#stack.at(-1); - if (frame !== void 0 && !Array.isArray(frame.container) && (frame.phase === "key" || frame.phase === "comma")) { - this.#string = { target: "key", slot: void 0, text: "", escape: "", path: void 0, change: void 0 }; - return; - } - const slot = this.#valueSlot(); - const path5 = this.#reportedPath(slot); - this.#string = { target: "value", slot, text: "", escape: "", path: path5, change: void 0 }; - this.#place(slot, ""); - if (path5 !== void 0) - this.#string.change = this.#report({ kind: "set", path: path5, value: "" }); - } - /** The path of a value at `slot` in the innermost open container, when its changes are reported. */ - #reportedPath(slot) { - if (slot === void 0) - return void 0; - if (slot.kind === "root") - return []; - const frame = this.#stack.at(-1); - if (!frame.reportsInside) - return void 0; - return [...frame.path, slot.kind === "member" ? slot.key : slot.index]; - } - #report(change) { - this.#changes.push(change); - return change; - } - /** Continue an escape with `char`; returns false when `char` is not part of it and must be read normally. */ - #continueEscape(open, char) { - if (open.escape === "\\") { - const decoded = SIMPLE_ESCAPES[char]; - if (decoded !== void 0) { - open.escape = ""; - this.#appendString(open, decoded); - return true; - } - if (char === "u") { - open.escape = "\\u"; - return true; - } - open.escape = ""; - this.#appendString(open, "\\"); - return false; - } - if (isHexDigit(char)) { - open.escape += char; - if (open.escape.length < 6) - return true; - const decoded = String.fromCharCode(Number.parseInt(open.escape.slice(2), 16)); - open.escape = ""; - this.#appendString(open, decoded); - return true; - } - const literal = open.escape; - open.escape = ""; - this.#appendString(open, literal); - return false; - } - #appendString(open, text) { - open.text += text; - if (open.target !== "value") - return; - this.#place(open.slot, open.text); - if (open.path === void 0) - return; - const change = open.change; - if (change !== void 0 && this.#changes.at(-1) === change) { - if (change.kind === "set") - change.value = change.value + text; - else - change.text += text; - return; - } - open.change = this.#report({ kind: "append", path: open.path, text }); - } - #endString(open) { - this.#string = void 0; - const frame = this.#stack.at(-1); - if (open.target === "key") { - if (frame === void 0) - return; - frame.key = open.text; - frame.phase = "colon"; - return; - } - this.#valueEnded(frame); - } - #endScalar() { - const token = this.#scalar; - const slot = this.#scalarSlot; - this.#scalar = ""; - this.#scalarSlot = void 0; - const value2 = scalarValue(token); - if (value2 !== void 0) { - this.#place(slot, value2); - const path5 = this.#reportedPath(slot); - if (path5 !== void 0) - this.#report({ kind: "set", path: path5, value: value2 }); - } - this.#valueEnded(this.#stack.at(-1)); - } - /** The value of the unterminated scalar at the end of the text, if it shows. */ - #pendingScalar() { - const slot = this.#scalarSlot; - const token = this.#scalar; - if (slot === void 0 || token === "" || token.length > MAX_PENDING_SCALAR_LENGTH) - return void 0; - const value2 = pendingScalarValue(token); - return value2 === void 0 ? void 0 : { slot, value: value2 }; - } - #openContainer(container) { - const slot = this.#valueSlot(); - const path5 = this.#reportedPath(slot); - this.#place(slot, container); - this.#stack.push({ - container, - slot, - path: path5, - reportsInside: path5 !== void 0 && path5.length < MAX_REPORTED_DEPTH, - size: 0, - key: void 0, - phase: Array.isArray(container) ? "value" : "key" - }); - this.#pathCost += 1; - this.#dirty = true; - if (path5 !== void 0) - this.#report({ kind: "set", path: path5, value: Array.isArray(container) ? [] : {} }); - } - #closeContainer() { - const frame = this.#stack.pop(); - if (frame === void 0) - return; - this.#pathCost -= frame.size + 1; - this.#dirty = true; - if (frame.path !== void 0 && !frame.reportsInside) { - this.#report({ kind: "set", path: frame.path, value: frame.container }); - } - this.#valueEnded(this.#stack.at(-1)); - } - /** A value in `frame`, or the root value when there is no frame, has ended. */ - #valueEnded(frame) { - if (frame === void 0) { - if (this.#root !== void 0) - this.#done = true; - return; - } - frame.phase = "comma"; - } - /** Set the value at `slot` in the open path; nothing for a value in an invalid position. */ - #place(slot, value2) { - if (slot === void 0) - return; - this.#dirty = true; - if (slot.kind === "root") { - this.#root = value2; - return; - } - const frame = this.#stack.at(-1); - if (slot.kind === "element") { - const elements = frame.container; - if (slot.index === elements.length) { - frame.size++; - this.#pathCost++; - } - elements[slot.index] = value2; - return; - } - const members = frame.container; - if (!Object.hasOwn(members, slot.key)) { - frame.size++; - this.#pathCost++; - } - setMember(members, slot.key, value2); - } - /** A fresh snapshot: copies of the open containers, innermost first, each holding the copy of its open child. */ - #copyOpenPath(pending) { - if (this.#stack.length === 0) - return pending?.slot.kind === "root" ? pending.value : this.#root; - let child; - let childSlot; - for (let depth = this.#stack.length - 1; depth >= 0; depth--) { - const frame = this.#stack[depth]; - const copy2 = Array.isArray(frame.container) ? frame.container.slice() : { ...frame.container }; - if (depth === this.#stack.length - 1 && pending !== void 0) - setSlot(copy2, pending.slot, pending.value); - if (child !== void 0 && childSlot !== void 0) - setSlot(copy2, childSlot, child); - child = copy2; - childSlot = frame.slot; - } - return childSlot?.kind === "root" ? child : this.#root; - } - }; - ToolCallArgumentsStream = class { - #text = ""; - #parser = new StreamingJsonParser(); - #snapshot = void 0; - #arguments = {}; - /** The raw argument text received so far. */ - get text() { - return this.#text; - } - /** Append a piece of argument text; returns the partial arguments, a new object whenever they changed. */ - append(delta) { - this.#text += delta; - this.#parser.append(delta); - return this.#partial(); - } - /** - * Take the provider's complete argument text. When it continues the text so far, returns the missing piece as - * `delta`; otherwise starts over with `text`. Either way returns the partial arguments of `text`. - */ - replace(text) { - if (text.startsWith(this.#text)) { - const delta = text.slice(this.#text.length); - return { delta, arguments: delta === "" ? this.#partial() : this.append(delta) }; - } - this.#text = ""; - this.#parser = new StreamingJsonParser(); - return { delta: void 0, arguments: this.append(text) }; - } - /** The final arguments: one full parse of the complete text, which reports malformed arguments. */ - finish() { - return parseToolCallArguments(this.#text); - } - #partial() { - const snapshot = this.#parser.snapshot(); - if (snapshot === this.#snapshot) - return this.#arguments; - this.#snapshot = snapshot; - this.#arguments = typeof snapshot === "object" && snapshot !== null && !Array.isArray(snapshot) ? snapshot : {}; - return this.#arguments; - } - }; - SIMPLE_ESCAPES = { - '"': '"', - "\\": "\\", - "/": "/", - b: "\b", - f: "\f", - n: "\n", - r: "\r", - t: " " - }; - } -}); - -// node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js -function isJsonSchemaObject(value2) { - return typeof value2 === "object" && value2 !== null && !Array.isArray(value2); -} -function isStructuredSchema(schema4) { - if (!isJsonSchemaObject(schema4)) - return false; - const types = typeof schema4.type === "string" ? [schema4.type] : Array.isArray(schema4.type) ? schema4.type : []; - return types.includes("object") || types.includes("array") || schema4.properties !== void 0 || schema4.items !== void 0; -} -function schemaAllowsNull(schema4) { - if (!isJsonSchemaObject(schema4)) - return false; - if (schema4.type === "null" || Array.isArray(schema4.type) && schema4.type.includes("null")) - return true; - if (schema4.const === null || Array.isArray(schema4.enum) && schema4.enum.includes(null)) - return true; - return Array.isArray(schema4.anyOf) && schema4.anyOf.some((variant) => schemaAllowsNull(variant)); -} -function makeJsonSchemaNodeStrict(schema4, isUnsupportedKeyword) { - if (!isJsonSchemaObject(schema4)) { - throw new UnsupportedStrictJsonSchemaError("boolean schemas are unsupported"); - } - for (const key of UNSUPPORTED_STRICT_SCHEMA_KEYS) { - if (schema4[key] !== void 0) { - throw new UnsupportedStrictJsonSchemaError(`${key} schemas are unsupported`); - } - } - if (isUnsupportedKeyword) { - for (const [key, value2] of Object.entries(schema4)) { - if (isUnsupportedKeyword(key, value2)) { - throw new UnsupportedStrictJsonSchemaError(`${key}: ${JSON.stringify(value2)} is unsupported`); - } - } - } - if (schema4.anyOf !== void 0) { - if (!Array.isArray(schema4.anyOf) || schema4.anyOf.length === 0) { - throw new UnsupportedStrictJsonSchemaError("anyOf must contain at least one schema"); - } - for (const variant of schema4.anyOf) { - if (isStructuredSchema(variant)) { - throw new UnsupportedStrictJsonSchemaError("object and array unions are unsupported"); - } - makeJsonSchemaNodeStrict(variant, isUnsupportedKeyword); - } - } - if (schema4.items !== void 0) { - if (Array.isArray(schema4.items)) { - throw new UnsupportedStrictJsonSchemaError("tuple schemas are unsupported"); - } - makeJsonSchemaNodeStrict(schema4.items, isUnsupportedKeyword); - } - const isObjectSchema = schema4.type === "object"; - if (schema4.properties !== void 0 && !isObjectSchema) { - throw new UnsupportedStrictJsonSchemaError("properties require type object"); - } - if (!isObjectSchema) - return; - if (schema4.additionalProperties !== void 0 && schema4.additionalProperties !== false) { - throw new UnsupportedStrictJsonSchemaError("schema-valued or true additionalProperties is unsupported"); - } - if (schema4.properties !== void 0 && !isJsonSchemaObject(schema4.properties)) { - throw new UnsupportedStrictJsonSchemaError("object properties must be a schema map"); - } - if (schema4.required !== void 0 && (!Array.isArray(schema4.required) || schema4.required.some((key) => typeof key !== "string"))) { - throw new UnsupportedStrictJsonSchemaError("object required must be a string array"); - } - const properties = schema4.properties ?? {}; - const propertyNames = Object.keys(properties); - const required = new Set(Array.isArray(schema4.required) ? schema4.required : []); - if ([...required].some((key) => !propertyNames.includes(key))) { - throw new UnsupportedStrictJsonSchemaError("required contains an unknown property"); - } - for (const [key, property] of Object.entries(properties)) { - makeJsonSchemaNodeStrict(property, isUnsupportedKeyword); - if (!required.has(key) && !schemaAllowsNull(property)) { - properties[key] = { anyOf: [property, { type: "null" }] }; - } - } - schema4.required = propertyNames; - schema4.additionalProperties = false; -} -function makeStrictJsonSchema(schema4, isUnsupportedKeyword) { - const cloned = structuredClone(schema4); - if (!isJsonSchemaObject(cloned)) { - throw new UnsupportedStrictJsonSchemaError("root schema must have type object"); - } - makeJsonSchemaNodeStrict(cloned, isUnsupportedKeyword); - if (cloned.type !== "object") { - throw new UnsupportedStrictJsonSchemaError("root schema must have type object"); - } - return cloned; -} -function prefersJsonSchemaStrictSampling(tool) { - const config2 = tool.constrainedSampling; - return !!config2 && config2.type === "json_schema" && config2.strict === "prefer"; -} -function isStrictToolLimitErrorMessage(message) { - return STRICT_TOOL_LIMIT_ERROR_MESSAGES.some((limitMessage) => message.includes(limitMessage)); -} -function getJsonSchemaToolParameters(tool, strict) { - return strict === true ? makeStrictJsonSchema(tool.parameters) : tool.parameters; -} -function getGrammarToolInput(toolName2, arguments_, inputProperty) { - const input = arguments_[inputProperty]; - if (typeof input !== "string") { - throw new Error(`Grammar tool call "${toolName2}" requires argument "${inputProperty}" to be a string.`); - } - return input; -} -function appendGrammarToolInputJsonDelta(buffer, inputProperty, inputDelta) { - if (buffer.closed) { - throw new Error(`grammar tool input for property "${inputProperty}" changed after it was closed`); - } - if (inputDelta.length === 0) - return void 0; - buffer.input += inputDelta; - return grammarToolInputJsonStart(buffer, inputProperty) + JSON.stringify(inputDelta).slice(1, -1); -} -function closeGrammarToolInputJson(buffer, inputProperty, finalInput) { - if (buffer.closed) { - if (finalInput === void 0 || finalInput === buffer.input) - return void 0; - throw new Error(`grammar tool input for property "${inputProperty}" changed after it was closed`); - } - if (finalInput !== void 0 && !finalInput.startsWith(buffer.input)) { - throw new Error(`grammar tool input for property "${inputProperty}" changed non-monotonically`); - } - const rest = finalInput === void 0 ? "" : finalInput.slice(buffer.input.length); - if (finalInput !== void 0) - buffer.input = finalInput; - buffer.closed = true; - return `${grammarToolInputJsonStart(buffer, inputProperty)}${JSON.stringify(rest).slice(1, -1)}"}`; -} -function grammarToolInputJsonStart(buffer, inputProperty) { - if (buffer.started) - return ""; - buffer.started = true; - return `{${JSON.stringify(inputProperty)}:"`; -} -function inferGrammarInputProperty(tool) { - const schema4 = tool.parameters; - if (schema4.type !== "object") { - throw new Error("grammar constrained sampling requires an object parameter schema"); - } - if (!Array.isArray(schema4.required) || schema4.required.length !== 1 || typeof schema4.required[0] !== "string") { - throw new Error("grammar constrained sampling requires exactly one required string property"); - } - const inputProperty = schema4.required[0]; - if (!schema4.properties?.[inputProperty]) { - throw new Error(`grammar constrained sampling requires a properties entry for ${inputProperty}`); - } - if (schema4.properties[inputProperty]?.type !== "string") { - throw new Error(`grammar constrained sampling property ${inputProperty} must have type string`); - } - return inputProperty; -} -function resolveJsonSchemaStrictSampling(tool, supportsStrictMode, isUnsupportedKeyword) { - const config2 = tool.constrainedSampling; - if (!config2 || config2.type !== "json_schema") - return void 0; - if (supportsStrictMode) { - try { - makeStrictJsonSchema(tool.parameters, isUnsupportedKeyword); - return true; - } catch (error) { - if (!(error instanceof UnsupportedStrictJsonSchemaError)) - throw error; - if (config2.strict !== "require") - return void 0; - throw new Error(`Tool "${tool.name}" requires JSON-schema constrained sampling, but ${error.message}.`); - } - } - if (config2.strict === "require") { - throw new Error(`Tool "${tool.name}" requires JSON-schema constrained sampling, but strict tools are unsupported.`); - } - return void 0; -} -function resolveGrammarConstrainedSampling(tool, supportsOpenAIGrammarTools) { - const config2 = tool.constrainedSampling; - if (!config2 || config2.type !== "grammar") { - return void 0; - } - if (!supportsOpenAIGrammarTools) { - return void 0; - } - const larkDefinition = config2.variants.openai_lark; - const regexDefinition = config2.variants.openai_regex; - const hasLarkDefinition = typeof larkDefinition === "string" && larkDefinition.trim().length > 0; - const hasRegexDefinition = typeof regexDefinition === "string" && regexDefinition.trim().length > 0; - if (!hasLarkDefinition && !hasRegexDefinition) { - throw new Error(`Tool "${tool.name}" cannot use grammar constrained sampling: no supported grammar variant was provided.`); - } - try { - return { - format: hasLarkDefinition ? "lark" : "regex", - definition: hasLarkDefinition ? larkDefinition : regexDefinition, - inputProperty: inferGrammarInputProperty(tool) - }; - } catch (error) { - const message = error instanceof Error ? error.message : String(error); - throw new Error(`Tool "${tool.name}" cannot use grammar constrained sampling: ${message}.`); - } -} -function createGrammarToolInputProperties(tools, supportsOpenAIGrammarTools) { - const properties = /* @__PURE__ */ new Map(); - for (const tool of tools ?? []) { - const grammar = resolveGrammarConstrainedSampling(tool, supportsOpenAIGrammarTools); - if (grammar) { - properties.set(tool.name, grammar.inputProperty); - } - } - return properties; -} -var UnsupportedStrictJsonSchemaError, UNSUPPORTED_STRICT_SCHEMA_KEYS, STRICT_TOOL_LIMIT_ERROR_MESSAGES; -var init_constrained_sampling = __esm({ - "node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js"() { - UnsupportedStrictJsonSchemaError = class extends Error { - }; - UNSUPPORTED_STRICT_SCHEMA_KEYS = [ - "$ref", - "$defs", - "definitions", - "allOf", - "oneOf", - "patternProperties", - "dependentSchemas", - "dependencies", - "unevaluatedProperties", - "propertyNames", - "contains", - "prefixItems", - "not", - "if", - "then", - "else" - ]; - STRICT_TOOL_LIMIT_ERROR_MESSAGES = [ - "The compiled grammar is too large", - "Too many strict tools (", - "Schemas contains too many parameters with union types (" - ]; - } -}); - -// node_modules/@earendil-works/pi-ai/dist/api/github-copilot-headers.js -function inferCopilotInitiator(messages) { - const last = messages[messages.length - 1]; - return last && last.role !== "user" ? "agent" : "user"; -} -function hasCopilotVisionInput(messages) { - return messages.some((msg) => { - if (msg.role === "user" && Array.isArray(msg.content)) { - return msg.content.some((c) => c.type === "image"); - } - if (msg.role === "toolResult" && Array.isArray(msg.content)) { - return msg.content.some((c) => c.type === "image"); - } - return false; - }); -} -function buildCopilotDynamicHeaders(params) { - const headers = { - "X-Initiator": inferCopilotInitiator(params.messages), - "Openai-Intent": "conversation-edits" - }; - if (params.hasImages) { - headers["Copilot-Vision-Request"] = "true"; - } - return headers; -} -var init_github_copilot_headers = __esm({ - "node_modules/@earendil-works/pi-ai/dist/api/github-copilot-headers.js"() { - } -}); - -// node_modules/@earendil-works/pi-ai/dist/utils/estimate.js -function calculateContextTokens(usage) { - return usage.totalTokens || usage.input + usage.output + usage.cacheRead + usage.cacheWrite; -} -function safeJsonStringify(value2) { - try { - return JSON.stringify(value2) ?? "undefined"; - } catch { - return "[unserializable]"; - } -} -function estimateTextAndImageContentChars(content) { - if (typeof content === "string") - return content.length; - let chars = 0; - for (const block of content) - chars += block.type === "text" ? block.text.length : ESTIMATED_IMAGE_CHARS; - return chars; -} -function estimateTextTokens(text) { - return Math.ceil(text.length / CHARS_PER_TOKEN); -} -function estimateTextAndImageContentTokens(content) { - return Math.ceil(estimateTextAndImageContentChars(content) / CHARS_PER_TOKEN); -} -function estimateMessageTokens(message) { - let chars = 0; - if (message.role === "system") { - return estimateTextTokens(getSystemMessageText(message)) + estimateToolsTokens(message.toolsAdded) + estimateToolsTokens(message.toolsRemoved); - } - if (message.role === "user") - return estimateTextAndImageContentTokens(message.content); - if (message.role === "toolResult") - return estimateTextAndImageContentTokens(message.content); - for (const block of message.content) { - if (block.type === "text") { - chars += block.text.length; - } else if (block.type === "thinking") { - chars += block.thinking.length; - } else { - chars += block.name.length + safeJsonStringify(block.arguments).length; - } - } - return Math.ceil(chars / CHARS_PER_TOKEN); -} -function getLastAssistantUsageInfo(messages) { - let latestPrefixTimestamp = Number.NEGATIVE_INFINITY; - let usageInfo; - for (let i = 0; i < messages.length; i++) { - const message = messages[i]; - if (message.role === "assistant") { - const assistant = message; - const usageAppliesToPrefix = assistant.timestamp >= latestPrefixTimestamp; - if (usageAppliesToPrefix && assistant.stopReason !== "aborted" && assistant.stopReason !== "error" && calculateContextTokens(assistant.usage) > 0) { - usageInfo = { usage: assistant.usage, index: i }; - } - } - latestPrefixTimestamp = Math.max(latestPrefixTimestamp, message.timestamp); - } - return usageInfo; -} -function estimateContextTokens(context) { - const messages = "messages" in context ? context.messages : context; - const usageInfo = getLastAssistantUsageInfo(messages); - if (usageInfo) { - const usageTokens = calculateContextTokens(usageInfo.usage); - let trailingTokens = 0; - for (let i = usageInfo.index + 1; i < messages.length; i++) { - trailingTokens += estimateMessageTokens(messages[i]); - } - return { tokens: usageTokens + trailingTokens, usageTokens, trailingTokens, lastUsageIndex: usageInfo.index }; - } - let tokens = 0; - for (const message of messages) - tokens += estimateMessageTokens(message); - return { tokens, usageTokens: 0, trailingTokens: tokens, lastUsageIndex: null }; -} -function estimateToolsTokens(tools) { - if (!tools || tools.length === 0) - return 0; - return estimateTextTokens(safeJsonStringify(tools)); -} -var CHARS_PER_TOKEN, ESTIMATED_IMAGE_CHARS; -var init_estimate = __esm({ - "node_modules/@earendil-works/pi-ai/dist/utils/estimate.js"() { - init_text(); - CHARS_PER_TOKEN = 3.5; - ESTIMATED_IMAGE_CHARS = 4800; - } -}); - -// node_modules/@earendil-works/pi-ai/dist/api/simple-options.js -function clampMaxTokensToContext(model2, context, maxTokens) { - if (model2.contextWindow <= 0) - return Math.max(MIN_MAX_TOKENS, maxTokens); - const available = model2.contextWindow - estimateContextTokens(context).tokens - CONTEXT_SAFETY_TOKENS; - return Math.min(maxTokens, Math.max(MIN_MAX_TOKENS, available)); -} -function resolveSamplingParams(model2, thinkingLevel, requestParams) { - const effectiveThinkingLevel = clampThinkingLevel(model2, thinkingLevel); - const thinkingLevelParams = model2.samplingParamsByThinkingLevel?.[effectiveThinkingLevel]; - return model2.samplingParams || thinkingLevelParams || requestParams ? { ...model2.samplingParams, ...thinkingLevelParams, ...requestParams } : void 0; -} -function buildBaseOptions(model2, context, options, apiKey) { - const samplingParams = resolveSamplingParams(model2, options?.reasoning ?? "off", options?.samplingParams); - return { - temperature: options?.temperature, - samplingParams, - maxTokens: clampMaxTokensToContext(model2, context, options?.maxTokens ?? model2.maxTokens), - signal: options?.signal, - telemetry: options?.telemetry, - apiKey: apiKey || options?.apiKey, - fetch: options?.fetch, - transport: options?.transport, - cacheRetention: options?.cacheRetention, - sessionId: options?.sessionId, - headers: options?.headers, - identity: options?.identity, - onPayload: options?.onPayload, - onResponse: options?.onResponse, - onProviderStreamEvent: options?.onProviderStreamEvent, - timeoutMs: options?.timeoutMs, - websocketConnectTimeoutMs: options?.websocketConnectTimeoutMs, - maxRetries: options?.maxRetries, - maxRetryDelayMs: options?.maxRetryDelayMs, - metadata: options?.metadata, - env: options?.env - }; -} -function clampReasoning(effort) { - return effort === "xhigh" || effort === "max" ? "high" : effort; -} -function thinkingBudgetForLevel(reasoningLevel, customBudgets) { - const budgets = { ...DEFAULT_THINKING_BUDGETS, ...customBudgets }; - const level = clampReasoning(reasoningLevel); - return budgets[level]; -} -function clampThinkingBudgetToAnswerRoom(thinkingBudget, ceiling) { - return Math.min(thinkingBudget, Math.max(0, ceiling - MIN_ANSWER_TOKENS)); -} -function adjustMaxTokensForThinking(baseMaxTokens, modelMaxTokens, reasoningLevel, customBudgets) { - let thinkingBudget = thinkingBudgetForLevel(reasoningLevel, customBudgets); - const maxTokens = baseMaxTokens === void 0 ? modelMaxTokens : Math.min(baseMaxTokens + thinkingBudget, modelMaxTokens); - if (maxTokens <= thinkingBudget) { - thinkingBudget = clampThinkingBudgetToAnswerRoom(thinkingBudget, maxTokens); - } - return { maxTokens, thinkingBudget }; -} -var CONTEXT_SAFETY_TOKENS, MIN_MAX_TOKENS, MIN_ANSWER_TOKENS, DEFAULT_THINKING_BUDGETS; -var init_simple_options = __esm({ - "node_modules/@earendil-works/pi-ai/dist/api/simple-options.js"() { - init_models(); - init_estimate(); - CONTEXT_SAFETY_TOKENS = 4096; - MIN_MAX_TOKENS = 1; - MIN_ANSWER_TOKENS = 1024; - DEFAULT_THINKING_BUDGETS = { - minimal: 1024, - low: 2048, - medium: 8192, - high: 16384 - }; - } -}); - -// node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js -function splitErrorToolResultImages(msg) { - if (!msg.isError) - return void 0; - const images = msg.content.filter((block) => block.type === "image"); - if (images.length === 0) - return void 0; - return { - content: replaceImagesWithPlaceholder(msg.content, ERROR_TOOL_IMAGE_PLACEHOLDER), - caption: `Images from the error result of tool call ${msg.toolCallId} (${msg.toolName}):`, - images - }; -} -function replaceImagesWithPlaceholder(content, placeholder) { - const result = []; - let previousWasPlaceholder = false; - for (const block of content) { - if (block.type === "image") { - if (!previousWasPlaceholder) { - result.push({ type: "text", text: placeholder }); - } - previousWasPlaceholder = true; - continue; - } - result.push(block); - previousWasPlaceholder = block.text === placeholder; - } - return result; -} -function downgradeUnsupportedImages(messages, model2) { - if (model2.input.includes("image")) { - return messages; - } - return messages.map((msg) => { - if (msg.role === "user" && Array.isArray(msg.content)) { - return { - ...msg, - content: replaceImagesWithPlaceholder(msg.content, NON_VISION_USER_IMAGE_PLACEHOLDER) - }; - } - if (msg.role === "toolResult") { - return { - ...msg, - content: replaceImagesWithPlaceholder(msg.content, NON_VISION_TOOL_IMAGE_PLACEHOLDER) - }; - } - return msg; - }); -} -function transformMessages(messages, model2, normalizeToolCallId2) { - const toolCallIdMap = /* @__PURE__ */ new Map(); - const normalizedMessages = messages.map((msg) => msg.content == null ? { ...msg, content: [] } : msg); - const imageAwareMessages = downgradeUnsupportedImages(normalizedMessages, model2); - const transformed = imageAwareMessages.map((msg) => { - if (msg.role === "system" || msg.role === "user") { - return msg; - } - if (msg.role === "toolResult") { - const normalizedId = toolCallIdMap.get(msg.toolCallId); - if (normalizedId && normalizedId !== msg.toolCallId) { - return { ...msg, toolCallId: normalizedId }; - } - return msg; - } - if (msg.role === "assistant") { - const assistantMsg = msg; - const isSameModel = assistantMsg.provider === model2.provider && assistantMsg.api === model2.api && assistantMsg.model === model2.id; - const transformedContent = assistantMsg.content.flatMap((block) => { - if (block.type === "thinking") { - if (!isSameModel) - return []; - if (block.redacted || block.thinkingSignature) - return block; - if (!block.thinking || block.thinking.trim() === "") - return []; - return block; - } - if (block.type === "text") { - if (isSameModel) - return block; - return { - type: "text", - text: block.text - }; - } - if (block.type === "toolCall") { - const toolCall = block; - let normalizedToolCall = toolCall; - if (!isSameModel && toolCall.thoughtSignature) { - normalizedToolCall = { ...toolCall }; - delete normalizedToolCall.thoughtSignature; - } - if (!isSameModel && normalizeToolCallId2) { - const normalizedId = normalizeToolCallId2(toolCall.id, model2, assistantMsg); - if (normalizedId !== toolCall.id) { - toolCallIdMap.set(toolCall.id, normalizedId); - normalizedToolCall = { ...normalizedToolCall, id: normalizedId }; - } - } - return normalizedToolCall; - } - return block; - }); - return { - ...assistantMsg, - content: transformedContent - }; - } - return msg; - }); - const result = []; - let pendingToolCalls = []; - let existingToolResultIds = /* @__PURE__ */ new Set(); - const heldSystemMessages = []; - const closePendingToolCalls = () => { - if (pendingToolCalls.length > 0) { - for (const tc of pendingToolCalls) { - if (!existingToolResultIds.has(tc.id)) { - result.push({ - role: "toolResult", - toolCallId: tc.id, - toolName: tc.name, - content: [{ type: "text", text: "No result provided" }], - isError: true, - timestamp: Date.now() - }); - } - } - pendingToolCalls = []; - existingToolResultIds = /* @__PURE__ */ new Set(); - } - result.push(...heldSystemMessages); - heldSystemMessages.length = 0; - }; - for (let i = 0; i < transformed.length; i++) { - const msg = transformed[i]; - if (msg.role === "assistant") { - closePendingToolCalls(); - const assistantMsg = msg; - if (assistantMsg.stopReason === "error" || assistantMsg.stopReason === "aborted") { - continue; - } - const toolCalls = assistantMsg.content.filter((b) => b.type === "toolCall"); - if (toolCalls.length > 0) { - pendingToolCalls = toolCalls; - existingToolResultIds = /* @__PURE__ */ new Set(); - } - result.push(msg); - } else if (msg.role === "toolResult") { - existingToolResultIds.add(msg.toolCallId); - result.push(msg); - } else if (msg.role === "system") { - if (pendingToolCalls.length > 0) { - heldSystemMessages.push(msg); - } else { - result.push(msg); - } - } else if (msg.role === "user") { - closePendingToolCalls(); - result.push(msg); - } else { - result.push(msg); - } - } - closePendingToolCalls(); - return result; -} -var NON_VISION_USER_IMAGE_PLACEHOLDER, NON_VISION_TOOL_IMAGE_PLACEHOLDER, ERROR_TOOL_IMAGE_PLACEHOLDER; -var init_transform_messages = __esm({ - "node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js"() { - NON_VISION_USER_IMAGE_PLACEHOLDER = "(image omitted: model does not support images)"; - NON_VISION_TOOL_IMAGE_PLACEHOLDER = "(tool image omitted: model does not support images)"; - ERROR_TOOL_IMAGE_PLACEHOLDER = "(image attached after the tool results)"; - } -}); - -// node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js -var anthropic_messages_exports = {}; -__export(anthropic_messages_exports, { - stream: () => stream2, - streamSimple: () => streamSimple -}); -function resolveCacheRetention(cacheRetention, env) { - if (cacheRetention) { - return cacheRetention; - } - if (getProviderEnvValue("PI_CACHE_RETENTION", env) === "long") { - return "long"; - } - return "short"; -} -function getCacheControl(model2, cacheRetention, env) { - const retention = resolveCacheRetention(cacheRetention, env); - if (retention === "none") { - return { retention }; - } - const ttl = retention === "long" && getAnthropicCompat(model2).supportsLongCacheRetention ? "1h" : void 0; - return { - retention, - cacheControl: { type: "ephemeral", ...ttl && { ttl } } - }; -} -function convertImageBlock(image) { - return { - type: "image", - source: { - type: "base64", - media_type: image.mimeType, - data: image.data - } - }; -} -function convertContentBlocks(content) { - const hasImages = content.some((c) => c.type === "image"); - if (!hasImages) { - return sanitizeSurrogates(content.map((c) => c.text).join("\n")); - } - const blocks = content.map((block) => { - if (block.type === "text") { - return { - type: "text", - text: sanitizeSurrogates(block.text) - }; - } - return convertImageBlock(block); - }); - const hasText = blocks.some((b) => b.type === "text"); - if (!hasText) { - blocks.unshift({ - type: "text", - text: "(see attached image)" - }); - } - return blocks; -} -function shouldUseServerSideFallbackBeta(model2) { - return (model2.compat?.allowedFallbackModels?.length ?? 0) > 0; -} -function getAnthropicCompat(model2) { - const isOpenRouter2 = model2.provider === "openrouter" || model2.baseUrl.includes("openrouter.ai"); - return { - supportsEagerToolInputStreaming: model2.compat?.supportsEagerToolInputStreaming ?? true, - supportsLongCacheRetention: model2.compat?.supportsLongCacheRetention ?? true, - sendSessionAffinityHeaders: model2.compat?.sendSessionAffinityHeaders ?? isOpenRouter2, - sessionAffinityFormat: model2.compat?.sessionAffinityFormat ?? (isOpenRouter2 ? "openrouter" : void 0), - supportsCacheControlOnTools: model2.compat?.supportsCacheControlOnTools ?? true, - supportsTemperature: model2.compat?.supportsTemperature ?? true, - allowEmptySignature: model2.compat?.allowEmptySignature ?? false, - supportsStrictTools: model2.compat?.supportsStrictTools ?? false, - supportsMidConvoSystemMessages: model2.compat?.supportsMidConvoSystemMessages ?? false, - supportsMidConvoToolChanges: model2.compat?.supportsMidConvoToolChanges ?? false - }; -} -function mergeHeaders2(...headerSources) { - const merged = {}; - for (const headers of headerSources) { - if (headers) { - Object.assign(merged, headers); - } - } - return merged; -} -function hasHeader(headers, name) { - if (!headers) - return false; - const expected = name.toLowerCase(); - for (const [key, value2] of Object.entries(headers)) { - if (key.toLowerCase() === expected && value2 !== null && value2.trim().length > 0) - return true; - } - return false; -} -function hasRequestAuth(apiKey, headers) { - return !!apiKey || hasHeader(headers, "authorization") || hasHeader(headers, "x-api-key") || hasHeader(headers, "cf-aig-authorization"); -} -function assertRequestAuth(provider2, apiKey, headers) { - if (!hasRequestAuth(apiKey, headers)) - throw new Error(`No API key for provider: ${provider2}`); -} -function getAnthropicFederation(model2, apiKey, headers, env) { - if (model2.provider !== "anthropic" || hasRequestAuth(apiKey, headers)) - return void 0; - const federationRuleId = getProviderEnvValue(ANTHROPIC_FEDERATION_RULE_ID_ENV, env); - const organizationId = getProviderEnvValue(ANTHROPIC_ORGANIZATION_ID_ENV, env); - const identityTokenFile = getProviderEnvValue(ANTHROPIC_IDENTITY_TOKEN_FILE_ENV, env); - if (!federationRuleId || !organizationId || !identityTokenFile) - return void 0; - return { - organization_id: organizationId, - workspace_id: getProviderEnvValue(ANTHROPIC_WORKSPACE_ID_ENV, env), - authentication: { - type: "oidc_federation", - federation_rule_id: federationRuleId, - service_account_id: getProviderEnvValue(ANTHROPIC_SERVICE_ACCOUNT_ID_ENV, env), - identity_token: { source: "file", path: identityTokenFile } - } - }; -} -function flushSseEvent(state2) { - if (!state2.event && state2.data.length === 0) { - return null; - } - const event = { - event: state2.event, - data: state2.data.join("\n"), - raw: [...state2.raw] - }; - state2.event = null; - state2.data = []; - state2.raw = []; - return event; -} -function decodeSseLine(line, state2) { - if (line === "") { - return flushSseEvent(state2); - } - state2.raw.push(line); - if (line.startsWith(":")) { - return null; - } - const delimiterIndex = line.indexOf(":"); - const fieldName = delimiterIndex === -1 ? line : line.slice(0, delimiterIndex); - let value2 = delimiterIndex === -1 ? "" : line.slice(delimiterIndex + 1); - if (value2.startsWith(" ")) { - value2 = value2.slice(1); - } - if (fieldName === "event") { - state2.event = value2; - } else if (fieldName === "data") { - state2.data.push(value2); - } - return null; -} -function nextLineBreakIndex(text) { - const carriageReturnIndex = text.indexOf("\r"); - const newlineIndex = text.indexOf("\n"); - if (carriageReturnIndex === -1) { - return newlineIndex; - } - if (newlineIndex === -1) { - return carriageReturnIndex; - } - return Math.min(carriageReturnIndex, newlineIndex); -} -function consumeLine(text) { - const lineBreakIndex = nextLineBreakIndex(text); - if (lineBreakIndex === -1) { - return null; - } - let nextIndex = lineBreakIndex + 1; - if (text[lineBreakIndex] === "\r" && text[nextIndex] === "\n") { - nextIndex += 1; - } - return { - line: text.slice(0, lineBreakIndex), - rest: text.slice(nextIndex) - }; -} -async function* iterateSseMessages(body, signal) { - const reader = body.getReader(); - const decoder3 = new TextDecoder(); - const state2 = { event: null, data: [], raw: [] }; - let buffer = ""; - try { - while (true) { - if (signal?.aborted) { - throw new Error("Request was aborted"); - } - const { value: value2, done } = await reader.read(); - if (done) { - break; - } - buffer += decoder3.decode(value2, { stream: true }); - let consumed2 = consumeLine(buffer); - while (consumed2) { - buffer = consumed2.rest; - const event = decodeSseLine(consumed2.line, state2); - if (event) { - yield event; - } - consumed2 = consumeLine(buffer); - } - } - buffer += decoder3.decode(); - let consumed = consumeLine(buffer); - while (consumed) { - buffer = consumed.rest; - const event = decodeSseLine(consumed.line, state2); - if (event) { - yield event; - } - consumed = consumeLine(buffer); - } - if (buffer.length > 0) { - const event = decodeSseLine(buffer, state2); - if (event) { - yield event; - } - } - const trailingEvent = flushSseEvent(state2); - if (trailingEvent) { - yield trailingEvent; - } - } finally { - reader.releaseLock(); - } -} -async function* iterateAnthropicEvents(response, signal) { - if (!response.body) { - throw new Error("Attempted to iterate over an Anthropic response with no body"); - } - let sawMessageStart = false; - let sawMessageEnd = false; - for await (const sse of iterateSseMessages(response.body, signal)) { - if (sse.event === "error") { - throw new Error(sse.data); - } - if (!ANTHROPIC_MESSAGE_EVENTS.has(sse.event ?? "")) { - continue; - } - try { - const event = parseJsonWithRepair(sse.data); - if (event.type === "message_start") { - sawMessageStart = true; - } else if (event.type === "message_stop") { - sawMessageEnd = true; - } - yield event; - } catch (error) { - const message = error instanceof Error ? error.message : String(error); - throw new Error(`Could not parse Anthropic SSE event ${sse.event}: ${message}; data=${sse.data}; raw=${sse.raw.join("\\n")}`); - } - } - if (sawMessageStart && !sawMessageEnd) { - throw new Error("Anthropic stream ended before message_stop"); - } -} -function mapThinkingLevelToEffort(model2, level) { - const mapped = level ? model2.thinkingLevelMap?.[level] : void 0; - if (typeof mapped === "string") - return mapped; - switch (level) { - case "minimal": - case "low": - return "low"; - case "medium": - return "medium"; - case "high": - return "high"; - default: - return "high"; - } -} -function isOAuthToken(apiKey) { - return apiKey.includes("sk-ant-oat"); -} -function createClient(model2, apiKey, optionsHeaders, fetch3, dynamicHeaders, sessionId, federation, identity) { - if (model2.provider === "github-copilot") { - const client2 = new PiAnthropic({ - apiKey: null, - authToken: apiKey ?? null, - baseURL: model2.baseUrl, - dangerouslyAllowBrowser: true, - fetch: fetch3, - defaultHeaders: mergeHeaders2(getIdentityHeaders(model2, identity), { - accept: "application/json", - "anthropic-dangerous-direct-browser-access": "true" - }, model2.headers, dynamicHeaders, optionsHeaders) - }); - return { client: client2, isOAuthToken: false }; - } - if (apiKey && isOAuthToken(apiKey)) { - const client2 = new PiAnthropic({ - apiKey: null, - authToken: apiKey, - baseURL: model2.baseUrl, - dangerouslyAllowBrowser: true, - fetch: fetch3, - defaultHeaders: mergeHeaders2({ - accept: "application/json", - "anthropic-dangerous-direct-browser-access": "true", - "user-agent": `claude-cli/${claudeCodeVersion}`, - "x-app": "cli" - }, model2.headers, optionsHeaders) - }); - return { client: client2, isOAuthToken: true }; - } - const compat = getAnthropicCompat(model2); - const sessionAffinityHeaders = {}; - if (sessionId && compat.sendSessionAffinityHeaders) { - const header = compat.sessionAffinityFormat === "openrouter" ? "x-session-id" : "x-session-affinity"; - sessionAffinityHeaders[header] = sessionId; - } - const defaultHeaders = mergeHeaders2(getIdentityHeaders(model2, identity), { - accept: "application/json", - "anthropic-dangerous-direct-browser-access": "true" - }, sessionAffinityHeaders, model2.headers, optionsHeaders); - if (federation) { - const key = JSON.stringify([model2.baseUrl, federation]); - if (federationClient?.key !== key || federationClient.fetch !== fetch3) { - const client2 = new PiAnthropic({ - apiKey: null, - authToken: null, - config: federation, - baseURL: model2.baseUrl, - dangerouslyAllowBrowser: true, - fetch: fetch3 - }); - federationClient = { key, fetch: fetch3, client: client2 }; - } - return { client: federationClient.client.withOptions({ defaultHeaders }), isOAuthToken: false }; - } - const client = new PiAnthropic({ - apiKey: apiKey ?? null, - authToken: null, - baseURL: model2.baseUrl, - dangerouslyAllowBrowser: true, - fetch: fetch3, - defaultHeaders - }); - return { client, isOAuthToken: false }; -} -function getBetaFeatures(model2, context, isOAuthToken2, nativeToolChanges, options) { - let configuredFeatures; - for (const headers of [model2.headers, options?.headers]) { - for (const [name, value2] of Object.entries(headers ?? {})) { - if (name.toLowerCase() === "anthropic-beta") - configuredFeatures = value2; - } - } - if (configuredFeatures === null) - return []; - if (configuredFeatures !== void 0) { - return [ - ...new Set(configuredFeatures.split(",").map((feature) => feature.trim()).filter((feature) => feature.length > 0)) - ]; - } - const features = []; - if (isOAuthToken2) - features.push("claude-code-20250219", "oauth-2025-04-20"); - if (shouldUseFineGrainedToolStreamingBeta(model2, context)) - features.push(FINE_GRAINED_TOOL_STREAMING_BETA); - if (model2.reasoning && options?.thinkingEnabled === true && (options.interleavedThinking ?? true) && model2.compat?.forceAdaptiveThinking !== true) { - features.push(INTERLEAVED_THINKING_BETA); - } - if (shouldUseServerSideFallbackBeta(model2)) - features.push(SERVER_SIDE_FALLBACK_BETA); - if (model2.compat?.supportsMidConvoEffort === true) { - features.push(MID_CONVERSATION_OUTPUT_CONFIG_BETA, THINKING_BINDING_CONTROLS_BETA); - } - if (nativeToolChanges) - features.push(INLINE_TOOLS_BETA); - return [...new Set(features)]; -} -function buildParams(model2, context, isOAuthToken2, options, disablePreferredStrictTools = false) { - const { cacheControl } = getCacheControl(model2, options?.cacheRetention, options?.env); - const compat = getAnthropicCompat(model2); - const initialSystemMessage = getInitialSystemMessage(context.messages); - const initialSystemText = initialSystemMessage ? getSystemMessageText(initialSystemMessage) : ""; - const transformedMessages = transformMessages(context.messages, model2, normalizeToolCallId); - const conversationMessages = initialSystemMessage ? transformedMessages.slice(1) : transformedMessages; - let hasPreferredStrictTools = false; - const convertToolDefinitions = (tools, toolCacheControl2) => { - const definitions = convertTools(tools, isOAuthToken2, compat.supportsEagerToolInputStreaming, compat.supportsStrictTools, toolCacheControl2, disablePreferredStrictTools); - if (definitions.some((definition, index) => definition.strict === true && prefersJsonSchemaStrictSampling(tools[index]))) { - hasPreferredStrictTools = true; - } - return definitions; - }; - const initialTools = initialSystemMessage?.toolsAdded ?? []; - const nativeToolChanges = compat.supportsMidConvoSystemMessages && compat.supportsMidConvoToolChanges && initialTools.length > 0; - const thinkingDisabled = model2.reasoning && options?.thinkingEnabled === false && model2.thinkingLevelMap?.off !== null; - const effortMessages = model2.compat?.supportsMidConvoEffort === true && !thinkingDisabled; - const converted = convertMessages(conversationMessages, isOAuthToken2, cacheControl, compat.allowEmptySignature, effortMessages ? model2.provider : void 0, nativeToolChanges ? convertToolDefinitions : void 0); - const activeEffort = options?.effort ?? "high"; - const betaFeatures = getBetaFeatures(model2, context, isOAuthToken2, nativeToolChanges, options); - const params = { - model: model2.id, - messages: effortMessages ? insertThinkingLevelMessages(converted, activeEffort) : converted.messages, - max_tokens: options?.maxTokens ?? model2.maxTokens, - stream: true, - ...betaFeatures.length > 0 ? { betas: betaFeatures } : {} - }; - if (isOAuthToken2) { - params.system = [ - { - type: "text", - text: "You are Claude Code, Anthropic's official CLI for Claude.", - ...cacheControl ? { cache_control: cacheControl } : {} - } - ]; - if (initialSystemText) { - params.system.push({ - type: "text", - text: sanitizeSurrogates(initialSystemText), - ...cacheControl ? { cache_control: cacheControl } : {} - }); - } - } else if (initialSystemText) { - params.system = [ - { - type: "text", - text: sanitizeSurrogates(initialSystemText), - ...cacheControl ? { cache_control: cacheControl } : {} - } - ]; - } - if (options?.temperature !== void 0 && !options?.thinkingEnabled && model2.compat?.supportsMidConvoEffort !== true && compat.supportsTemperature) { - params.temperature = options.temperature; - } - const toolCacheControl = compat.supportsCacheControlOnTools ? cacheControl : void 0; - if (nativeToolChanges) { - params.tools = [...convertToolDefinitions(initialTools, toolCacheControl), DEFERRED_TOOL_PLACEHOLDER]; - } else { - const tools = getCurrentTools(context.messages); - if (tools.length > 0) { - params.tools = convertToolDefinitions(tools, toolCacheControl); - } - } - if (thinkingDisabled) { - params.thinking = { type: "disabled" }; - } else if (effortMessages) { - params.thinking = { - type: "adaptive", - display: options?.thinkingDisplay ?? "summarized", - block_binding: { prefix_mismatch_behavior: "drop_block" } - }; - params.output_config = { effort: "low" }; - } else if (model2.reasoning && options?.thinkingEnabled) { - const display = options.thinkingDisplay ?? "summarized"; - if (model2.compat?.forceAdaptiveThinking === true) { - params.thinking = { type: "adaptive", display }; - if (options.effort) { - params.output_config = { effort: options.effort }; - } - } else { - params.thinking = { - type: "enabled", - budget_tokens: options.thinkingBudgetTokens || 1024, - display - }; - } - } - if (options?.metadata) { - const userId = options.metadata.user_id; - if (typeof userId === "string") { - params.metadata = { user_id: userId }; - } - } - if (options?.toolChoice) { - if (typeof options.toolChoice === "string") { - params.tool_choice = { type: options.toolChoice }; - } else { - params.tool_choice = options.toolChoice; - } - } - const allowedFallbackModels = model2.compat?.allowedFallbackModels; - if (allowedFallbackModels && allowedFallbackModels.length > 0) { - params.fallbacks = allowedFallbackModels.map((fallback) => ({ model: fallback.model })); - } - return { params, hasPreferredStrictTools, providerThinkingLevel: effortMessages ? activeEffort : void 0 }; -} -function normalizeToolCallId(id) { - return id.replace(/[^a-zA-Z0-9_-]/g, "_").slice(0, 64); -} -function convertToolResult(msg, content = msg.content) { - return { - type: "tool_result", - tool_use_id: msg.toolCallId, - content: convertContentBlocks(content), - is_error: msg.isError - }; -} -function convertMessages(transformedMessages, isOAuthToken2, cacheControl, allowEmptySignature = false, managedProvider, convertToolDefinitions) { - const params = []; - const assistantLevels = /* @__PURE__ */ new Map(); - const pendingSystemMessages = []; - const flushPendingSystemMessages = () => { - params.push(...pendingSystemMessages); - pendingSystemMessages.length = 0; - }; - for (let i = 0; i < transformedMessages.length; i++) { - const msg = transformedMessages[i]; - if (msg.role === "system") { - const text = renderSystemMessageUpdate(msg); - const blocks = []; - if (text.length > 0) - blocks.push({ type: "text", text: sanitizeSurrogates(text) }); - if (convertToolDefinitions) { - const added = msg.toolsAdded ?? []; - const redefined = new Set(added.map((tool) => tool.name)); - for (const tool of msg.toolsRemoved ?? []) { - if (redefined.has(tool.name)) - continue; - blocks.push({ - type: "tool_removal", - tool: { type: "tool_reference", name: isOAuthToken2 ? toClaudeCodeName(tool.name) : tool.name } - }); - } - for (const definition of convertToolDefinitions(added)) { - blocks.push({ type: "tool_addition", tool: { type: "tool_definition", definition } }); - } - } - if (blocks.length > 0) - pendingSystemMessages.push({ role: "system", content: blocks }); - } else if (msg.role === "user") { - if (typeof msg.content === "string") { - if (msg.content.trim().length > 0) { - params.push({ - role: "user", - content: sanitizeSurrogates(msg.content) - }); - } - } else { - const blocks = msg.content.map((item) => { - if (item.type === "text") { - return { - type: "text", - text: sanitizeSurrogates(item.text) - }; - } else { - return convertImageBlock(item); - } - }); - const filteredBlocks = blocks.filter((b) => { - if (b.type === "text") { - return b.text.trim().length > 0; - } - return true; - }); - if (filteredBlocks.length === 0) - continue; - params.push({ - role: "user", - content: filteredBlocks - }); - } - } else if (msg.role === "assistant") { - const blocks = []; - for (const block of msg.content) { - if (block.type === "text") { - if (block.text.trim().length === 0) - continue; - blocks.push({ - type: "text", - text: sanitizeSurrogates(block.text) - }); - } else if (block.type === "thinking") { - if (block.redacted) { - blocks.push({ - type: "redacted_thinking", - data: block.thinkingSignature - }); - continue; - } - const thinkingSignature = block.thinkingSignature; - const hasThinkingSignature = !!thinkingSignature && thinkingSignature.trim().length > 0; - if (block.thinking.trim().length === 0 && !hasThinkingSignature) - continue; - if (!hasThinkingSignature) { - blocks.push(allowEmptySignature ? { - type: "thinking", - thinking: sanitizeSurrogates(block.thinking), - signature: "" - } : { - type: "text", - text: sanitizeSurrogates(block.thinking) - }); - } else { - blocks.push({ - type: "thinking", - thinking: sanitizeSurrogates(block.thinking), - signature: thinkingSignature - }); - } - } else if (block.type === "toolCall") { - blocks.push({ - type: "tool_use", - id: block.id, - name: isOAuthToken2 ? toClaudeCodeName(block.name) : block.name, - input: block.arguments ?? {} - }); - } - } - if (blocks.length === 0) - continue; - flushPendingSystemMessages(); - const messageIndex = params.length; - params.push({ - role: "assistant", - content: blocks - }); - if (managedProvider !== void 0 && msg.api === "anthropic-messages" && msg.provider === managedProvider && isAnthropicEffort(msg.providerThinkingLevel)) { - assistantLevels.set(messageIndex, msg.providerThinkingLevel); - } - } else if (msg.role === "toolResult") { - const toolResults = []; - const errorImages = []; - let j = i; - while (j < transformedMessages.length && transformedMessages[j].role === "toolResult") { - const toolMsg = transformedMessages[j]; - const split = splitErrorToolResultImages(toolMsg); - toolResults.push(convertToolResult(toolMsg, split?.content)); - if (split) { - errorImages.push({ type: "text", text: split.caption }, ...split.images.map(convertImageBlock)); - } - j++; - } - i = j - 1; - params.push({ - role: "user", - content: [...toolResults, ...errorImages] - }); - } - } - flushPendingSystemMessages(); - if (cacheControl && params.length > 0) { - const lastMessage = params[params.length - 1]; - if (lastMessage.role === "user" || lastMessage.role === "system") { - if (Array.isArray(lastMessage.content)) { - const lastBlock = lastMessage.content[lastMessage.content.length - 1]; - if (lastBlock && (lastBlock.type === "text" || lastBlock.type === "image" || lastBlock.type === "tool_result" || lastBlock.type === "tool_addition" || lastBlock.type === "tool_removal")) { - lastBlock.cache_control = cacheControl; - } - } else if (typeof lastMessage.content === "string") { - lastMessage.content = [ - { - type: "text", - text: lastMessage.content, - cache_control: cacheControl - } - ]; - } - } - } - return { messages: params, assistantLevels }; -} -function isAnthropicEffort(value2) { - return value2 === "low" || value2 === "medium" || value2 === "high" || value2 === "xhigh" || value2 === "max"; -} -function insertThinkingLevelMessages(converted, activeEffort) { - const messages = []; - for (let index = 0; index < converted.messages.length; index++) { - const historicalEffort = converted.assistantLevels.get(index); - if (historicalEffort !== void 0) { - messages.push({ role: "system", content: [], output_config: { effort: historicalEffort } }); - } - messages.push(converted.messages[index]); - } - messages.push({ role: "system", content: [], output_config: { effort: activeEffort } }); - return messages; -} -function shouldUseFineGrainedToolStreamingBeta(model2, context) { - return getCurrentTools(context.messages).length > 0 && !getAnthropicCompat(model2).supportsEagerToolInputStreaming; -} -function convertTools(tools, isOAuthToken2, supportsEagerToolInputStreaming, supportsStrictTools, cacheControl, disablePreferredStrictTools = false) { - if (!tools) - return []; - return tools.map((tool, index) => { - const strict = disablePreferredStrictTools && prefersJsonSchemaStrictSampling(tool) ? void 0 : resolveJsonSchemaStrictSampling(tool, supportsStrictTools, isAnthropicStrictUnsupportedKeyword); - const parameters = getJsonSchemaToolParameters(tool, strict); - const schema4 = parameters; - const legacyInputSchema = { - type: "object", - properties: schema4.properties ?? {}, - required: schema4.required ?? [] - }; - const inputSchema = strict === true ? { - ...parameters, - ...legacyInputSchema - } : legacyInputSchema; - return { - name: isOAuthToken2 ? toClaudeCodeName(tool.name) : tool.name, - description: tool.description, - ...supportsEagerToolInputStreaming ? { eager_input_streaming: true } : {}, - ...strict === true ? { strict: true } : {}, - input_schema: inputSchema, - ...cacheControl && index === tools.length - 1 ? { cache_control: cacheControl } : {} - }; - }); -} -function mapStopReason(reason, stopDetails) { - switch (reason) { - case "end_turn": - return { stopReason: "stop" }; - case "max_tokens": - return { stopReason: "length" }; - case "tool_use": - return { stopReason: "toolUse" }; - case "refusal": - return { - stopReason: "error", - errorMessage: stopDetails?.explanation || `The model refused to complete the request` - }; - case "pause_turn": - return { stopReason: "stop" }; - case "stop_sequence": - return { stopReason: "stop" }; - // We don't supply stop sequences, so this should never happen - case "sensitive": - return { stopReason: "error", errorMessage: "Provider stopped with: sensitive" }; - default: - throw new Error(`Unhandled stop reason: ${reason}`); - } -} -var claudeCodeVersion, claudeCodeTools, ccToolLookup, toClaudeCodeName, fromClaudeCodeName, FINE_GRAINED_TOOL_STREAMING_BETA, INTERLEAVED_THINKING_BETA, SERVER_SIDE_FALLBACK_BETA, MID_CONVERSATION_OUTPUT_CONFIG_BETA, THINKING_BINDING_CONTROLS_BETA, INLINE_TOOLS_BETA, DEFERRED_TOOL_PLACEHOLDER, PiAnthropic, federationClient, ANTHROPIC_MESSAGE_EVENTS, stream2, streamSimple, ANTHROPIC_STRICT_UNSUPPORTED_KEYWORDS, ANTHROPIC_STRICT_STRING_FORMATS, isAnthropicStrictUnsupportedKeyword; -var init_anthropic_messages = __esm({ - "node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js"() { - init_sdk(); - init_env_api_keys(); - init_models(); - init_diagnostics(); - init_event_stream(); - init_headers2(); - init_identity(); - init_json_parse(); - init_openrouter_cost(); - init_provider_env(); - init_provider_retry(); - init_sanitize_unicode(); - init_streaming_json(); - init_text(); - init_transcript(); - init_constrained_sampling(); - init_github_copilot_headers(); - init_simple_options(); - init_transform_messages(); - claudeCodeVersion = "2.1.280"; - claudeCodeTools = [ - "Read", - "Write", - "Edit", - "Bash", - "Grep", - "Glob", - "AskUserQuestion", - "EnterPlanMode", - "ExitPlanMode", - "KillShell", - "NotebookEdit", - "Skill", - "Task", - "TaskOutput", - "TodoWrite", - "WebFetch", - "WebSearch" - ]; - ccToolLookup = new Map(claudeCodeTools.map((t) => [t.toLowerCase(), t])); - toClaudeCodeName = (name) => ccToolLookup.get(name.toLowerCase()) ?? name; - fromClaudeCodeName = (name, tools) => { - if (tools && tools.length > 0) { - const lowerName = name.toLowerCase(); - const matchedTool = tools.find((tool) => tool.name.toLowerCase() === lowerName); - if (matchedTool) - return matchedTool.name; - } - return name; - }; - FINE_GRAINED_TOOL_STREAMING_BETA = "fine-grained-tool-streaming-2025-05-14"; - INTERLEAVED_THINKING_BETA = "interleaved-thinking-2025-05-14"; - SERVER_SIDE_FALLBACK_BETA = "server-side-fallback-2026-07-01"; - MID_CONVERSATION_OUTPUT_CONFIG_BETA = "mid-conversation-output-config-2026-07-01"; - THINKING_BINDING_CONTROLS_BETA = "thinking-binding-controls-2026-08-01"; - INLINE_TOOLS_BETA = "inline-tools-2026-09-15"; - DEFERRED_TOOL_PLACEHOLDER = { - name: "__pi_deferred_placeholder__", - description: "Reserved placeholder. Never available. Never call this.", - input_schema: { type: "object", properties: {}, required: [] }, - defer_loading: true - }; - PiAnthropic = class extends Anthropic { - _shouldResolveDefaultCredentials() { - return false; - } - }; - ANTHROPIC_MESSAGE_EVENTS = /* @__PURE__ */ new Set([ - "message_start", - "message_delta", - "message_stop", - "content_block_start", - "content_block_delta", - "content_block_stop" - ]); - stream2 = (model2, context, options) => { - const stream5 = new AssistantMessageEventStream(); - const normalizedContext = resolveTranscript(context, getAnthropicCompat(model2).supportsMidConvoSystemMessages); - const currentTools = getCurrentTools(normalizedContext.messages); - (async () => { - const output = { - role: "assistant", - content: [], - api: model2.api, - provider: model2.provider, - model: model2.id, - usage: { - input: 0, - output: 0, - cacheRead: 0, - cacheWrite: 0, - totalTokens: 0, - cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 } - }, - stopReason: "pending", - timestamp: Date.now() - }; - try { - let client; - let isOAuth; - let usageModel = model2; - let inputTransformations; - if (options?.client) { - client = options.client; - isOAuth = false; - } else { - const apiKey = options?.apiKey; - const federation = getAnthropicFederation(model2, apiKey, options?.headers, options?.env); - if (!federation) - assertRequestAuth(model2.provider, apiKey, options?.headers); - let copilotDynamicHeaders; - if (model2.provider === "github-copilot") { - const hasImages = hasCopilotVisionInput(normalizedContext.messages); - copilotDynamicHeaders = buildCopilotDynamicHeaders({ - messages: normalizedContext.messages, - hasImages - }); - } - const cacheRetention = resolveCacheRetention(options?.cacheRetention, options?.env); - const cacheSessionId = cacheRetention === "none" ? void 0 : options?.sessionId; - const created = createClient(model2, apiKey, options?.headers, options?.fetch, copilotDynamicHeaders, cacheSessionId, federation, options?.identity); - client = created.client; - isOAuth = created.isOAuthToken; - } - const requestOptions = { - ...options?.signal ? { signal: options.signal } : {}, - ...options?.timeoutMs !== void 0 ? { timeout: options.timeoutMs } : {}, - maxRetries: 0 - }; - let disablePreferredStrictTools = false; - let response; - for (; ; ) { - options?.signal?.throwIfAborted(); - const built = buildParams(model2, normalizedContext, isOAuth, options, disablePreferredStrictTools); - if (built.providerThinkingLevel) - output.providerThinkingLevel = built.providerThinkingLevel; - let params = built.params; - const nextParams = await options?.onPayload?.(params, model2); - if (nextParams !== void 0) { - params = { ...nextParams, stream: true }; - } - try { - response = await retryProviderRequest(() => client.beta.messages.create(params, requestOptions).asResponse(), { - maxRetries: options?.maxRetries, - maxRetryDelayMs: options?.maxRetryDelayMs, - signal: options?.signal - }); - break; - } catch (error) { - if (options?.signal?.aborted || disablePreferredStrictTools || !built.hasPreferredStrictTools || !(error instanceof Anthropic.APIError) || error.status !== 400 || error.type !== "invalid_request_error" || !isStrictToolLimitErrorMessage(error.message)) { - throw error; - } - disablePreferredStrictTools = true; - appendAssistantMessageDiagnostic(output, { - type: "anthropic_strict_tools_fallback", - timestamp: Date.now(), - error: { message: error.message }, - details: { reason: "strict_tool_limits_exceeded" } - }); - } - } - await options?.onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model2); - stream5.push({ type: "start", partial: output }); - const openBlocks = /* @__PURE__ */ new Map(); - const openBlock = (anthropicIndex) => { - const open = openBlocks.get(anthropicIndex); - return open === void 0 ? void 0 : { ...open, block: output.content[open.contentIndex] }; - }; - for await (const event of iterateAnthropicEvents(response, options?.signal)) { - await options?.onProviderStreamEvent?.(event, model2); - if (event.type === "message_start") { - output.responseId = event.message.id; - const transformations = event.message.input_transformations; - if (Array.isArray(transformations)) - inputTransformations = transformations; - const responseModel = event.message.model; - if (responseModel !== model2.id) - output.responseModel = responseModel; - const fallbackCost = responseModel === model2.id ? void 0 : model2.compat?.allowedFallbackModels?.find((fallback) => fallback.provider === model2.provider && fallback.model === responseModel)?.cost; - usageModel = fallbackCost ? { ...model2, id: responseModel, cost: fallbackCost } : model2; - output.usage.input = event.message.usage.input_tokens || 0; - output.usage.output = event.message.usage.output_tokens || 0; - output.usage.cacheRead = event.message.usage.cache_read_input_tokens || 0; - output.usage.cacheWrite = event.message.usage.cache_creation_input_tokens || 0; - output.usage.cacheWrite1h = event.message.usage.cache_creation?.ephemeral_1h_input_tokens || 0; - output.usage.totalTokens = output.usage.input + output.usage.output + output.usage.cacheRead + output.usage.cacheWrite; - calculateCost(usageModel, output.usage); - } else if (event.type === "content_block_start") { - if (event.content_block.type === "fallback") { - if (output.content.length > 0) { - throw new Error("Anthropic performed an unsupported mid-output model fallback"); - } - continue; - } - if (event.content_block.type === "text") { - output.content.push({ type: "text", text: event.content_block.text ?? "" }); - openBlocks.set(event.index, { contentIndex: output.content.length - 1 }); - stream5.push({ type: "text_start", contentIndex: output.content.length - 1, partial: output }); - } else if (event.content_block.type === "thinking") { - output.content.push({ - type: "thinking", - thinking: event.content_block.thinking ?? "", - thinkingSignature: event.content_block.signature ?? "" - }); - openBlocks.set(event.index, { contentIndex: output.content.length - 1 }); - stream5.push({ type: "thinking_start", contentIndex: output.content.length - 1, partial: output }); - } else if (event.content_block.type === "redacted_thinking") { - output.content.push({ - type: "thinking", - thinking: "[Reasoning redacted]", - thinkingSignature: event.content_block.data, - redacted: true - }); - openBlocks.set(event.index, { contentIndex: output.content.length - 1 }); - stream5.push({ type: "thinking_start", contentIndex: output.content.length - 1, partial: output }); - } else if (event.content_block.type === "tool_use") { - output.content.push({ - type: "toolCall", - id: event.content_block.id, - name: isOAuth ? fromClaudeCodeName(event.content_block.name, currentTools) : event.content_block.name, - arguments: event.content_block.input ?? {} - }); - openBlocks.set(event.index, { - contentIndex: output.content.length - 1, - arguments: new ToolCallArgumentsStream() - }); - stream5.push({ type: "toolcall_start", contentIndex: output.content.length - 1, partial: output }); - } - } else if (event.type === "content_block_delta") { - const open = openBlock(event.index); - if (event.delta.type === "text_delta") { - if (open?.block.type === "text") { - open.block.text += event.delta.text; - stream5.push({ - type: "text_delta", - contentIndex: open.contentIndex, - delta: event.delta.text, - partial: output - }); - } - } else if (event.delta.type === "thinking_delta") { - if (open?.block.type === "thinking") { - open.block.thinking += event.delta.thinking; - stream5.push({ - type: "thinking_delta", - contentIndex: open.contentIndex, - delta: event.delta.thinking, - partial: output - }); - } - } else if (event.delta.type === "input_json_delta") { - if (open?.block.type === "toolCall" && open.arguments !== void 0) { - open.block.arguments = open.arguments.append(event.delta.partial_json); - stream5.push({ - type: "toolcall_delta", - contentIndex: open.contentIndex, - delta: event.delta.partial_json, - partial: output - }); - } - } else if (event.delta.type === "signature_delta") { - if (open?.block.type === "thinking") { - open.block.thinkingSignature = open.block.thinkingSignature || ""; - open.block.thinkingSignature += event.delta.signature; - } - } - } else if (event.type === "content_block_stop") { - const open = openBlock(event.index); - openBlocks.delete(event.index); - if (open) { - const { block, contentIndex: index } = open; - if (block.type === "text") { - stream5.push({ - type: "text_end", - contentIndex: index, - content: block.text, - partial: output - }); - } else if (block.type === "thinking") { - stream5.push({ - type: "thinking_end", - contentIndex: index, - content: block.thinking, - partial: output - }); - } else if (block.type === "toolCall" && open.arguments !== void 0) { - Object.assign(block, open.arguments.finish()); - stream5.push({ - type: "toolcall_end", - contentIndex: index, - toolCall: block, - partial: output - }); - } - } - } else if (event.type === "message_delta") { - const transformations = event.input_transformations; - if (Array.isArray(transformations)) - inputTransformations = transformations; - if (event.delta.stop_reason) { - output.rawStopReason = event.delta.stop_reason; - const stopReasonResult = mapStopReason(event.delta.stop_reason, event.delta.stop_details); - output.stopReason = stopReasonResult.stopReason; - if (stopReasonResult.errorMessage) { - output.errorMessage = stopReasonResult.errorMessage; - } - } - if (event.usage) { - if (event.usage.input_tokens != null) { - output.usage.input = event.usage.input_tokens; - } - if (event.usage.output_tokens != null) { - output.usage.output = event.usage.output_tokens; - } - if (event.usage.cache_read_input_tokens != null) { - output.usage.cacheRead = event.usage.cache_read_input_tokens; - } - if (event.usage.cache_creation_input_tokens != null) { - output.usage.cacheWrite = event.usage.cache_creation_input_tokens; - } - const cacheCreation = event.usage.cache_creation; - if (cacheCreation?.ephemeral_1h_input_tokens != null) { - output.usage.cacheWrite1h = cacheCreation.ephemeral_1h_input_tokens; - } - const thinkingTokens = event.usage.output_tokens_details?.thinking_tokens; - if (thinkingTokens != null) { - output.usage.reasoning = thinkingTokens; - } - } - output.usage.totalTokens = output.usage.input + output.usage.output + output.usage.cacheRead + output.usage.cacheWrite; - calculateCost(usageModel, output.usage); - if (isOpenRouterModel(model2) && event.usage) { - applyOpenRouterReportedCost(output.usage, event.usage); - } - } - } - if (options?.signal?.aborted) { - throw new Error("Request was aborted"); - } - if (output.stopReason === "pending") { - throw new Error("Anthropic stream ended without a stop reason"); - } - if (output.stopReason === "aborted" || output.stopReason === "error") { - throw new Error(output.errorMessage || "An unknown error occurred"); - } - if (inputTransformations && inputTransformations.length > 0) { - appendAssistantMessageDiagnostic(output, { - type: "anthropic_input_transformations", - timestamp: Date.now(), - details: { - transformations: inputTransformations.map((transformation) => ({ - type: transformation.type ?? void 0, - path: transformation.path ?? void 0, - reason: transformation.reason ?? void 0 - })) - } - }); - } - stream5.push({ type: "done", reason: output.stopReason, message: output }); - stream5.end(); - } catch (error) { - output.stopReason = options?.signal?.aborted ? "aborted" : "error"; - output.errorMessage = error instanceof Error ? error.message : JSON.stringify(error); - stream5.push({ type: "error", reason: output.stopReason, error: output }); - stream5.end(); - } - })(); - return stream5; - }; - streamSimple = (model2, context, options) => { - if (!getAnthropicFederation(model2, options?.apiKey, options?.headers, options?.env)) { - assertRequestAuth(model2.provider, options?.apiKey, options?.headers); - } - const base = { - ...buildBaseOptions(model2, context, options, options?.apiKey), - toolChoice: options?.toolChoice - }; - if (!options?.reasoning) { - return stream2(model2, context, { - ...base, - thinkingEnabled: false - }); - } - if (model2.compat?.forceAdaptiveThinking === true) { - const effort = mapThinkingLevelToEffort(model2, options.reasoning); - return stream2(model2, context, { - ...base, - thinkingEnabled: true, - effort - }); - } - const adjusted = adjustMaxTokensForThinking(base.maxTokens, model2.maxTokens, options.reasoning, options.thinkingBudgets); - const maxTokens = clampMaxTokensToContext(model2, context, adjusted.maxTokens); - return stream2(model2, context, { - ...base, - maxTokens, - thinkingEnabled: true, - thinkingBudgetTokens: Math.min(adjusted.thinkingBudget, Math.max(0, maxTokens - 1024)) - }); - }; - ANTHROPIC_STRICT_UNSUPPORTED_KEYWORDS = /* @__PURE__ */ new Set([ - "minimum", - "maximum", - "exclusiveMinimum", - "exclusiveMaximum", - "multipleOf", - "maxItems", - "uniqueItems", - "minContains", - "maxContains", - "minProperties", - "maxProperties" - ]); - ANTHROPIC_STRICT_STRING_FORMATS = /* @__PURE__ */ new Set([ - "date-time", - "time", - "date", - "duration", - "email", - "hostname", - "uri", - "ipv4", - "ipv6", - "uuid" - ]); - isAnthropicStrictUnsupportedKeyword = (key, value2) => { - if (ANTHROPIC_STRICT_UNSUPPORTED_KEYWORDS.has(key)) - return true; - if (key === "minItems") - return value2 !== 0 && value2 !== 1; - if (key === "format") - return typeof value2 !== "string" || !ANTHROPIC_STRICT_STRING_FORMATS.has(value2); - return false; - }; - } -}); - -// node_modules/openai/internal/tslib.mjs -function __classPrivateFieldSet2(receiver, state2, value2, kind, f) { - if (kind === "m") - throw new TypeError("Private method is not writable"); - if (kind === "a" && !f) - throw new TypeError("Private accessor was defined without a setter"); - if (typeof state2 === "function" ? receiver !== state2 || !f : !state2.has(receiver)) - throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return kind === "a" ? f.call(receiver, value2) : f ? f.value = value2 : state2.set(receiver, value2), value2; -} -function __classPrivateFieldGet2(receiver, state2, kind, f) { - if (kind === "a" && !f) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state2 === "function" ? receiver !== state2 || !f : !state2.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state2.get(receiver); -} -var init_tslib2 = __esm({ - "node_modules/openai/internal/tslib.mjs"() { - } -}); - -// node_modules/openai/internal/utils/uuid.mjs -var uuid42; -var init_uuid2 = __esm({ - "node_modules/openai/internal/utils/uuid.mjs"() { - uuid42 = function() { - const { crypto: crypto3 } = globalThis; - if (crypto3?.randomUUID) { - uuid42 = crypto3.randomUUID.bind(crypto3); - return crypto3.randomUUID(); - } - const u8 = new Uint8Array(1); - const randomByte = crypto3 ? () => crypto3.getRandomValues(u8)[0] : () => Math.random() * 255 & 255; - return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, (c) => (+c ^ randomByte() & 15 >> +c / 4).toString(16)); - }; - } -}); - // node_modules/openai/internal/errors.mjs -function isAbortError2(err) { +function isAbortError(err) { return typeof err === "object" && err !== null && // Spec-compliant fetch implementations ("name" in err && err.name === "AbortError" || // Expo fetch "message" in err && String(err.message).includes("FetchRequestCanceledException")); } -var castToError2; -var init_errors2 = __esm({ +var castToError; +var init_errors = __esm({ "node_modules/openai/internal/errors.mjs"() { - castToError2 = (err) => { + castToError = (err) => { if (err instanceof Error) return err; if (typeof err === "object" && err !== null) { @@ -19749,13 +1948,13 @@ var init_errors2 = __esm({ }); // node_modules/openai/core/error.mjs -var OpenAIError, APIError2, APIUserAbortError2, APIConnectionError2, APIConnectionTimeoutError2, BadRequestError2, AuthenticationError2, PermissionDeniedError2, NotFoundError2, ConflictError2, UnprocessableEntityError2, RateLimitError2, InternalServerError2, LengthFinishReasonError, ContentFilterFinishReasonError, InvalidWebhookSignatureError, OAuthError, SubjectTokenProviderError; -var init_error3 = __esm({ +var OpenAIError, APIError, APIUserAbortError, APIConnectionError, APIConnectionTimeoutError, BadRequestError, AuthenticationError, PermissionDeniedError, NotFoundError, ConflictError, UnprocessableEntityError, RateLimitError, InternalServerError, LengthFinishReasonError, ContentFilterFinishReasonError, InvalidWebhookSignatureError, OAuthError, SubjectTokenProviderError; +var init_error = __esm({ "node_modules/openai/core/error.mjs"() { - init_errors2(); + init_errors(); OpenAIError = class extends Error { }; - APIError2 = class _APIError extends OpenAIError { + APIError = class _APIError extends OpenAIError { constructor(status, error, message, headers) { super(`${_APIError.makeMessage(status, error, message)}`); this.status = status; @@ -19782,68 +1981,68 @@ var init_error3 = __esm({ } static generate(status, errorResponse, message, headers) { if (!status || !headers) { - return new APIConnectionError2({ message, cause: castToError2(errorResponse) }); + return new APIConnectionError({ message, cause: castToError(errorResponse) }); } const error = errorResponse?.["error"]; if (status === 400) { - return new BadRequestError2(status, error, message, headers); + return new BadRequestError(status, error, message, headers); } if (status === 401) { - return new AuthenticationError2(status, error, message, headers); + return new AuthenticationError(status, error, message, headers); } if (status === 403) { - return new PermissionDeniedError2(status, error, message, headers); + return new PermissionDeniedError(status, error, message, headers); } if (status === 404) { - return new NotFoundError2(status, error, message, headers); + return new NotFoundError(status, error, message, headers); } if (status === 409) { - return new ConflictError2(status, error, message, headers); + return new ConflictError(status, error, message, headers); } if (status === 422) { - return new UnprocessableEntityError2(status, error, message, headers); + return new UnprocessableEntityError(status, error, message, headers); } if (status === 429) { - return new RateLimitError2(status, error, message, headers); + return new RateLimitError(status, error, message, headers); } if (status >= 500) { - return new InternalServerError2(status, error, message, headers); + return new InternalServerError(status, error, message, headers); } return new _APIError(status, error, message, headers); } }; - APIUserAbortError2 = class extends APIError2 { + APIUserAbortError = class extends APIError { constructor({ message } = {}) { super(void 0, void 0, message || "Request was aborted.", void 0); } }; - APIConnectionError2 = class extends APIError2 { + APIConnectionError = class extends APIError { constructor({ message, cause }) { super(void 0, void 0, message || "Connection error.", void 0); if (cause) this.cause = cause; } }; - APIConnectionTimeoutError2 = class extends APIConnectionError2 { + APIConnectionTimeoutError = class extends APIConnectionError { constructor({ message } = {}) { super({ message: message ?? "Request timed out." }); } }; - BadRequestError2 = class extends APIError2 { + BadRequestError = class extends APIError { }; - AuthenticationError2 = class extends APIError2 { + AuthenticationError = class extends APIError { }; - PermissionDeniedError2 = class extends APIError2 { + PermissionDeniedError = class extends APIError { }; - NotFoundError2 = class extends APIError2 { + NotFoundError = class extends APIError { }; - ConflictError2 = class extends APIError2 { + ConflictError = class extends APIError { }; - UnprocessableEntityError2 = class extends APIError2 { + UnprocessableEntityError = class extends APIError { }; - RateLimitError2 = class extends APIError2 { + RateLimitError = class extends APIError { }; - InternalServerError2 = class extends APIError2 { + InternalServerError = class extends APIError { }; LengthFinishReasonError = class extends OpenAIError { constructor() { @@ -19860,7 +2059,7 @@ var init_error3 = __esm({ super(message); } }; - OAuthError = class extends APIError2 { + OAuthError = class extends APIError { constructor(status, error, headers) { let finalMessage = "OAuth2 authentication error"; let error_code = void 0; @@ -19889,36 +2088,36 @@ var init_error3 = __esm({ }); // node_modules/openai/internal/utils/values.mjs -function maybeObj2(x) { +function maybeObj(x) { if (typeof x !== "object") { return {}; } return x ?? {}; } -function isEmptyObj2(obj2) { +function isEmptyObj(obj2) { if (!obj2) return true; for (const _k in obj2) return false; return true; } -function hasOwn2(obj2, key) { +function hasOwn(obj2, key) { return Object.prototype.hasOwnProperty.call(obj2, key); } -function isObj2(obj2) { +function isObj(obj2) { return obj2 != null && typeof obj2 === "object" && !Array.isArray(obj2); } -var startsWithSchemeRegexp2, isAbsoluteURL2, isArray2, isReadonlyArray2, validatePositiveInteger2, safeJSON2; -var init_values2 = __esm({ +var startsWithSchemeRegexp, isAbsoluteURL, isArray, isReadonlyArray, validatePositiveInteger, safeJSON; +var init_values = __esm({ "node_modules/openai/internal/utils/values.mjs"() { - init_error3(); - startsWithSchemeRegexp2 = /^[a-z][a-z0-9+.-]*:/i; - isAbsoluteURL2 = (url) => { - return startsWithSchemeRegexp2.test(url); + init_error(); + startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i; + isAbsoluteURL = (url) => { + return startsWithSchemeRegexp.test(url); }; - isArray2 = (val) => (isArray2 = Array.isArray, isArray2(val)); - isReadonlyArray2 = isArray2; - validatePositiveInteger2 = (name, n) => { + isArray = (val) => (isArray = Array.isArray, isArray(val)); + isReadonlyArray = isArray; + validatePositiveInteger = (name, n) => { if (typeof n !== "number" || !Number.isInteger(n)) { throw new OpenAIError(`${name} must be an integer`); } @@ -19927,7 +2126,7 @@ var init_values2 = __esm({ } return n; }; - safeJSON2 = (text) => { + safeJSON = (text) => { try { return JSON.parse(text); } catch (err) { @@ -19938,10 +2137,10 @@ var init_values2 = __esm({ }); // node_modules/openai/internal/utils/sleep.mjs -var sleep2; -var init_sleep2 = __esm({ +var sleep; +var init_sleep = __esm({ "node_modules/openai/internal/utils/sleep.mjs"() { - sleep2 = (ms, ...signals) => new Promise((resolve2, reject2) => { + sleep = (ms, ...signals) => new Promise((resolve2, reject2) => { const activeSignals = [...new Set(signals.filter((signal) => signal != null))]; let timeout; let settled = false; @@ -20053,7 +2252,7 @@ function addRequestAbortListener(signal, abort, requestSignal) { return cleanup; } var weakGlobals, finalizer, callbackOwners, subscriptions; -var init_abort3 = __esm({ +var init_abort2 = __esm({ "node_modules/openai/internal/utils/abort.mjs"() { weakGlobals = globalThis; finalizer = // oxlint-disable-next-line anti-slop/no-runtime-typeof -- Weak references and finalizers are optional host capabilities, so probe them before constructing either. @@ -20069,22 +2268,22 @@ var init_abort3 = __esm({ }); // node_modules/openai/internal/shims.mjs -function getDefaultFetch2() { +function getDefaultFetch() { if (typeof fetch !== "undefined") { return fetch; } throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`"); } -function makeReadableStream2(...args) { +function makeReadableStream(...args) { const ReadableStream2 = globalThis.ReadableStream; if (typeof ReadableStream2 === "undefined") { throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`"); } return new ReadableStream2(...args); } -function ReadableStreamFrom2(iterable) { +function ReadableStreamFrom(iterable) { let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator](); - return makeReadableStream2({ + return makeReadableStream({ start() { }, async pull(controller) { @@ -20100,7 +2299,7 @@ function ReadableStreamFrom2(iterable) { } }); } -function ReadableStreamToAsyncIterable2(stream5) { +function ReadableStreamToAsyncIterable(stream5) { if (stream5[Symbol.asyncIterator]) return stream5; const reader = stream5.getReader(); @@ -20127,7 +2326,7 @@ function ReadableStreamToAsyncIterable2(stream5) { } }; } -async function CancelReadableStream2(stream5) { +async function CancelReadableStream(stream5) { if (stream5 === null || typeof stream5 !== "object") return; if (stream5[Symbol.asyncIterator]) { @@ -20139,28 +2338,28 @@ async function CancelReadableStream2(stream5) { reader.releaseLock(); await cancelPromise; } -var init_shims2 = __esm({ +var init_shims = __esm({ "node_modules/openai/internal/shims.mjs"() { } }); // node_modules/openai/internal/utils/bytes.mjs -function encodeUTF82(str2) { +function encodeUTF8(str2) { let encoder4; - return (encodeUTF8_2 ?? (encoder4 = new globalThis.TextEncoder(), encodeUTF8_2 = encoder4.encode.bind(encoder4)))(str2); + return (encodeUTF8_ ?? (encoder4 = new globalThis.TextEncoder(), encodeUTF8_ = encoder4.encode.bind(encoder4)))(str2); } -function decodeUTF82(bytes2) { +function decodeUTF8(bytes2) { let decoder3; - return (decodeUTF8_2 ?? (decoder3 = new globalThis.TextDecoder(), decodeUTF8_2 = decoder3.decode.bind(decoder3)))(bytes2); + return (decodeUTF8_ ?? (decoder3 = new globalThis.TextDecoder(), decodeUTF8_ = decoder3.decode.bind(decoder3)))(bytes2); } -var encodeUTF8_2, decodeUTF8_2; -var init_bytes2 = __esm({ +var encodeUTF8_, decodeUTF8_; +var init_bytes = __esm({ "node_modules/openai/internal/utils/bytes.mjs"() { } }); // node_modules/openai/internal/decoders/line.mjs -function findNewlineIndex2(buffer, start, end) { +function findNewlineIndex(buffer, start, end) { const newline = 10; const carriage = 13; for (let i = start; i < end; i++) { @@ -20197,26 +2396,26 @@ function lineEndingLength(buffer, index) { } return 0; } -var _LineDecoder_instances, _LineDecoder_buffer2, _LineDecoder_start, _LineDecoder_end, _LineDecoder_searchIndex, _LineDecoder_skipLeadingLF, _LineDecoder_append, MAX_RETAINED_BUFFER_BYTES, LineDecoder2; -var init_line2 = __esm({ +var _LineDecoder_instances, _LineDecoder_buffer, _LineDecoder_start, _LineDecoder_end, _LineDecoder_searchIndex, _LineDecoder_skipLeadingLF, _LineDecoder_append, MAX_RETAINED_BUFFER_BYTES, LineDecoder; +var init_line = __esm({ "node_modules/openai/internal/decoders/line.mjs"() { - init_tslib2(); - init_bytes2(); + init_tslib(); + init_bytes(); MAX_RETAINED_BUFFER_BYTES = 64 * 1024; - LineDecoder2 = class { + LineDecoder = class { /** Creates a decoder with no buffered bytes or pending newline continuation. */ constructor() { _LineDecoder_instances.add(this); - _LineDecoder_buffer2.set(this, void 0); + _LineDecoder_buffer.set(this, void 0); _LineDecoder_start.set(this, void 0); _LineDecoder_end.set(this, void 0); _LineDecoder_searchIndex.set(this, void 0); _LineDecoder_skipLeadingLF.set(this, void 0); - __classPrivateFieldSet2(this, _LineDecoder_buffer2, new Uint8Array(), "f"); - __classPrivateFieldSet2(this, _LineDecoder_start, 0, "f"); - __classPrivateFieldSet2(this, _LineDecoder_end, 0, "f"); - __classPrivateFieldSet2(this, _LineDecoder_searchIndex, 0, "f"); - __classPrivateFieldSet2(this, _LineDecoder_skipLeadingLF, false, "f"); + __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), "f"); + __classPrivateFieldSet(this, _LineDecoder_start, 0, "f"); + __classPrivateFieldSet(this, _LineDecoder_end, 0, "f"); + __classPrivateFieldSet(this, _LineDecoder_searchIndex, 0, "f"); + __classPrivateFieldSet(this, _LineDecoder_skipLeadingLF, false, "f"); } /** * Appends a text or UTF-8 byte chunk and returns every newly completed line. @@ -20234,15 +2433,15 @@ var init_line2 = __esm({ if (chunk instanceof ArrayBuffer) { binaryChunk = new Uint8Array(chunk); } else if (typeof chunk === "string") { - binaryChunk = encodeUTF82(chunk); + binaryChunk = encodeUTF8(chunk); } else { binaryChunk = chunk; } if (binaryChunk.length === 0) { return []; } - if (__classPrivateFieldGet2(this, _LineDecoder_skipLeadingLF, "f")) { - __classPrivateFieldSet2(this, _LineDecoder_skipLeadingLF, false, "f"); + if (__classPrivateFieldGet(this, _LineDecoder_skipLeadingLF, "f")) { + __classPrivateFieldSet(this, _LineDecoder_skipLeadingLF, false, "f"); if (binaryChunk[0] === 10) { binaryChunk = binaryChunk.subarray(1); } @@ -20250,103 +2449,103 @@ var init_line2 = __esm({ return []; } } - __classPrivateFieldGet2(this, _LineDecoder_instances, "m", _LineDecoder_append).call(this, binaryChunk); + __classPrivateFieldGet(this, _LineDecoder_instances, "m", _LineDecoder_append).call(this, binaryChunk); const lines2 = []; let patternIndex; - while ((patternIndex = findNewlineIndex2(__classPrivateFieldGet2(this, _LineDecoder_buffer2, "f"), __classPrivateFieldGet2(this, _LineDecoder_searchIndex, "f"), __classPrivateFieldGet2(this, _LineDecoder_end, "f"))) != null) { - const line = decodeUTF82(__classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").subarray(__classPrivateFieldGet2(this, _LineDecoder_start, "f"), patternIndex.preceding)); + while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, "f"), __classPrivateFieldGet(this, _LineDecoder_searchIndex, "f"), __classPrivateFieldGet(this, _LineDecoder_end, "f"))) != null) { + const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, "f").subarray(__classPrivateFieldGet(this, _LineDecoder_start, "f"), patternIndex.preceding)); lines2.push(line); - __classPrivateFieldSet2(this, _LineDecoder_start, patternIndex.index, "f"); + __classPrivateFieldSet(this, _LineDecoder_start, patternIndex.index, "f"); if (patternIndex.carriage) { - if (__classPrivateFieldGet2(this, _LineDecoder_start, "f") < __classPrivateFieldGet2(this, _LineDecoder_end, "f") && __classPrivateFieldGet2(this, _LineDecoder_buffer2, "f")[__classPrivateFieldGet2(this, _LineDecoder_start, "f")] === 10) { - __classPrivateFieldSet2(this, _LineDecoder_start, __classPrivateFieldGet2(this, _LineDecoder_start, "f") + 1, "f"); - } else if (__classPrivateFieldGet2(this, _LineDecoder_start, "f") === __classPrivateFieldGet2(this, _LineDecoder_end, "f")) { - __classPrivateFieldSet2(this, _LineDecoder_skipLeadingLF, true, "f"); + if (__classPrivateFieldGet(this, _LineDecoder_start, "f") < __classPrivateFieldGet(this, _LineDecoder_end, "f") && __classPrivateFieldGet(this, _LineDecoder_buffer, "f")[__classPrivateFieldGet(this, _LineDecoder_start, "f")] === 10) { + __classPrivateFieldSet(this, _LineDecoder_start, __classPrivateFieldGet(this, _LineDecoder_start, "f") + 1, "f"); + } else if (__classPrivateFieldGet(this, _LineDecoder_start, "f") === __classPrivateFieldGet(this, _LineDecoder_end, "f")) { + __classPrivateFieldSet(this, _LineDecoder_skipLeadingLF, true, "f"); } } - __classPrivateFieldSet2(this, _LineDecoder_searchIndex, __classPrivateFieldGet2(this, _LineDecoder_start, "f"), "f"); + __classPrivateFieldSet(this, _LineDecoder_searchIndex, __classPrivateFieldGet(this, _LineDecoder_start, "f"), "f"); } - __classPrivateFieldSet2(this, _LineDecoder_searchIndex, __classPrivateFieldGet2(this, _LineDecoder_end, "f"), "f"); - if (__classPrivateFieldGet2(this, _LineDecoder_start, "f") === __classPrivateFieldGet2(this, _LineDecoder_end, "f")) { - __classPrivateFieldSet2(this, _LineDecoder_start, 0, "f"); - __classPrivateFieldSet2(this, _LineDecoder_end, 0, "f"); - __classPrivateFieldSet2(this, _LineDecoder_searchIndex, 0, "f"); - if (__classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").length > MAX_RETAINED_BUFFER_BYTES) { - __classPrivateFieldSet2(this, _LineDecoder_buffer2, new Uint8Array(), "f"); + __classPrivateFieldSet(this, _LineDecoder_searchIndex, __classPrivateFieldGet(this, _LineDecoder_end, "f"), "f"); + if (__classPrivateFieldGet(this, _LineDecoder_start, "f") === __classPrivateFieldGet(this, _LineDecoder_end, "f")) { + __classPrivateFieldSet(this, _LineDecoder_start, 0, "f"); + __classPrivateFieldSet(this, _LineDecoder_end, 0, "f"); + __classPrivateFieldSet(this, _LineDecoder_searchIndex, 0, "f"); + if (__classPrivateFieldGet(this, _LineDecoder_buffer, "f").length > MAX_RETAINED_BUFFER_BYTES) { + __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), "f"); } - } else if (lines2.length > 0 && __classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").length > MAX_RETAINED_BUFFER_BYTES) { - const length = __classPrivateFieldGet2(this, _LineDecoder_end, "f") - __classPrivateFieldGet2(this, _LineDecoder_start, "f"); - if (length <= MAX_RETAINED_BUFFER_BYTES || __classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").length > length * 4) { + } else if (lines2.length > 0 && __classPrivateFieldGet(this, _LineDecoder_buffer, "f").length > MAX_RETAINED_BUFFER_BYTES) { + const length = __classPrivateFieldGet(this, _LineDecoder_end, "f") - __classPrivateFieldGet(this, _LineDecoder_start, "f"); + if (length <= MAX_RETAINED_BUFFER_BYTES || __classPrivateFieldGet(this, _LineDecoder_buffer, "f").length > length * 4) { const capacity = length <= MAX_RETAINED_BUFFER_BYTES ? Math.min(Math.max(length * 2, 256), MAX_RETAINED_BUFFER_BYTES) : length * 2; const buffer = new Uint8Array(capacity); - buffer.set(__classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").subarray(__classPrivateFieldGet2(this, _LineDecoder_start, "f"), __classPrivateFieldGet2(this, _LineDecoder_end, "f"))); - __classPrivateFieldSet2(this, _LineDecoder_buffer2, buffer, "f"); - __classPrivateFieldSet2(this, _LineDecoder_start, 0, "f"); - __classPrivateFieldSet2(this, _LineDecoder_end, length, "f"); - __classPrivateFieldSet2(this, _LineDecoder_searchIndex, length, "f"); + buffer.set(__classPrivateFieldGet(this, _LineDecoder_buffer, "f").subarray(__classPrivateFieldGet(this, _LineDecoder_start, "f"), __classPrivateFieldGet(this, _LineDecoder_end, "f"))); + __classPrivateFieldSet(this, _LineDecoder_buffer, buffer, "f"); + __classPrivateFieldSet(this, _LineDecoder_start, 0, "f"); + __classPrivateFieldSet(this, _LineDecoder_end, length, "f"); + __classPrivateFieldSet(this, _LineDecoder_searchIndex, length, "f"); } } return lines2; } /** Emits the remaining unterminated line, or returns an empty array when idle. */ flush() { - __classPrivateFieldSet2(this, _LineDecoder_skipLeadingLF, false, "f"); - if (__classPrivateFieldGet2(this, _LineDecoder_start, "f") === __classPrivateFieldGet2(this, _LineDecoder_end, "f")) { + __classPrivateFieldSet(this, _LineDecoder_skipLeadingLF, false, "f"); + if (__classPrivateFieldGet(this, _LineDecoder_start, "f") === __classPrivateFieldGet(this, _LineDecoder_end, "f")) { return []; } return this.decode("\n"); } }; - _LineDecoder_buffer2 = /* @__PURE__ */ new WeakMap(), _LineDecoder_start = /* @__PURE__ */ new WeakMap(), _LineDecoder_end = /* @__PURE__ */ new WeakMap(), _LineDecoder_searchIndex = /* @__PURE__ */ new WeakMap(), _LineDecoder_skipLeadingLF = /* @__PURE__ */ new WeakMap(), _LineDecoder_instances = /* @__PURE__ */ new WeakSet(), _LineDecoder_append = function _LineDecoder_append2(chunk) { - if (__classPrivateFieldGet2(this, _LineDecoder_end, "f") + chunk.length > __classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").length) { - const length = __classPrivateFieldGet2(this, _LineDecoder_end, "f") - __classPrivateFieldGet2(this, _LineDecoder_start, "f"); - if (__classPrivateFieldGet2(this, _LineDecoder_start, "f") >= __classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").length / 2 && length + chunk.length <= __classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").length) { - __classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").copyWithin(0, __classPrivateFieldGet2(this, _LineDecoder_start, "f"), __classPrivateFieldGet2(this, _LineDecoder_end, "f")); + _LineDecoder_buffer = /* @__PURE__ */ new WeakMap(), _LineDecoder_start = /* @__PURE__ */ new WeakMap(), _LineDecoder_end = /* @__PURE__ */ new WeakMap(), _LineDecoder_searchIndex = /* @__PURE__ */ new WeakMap(), _LineDecoder_skipLeadingLF = /* @__PURE__ */ new WeakMap(), _LineDecoder_instances = /* @__PURE__ */ new WeakSet(), _LineDecoder_append = function _LineDecoder_append2(chunk) { + if (__classPrivateFieldGet(this, _LineDecoder_end, "f") + chunk.length > __classPrivateFieldGet(this, _LineDecoder_buffer, "f").length) { + const length = __classPrivateFieldGet(this, _LineDecoder_end, "f") - __classPrivateFieldGet(this, _LineDecoder_start, "f"); + if (__classPrivateFieldGet(this, _LineDecoder_start, "f") >= __classPrivateFieldGet(this, _LineDecoder_buffer, "f").length / 2 && length + chunk.length <= __classPrivateFieldGet(this, _LineDecoder_buffer, "f").length) { + __classPrivateFieldGet(this, _LineDecoder_buffer, "f").copyWithin(0, __classPrivateFieldGet(this, _LineDecoder_start, "f"), __classPrivateFieldGet(this, _LineDecoder_end, "f")); } else { - const capacity = Math.max(__classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").length * 2, length + chunk.length, 256); + const capacity = Math.max(__classPrivateFieldGet(this, _LineDecoder_buffer, "f").length * 2, length + chunk.length, 256); const buffer = new Uint8Array(capacity); - buffer.set(__classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").subarray(__classPrivateFieldGet2(this, _LineDecoder_start, "f"), __classPrivateFieldGet2(this, _LineDecoder_end, "f"))); - __classPrivateFieldSet2(this, _LineDecoder_buffer2, buffer, "f"); + buffer.set(__classPrivateFieldGet(this, _LineDecoder_buffer, "f").subarray(__classPrivateFieldGet(this, _LineDecoder_start, "f"), __classPrivateFieldGet(this, _LineDecoder_end, "f"))); + __classPrivateFieldSet(this, _LineDecoder_buffer, buffer, "f"); } - __classPrivateFieldSet2(this, _LineDecoder_searchIndex, __classPrivateFieldGet2(this, _LineDecoder_searchIndex, "f") - __classPrivateFieldGet2(this, _LineDecoder_start, "f"), "f"); - __classPrivateFieldSet2(this, _LineDecoder_end, length, "f"); - __classPrivateFieldSet2(this, _LineDecoder_start, 0, "f"); + __classPrivateFieldSet(this, _LineDecoder_searchIndex, __classPrivateFieldGet(this, _LineDecoder_searchIndex, "f") - __classPrivateFieldGet(this, _LineDecoder_start, "f"), "f"); + __classPrivateFieldSet(this, _LineDecoder_end, length, "f"); + __classPrivateFieldSet(this, _LineDecoder_start, 0, "f"); } - __classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").set(chunk, __classPrivateFieldGet2(this, _LineDecoder_end, "f")); - __classPrivateFieldSet2(this, _LineDecoder_end, __classPrivateFieldGet2(this, _LineDecoder_end, "f") + chunk.length, "f"); + __classPrivateFieldGet(this, _LineDecoder_buffer, "f").set(chunk, __classPrivateFieldGet(this, _LineDecoder_end, "f")); + __classPrivateFieldSet(this, _LineDecoder_end, __classPrivateFieldGet(this, _LineDecoder_end, "f") + chunk.length, "f"); }; - LineDecoder2.NEWLINE_CHARS = /* @__PURE__ */ new Set(["\n", "\r"]); - LineDecoder2.NEWLINE_REGEXP = /\r\n|[\n\r]/g; + LineDecoder.NEWLINE_CHARS = /* @__PURE__ */ new Set(["\n", "\r"]); + LineDecoder.NEWLINE_REGEXP = /\r\n|[\n\r]/g; } }); // node_modules/openai/internal/utils/log.mjs -function noop2() { +function noop() { } -function makeLogFn2(fnLevel, logger, logLevel) { - if (!logger || levelNumbers2[fnLevel] > levelNumbers2[logLevel]) { - return noop2; +function makeLogFn(fnLevel, logger, logLevel) { + if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) { + return noop; } else { return logger[fnLevel].bind(logger); } } -function loggerFor2(client) { +function loggerFor(client) { const logger = client.logger; const logLevel = client.logLevel ?? "off"; if (!logger) { - return noopLogger2; + return noopLogger; } - const cachedLogger = cachedLoggers2.get(logger); + const cachedLogger = cachedLoggers.get(logger); if (cachedLogger && cachedLogger[0] === logLevel) { return cachedLogger[1]; } const levelLogger = { - error: makeLogFn2("error", logger, logLevel), - warn: makeLogFn2("warn", logger, logLevel), - info: makeLogFn2("info", logger, logLevel), - debug: makeLogFn2("debug", logger, logLevel) + error: makeLogFn("error", logger, logLevel), + warn: makeLogFn("warn", logger, logLevel), + info: makeLogFn("info", logger, logLevel), + debug: makeLogFn("debug", logger, logLevel) }; - cachedLoggers2.set(logger, [logLevel, levelLogger]); + cachedLoggers.set(logger, [logLevel, levelLogger]); return levelLogger; } function isSensitiveQueryParameter(name) { @@ -20368,34 +2567,34 @@ function redactURL(value2) { } return url.href; } -var levelNumbers2, parseLogLevel2, noopLogger2, cachedLoggers2, sensitiveQueryNames, sensitiveHeaderNames, formatRequestDetails2; -var init_log2 = __esm({ +var levelNumbers, parseLogLevel, noopLogger, cachedLoggers, sensitiveQueryNames, sensitiveHeaderNames, formatRequestDetails; +var init_log = __esm({ "node_modules/openai/internal/utils/log.mjs"() { - init_values2(); - levelNumbers2 = { + init_values(); + levelNumbers = { off: 0, error: 200, warn: 300, info: 400, debug: 500 }; - parseLogLevel2 = (maybeLevel, sourceName, client) => { + parseLogLevel = (maybeLevel, sourceName, client) => { if (!maybeLevel) { return void 0; } - if (hasOwn2(levelNumbers2, maybeLevel)) { + if (hasOwn(levelNumbers, maybeLevel)) { return maybeLevel; } - loggerFor2(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers2))}`); + loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`); return void 0; }; - noopLogger2 = { - error: noop2, - warn: noop2, - info: noop2, - debug: noop2 + noopLogger = { + error: noop, + warn: noop, + info: noop, + debug: noop }; - cachedLoggers2 = /* @__PURE__ */ new WeakMap(); + cachedLoggers = /* @__PURE__ */ new WeakMap(); sensitiveQueryNames = /* @__PURE__ */ new Set([ "apikey", "accesstoken", @@ -20426,7 +2625,7 @@ var init_log2 = __esm({ "x-auth-token", "x-id-token" ]); - formatRequestDetails2 = (details) => { + formatRequestDetails = (details) => { if (details.options) { details.options = { ...details.options }; delete details.options["headers"]; @@ -20461,7 +2660,7 @@ var init_log2 = __esm({ // node_modules/openai/core/streaming.mjs function isTransportAbortError(error) { - return !(error instanceof APIError2) && isAbortError2(error); + return !(error instanceof APIError) && isAbortError(error); } function createStreamTeeQueue() { let entries2 = []; @@ -20507,7 +2706,7 @@ function createAbortableSSESource(body, signal) { const source = reader ? { next: () => reader.read(), return: () => reader.cancel() - } : ReadableStreamToAsyncIterable2(body)[Symbol.asyncIterator](); + } : ReadableStreamToAsyncIterable(body)[Symbol.asyncIterator](); const ended = { value: void 0, done: true }; let closed = false; let canceled = false; @@ -20555,7 +2754,7 @@ function createAbortableSSESource(body, signal) { } return { value: result.value, done: false }; } catch (error) { - if (signal.aborted && (isAbortError2(error) || error === signal.reason)) { + if (signal.aborted && (isAbortError(error) || error === signal.reason)) { return ended; } throw error; @@ -20619,7 +2818,7 @@ function createAbortableSSESource(body, signal) { } }; } -async function* _iterSSEMessages2(response, controller) { +async function* _iterSSEMessages(response, controller) { if (!response.body) { controller.abort(); if (globalThis.navigator !== void 0 && globalThis.navigator.product === "ReactNative") { @@ -20627,8 +2826,8 @@ async function* _iterSSEMessages2(response, controller) { } throw new OpenAIError(`Attempted to iterate over a response with no body`); } - const sseDecoder = new SSEDecoder2(); - const lineDecoder = new LineDecoder2(); + const sseDecoder = new SSEDecoder(); + const lineDecoder = new LineDecoder(); const { signal } = controller; const source = createAbortableSSESource(response.body, signal); let failed = false; @@ -20669,7 +2868,7 @@ async function* _iterSSEMessages2(response, controller) { } } catch (error) { failed = true; - if (!signal.aborted || !isAbortError2(error) && error !== signal.reason) { + if (!signal.aborted || !isAbortError(error) && error !== signal.reason) { throw error; } } finally { @@ -20689,7 +2888,7 @@ async function* iterSSEChunks(iterator) { if (chunk instanceof ArrayBuffer) { binaryChunk = new Uint8Array(chunk); } else if (typeof chunk === "string") { - binaryChunk = encodeUTF82(chunk); + binaryChunk = encodeUTF8(chunk); } else { binaryChunk = chunk; } @@ -20721,32 +2920,32 @@ async function* iterSSEChunks(iterator) { yield data.slice(dataStart, dataEnd); } } -function partition2(str2, delimiter) { +function partition(str2, delimiter) { const index = str2.indexOf(delimiter); if (index !== -1) { return [str2.slice(0, index), delimiter, str2.slice(index + delimiter.length)]; } return [str2, "", ""]; } -var _Stream_instances, _Stream_client2, _Stream_isTeeBranch, _Stream_cancelIterator, Stream2, DOUBLE_NEWLINE_DELIMITER_MAX_OVERLAP_BYTES, SSEDecoder2; -var init_streaming3 = __esm({ +var _Stream_instances, _Stream_client, _Stream_isTeeBranch, _Stream_cancelIterator, Stream, DOUBLE_NEWLINE_DELIMITER_MAX_OVERLAP_BYTES, SSEDecoder; +var init_streaming = __esm({ "node_modules/openai/core/streaming.mjs"() { - init_tslib2(); - init_error3(); - init_shims2(); - init_line2(); - init_errors2(); - init_bytes2(); - init_log2(); - Stream2 = class _Stream { + init_tslib(); + init_error(); + init_shims(); + init_line(); + init_errors(); + init_bytes(); + init_log(); + Stream = class _Stream { /** Wraps an asynchronous event iterator and the controller that owns its request. */ constructor(iterator, controller, client) { _Stream_instances.add(this); - _Stream_client2.set(this, void 0); + _Stream_client.set(this, void 0); _Stream_isTeeBranch.set(this, false); this.iterator = iterator; this.controller = controller; - __classPrivateFieldSet2(this, _Stream_client2, client, "f"); + __classPrivateFieldSet(this, _Stream_client, client, "f"); } /** * Decodes an SSE response into parsed JSON events. @@ -20757,7 +2956,7 @@ var init_streaming3 = __esm({ */ static fromSSEResponse(response, controller, client, synthesizeEventData) { let consumed = false; - const logger = client ? loggerFor2(client) : console; + const logger = client ? loggerFor(client) : console; async function* iterator() { if (consumed) { throw new OpenAIError("Cannot iterate over a consumed stream, use `.tee()` to split the stream."); @@ -20765,7 +2964,7 @@ var init_streaming3 = __esm({ consumed = true; let done = false; let receivedCompletionSentinel = false; - const messages = _iterSSEMessages2(response, controller); + const messages = _iterSSEMessages(response, controller); const closeMessages = messages.return.bind(messages); messages.return = (value2) => { if (!receivedCompletionSentinel) { @@ -20789,10 +2988,10 @@ var init_streaming3 = __esm({ throw new SyntaxError("Error reading response: malformed server-sent event JSON."); } if (sse.event === "error") { - throw new APIError2(void 0, data?.error ?? data, void 0, response.headers); + throw new APIError(void 0, data?.error ?? data, void 0, response.headers); } if (data && data.error) { - throw new APIError2(void 0, data.error, void 0, response.headers); + throw new APIError(void 0, data.error, void 0, response.headers); } yield synthesizeEventData ? { event: sse.event, data } : data; } else { @@ -20828,7 +3027,7 @@ var init_streaming3 = __esm({ static fromReadableStream(readableStream, controller, client) { let consumed = false; async function* iterLines() { - const lineDecoder = new LineDecoder2(); + const lineDecoder = new LineDecoder(); const reader = readableStream.getReader(); let closed = false; let cancelPromise; @@ -20898,7 +3097,7 @@ var init_streaming3 = __esm({ } done = true; } catch (e) { - if (controller.signal.aborted || isAbortError2(e)) { + if (controller.signal.aborted || isAbortError(e)) { return; } throw e; @@ -20911,7 +3110,7 @@ var init_streaming3 = __esm({ return new _Stream(iterator, controller, client); } /** Starts consuming this stream; attempting to consume it again throws. */ - [(_Stream_client2 = /* @__PURE__ */ new WeakMap(), _Stream_isTeeBranch = /* @__PURE__ */ new WeakMap(), _Stream_instances = /* @__PURE__ */ new WeakSet(), Symbol.asyncIterator)]() { + [(_Stream_client = /* @__PURE__ */ new WeakMap(), _Stream_isTeeBranch = /* @__PURE__ */ new WeakMap(), _Stream_instances = /* @__PURE__ */ new WeakSet(), Symbol.asyncIterator)]() { return this.iterator(); } /** @@ -20945,15 +3144,15 @@ var init_streaming3 = __esm({ if (!queue.canceled) { queue.cancel(); if (left.canceled && right.canceled) { - await __classPrivateFieldGet2(this, _Stream_instances, "m", _Stream_cancelIterator).call(this, iterator, controller); + await __classPrivateFieldGet(this, _Stream_instances, "m", _Stream_cancelIterator).call(this, iterator, controller); } } return { value: void 0, done: true }; } }); const branch = (queue) => { - const stream5 = new _Stream(() => teeIterator(queue), controller, __classPrivateFieldGet2(this, _Stream_client2, "f")); - __classPrivateFieldSet2(stream5, _Stream_isTeeBranch, true, "f"); + const stream5 = new _Stream(() => teeIterator(queue), controller, __classPrivateFieldGet(this, _Stream_client, "f")); + __classPrivateFieldSet(stream5, _Stream_isTeeBranch, true, "f"); return stream5; }; return [branch(left), branch(right)]; @@ -20970,8 +3169,8 @@ var init_streaming3 = __esm({ const { controller } = this; let iter; let cancellation; - const cancel = () => cancellation ?? (cancellation = __classPrivateFieldGet2(this, _Stream_instances, "m", _Stream_cancelIterator).call(this, iter, controller)); - return makeReadableStream2({ + const cancel = () => cancellation ?? (cancellation = __classPrivateFieldGet(this, _Stream_instances, "m", _Stream_cancelIterator).call(this, iter, controller)); + return makeReadableStream({ start: async () => { iter = this[Symbol.asyncIterator](); }, @@ -20981,7 +3180,7 @@ var init_streaming3 = __esm({ if (done) { return ctrl.close(); } - const bytes2 = encodeUTF82(JSON.stringify(value2) + "\n"); + const bytes2 = encodeUTF8(JSON.stringify(value2) + "\n"); ctrl.enqueue(bytes2); } catch (err) { ctrl.error(err); @@ -20995,14 +3194,14 @@ var init_streaming3 = __esm({ _Stream_cancelIterator = async function _Stream_cancelIterator2(iterator, controller) { const returnMethod = iterator.return; if (returnMethod) { - if (!__classPrivateFieldGet2(this, _Stream_isTeeBranch, "f")) { + if (!__classPrivateFieldGet(this, _Stream_isTeeBranch, "f")) { controller.abort(); } await Reflect.apply(returnMethod, iterator, []); } }; DOUBLE_NEWLINE_DELIMITER_MAX_OVERLAP_BYTES = 3; - SSEDecoder2 = class { + SSEDecoder = class { constructor() { this.event = null; this.data = []; @@ -21030,7 +3229,7 @@ var init_streaming3 = __esm({ if (line.startsWith(":")) { return null; } - const [fieldname, , initialValue] = partition2(line, ":"); + const [fieldname, , initialValue] = partition(line, ":"); let value2 = initialValue; if (value2.startsWith(" ")) { value2 = value2.slice(1); @@ -21055,16 +3254,16 @@ var init_streaming3 = __esm({ }); // node_modules/openai/internal/parse.mjs -async function defaultParseResponse2(client, props) { +async function defaultParseResponse(client, props) { const { response, requestLogID, retryOfRequestLogID, startTime } = props; let jsonBodyLength; const body = await (async () => { if (props.options.stream) { - loggerFor2(client).debug("response", response.status, response.url, response.headers, response.body); + loggerFor(client).debug("response", response.status, response.url, response.headers, response.body); if (props.options.__streamClass) { return props.options.__streamClass.fromSSEResponse(response, props.controller, client, props.options.__synthesizeEventData); } - return Stream2.fromSSEResponse(response, props.controller, client, props.options.__synthesizeEventData); + return Stream.fromSSEResponse(response, props.controller, client, props.options.__synthesizeEventData); } if (response.status === 204) { return null; @@ -21094,7 +3293,7 @@ async function defaultParseResponse2(client, props) { throw asAbortError(error, props.controller.signal); }); if (client.logLevel === "debug") { - loggerFor2(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails2({ + loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({ retryOfRequestLogID, url: response.url, status: response.status, @@ -21105,7 +3304,7 @@ async function defaultParseResponse2(client, props) { return body; } function asAbortError(error, signal) { - if (!signal.aborted || error !== signal.reason || isAbortError2(error)) { + if (!signal.aborted || error !== signal.reason || isAbortError(error)) { return error; } const message = "This operation was aborted"; @@ -21121,24 +3320,24 @@ function addRequestID(value2, response) { enumerable: false }); } -var init_parse2 = __esm({ +var init_parse = __esm({ "node_modules/openai/internal/parse.mjs"() { - init_streaming3(); - init_errors2(); - init_log2(); + init_streaming(); + init_errors(); + init_log(); } }); // node_modules/openai/version.mjs -var VERSION2; -var init_version3 = __esm({ +var VERSION; +var init_version2 = __esm({ "node_modules/openai/version.mjs"() { - VERSION2 = "7.19.0"; + VERSION = "7.19.0"; } }); // node_modules/openai/internal/detect-platform.mjs -function getDetectedPlatform2() { +function getDetectedPlatform() { if (typeof Deno !== "undefined" && Deno.build != null) { return "deno"; } @@ -21150,7 +3349,7 @@ function getDetectedPlatform2() { } return "unknown"; } -function getBrowserInfo2() { +function getBrowserInfo() { if (typeof navigator === "undefined" || !navigator) { return null; } @@ -21173,11 +3372,11 @@ function getBrowserInfo2() { } return null; } -var isRunningInBrowser2, getPlatformProperties2, normalizeArch2, normalizePlatform2, _platformHeaders2, getPlatformHeaders2; -var init_detect_platform2 = __esm({ +var isRunningInBrowser, getPlatformProperties, normalizeArch, normalizePlatform, _platformHeaders, getPlatformHeaders; +var init_detect_platform = __esm({ "node_modules/openai/internal/detect-platform.mjs"() { - init_version3(); - isRunningInBrowser2 = () => { + init_version2(); + isRunningInBrowser = () => { return ( // @ts-ignore typeof window !== "undefined" && // @ts-ignore @@ -21185,14 +3384,14 @@ var init_detect_platform2 = __esm({ typeof navigator !== "undefined" ); }; - getPlatformProperties2 = () => { - const detectedPlatform = getDetectedPlatform2(); + getPlatformProperties = () => { + const detectedPlatform = getDetectedPlatform(); if (detectedPlatform === "deno") { return { "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION2, - "X-Stainless-OS": normalizePlatform2(Deno.build.os), - "X-Stainless-Arch": normalizeArch2(Deno.build.arch), + "X-Stainless-Package-Version": VERSION, + "X-Stainless-OS": normalizePlatform(Deno.build.os), + "X-Stainless-Arch": normalizeArch(Deno.build.arch), "X-Stainless-Runtime": "deno", "X-Stainless-Runtime-Version": typeof Deno.version === "string" ? Deno.version : Deno.version?.deno ?? "unknown" }; @@ -21200,7 +3399,7 @@ var init_detect_platform2 = __esm({ if (typeof EdgeRuntime !== "undefined") { return { "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION2, + "X-Stainless-Package-Version": VERSION, "X-Stainless-OS": "Unknown", "X-Stainless-Arch": `other:${EdgeRuntime}`, "X-Stainless-Runtime": "edge", @@ -21210,18 +3409,18 @@ var init_detect_platform2 = __esm({ if (detectedPlatform === "node") { return { "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION2, - "X-Stainless-OS": normalizePlatform2(globalThis.process.platform ?? "unknown"), - "X-Stainless-Arch": normalizeArch2(globalThis.process.arch ?? "unknown"), + "X-Stainless-Package-Version": VERSION, + "X-Stainless-OS": normalizePlatform(globalThis.process.platform ?? "unknown"), + "X-Stainless-Arch": normalizeArch(globalThis.process.arch ?? "unknown"), "X-Stainless-Runtime": "node", "X-Stainless-Runtime-Version": globalThis.process.version ?? "unknown" }; } - const browserInfo = getBrowserInfo2(); + const browserInfo = getBrowserInfo(); if (browserInfo) { return { "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION2, + "X-Stainless-Package-Version": VERSION, "X-Stainless-OS": "Unknown", "X-Stainless-Arch": "unknown", "X-Stainless-Runtime": `browser:${browserInfo.browser}`, @@ -21230,14 +3429,14 @@ var init_detect_platform2 = __esm({ } return { "X-Stainless-Lang": "js", - "X-Stainless-Package-Version": VERSION2, + "X-Stainless-Package-Version": VERSION, "X-Stainless-OS": "Unknown", "X-Stainless-Arch": "unknown", "X-Stainless-Runtime": "unknown", "X-Stainless-Runtime-Version": "unknown" }; }; - normalizeArch2 = (arch) => { + normalizeArch = (arch) => { if (arch === "x32") return "x32"; if (arch === "x86_64" || arch === "x64") @@ -21250,7 +3449,7 @@ var init_detect_platform2 = __esm({ return `other:${arch}`; return "unknown"; }; - normalizePlatform2 = (platform) => { + normalizePlatform = (platform) => { platform = platform.toLowerCase(); if (platform.includes("ios")) return "iOS"; @@ -21270,8 +3469,8 @@ var init_detect_platform2 = __esm({ return `Other:${platform}`; return "Unknown"; }; - getPlatformHeaders2 = () => { - return _platformHeaders2 ?? (_platformHeaders2 = getPlatformProperties2()); + getPlatformHeaders = () => { + return _platformHeaders ?? (_platformHeaders = getPlatformProperties()); }; } }); @@ -21295,11 +3494,11 @@ function observeJSONRequestBody(body, observer) { } }; } -var jsonRequestBodyObservers, FallbackEncoder2; -var init_request_options2 = __esm({ +var jsonRequestBodyObservers, FallbackEncoder; +var init_request_options = __esm({ "node_modules/openai/internal/request-options.mjs"() { jsonRequestBodyObservers = /* @__PURE__ */ new WeakMap(); - FallbackEncoder2 = ({ headers, body }) => { + FallbackEncoder = ({ headers, body }) => { const observers = typeof body === "object" && body !== null ? jsonRequestBodyObservers.get(body) : void 0; let encoded; if (!observers || observers.size === 0) { @@ -21331,28 +3530,28 @@ var init_request_options2 = __esm({ }); // node_modules/openai/internal/qs/formats.mjs -var default_format2, default_formatter2, formatters2, RFC17382; -var init_formats2 = __esm({ +var default_format, default_formatter, formatters, RFC1738; +var init_formats = __esm({ "node_modules/openai/internal/qs/formats.mjs"() { - default_format2 = "RFC3986"; - default_formatter2 = String; - formatters2 = { + default_format = "RFC3986"; + default_formatter = String; + formatters = { RFC1738: (v) => String(v).replace(/%20/g, "+"), - RFC3986: default_formatter2 + RFC3986: default_formatter }; - RFC17382 = "RFC1738"; + RFC1738 = "RFC1738"; } }); // node_modules/openai/internal/qs/utils.mjs -function is_buffer2(obj2) { +function is_buffer(obj2) { if (!obj2 || typeof obj2 !== "object") { return false; } return !!(obj2.constructor && obj2.constructor.isBuffer && obj2.constructor.isBuffer(obj2)); } -function maybe_map2(val, fn) { - if (isArray2(val)) { +function maybe_map(val, fn) { + if (isArray(val)) { const mapped = []; for (const item of val) { mapped.push(fn(item)); @@ -21361,25 +3560,25 @@ function maybe_map2(val, fn) { } return fn(val); } -var cachedHas, has2, hex_table2, limit2, encode2; -var init_utils3 = __esm({ +var cachedHas, has, hex_table, limit, encode; +var init_utils = __esm({ "node_modules/openai/internal/qs/utils.mjs"() { - init_formats2(); - init_values2(); - has2 = (obj2, key) => { + init_formats(); + init_values(); + has = (obj2, key) => { const resolvedHas = cachedHas ?? Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty); cachedHas = resolvedHas; return resolvedHas(obj2, key); }; - hex_table2 = /* @__PURE__ */ (() => { + hex_table = /* @__PURE__ */ (() => { const array = []; for (let i = 0; i < 256; ++i) { array.push("%" + ((i < 16 ? "0" : "") + i.toString(16)).toUpperCase()); } return array; })(); - limit2 = 1024; - encode2 = (str2, _defaultEncoder, charset, _kind, format) => { + limit = 1024; + encode = (str2, _defaultEncoder, charset, _kind, format) => { if (str2.length === 0) { return str2; } @@ -21394,11 +3593,11 @@ var init_utils3 = __esm({ } let out = ""; for (let j = 0; j < string2.length; ) { - let segmentEnd = Math.min((Math.floor(j / limit2) + 1) * limit2, string2.length); + let segmentEnd = Math.min((Math.floor(j / limit) + 1) * limit, string2.length); if (segmentEnd < string2.length && string2.codePointAt(segmentEnd - 1) > 65535) { segmentEnd += 1; } - const segment = string2.length >= limit2 ? string2.slice(j, segmentEnd) : string2; + const segment = string2.length >= limit ? string2.slice(j, segmentEnd) : string2; const arr2 = []; for (let i = 0; i < segment.length; ++i) { let c = segment.charCodeAt(i); @@ -21409,25 +3608,25 @@ var init_utils3 = __esm({ c >= 48 && c <= 57 || // 0-9 c >= 65 && c <= 90 || // a-z c >= 97 && c <= 122 || // A-Z - format === RFC17382 && (c === 40 || c === 41)) { + format === RFC1738 && (c === 40 || c === 41)) { arr2[arr2.length] = segment.charAt(i); continue; } if (c < 128) { - arr2[arr2.length] = hex_table2[c]; + arr2[arr2.length] = hex_table[c]; continue; } if (c < 2048) { - arr2[arr2.length] = hex_table2[192 | c >> 6] + hex_table2[128 | c & 63]; + arr2[arr2.length] = hex_table[192 | c >> 6] + hex_table[128 | c & 63]; continue; } if (c < 55296 || c >= 57344) { - arr2[arr2.length] = hex_table2[224 | c >> 12] + hex_table2[128 | c >> 6 & 63] + hex_table2[128 | c & 63]; + arr2[arr2.length] = hex_table[224 | c >> 12] + hex_table[128 | c >> 6 & 63] + hex_table[128 | c & 63]; continue; } i += 1; c = 65536 + ((c & 1023) << 10 | segment.charCodeAt(i) & 1023); - arr2[arr2.length] = hex_table2[240 | c >> 18] + hex_table2[128 | c >> 12 & 63] + hex_table2[128 | c >> 6 & 63] + hex_table2[128 | c & 63]; + arr2[arr2.length] = hex_table[240 | c >> 18] + hex_table[128 | c >> 12 & 63] + hex_table[128 | c >> 6 & 63] + hex_table[128 | c & 63]; } out += arr2.join(""); j = segmentEnd; @@ -21438,15 +3637,15 @@ var init_utils3 = __esm({ }); // node_modules/openai/internal/qs/stringify.mjs -function is_non_nullish_primitive2(v) { +function is_non_nullish_primitive(v) { return typeof v === "string" || typeof v === "number" || typeof v === "boolean" || typeof v === "symbol" || typeof v === "bigint"; } -function inner_stringify2(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder4, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) { +function inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder4, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) { let obj2 = object; let tmp_sc = sideChannel; let step = 0; let find_flag = false; - while ((tmp_sc = tmp_sc.get(sentinel2)) !== void 0 && !find_flag) { + while ((tmp_sc = tmp_sc.get(sentinel)) !== void 0 && !find_flag) { const pos = tmp_sc.get(object); step += 1; if (pos !== void 0) { @@ -21456,7 +3655,7 @@ function inner_stringify2(object, prefix, generateArrayPrefix, commaRoundTrip, a find_flag = true; } } - if (tmp_sc.get(sentinel2) === void 0) { + if (tmp_sc.get(sentinel) === void 0) { step = 0; } } @@ -21464,8 +3663,8 @@ function inner_stringify2(object, prefix, generateArrayPrefix, commaRoundTrip, a obj2 = filter(prefix, obj2); } else if (obj2 instanceof Date) { obj2 = serializeDate?.(obj2); - } else if (generateArrayPrefix === "comma" && isArray2(obj2)) { - obj2 = maybe_map2(obj2, (value2) => { + } else if (generateArrayPrefix === "comma" && isArray(obj2)) { + obj2 = maybe_map(obj2, (value2) => { if (value2 instanceof Date) { return serializeDate?.(value2); } @@ -21476,20 +3675,20 @@ function inner_stringify2(object, prefix, generateArrayPrefix, commaRoundTrip, a if (strictNullHandling) { return encoder4 && !encodeValuesOnly ? ( // @ts-expect-error - encoder4(prefix, defaults2.encoder, charset, "key", format) + encoder4(prefix, defaults.encoder, charset, "key", format) ) : prefix; } obj2 = ""; } - if (is_non_nullish_primitive2(obj2) || is_buffer2(obj2)) { + if (is_non_nullish_primitive(obj2) || is_buffer(obj2)) { if (encoder4) { const key_value = encodeValuesOnly ? prefix : ( // @ts-expect-error - encoder4(prefix, defaults2.encoder, charset, "key", format) + encoder4(prefix, defaults.encoder, charset, "key", format) ); return [ formatter?.(key_value) + "=" + // @ts-expect-error - formatter?.(encoder4(obj2, defaults2.encoder, charset, "value", format)) + formatter?.(encoder4(obj2, defaults.encoder, charset, "value", format)) ]; } return [formatter?.(prefix) + "=" + formatter?.(String(obj2))]; @@ -21499,12 +3698,12 @@ function inner_stringify2(object, prefix, generateArrayPrefix, commaRoundTrip, a return values; } let obj_keys; - if (generateArrayPrefix === "comma" && isArray2(obj2)) { + if (generateArrayPrefix === "comma" && isArray(obj2)) { if (encodeValuesOnly && encoder4) { - obj2 = maybe_map2(obj2, encoder4); + obj2 = maybe_map(obj2, encoder4); } obj_keys = [{ value: obj2.length > 0 ? obj2.join(",") || null : void 0 }]; - } else if (isArray2(filter)) { + } else if (isArray(filter)) { obj_keys = filter; } else { const keys = Object.keys(obj2); @@ -21514,8 +3713,8 @@ function inner_stringify2(object, prefix, generateArrayPrefix, commaRoundTrip, a obj_keys = keys; } const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\./g, "%2E") : String(prefix); - const adjusted_prefix = commaRoundTrip && isArray2(obj2) && obj2.length === 1 ? encoded_prefix + "[]" : encoded_prefix; - if (allowEmptyArrays && isArray2(obj2) && obj2.length === 0) { + const adjusted_prefix = commaRoundTrip && isArray(obj2) && obj2.length === 1 ? encoded_prefix + "[]" : encoded_prefix; + if (allowEmptyArrays && isArray(obj2) && obj2.length === 0) { return adjusted_prefix + "[]"; } for (const key of obj_keys) { @@ -21528,14 +3727,14 @@ function inner_stringify2(object, prefix, generateArrayPrefix, commaRoundTrip, a } const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\./g, "%2E") : key; let key_prefix; - if (isArray2(obj2)) { + if (isArray(obj2)) { key_prefix = typeof generateArrayPrefix === "function" ? generateArrayPrefix(adjusted_prefix, encoded_key) : adjusted_prefix; } else { key_prefix = adjusted_prefix + (allowDots ? "." + encoded_key : "[" + encoded_key + "]"); } sideChannel.set(object, step); - const valueSideChannel = new WeakMap([[sentinel2, sideChannel]]); - push_to_array2(values, inner_stringify2( + const valueSideChannel = new WeakMap([[sentinel, sideChannel]]); + push_to_array(values, inner_stringify( value2, key_prefix, generateArrayPrefix, @@ -21545,7 +3744,7 @@ function inner_stringify2(object, prefix, generateArrayPrefix, commaRoundTrip, a skipNulls, encodeDotInKeys, // @ts-ignore - generateArrayPrefix === "comma" && encodeValuesOnly && isArray2(obj2) ? null : encoder4, + generateArrayPrefix === "comma" && encodeValuesOnly && isArray(obj2) ? null : encoder4, filter, sort, allowDots, @@ -21559,7 +3758,7 @@ function inner_stringify2(object, prefix, generateArrayPrefix, commaRoundTrip, a } return values; } -function normalize_stringify_options2(opts = defaults2) { +function normalize_stringify_options(opts = defaults) { if (opts.allowEmptyArrays !== void 0 && typeof opts.allowEmptyArrays !== "boolean") { throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided"); } @@ -21569,72 +3768,72 @@ function normalize_stringify_options2(opts = defaults2) { if (opts.encoder !== null && opts.encoder !== void 0 && typeof opts.encoder !== "function") { throw new TypeError("Encoder has to be a function."); } - const charset = opts.charset || defaults2.charset; + const charset = opts.charset || defaults.charset; if (opts.charset !== void 0 && opts.charset !== "utf-8" && opts.charset !== "iso-8859-1") { throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined"); } - let format = default_format2; + let format = default_format; if (opts.format !== void 0) { - if (!has2(formatters2, opts.format)) { + if (!has(formatters, opts.format)) { throw new TypeError("Unknown format option provided."); } format = opts.format; } - const formatter = formatters2[format]; - let filter = defaults2.filter; - if (typeof opts.filter === "function" || isArray2(opts.filter)) { + const formatter = formatters[format]; + let filter = defaults.filter; + if (typeof opts.filter === "function" || isArray(opts.filter)) { filter = opts.filter; } let arrayFormat; - if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators2) { + if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) { arrayFormat = opts.arrayFormat; } else if ("indices" in opts) { arrayFormat = opts.indices ? "indices" : "repeat"; } else { - arrayFormat = defaults2.arrayFormat; + arrayFormat = defaults.arrayFormat; } if ("commaRoundTrip" in opts && typeof opts.commaRoundTrip !== "boolean") { throw new TypeError("`commaRoundTrip` must be a boolean, or absent"); } let allowDots; if (opts.allowDots === void 0) { - allowDots = !!opts.encodeDotInKeys === true ? true : defaults2.allowDots; + allowDots = !!opts.encodeDotInKeys === true ? true : defaults.allowDots; } else { allowDots = !!opts.allowDots; } return { - addQueryPrefix: typeof opts.addQueryPrefix === "boolean" ? opts.addQueryPrefix : defaults2.addQueryPrefix, + addQueryPrefix: typeof opts.addQueryPrefix === "boolean" ? opts.addQueryPrefix : defaults.addQueryPrefix, // @ts-ignore allowDots, - allowEmptyArrays: typeof opts.allowEmptyArrays === "boolean" ? !!opts.allowEmptyArrays : defaults2.allowEmptyArrays, + allowEmptyArrays: typeof opts.allowEmptyArrays === "boolean" ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays, arrayFormat, charset, - charsetSentinel: typeof opts.charsetSentinel === "boolean" ? opts.charsetSentinel : defaults2.charsetSentinel, + charsetSentinel: typeof opts.charsetSentinel === "boolean" ? opts.charsetSentinel : defaults.charsetSentinel, commaRoundTrip: !!opts.commaRoundTrip, - delimiter: opts.delimiter === void 0 ? defaults2.delimiter : opts.delimiter, - encode: typeof opts.encode === "boolean" ? opts.encode : defaults2.encode, - encodeDotInKeys: typeof opts.encodeDotInKeys === "boolean" ? opts.encodeDotInKeys : defaults2.encodeDotInKeys, - encoder: typeof opts.encoder === "function" ? opts.encoder : defaults2.encoder, - encodeValuesOnly: typeof opts.encodeValuesOnly === "boolean" ? opts.encodeValuesOnly : defaults2.encodeValuesOnly, + delimiter: opts.delimiter === void 0 ? defaults.delimiter : opts.delimiter, + encode: typeof opts.encode === "boolean" ? opts.encode : defaults.encode, + encodeDotInKeys: typeof opts.encodeDotInKeys === "boolean" ? opts.encodeDotInKeys : defaults.encodeDotInKeys, + encoder: typeof opts.encoder === "function" ? opts.encoder : defaults.encoder, + encodeValuesOnly: typeof opts.encodeValuesOnly === "boolean" ? opts.encodeValuesOnly : defaults.encodeValuesOnly, filter, format, formatter, - serializeDate: typeof opts.serializeDate === "function" ? opts.serializeDate : defaults2.serializeDate, - skipNulls: typeof opts.skipNulls === "boolean" ? opts.skipNulls : defaults2.skipNulls, + serializeDate: typeof opts.serializeDate === "function" ? opts.serializeDate : defaults.serializeDate, + skipNulls: typeof opts.skipNulls === "boolean" ? opts.skipNulls : defaults.skipNulls, // @ts-ignore sort: typeof opts.sort === "function" ? opts.sort : null, - strictNullHandling: typeof opts.strictNullHandling === "boolean" ? opts.strictNullHandling : defaults2.strictNullHandling + strictNullHandling: typeof opts.strictNullHandling === "boolean" ? opts.strictNullHandling : defaults.strictNullHandling }; } -function stringify2(object, opts = {}) { +function stringify(object, opts = {}) { let obj2 = object; - const options = normalize_stringify_options2(opts); + const options = normalize_stringify_options(opts); let obj_keys; let filter; if (typeof options.filter === "function") { filter = options.filter; obj2 = filter("", obj2); - } else if (isArray2(options.filter)) { + } else if (isArray(options.filter)) { filter = options.filter; obj_keys = filter; } @@ -21642,7 +3841,7 @@ function stringify2(object, opts = {}) { if (typeof obj2 !== "object" || obj2 === null) { return ""; } - const generateArrayPrefix = array_prefix_generators2[options.arrayFormat]; + const generateArrayPrefix = array_prefix_generators[options.arrayFormat]; const commaRoundTrip = generateArrayPrefix === "comma" && options.commaRoundTrip; if (!obj_keys) { obj_keys = Object.keys(obj2); @@ -21655,7 +3854,7 @@ function stringify2(object, opts = {}) { if (options.skipNulls && obj2[key] === null) { continue; } - push_to_array2(keys, inner_stringify2( + push_to_array(keys, inner_stringify( obj2[key], key, // @ts-expect-error @@ -21690,13 +3889,13 @@ function stringify2(object, opts = {}) { } return joined.length > 0 ? prefix + joined : ""; } -var array_prefix_generators2, push_to_array2, toISOString2, defaults2, sentinel2; -var init_stringify2 = __esm({ +var array_prefix_generators, push_to_array, toISOString, defaults, sentinel; +var init_stringify = __esm({ "node_modules/openai/internal/qs/stringify.mjs"() { - init_utils3(); - init_formats2(); - init_values2(); - array_prefix_generators2 = { + init_utils(); + init_formats(); + init_values(); + array_prefix_generators = { brackets(prefix) { return String(prefix) + "[]"; }, @@ -21708,10 +3907,10 @@ var init_stringify2 = __esm({ return String(prefix); } }; - push_to_array2 = function push_to_array3(arr2, value_or_array) { - Array.prototype.push.apply(arr2, isArray2(value_or_array) ? value_or_array : [value_or_array]); + push_to_array = function push_to_array2(arr2, value_or_array) { + Array.prototype.push.apply(arr2, isArray(value_or_array) ? value_or_array : [value_or_array]); }; - defaults2 = { + defaults = { addQueryPrefix: false, allowDots: false, allowEmptyArrays: false, @@ -21721,29 +3920,29 @@ var init_stringify2 = __esm({ delimiter: "&", encode: true, encodeDotInKeys: false, - encoder: encode2, + encoder: encode, encodeValuesOnly: false, - format: default_format2, - formatter: default_formatter2, + format: default_format, + formatter: default_formatter, /** @deprecated */ indices: false, serializeDate(date) { - return (toISOString2 ?? (toISOString2 = Function.prototype.call.bind(Date.prototype.toISOString)))(date); + return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date); }, skipNulls: false, strictNullHandling: false }; - sentinel2 = {}; + sentinel = {}; } }); // node_modules/openai/internal/utils/query.mjs -function stringifyQuery2(query) { - return stringify2(query, { arrayFormat: "brackets" }); +function stringifyQuery(query) { + return stringify(query, { arrayFormat: "brackets" }); } -var init_query2 = __esm({ +var init_query = __esm({ "node_modules/openai/internal/utils/query.mjs"() { - init_stringify2(); + init_stringify(); } }); @@ -21752,7 +3951,7 @@ function resolveDataResidency(options) { if (options.dataResidency === null || options.dataResidency === void 0) { return void 0; } - if (hasOwn2(options, "baseURL")) { + if (hasOwn(options, "baseURL")) { throw new OpenAIError("The `dataResidency` and `baseURL` options are mutually exclusive."); } const endpoint = endpoints.get(options.dataResidency); @@ -21764,8 +3963,8 @@ function resolveDataResidency(options) { var endpoints; var init_data_residency = __esm({ "node_modules/openai/internal/data-residency.mjs"() { - init_error3(); - init_values2(); + init_error(); + init_values(); endpoints = /* @__PURE__ */ new Map([ ["global", "https://api.openai.com/v1"], ["us", "https://us.api.openai.com/v1"], @@ -21776,23 +3975,23 @@ var init_data_residency = __esm({ }); // node_modules/openai/core/api-promise.mjs -var _APIPromise_client2, APIPromise2; -var init_api_promise2 = __esm({ +var _APIPromise_client, APIPromise; +var init_api_promise = __esm({ "node_modules/openai/core/api-promise.mjs"() { - init_tslib2(); - init_parse2(); - APIPromise2 = class _APIPromise extends Promise { - constructor(client, responsePromise, parseResponse2 = defaultParseResponse2) { + init_tslib(); + init_parse(); + APIPromise = class _APIPromise extends Promise { + constructor(client, responsePromise, parseResponse2 = defaultParseResponse) { super((resolve2) => { resolve2(null); }); this.responsePromise = responsePromise; this.parseResponse = parseResponse2; - _APIPromise_client2.set(this, void 0); - __classPrivateFieldSet2(this, _APIPromise_client2, client, "f"); + _APIPromise_client.set(this, void 0); + __classPrivateFieldSet(this, _APIPromise_client, client, "f"); } _thenUnwrap(transform) { - return new _APIPromise(__classPrivateFieldGet2(this, _APIPromise_client2, "f"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response)); + return new _APIPromise(__classPrivateFieldGet(this, _APIPromise_client, "f"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response)); } /** * Gets the raw `Response` instance instead of parsing the response @@ -21826,7 +4025,7 @@ var init_api_promise2 = __esm({ } parse() { if (!this.parsedPromise) { - this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet2(this, _APIPromise_client2, "f"), data)); + this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, "f"), data)); } return this.parsedPromise; } @@ -21840,23 +4039,23 @@ var init_api_promise2 = __esm({ return this.parse().finally(onfinally); } }; - _APIPromise_client2 = /* @__PURE__ */ new WeakMap(); + _APIPromise_client = /* @__PURE__ */ new WeakMap(); } }); // node_modules/openai/core/pagination.mjs -var _AbstractPage_client2, AbstractPage2, PagePromise2, Page2, CursorPage, ConversationCursorPage, NextCursorPage, TokenPage; -var init_pagination2 = __esm({ +var _AbstractPage_client, AbstractPage, PagePromise, Page, CursorPage, ConversationCursorPage, NextCursorPage, TokenPage; +var init_pagination = __esm({ "node_modules/openai/core/pagination.mjs"() { - init_tslib2(); - init_error3(); - init_parse2(); - init_api_promise2(); - init_values2(); - AbstractPage2 = class { + init_tslib(); + init_error(); + init_parse(); + init_api_promise(); + init_values(); + AbstractPage = class { constructor(client, response, body, options) { - _AbstractPage_client2.set(this, void 0); - __classPrivateFieldSet2(this, _AbstractPage_client2, client, "f"); + _AbstractPage_client.set(this, void 0); + __classPrivateFieldSet(this, _AbstractPage_client, client, "f"); this.options = options; this.response = response; this.body = body; @@ -21872,7 +4071,7 @@ var init_pagination2 = __esm({ if (!nextOptions) { throw new OpenAIError("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`."); } - return await __classPrivateFieldGet2(this, _AbstractPage_client2, "f").requestAPIList(this.constructor, nextOptions); + return await __classPrivateFieldGet(this, _AbstractPage_client, "f").requestAPIList(this.constructor, nextOptions); } async *iterPages() { let page2 = this; @@ -21882,7 +4081,7 @@ var init_pagination2 = __esm({ yield page2; } } - async *[(_AbstractPage_client2 = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() { + async *[(_AbstractPage_client = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() { for await (const page2 of this.iterPages()) { for (const item of page2.getPaginatedItems()) { yield item; @@ -21890,9 +4089,9 @@ var init_pagination2 = __esm({ } } }; - PagePromise2 = class extends APIPromise2 { + PagePromise = class extends APIPromise { constructor(client, request2, Page3) { - super(client, request2, async (client2, props) => new Page3(client2, props.response, await defaultParseResponse2(client2, props), props.options)); + super(client, request2, async (client2, props) => new Page3(client2, props.response, await defaultParseResponse(client2, props), props.options)); } /** * Allow auto-paginating iteration on an unawaited list call, eg: @@ -21908,7 +4107,7 @@ var init_pagination2 = __esm({ } } }; - Page2 = class extends AbstractPage2 { + Page = class extends AbstractPage { constructor(client, response, body, options) { super(client, response, body, options); this.data = body.data || []; @@ -21921,7 +4120,7 @@ var init_pagination2 = __esm({ return null; } }; - CursorPage = class extends AbstractPage2 { + CursorPage = class extends AbstractPage { constructor(client, response, body, options) { super(client, response, body, options); this.data = body.data || []; @@ -21945,13 +4144,13 @@ var init_pagination2 = __esm({ return { ...this.options, query: { - ...maybeObj2(this.options.query), + ...maybeObj(this.options.query), after: id } }; } }; - ConversationCursorPage = class extends AbstractPage2 { + ConversationCursorPage = class extends AbstractPage { constructor(client, response, body, options) { super(client, response, body, options); this.data = body.data || []; @@ -21975,13 +4174,13 @@ var init_pagination2 = __esm({ return { ...this.options, query: { - ...maybeObj2(this.options.query), + ...maybeObj(this.options.query), after: cursor } }; } }; - NextCursorPage = class extends AbstractPage2 { + NextCursorPage = class extends AbstractPage { constructor(client, response, body, options) { super(client, response, body, options); this.data = body.data || []; @@ -22005,13 +4204,13 @@ var init_pagination2 = __esm({ return { ...this.options, query: { - ...maybeObj2(this.options.query), + ...maybeObj(this.options.query), after: cursor } }; } }; - TokenPage = class extends AbstractPage2 { + TokenPage = class extends AbstractPage { constructor(client, response, body, options) { super(client, response, body, options); this.data = body.data || []; @@ -22035,7 +4234,7 @@ var init_pagination2 = __esm({ return { ...this.options, query: { - ...maybeObj2(this.options.query), + ...maybeObj(this.options.query), page: cursor } }; @@ -22125,8 +4324,8 @@ function isUnsafeAccessToken(accessToken) { var SUBJECT_TOKEN_TYPES, TOKEN_EXCHANGE_GRANT_TYPE, MAX_REFRESH_BUFFER_FRACTION, NATIVE_RESPONSE_PROTOTYPE, READ_NATIVE_RESPONSE_BODY, WorkloadIdentityAuth; var init_workload_identity_auth = __esm({ "node_modules/openai/auth/workload-identity-auth.mjs"() { - init_shims2(); - init_error3(); + init_shims(); + init_error(); SUBJECT_TOKEN_TYPES = { jwt: "urn:ietf:params:oauth:token-type:jwt", id: "urn:ietf:params:oauth:token-type:id_token" @@ -22142,7 +4341,7 @@ var init_workload_identity_auth = __esm({ * @param config External identity provider, OpenAI service account, and refresh settings. * @param fetch Optional fetch implementation for calls to the OpenAI token endpoint. */ - constructor(config2, fetch3) { + constructor(config2, fetch2) { this.cachedToken = null; this.refreshPromise = null; this.tokenGeneration = 0; @@ -22160,7 +4359,7 @@ var init_workload_identity_auth = __esm({ getToken: provider2.getToken.bind(provider2) } }; - this.fetch = fetch3 ?? getDefaultFetch2(); + this.fetch = fetch2 ?? getDefaultFetch(); } /** * Returns a valid OpenAI access token, exchanging or refreshing credentials as needed. @@ -22229,7 +4428,7 @@ var init_workload_identity_auth = __esm({ if (response.status === 400 || response.status === 401 || response.status === 403) { throw new OAuthError(response.status, body2, response.headers); } - throw APIError2.generate(response.status, body2, `Token exchange failed with status ${response.status}`, response.headers); + throw APIError.generate(response.status, body2, `Token exchange failed with status ${response.status}`, response.headers); } const tokenResponse = await parseOAuthTokenResponse(response); const accessToken = typeof tokenResponse === "object" && tokenResponse !== null && "access_token" in tokenResponse ? tokenResponse.access_token : void 0; @@ -22284,17 +4483,17 @@ function assertX509APIOrigin(value2) { var X509_API_BASE_URL; var init_x509_api_origin = __esm({ "node_modules/openai/internal/auth/x509-api-origin.mjs"() { - init_error3(); - init_log2(); + init_error(); + init_log(); X509_API_BASE_URL = "https://mtls.api.openai.com/v1"; } }); // node_modules/openai/internal/headers.mjs -function* iterateHeaders2(headers) { +function* iterateHeaders(headers) { if (!headers) return; - if (brand_privateNullableHeaders2 in headers) { + if (brand_privateNullableHeaders in headers) { const { values, nulls } = headers; yield* values.entries(); for (const name of nulls) { @@ -22315,7 +4514,7 @@ function* iterateHeaders2(headers) { const name = row[0]; if (typeof name !== "string") throw new TypeError("expected header name to be a string"); - const values = isReadonlyArray2(row[1]) ? row[1] : [row[1]]; + const values = isReadonlyArray(row[1]) ? row[1] : [row[1]]; let didClear = false; for (const value2 of values) { if (value2 === void 0) @@ -22328,18 +4527,18 @@ function* iterateHeaders2(headers) { } } } -var brand_privateNullableHeaders2, httpTokenHeaderName, buildHeaders2; -var init_headers3 = __esm({ +var brand_privateNullableHeaders, httpTokenHeaderName, buildHeaders; +var init_headers = __esm({ "node_modules/openai/internal/headers.mjs"() { - init_values2(); - brand_privateNullableHeaders2 = /* @__PURE__ */ Symbol("brand.privateNullableHeaders"); + init_values(); + brand_privateNullableHeaders = /* @__PURE__ */ Symbol("brand.privateNullableHeaders"); httpTokenHeaderName = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/; - buildHeaders2 = (newHeaders) => { + buildHeaders = (newHeaders) => { const targetHeaders = new Headers(); const nullHeaders = /* @__PURE__ */ new Set(); for (const headers of newHeaders) { const seenHeaders = /* @__PURE__ */ new Set(); - for (const [name, value2] of iterateHeaders2(headers)) { + for (const [name, value2] of iterateHeaders(headers)) { if (!httpTokenHeaderName.test(name)) { throw new TypeError(`Header name must be a valid HTTP token ["${name}"]`); } @@ -22357,7 +4556,7 @@ var init_headers3 = __esm({ } } } - return { [brand_privateNullableHeaders2]: true, values: targetHeaders, nulls: nullHeaders }; + return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders }; }; } }); @@ -22468,7 +4667,7 @@ function resolveX509Transport(value2) { } var init_x509_transport_registry = __esm({ "node_modules/openai/internal/auth/x509-transport-registry.mjs"() { - init_error3(); + init_error(); init_x509_transport_state(); } }); @@ -22484,7 +4683,7 @@ function assertSafeHeaders(headers) { } function exchangeDeadline(timeout, callerSignal) { const deadline = new AbortController(); - const timer = timeout === void 0 ? void 0 : setTimeout(() => deadline.abort(new APIConnectionTimeoutError2()), timeout); + const timer = timeout === void 0 ? void 0 : setTimeout(() => deadline.abort(new APIConnectionTimeoutError()), timeout); const timerHandle = timer; if (typeof timerHandle === "object" && timerHandle !== null && "unref" in timerHandle && typeof timerHandle.unref === "function") { timerHandle.unref(); @@ -22555,7 +4754,7 @@ function assertX509FetchOptions(options) { return; } for (const name of FORBIDDEN_TRANSPORT_OPTIONS) { - if (hasOwn2(options, name)) { + if (hasOwn(options, name)) { throw new OpenAIError("X.509 workload identity cannot override its approved transport capability."); } } @@ -22566,7 +4765,7 @@ function assertX509FetchOptions(options) { } function assertX509RequestOptions(options) { assertX509FetchOptions(options); - if (options && ["body", "headers", "method", "signal"].some((name) => hasOwn2(options, name))) { + if (options && ["body", "headers", "method", "signal"].some((name) => hasOwn(options, name))) { throw new OpenAIError("X.509 workload identity cannot override its request body, headers, method, or signal through fetch options."); } } @@ -22576,15 +4775,15 @@ function snapshotX509RequestOptions(options) { assertX509RequestOptions(snapshot); return snapshot; } -var _X509WorkloadIdentityAuth_instances, _a2, _X509WorkloadIdentityAuth_identityProviderId, _X509WorkloadIdentityAuth_serviceAccountId, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, _X509WorkloadIdentityAuth_organization, _X509WorkloadIdentityAuth_project, _X509WorkloadIdentityAuth_transport, _X509WorkloadIdentityAuth_refreshBufferMs, _X509WorkloadIdentityAuth_cachedToken, _X509WorkloadIdentityAuth_refresh, _X509WorkloadIdentityAuth_tokenGeneration, _X509WorkloadIdentityAuth_cancelRequestBody, _X509WorkloadIdentityAuth_assignToken, _X509WorkloadIdentityAuth_recoverRefreshFailure, _X509WorkloadIdentityAuth_fallbackToken, _X509WorkloadIdentityAuth_retireRefresh, _X509WorkloadIdentityAuth_beginRefresh, _X509WorkloadIdentityAuth_refreshToken, _X509WorkloadIdentityAuth_preflight, _X509WorkloadIdentityAuth_scope, _X509WorkloadIdentityAuth_assertTenantHeaders, FORBIDDEN_TRANSPORT_OPTIONS, headerValue, DEFAULT_REFRESH_BUFFER_MS, FAILED_REFRESH_COOLDOWN_MS, userAbortError, X509WorkloadIdentityAuth; +var _X509WorkloadIdentityAuth_instances, _a, _X509WorkloadIdentityAuth_identityProviderId, _X509WorkloadIdentityAuth_serviceAccountId, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, _X509WorkloadIdentityAuth_organization, _X509WorkloadIdentityAuth_project, _X509WorkloadIdentityAuth_transport, _X509WorkloadIdentityAuth_refreshBufferMs, _X509WorkloadIdentityAuth_cachedToken, _X509WorkloadIdentityAuth_refresh, _X509WorkloadIdentityAuth_tokenGeneration, _X509WorkloadIdentityAuth_cancelRequestBody, _X509WorkloadIdentityAuth_assignToken, _X509WorkloadIdentityAuth_recoverRefreshFailure, _X509WorkloadIdentityAuth_fallbackToken, _X509WorkloadIdentityAuth_retireRefresh, _X509WorkloadIdentityAuth_beginRefresh, _X509WorkloadIdentityAuth_refreshToken, _X509WorkloadIdentityAuth_preflight, _X509WorkloadIdentityAuth_scope, _X509WorkloadIdentityAuth_assertTenantHeaders, FORBIDDEN_TRANSPORT_OPTIONS, headerValue, DEFAULT_REFRESH_BUFFER_MS, FAILED_REFRESH_COOLDOWN_MS, userAbortError, X509WorkloadIdentityAuth; var init_x509_workload_identity_auth = __esm({ "node_modules/openai/internal/auth/x509-workload-identity-auth.mjs"() { - init_tslib2(); - init_error3(); - init_headers3(); - init_shims2(); - init_log2(); - init_values2(); + init_tslib(); + init_error(); + init_headers(); + init_shims(); + init_log(); + init_values(); init_x509_api_origin(); init_x509_transport_registry(); init_x509_transport_state(); @@ -22593,7 +4792,7 @@ var init_x509_workload_identity_auth = __esm({ DEFAULT_REFRESH_BUFFER_MS = 20 * 60 * 1e3; FAILED_REFRESH_COOLDOWN_MS = 1e3; userAbortError = (signal) => { - const error = new APIUserAbortError2(); + const error = new APIUserAbortError(); Object.defineProperty(error, "cause", { value: signal.reason, writable: true, configurable: true }); return error; }; @@ -22612,50 +4811,50 @@ var init_x509_workload_identity_auth = __esm({ _X509WorkloadIdentityAuth_cachedToken.set(this, void 0); _X509WorkloadIdentityAuth_refresh.set(this, void 0); _X509WorkloadIdentityAuth_tokenGeneration.set(this, 0); - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_transport, resolveX509Transport(transport), "f"); - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_identityProviderId, identity.identityProviderId, "f"); - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_serviceAccountId, identity.serviceAccountId, "f"); - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, identity.refreshBufferMs, "f"); - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, identity.refreshBufferSeconds, "f"); - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_organization, organization, "f"); - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_project, project, "f"); - if (__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") !== void 0 && __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") !== void 0) { + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_transport, resolveX509Transport(transport), "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_identityProviderId, identity.identityProviderId, "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_serviceAccountId, identity.serviceAccountId, "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, identity.refreshBufferMs, "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, identity.refreshBufferSeconds, "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_organization, organization, "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_project, project, "f"); + if (__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") !== void 0 && __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") !== void 0) { throw new OpenAIError("X.509 workload identity cannot combine refreshBufferSeconds and refreshBufferMs."); } - if (__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") !== void 0 && (!Number.isSafeInteger(__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f")) || __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") < 0)) { + if (__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") !== void 0 && (!Number.isSafeInteger(__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f")) || __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") < 0)) { throw new OpenAIError("X.509 workload identity requires a nonnegative integer refreshBufferMs."); } - if (__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") !== void 0 && (!Number.isSafeInteger(__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f")) || __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") < 0 || !Number.isSafeInteger(__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") * 1e3))) { + if (__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") !== void 0 && (!Number.isSafeInteger(__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f")) || __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") < 0 || !Number.isSafeInteger(__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") * 1e3))) { throw new OpenAIError("X.509 workload identity requires a nonnegative integer refreshBufferSeconds."); } - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_refreshBufferMs, __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") === void 0 ? __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") ?? DEFAULT_REFRESH_BUFFER_MS : __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") * 1e3, "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_refreshBufferMs, __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") === void 0 ? __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") ?? DEFAULT_REFRESH_BUFFER_MS : __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") * 1e3, "f"); } /** Reconstructs the immutable selectors captured before caller-owned identity mutation. */ identitySnapshot() { return { type: "x509", - identityProviderId: __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_identityProviderId, "f"), - serviceAccountId: __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_serviceAccountId, "f"), + identityProviderId: __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_identityProviderId, "f"), + serviceAccountId: __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_serviceAccountId, "f"), // Spread creates an own data property without invoking inherited setters or changing the object prototype. - ...__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") === void 0 ? {} : { refreshBufferMs: __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") }, + ...__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") === void 0 ? {} : { refreshBufferMs: __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferMs, "f") }, // Spread creates an own data property without invoking inherited setters or changing the object prototype. - ...__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") === void 0 ? {} : { refreshBufferSeconds: __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") } + ...__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") === void 0 ? {} : { refreshBufferSeconds: __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds, "f") } }; } /** Preserves explicitly headerless requests without presenting a certificate to the issuer. */ static shouldAuthenticate(options, defaultHeaders, requestHeaders = options.headers) { - return !buildHeaders2([defaultHeaders, requestHeaders]).nulls.has("authorization"); + return !buildHeaders([defaultHeaders, requestHeaders]).nulls.has("authorization"); } /** Snapshots each caller-owned header layer once while preserving nulls and precedence. */ snapshotHeaders(defaultHeaders, requestHeaders) { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); - scope.defaultHeaders ?? (scope.defaultHeaders = buildHeaders2([defaultHeaders])); - scope.requestHeaders ?? (scope.requestHeaders = buildHeaders2([requestHeaders])); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + scope.defaultHeaders ?? (scope.defaultHeaders = buildHeaders([defaultHeaders])); + scope.requestHeaders ?? (scope.requestHeaders = buildHeaders([requestHeaders])); return this.headerSnapshots(); } /** Returns the already rendered caller headers without touching mutable inputs again. */ headerSnapshots() { - const { defaultHeaders, requestHeaders } = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const { defaultHeaders, requestHeaders } = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); if (!defaultHeaders || !requestHeaders) { throw new OpenAIError("X.509 workload identity requires snapshotted request headers."); } @@ -22663,16 +4862,16 @@ var init_x509_workload_identity_auth = __esm({ } /** Captures enrolled public tenant selectors once before certificate presentation. */ snapshotTenant(organization, project) { - if (organization !== __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_organization, "f") || project !== __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_project, "f")) { + if (organization !== __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_organization, "f") || project !== __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_project, "f")) { throw new OpenAIError("X.509 workload identity cannot override its enrolled organization or project."); } - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); scope.tenant = { organization, project }; return scope.tenant; } /** Returns the tenant selectors already approved for this logical request. */ tenantSnapshot() { - const { tenant } = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const { tenant } = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); if (!tenant) { throw new OpenAIError("X.509 workload identity requires snapshotted tenant selectors."); } @@ -22681,11 +4880,11 @@ var init_x509_workload_identity_auth = __esm({ /** Validates and retains the exact destination that authenticated dispatch will use. */ snapshotAPIURL(value2) { assertX509APIOrigin(value2); - __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).apiURL = value2; + __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).apiURL = value2; } /** Reads the already-approved destination without rerendering caller-owned request options. */ requestAPIURL() { - const { apiURL } = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const { apiURL } = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); if (apiURL === void 0) { throw new OpenAIError("X.509 workload identity requires a snapshotted API destination."); } @@ -22694,11 +4893,11 @@ var init_x509_workload_identity_auth = __esm({ /** Captures the exact caller settings approved for authenticated dispatch. */ snapshotRequest(signal, timeout, fetchOptions) { var _b; - (_b = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this)).request ?? (_b.request = { signal, timeout, fetchOptions }); + (_b = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this)).request ?? (_b.request = { signal, timeout, fetchOptions }); } /** Returns immutable request settings without invoking caller-owned accessors again. */ requestSnapshot() { - const { request: request2 } = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const { request: request2 } = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); if (!request2) { throw new OpenAIError("X.509 workload identity requires snapshotted request settings."); } @@ -22706,7 +4905,7 @@ var init_x509_workload_identity_auth = __esm({ } /** Suspends an already-running network budget during retry-local asynchronous preparation. */ beginRequestPreparation() { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); if (scope.deadlineArmed && scope.preparationStartedAt === void 0) { scope.preparationStartedAt = performance.now(); scope.preparationWallStartedAt = Date.now(); @@ -22714,11 +4913,11 @@ var init_x509_workload_identity_auth = __esm({ } /** Begins local request construction without charging protected hook latency to the network. */ beginRequestPlanning() { - __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).phase = "planning"; + __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).phase = "planning"; } /** Arms one absolute network deadline only after all local request preparation completes. */ beginRequestNetwork() { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); if (!scope.deadlineArmed) { scope.wallStartedAt = Date.now(); scope.monotonicStartedAt = performance.now(); @@ -22732,11 +4931,11 @@ var init_x509_workload_identity_auth = __esm({ } /** Keeps certificate authentication outside overridable request construction. */ isPlanningRequest() { - return __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).phase === "planning"; + return __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).phase === "planning"; } /** Approves the final overridden destination and transport before minting a bearer. */ authorizePlannedRequest(url, request2, timeout, allowHookSignal = false) { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); const headers = Object.getOwnPropertyDescriptor(request2, "headers"); const body = Object.getOwnPropertyDescriptor(request2, "body"); const signal = Object.getOwnPropertyDescriptor(request2, "signal"); @@ -22754,7 +4953,7 @@ var init_x509_workload_identity_auth = __esm({ if (headerValue(headers.value, "Authorization") !== null) { throw new OpenAIError("X.509 workload identity cannot use caller-supplied authorization credentials."); } - __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_assertTenantHeaders).call(this, headers.value); + __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_assertTenantHeaders).call(this, headers.value); if (!allowHookSignal && (signal?.value ?? void 0) !== (this.requestSnapshot().signal ?? void 0)) { throw new OpenAIError("X.509 workload identity must preserve its approved request signal."); } @@ -22765,7 +4964,7 @@ var init_x509_workload_identity_auth = __esm({ /** Owns only SDK-created iterator adapters until authenticated dispatch takes responsibility. */ ownRequestBody(body, source) { if (body instanceof ReadableStream && body !== source) { - __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).materializedBody = body; + __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).materializedBody = body; } } /** Recognizes every one-shot upload before issuer authentication or request replay. */ @@ -22774,16 +4973,16 @@ var init_x509_workload_identity_auth = __esm({ } /** Retires abandoned upload adapters without masking or blocking their authentication failure. */ retireRequestBody() { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); const body = scope.materializedBody; delete scope.materializedBody; if (body) { - void __classPrivateFieldGet2(_a2, _a2, "m", _X509WorkloadIdentityAuth_cancelRequestBody).call(_a2, body); + void __classPrivateFieldGet(_a, _a, "m", _X509WorkloadIdentityAuth_cancelRequestBody).call(_a, body); } } /** Transfers the dispatched upload while retiring any SDK-owned body replaced by a hook. */ releaseRequestBody(body) { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); if (scope.materializedBody === body) { delete scope.materializedBody; } else { @@ -22793,21 +4992,21 @@ var init_x509_workload_identity_auth = __esm({ /** Retains caller-only cancellation separately from SDK-created deadline controllers. */ setEffectiveSignal(signal) { if (signal) { - __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).effectiveSignal = signal; + __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).effectiveSignal = signal; } else { - delete __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).effectiveSignal; + delete __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this).effectiveSignal; } } /** Uses protected-hook cancellation when an authenticated attempt enters retry backoff. */ effectiveSignal() { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); return scope.effectiveSignal ?? scope.request?.signal; } /** Establishes an independent scope even when concurrent requests share caller options. */ // oxlint-disable-next-line anti-slop/no-object-parameters -- Logical request owners are opaque identity tokens; their properties are never read. runRequest(operation, requestOwner) { - return __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").run(async () => { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").current(); + return __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").run(async () => { + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").current(); if (!scope) { throw new OpenAIError("X.509 workload identity requires an active certificate request scope."); } @@ -22826,16 +5025,16 @@ var init_x509_workload_identity_auth = __esm({ /** Reports whether a public request-building call already belongs to an active logical operation. */ // oxlint-disable-next-line anti-slop/no-object-parameters -- Request scope membership compares the opaque caller token by identity only. inRequest(requestOwner) { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").current(); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").current(); return scope?.owner === this && scope.requestOwner === requestOwner && scope.phase !== "authorizing"; } /** Shares a cache only when the complete, privately snapshotted credential identity matches. */ matches(other) { - return __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f") === __classPrivateFieldGet2(other, _X509WorkloadIdentityAuth_transport, "f") && __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_identityProviderId, "f") === __classPrivateFieldGet2(other, _X509WorkloadIdentityAuth_identityProviderId, "f") && __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_serviceAccountId, "f") === __classPrivateFieldGet2(other, _X509WorkloadIdentityAuth_serviceAccountId, "f") && __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_organization, "f") === __classPrivateFieldGet2(other, _X509WorkloadIdentityAuth_organization, "f") && __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_project, "f") === __classPrivateFieldGet2(other, _X509WorkloadIdentityAuth_project, "f") && __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_refreshBufferMs, "f") === __classPrivateFieldGet2(other, _X509WorkloadIdentityAuth_refreshBufferMs, "f"); + return __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f") === __classPrivateFieldGet(other, _X509WorkloadIdentityAuth_transport, "f") && __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_identityProviderId, "f") === __classPrivateFieldGet(other, _X509WorkloadIdentityAuth_identityProviderId, "f") && __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_serviceAccountId, "f") === __classPrivateFieldGet(other, _X509WorkloadIdentityAuth_serviceAccountId, "f") && __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_organization, "f") === __classPrivateFieldGet(other, _X509WorkloadIdentityAuth_organization, "f") && __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_project, "f") === __classPrivateFieldGet(other, _X509WorkloadIdentityAuth_project, "f") && __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_refreshBufferMs, "f") === __classPrivateFieldGet(other, _X509WorkloadIdentityAuth_refreshBufferMs, "f"); } /** Binds deferred response parsing to the original logical request and its unchanged deadline. */ continuation() { - const { wallStartedAt, monotonicStartedAt, deadlineArmed, request: request2, requestOwner, effectiveSignal } = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const { wallStartedAt, monotonicStartedAt, deadlineArmed, request: request2, requestOwner, effectiveSignal } = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); const scope = { wallStartedAt, monotonicStartedAt, @@ -22849,7 +5048,7 @@ var init_x509_workload_identity_auth = __esm({ // Spread creates an own data property without invoking inherited setters or changing the object prototype. ...requestOwner ? { requestOwner } : {} }; - return (operation) => __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").resume(scope, async () => { + return (operation) => __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").resume(scope, async () => { try { return await operation(); } finally { @@ -22861,7 +5060,7 @@ var init_x509_workload_identity_auth = __esm({ } /** Removes dispatched bearer material before settled request promises can retain their scope. */ releaseRequestCredentials() { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); delete scope.request; delete scope.phase; delete scope.deadlineArmed; @@ -22880,28 +5079,28 @@ var init_x509_workload_identity_auth = __esm({ } /** Returns the original authentication start so response consumption shares its request deadline. */ requestStartedAt(_options) { - return __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").current()?.wallStartedAt; + return __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").current()?.wallStartedAt; } /** Distinguishes issued workload credentials from independent admin or headerless requests. */ usedWorkloadToken(_options) { - return __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").current()?.token !== void 0; + return __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").current()?.token !== void 0; } /** Returns the budget left after certificate authentication without starting another timeout. */ remainingTimeout(_options, timeout) { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").current(); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").current(); if (scope === void 0) { return timeout; } const remaining = timeout - (performance.now() - scope.monotonicStartedAt); if (remaining <= 0) { - throw new APIConnectionTimeoutError2(); + throw new APIConnectionTimeoutError(); } return remaining; } /** Cancels active retry timers promptly without changing public caller-abort semantics. */ async waitForRetry(duration, signal) { try { - await __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").sleep(duration, signal); + await __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").sleep(duration, signal); } catch (error) { if (signal?.aborted) { throw userAbortError(signal); @@ -22930,11 +5129,11 @@ var init_x509_workload_identity_auth = __esm({ if (options) { assertX509RequestOptions(context ? context.fetchOptions : options.fetchOptions); } - __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_preflight).call(this, context); - const scope = options ? __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this) : void 0; - const cached = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_cachedToken, "f"); + __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_preflight).call(this, context); + const scope = options ? __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this) : void 0; + const cached = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_cachedToken, "f"); if (cached && performance.now() < cached.refreshAt && Date.now() < cached.wallRefreshAt) { - return __classPrivateFieldGet2(_a2, _a2, "m", _X509WorkloadIdentityAuth_assignToken).call(_a2, scope, cached); + return __classPrivateFieldGet(_a, _a, "m", _X509WorkloadIdentityAuth_assignToken).call(_a, scope, cached); } const remaining = context && options ? this.remainingTimeout(options, context.timeout) : context?.timeout; const { signal, dispose } = exchangeDeadline(remaining, callerSignal); @@ -22942,43 +5141,43 @@ var init_x509_workload_identity_auth = __esm({ dispose(); throw userAbortError(callerSignal); } - const attempt = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_refresh, "f") ?? __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_beginRefresh).call(this); + const attempt = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_refresh, "f") ?? __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_beginRefresh).call(this); attempt.waiters += 1; const waiter = waitForRefresh(attempt, signal); try { const exchanged = await waiter.result; - const refreshed = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_cachedToken, "f"); + const refreshed = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_cachedToken, "f"); if (!refreshed || refreshed.accessToken !== exchanged.accessToken) { - throw new APIUserAbortError2(); + throw new APIUserAbortError(); } - return __classPrivateFieldGet2(_a2, _a2, "m", _X509WorkloadIdentityAuth_assignToken).call(_a2, scope, refreshed); + return __classPrivateFieldGet(_a, _a, "m", _X509WorkloadIdentityAuth_assignToken).call(_a, scope, refreshed); } catch (error) { - return await __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_recoverRefreshFailure).call(this, error, attempt, cached, scope, options, context); + return await __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_recoverRefreshFailure).call(this, error, attempt, cached, scope, options, context); } finally { waiter.dispose(); dispose(); attempt.waiters -= 1; - __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_retireRefresh).call(this, attempt); + __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_retireRefresh).call(this, attempt); } } /** Invalidates only the workload-token generation actually rejected by the current request. */ invalidateToken() { - const rejected = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").current(); - if (!rejected?.token || __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_cachedToken, "f")?.accessToken !== rejected.token || __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_cachedToken, "f").generation !== rejected.tokenGeneration) { + const rejected = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").current(); + if (!rejected?.token || __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_cachedToken, "f")?.accessToken !== rejected.token || __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_cachedToken, "f").generation !== rejected.tokenGeneration) { return; } - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_tokenGeneration, __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_tokenGeneration, "f") + 1, "f"); - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_cachedToken, void 0, "f"); - const refresh = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_refresh, "f"); - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_refresh, void 0, "f"); - refresh?.controller.abort(new APIUserAbortError2()); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_tokenGeneration, __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_tokenGeneration, "f") + 1, "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_cachedToken, void 0, "f"); + const refresh = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_refresh, "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_refresh, void 0, "f"); + refresh?.controller.abort(new APIUserAbortError()); } /** Binds the minted credential to the original headers before protected request hooks run. */ bindRequest(options, request2, adminAPIKey) { if (!(request2.headers instanceof Headers)) { throw new OpenAIError("X.509 workload identity requires the original workload authorization headers."); } - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); const { token } = scope; const security = options.__security ?? { bearerAuth: true }; let approvedAuthorization = token ? `Bearer ${token}` : null; @@ -22991,7 +5190,7 @@ var init_x509_workload_identity_auth = __esm({ } /** Rebinds an equivalent protected-hook container without relaxing final dispatch identity checks. */ adoptRequestHeaders(request2) { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_scope).call(this); const original = scope.headers; if (!(original instanceof Headers) || !(request2.headers instanceof Headers)) { throw new OpenAIError("X.509 workload identity must preserve its issued workload authorization."); @@ -23010,11 +5209,11 @@ var init_x509_workload_identity_auth = __esm({ if (!(headers instanceof Headers)) { throw new OpenAIError("X.509 workload identity must preserve its issued workload authorization."); } - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").current(); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").current(); if (!scope || scope.headers !== headers || scope.authorization === void 0 || headerValue(headers, "Authorization") !== scope.authorization) { throw new OpenAIError("X.509 workload identity must preserve its issued workload authorization."); } - __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_assertTenantHeaders).call(this, headers); + __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_assertTenantHeaders).call(this, headers); assertSafeHeaders(headers); } /** Returns a guarded final dispatcher while preserving all existing request hook object identities. */ @@ -23031,13 +5230,13 @@ var init_x509_workload_identity_auth = __esm({ assertSafeHeaders(headers); init.headers = headers; init.redirect = "manual"; - return await __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").dispatch(target, init); + return await __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").dispatch(target, init); }; } }; - _a2 = X509WorkloadIdentityAuth, _X509WorkloadIdentityAuth_identityProviderId = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_serviceAccountId = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_configuredRefreshBufferMs = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_organization = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_project = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_transport = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_refreshBufferMs = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_cachedToken = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_refresh = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_tokenGeneration = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_instances = /* @__PURE__ */ new WeakSet(), _X509WorkloadIdentityAuth_cancelRequestBody = async function _X509WorkloadIdentityAuth_cancelRequestBody2(body) { + _a = X509WorkloadIdentityAuth, _X509WorkloadIdentityAuth_identityProviderId = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_serviceAccountId = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_configuredRefreshBufferMs = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_configuredRefreshBufferSeconds = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_organization = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_project = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_transport = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_refreshBufferMs = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_cachedToken = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_refresh = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_tokenGeneration = /* @__PURE__ */ new WeakMap(), _X509WorkloadIdentityAuth_instances = /* @__PURE__ */ new WeakSet(), _X509WorkloadIdentityAuth_cancelRequestBody = async function _X509WorkloadIdentityAuth_cancelRequestBody2(body) { try { - await CancelReadableStream2(body); + await CancelReadableStream(body); } catch { } }, _X509WorkloadIdentityAuth_assignToken = function _X509WorkloadIdentityAuth_assignToken2(scope, token) { @@ -23051,10 +5250,10 @@ var init_x509_workload_identity_auth = __esm({ if (callerSignal?.aborted) { throw userAbortError(callerSignal); } - if (attempt.controller.signal.aborted && attempt.generation !== __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_tokenGeneration, "f")) { + if (attempt.controller.signal.aborted && attempt.generation !== __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_tokenGeneration, "f")) { return await this.getToken(options, context); } - const fallback = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_fallbackToken).call(this, error, cached, scope); + const fallback = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_fallbackToken).call(this, error, cached, scope); if (fallback !== void 0) { return fallback; } @@ -23066,10 +5265,10 @@ var init_x509_workload_identity_auth = __esm({ } throw error; }, _X509WorkloadIdentityAuth_fallbackToken = function _X509WorkloadIdentityAuth_fallbackToken2(error, cached, scope) { - if (!cached || cached !== __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_cachedToken, "f") || performance.now() >= cached.expiresAt || Date.now() >= cached.wallExpiresAt || !_a2.isRetryableFailure(error)) { + if (!cached || cached !== __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_cachedToken, "f") || performance.now() >= cached.expiresAt || Date.now() >= cached.wallExpiresAt || !_a.isRetryableFailure(error)) { return void 0; } - const headers = _a2.retryHeaders(error); + const headers = _a.retryHeaders(error); const milliseconds = headers?.get("retry-after-ms"); let requested = milliseconds ? Number(milliseconds) : void 0; const retryAfter = headers?.get("retry-after"); @@ -23080,68 +5279,68 @@ var init_x509_workload_identity_auth = __esm({ const cooldown = requested !== void 0 && Number.isFinite(requested) && requested >= 0 && requested <= 6e4 ? Math.max(FAILED_REFRESH_COOLDOWN_MS, requested) : FAILED_REFRESH_COOLDOWN_MS; cached.refreshAt = Math.min(cached.expiresAt, performance.now() + cooldown); cached.wallRefreshAt = Math.min(cached.wallExpiresAt, Date.now() + cooldown); - return __classPrivateFieldGet2(_a2, _a2, "m", _X509WorkloadIdentityAuth_assignToken).call(_a2, scope, cached); + return __classPrivateFieldGet(_a, _a, "m", _X509WorkloadIdentityAuth_assignToken).call(_a, scope, cached); }, _X509WorkloadIdentityAuth_retireRefresh = function _X509WorkloadIdentityAuth_retireRefresh2(attempt) { - if (attempt.waiters !== 0 || __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_refresh, "f") !== attempt) { + if (attempt.waiters !== 0 || __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_refresh, "f") !== attempt) { return; } queueMicrotask(() => { - if (attempt.waiters === 0 && __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_refresh, "f") === attempt) { - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_refresh, void 0, "f"); - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_tokenGeneration, __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_tokenGeneration, "f") + 1, "f"); - attempt.controller.abort(new APIUserAbortError2()); + if (attempt.waiters === 0 && __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_refresh, "f") === attempt) { + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_refresh, void 0, "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_tokenGeneration, __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_tokenGeneration, "f") + 1, "f"); + attempt.controller.abort(new APIUserAbortError()); } }); }, _X509WorkloadIdentityAuth_beginRefresh = function _X509WorkloadIdentityAuth_beginRefresh2() { const controller = new AbortController(); - const generation = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_tokenGeneration, "f"); + const generation = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_tokenGeneration, "f"); const attempt = { controller, generation, waiters: 0, - promise: __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_refreshToken).call(this, controller, generation) + promise: __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_instances, "m", _X509WorkloadIdentityAuth_refreshToken).call(this, controller, generation) }; - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_refresh, attempt, "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_refresh, attempt, "f"); return attempt; }, _X509WorkloadIdentityAuth_refreshToken = async function _X509WorkloadIdentityAuth_refreshToken2(controller, generation) { const startedAt = performance.now(); const wallStartedAt = Date.now(); try { - const token = await __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").exchange(__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_identityProviderId, "f"), __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_serviceAccountId, "f"), controller.signal); + const token = await __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").exchange(__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_identityProviderId, "f"), __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_serviceAccountId, "f"), controller.signal); const lifetime = token.expiresIn * 1e3; const expiresAt = startedAt + lifetime; const wallExpiresAt = wallStartedAt + lifetime; if (performance.now() >= expiresAt || Date.now() >= wallExpiresAt) { throw new OpenAIError("X.509 workload identity token expired before its exchange completed."); } - if (__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_tokenGeneration, "f") !== generation || controller.signal.aborted || __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_refresh, "f")?.controller !== controller) { - throw new APIUserAbortError2(); + if (__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_tokenGeneration, "f") !== generation || controller.signal.aborted || __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_refresh, "f")?.controller !== controller) { + throw new APIUserAbortError(); } - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_tokenGeneration, __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_tokenGeneration, "f") + 1, "f"); - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_cachedToken, { + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_tokenGeneration, __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_tokenGeneration, "f") + 1, "f"); + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_cachedToken, { accessToken: token.accessToken, - generation: __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_tokenGeneration, "f"), + generation: __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_tokenGeneration, "f"), expiresAt, - refreshAt: expiresAt - Math.min(__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_refreshBufferMs, "f"), lifetime / 2), + refreshAt: expiresAt - Math.min(__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_refreshBufferMs, "f"), lifetime / 2), wallExpiresAt, - wallRefreshAt: wallExpiresAt - Math.min(__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_refreshBufferMs, "f"), lifetime / 2) + wallRefreshAt: wallExpiresAt - Math.min(__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_refreshBufferMs, "f"), lifetime / 2) }, "f"); return token; } finally { - if (__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_refresh, "f")?.controller === controller) { - __classPrivateFieldSet2(this, _X509WorkloadIdentityAuth_refresh, void 0, "f"); + if (__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_refresh, "f")?.controller === controller) { + __classPrivateFieldSet(this, _X509WorkloadIdentityAuth_refresh, void 0, "f"); } } }, _X509WorkloadIdentityAuth_preflight = function _X509WorkloadIdentityAuth_preflight2(context) { if (!context) { return; } - if (context.organization !== __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_organization, "f") || context.project !== __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_project, "f")) { + if (context.organization !== __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_organization, "f") || context.project !== __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_project, "f")) { throw new OpenAIError("X.509 workload identity cannot override its enrolled organization or project."); } assertX509APIOrigin(context.apiURL); - const supplied2 = buildHeaders2([context.defaultHeaders, context.requestHeaders]); - if (__classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_organization, "f") !== null && supplied2.nulls.has("openai-organization") || __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_project, "f") !== null && supplied2.nulls.has("openai-project")) { + const supplied2 = buildHeaders([context.defaultHeaders, context.requestHeaders]); + if (__classPrivateFieldGet(this, _X509WorkloadIdentityAuth_organization, "f") !== null && supplied2.nulls.has("openai-organization") || __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_project, "f") !== null && supplied2.nulls.has("openai-project")) { throw new OpenAIError("X.509 workload identity cannot omit its enrolled organization or project."); } for (const name of supplied2.values.keys()) { @@ -23154,13 +5353,13 @@ var init_x509_workload_identity_auth = __esm({ } } }, _X509WorkloadIdentityAuth_scope = function _X509WorkloadIdentityAuth_scope2() { - const scope = __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_transport, "f").current(); + const scope = __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_transport, "f").current(); if (!scope || scope.owner !== this) { throw new OpenAIError("X.509 workload identity requires an active certificate request scope."); } return scope; }, _X509WorkloadIdentityAuth_assertTenantHeaders = function _X509WorkloadIdentityAuth_assertTenantHeaders2(headers) { - if (headerValue(headers, "OpenAI-Organization") !== __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_organization, "f") || headerValue(headers, "OpenAI-Project") !== __classPrivateFieldGet2(this, _X509WorkloadIdentityAuth_project, "f")) { + if (headerValue(headers, "OpenAI-Organization") !== __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_organization, "f") || headerValue(headers, "OpenAI-Project") !== __classPrivateFieldGet(this, _X509WorkloadIdentityAuth_project, "f")) { throw new OpenAIError("X.509 workload identity cannot override its enrolled organization or project."); } for (const name of Headers.prototype.keys.call(headers)) { @@ -23231,12 +5430,12 @@ function prepareProviderClone(inherited, overrides) { return provider2; } function prepareX509ClientClone(inherited, overrides, credential, currentlyX509) { - const nextIdentity = hasOwn2(overrides, "workloadIdentity") ? overrides.workloadIdentity : inherited.workloadIdentity; + const nextIdentity = hasOwn(overrides, "workloadIdentity") ? overrides.workloadIdentity : inherited.workloadIdentity; const dropping = credential !== void 0 && (overridesOrdinaryAuthentication(overrides) && overrides.workloadIdentity === void 0 || overrides.provider !== void 0); - if (credential !== void 0 && hasOwn2(overrides, "workloadIdentity")) { + if (credential !== void 0 && hasOwn(overrides, "workloadIdentity")) { delete inherited.x509Transport; } - const inheritedCredential = credential !== void 0 && !dropping && overrides.credential === void 0 && !hasOwn2(overrides, "workloadIdentity") && !hasOwn2(overrides, "x509Transport") ? credential : void 0; + const inheritedCredential = credential !== void 0 && !dropping && overrides.credential === void 0 && !hasOwn(overrides, "workloadIdentity") && !hasOwn(overrides, "x509Transport") ? credential : void 0; const nextCredential = overrides.credential === void 0 ? inheritedCredential : overrides.credential; const nextX509 = nextCredential !== void 0 || !dropping && isX509WorkloadIdentity(nextIdentity); if (currentlyX509 !== nextX509) { @@ -23274,8 +5473,8 @@ function prepareX509ClientClone(inherited, overrides, credential, currentlyX509) } var init_x509_credential_options = __esm({ "node_modules/openai/internal/auth/x509-credential-options.mjs"() { - init_error3(); - init_values2(); + init_error(); + init_values(); init_x509_workload_identity_auth(); init_x509_transport_state(); } @@ -23297,11 +5496,11 @@ function toStreamingFile(data, name, options) { ...type ? { type } : {} }; } -function makeFile2(fileBits, fileName, options) { - checkFileSupport2(); +function makeFile(fileBits, fileName, options) { + checkFileSupport(); return new File(fileBits, fileName ?? "unknown_file", options); } -function getName2(value2, options) { +function getName(value2, options) { if (typeof value2 !== "object" || value2 === null) { return void 0; } @@ -23338,19 +5537,19 @@ function isArrayBuffer(value2) { return false; } } -function supportsFormData2(fetchObject) { - const fetch3 = typeof fetchObject === "function" ? fetchObject : fetchObject.fetch; - const cached = supportsFormDataMap2.get(fetch3); +function supportsFormData(fetchObject) { + const fetch2 = typeof fetchObject === "function" ? fetchObject : fetchObject.fetch; + const cached = supportsFormDataMap.get(fetch2); if (cached) { return cached; } const promise = (async () => { try { let FetchResponse; - if ("Response" in fetch3) { - FetchResponse = fetch3.Response; + if ("Response" in fetch2) { + FetchResponse = fetch2.Response; } else { - const response = await fetch3("data:,"); + const response = await fetch2("data:,"); await response.arrayBuffer(); FetchResponse = response.constructor; } @@ -23363,7 +5562,7 @@ function supportsFormData2(fetchObject) { return true; } })(); - supportsFormDataMap2.set(fetch3, promise); + supportsFormDataMap.set(fetch2, promise); return promise; } async function* iterateMultipartBody(entries2, boundary, options, preservedFilenames) { @@ -23371,23 +5570,23 @@ async function* iterateMultipartBody(entries2, boundary, options, preservedFilen if (isUploadable(value2)) { const filename = preservedFilenames?.get(value2) ?? getStreamingFileName(value2, options); const type = getStreamingFileType(value2); - yield encodeUTF82(`--${boundary}\r + yield encodeUTF8(`--${boundary}\r `); - yield encodeUTF82(`Content-Disposition: form-data; name="${escapeHeaderValue(key)}"; filename="${escapeHeaderValue(filename)}"\r + yield encodeUTF8(`Content-Disposition: form-data; name="${escapeHeaderValue(key)}"; filename="${escapeHeaderValue(filename)}"\r Content-Type: ${type}\r \r `); yield* iterateBytes(getStreamingFileData(value2)); } else { - yield encodeUTF82(`--${boundary}\r + yield encodeUTF8(`--${boundary}\r `); - yield encodeUTF82(`Content-Disposition: form-data; name="${escapeHeaderValue(key)}"\r + yield encodeUTF8(`Content-Disposition: form-data; name="${escapeHeaderValue(key)}"\r \r ${String(value2)}`); } - yield encodeUTF82("\r\n"); + yield encodeUTF8("\r\n"); } - yield encodeUTF82(`--${boundary}--\r + yield encodeUTF8(`--${boundary}--\r `); } function* iterateFormEntries(body) { @@ -23427,7 +5626,7 @@ function getStreamingFileName(value2, options) { } return options.stripFilenames === false ? normalizeFilenamePath(name) : basename(name) ?? "unknown_file"; } - return getName2(value2, { stripFilename: options.stripFilenames }) ?? "unknown_file"; + return getName(value2, { stripFilename: options.stripFilenames }) ?? "unknown_file"; } function getStreamingFileType(value2) { let type; @@ -23458,7 +5657,7 @@ function getStreamingFileData(value2) { } async function* iterateBytes(value2) { if (typeof value2 === "string") { - yield encodeUTF82(value2); + yield encodeUTF8(value2); } else if (ArrayBuffer.isView(value2)) { yield new Uint8Array(value2.buffer, value2.byteOffset, value2.byteLength); } else if (isArrayBuffer(value2)) { @@ -23472,10 +5671,10 @@ async function* iterateBytes(value2) { yield new Uint8Array(await value2.arrayBuffer()); } } else if (isReadableStream(value2)) { - for await (const chunk of ReadableStreamToAsyncIterable2(value2)) { + for await (const chunk of ReadableStreamToAsyncIterable(value2)) { yield* iterateBytes(chunk); } - } else if (isAsyncIterable2(value2)) { + } else if (isAsyncIterable(value2)) { for await (const chunk of value2) { yield* iterateBytes(chunk); } @@ -23489,14 +5688,14 @@ function escapeHeaderValue(value2) { return codePoint <= 31 || codePoint === 127 || character === '"' || character === "\\" ? encodeURIComponent(character) : character; }).join(""); } -var brand_privateStreamingFile, checkFileSupport2, arrayBufferByteLengthGetter, isAsyncIterable2, maybeMultipartFormRequestOptions, multipartFormRequestOptions2, supportsFormDataMap2, createForm2, isBlob, isReadableStream, isStreamingFile, isUploadable, hasStreamingUploadableValue, hasUploadableValue, snapshotPreservedUploadEntries, createStreamingFormRequestOptions, addFormValue2; -var init_uploads3 = __esm({ +var brand_privateStreamingFile, checkFileSupport, arrayBufferByteLengthGetter, isAsyncIterable, maybeMultipartFormRequestOptions, multipartFormRequestOptions, supportsFormDataMap, createForm, isBlob, isReadableStream, isStreamingFile, isUploadable, hasStreamingUploadableValue, hasUploadableValue, snapshotPreservedUploadEntries, createStreamingFormRequestOptions, addFormValue; +var init_uploads = __esm({ "node_modules/openai/internal/uploads.mjs"() { - init_headers3(); - init_shims2(); - init_bytes2(); + init_headers(); + init_shims(); + init_bytes(); brand_privateStreamingFile = /* @__PURE__ */ Symbol("brand.privateStreamingFile"); - checkFileSupport2 = () => { + checkFileSupport = () => { if (typeof File === "undefined") { const { process: process2 } = globalThis; const isOldNode = typeof process2?.versions?.node === "string" && Number.parseInt(process2.versions.node.split("."), 10) < 20; @@ -23504,37 +5703,37 @@ var init_uploads3 = __esm({ } }; arrayBufferByteLengthGetter = Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, "byteLength")?.get; - isAsyncIterable2 = (value2) => value2 != null && typeof value2 === "object" && typeof value2[Symbol.asyncIterator] === "function"; - maybeMultipartFormRequestOptions = async (opts, fetch3, formOptions) => { + isAsyncIterable = (value2) => value2 != null && typeof value2 === "object" && typeof value2[Symbol.asyncIterator] === "function"; + maybeMultipartFormRequestOptions = async (opts, fetch2, formOptions) => { if (!hasUploadableValue(opts.body)) { return opts; } if (hasStreamingUploadableValue(opts.body)) { return createStreamingFormRequestOptions(opts, formOptions); } - return { ...opts, body: await createForm2(opts.body, fetch3, formOptions) }; + return { ...opts, body: await createForm(opts.body, fetch2, formOptions) }; }; - multipartFormRequestOptions2 = async (opts, fetch3, formOptions) => { + multipartFormRequestOptions = async (opts, fetch2, formOptions) => { if (hasStreamingUploadableValue(opts.body)) { return createStreamingFormRequestOptions(opts, formOptions); } - return { ...opts, body: await createForm2(opts.body, fetch3, formOptions) }; + return { ...opts, body: await createForm(opts.body, fetch2, formOptions) }; }; - supportsFormDataMap2 = /* @__PURE__ */ new WeakMap(); - createForm2 = async (body, fetch3, options = {}) => { - if (!await supportsFormData2(fetch3)) { + supportsFormDataMap = /* @__PURE__ */ new WeakMap(); + createForm = async (body, fetch2, options = {}) => { + if (!await supportsFormData(fetch2)) { throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class."); } const form = new FormData(); - await Promise.all(Object.entries(body || {}).map(([key, value2]) => addFormValue2(form, key, value2, options))); + await Promise.all(Object.entries(body || {}).map(([key, value2]) => addFormValue(form, key, value2, options))); return form; }; isBlob = (value2) => value2 instanceof Blob; isReadableStream = (value2) => typeof value2 === "object" && value2 !== null && "getReader" in value2 && typeof value2.getReader === "function"; isStreamingFile = (value2) => typeof value2 === "object" && value2 !== null && brand_privateStreamingFile in value2; - isUploadable = (value2) => typeof value2 === "object" && value2 !== null && (value2 instanceof Response || isAsyncIterable2(value2) || isReadableStream(value2) || isStreamingFile(value2) || isBlob(value2)); + isUploadable = (value2) => typeof value2 === "object" && value2 !== null && (value2 instanceof Response || isAsyncIterable(value2) || isReadableStream(value2) || isStreamingFile(value2) || isBlob(value2)); hasStreamingUploadableValue = (value2) => { - if (isStreamingFile(value2) || isAsyncIterable2(value2) || isReadableStream(value2)) { + if (isStreamingFile(value2) || isAsyncIterable(value2) || isReadableStream(value2)) { return true; } if (Array.isArray(value2)) { @@ -23580,14 +5779,14 @@ var init_uploads3 = __esm({ const preservedFilenames = options.stripFilenames === false ? /* @__PURE__ */ new WeakMap() : void 0; const multipartEntries = preservedFilenames ? snapshotPreservedUploadEntries(entries2, preservedFilenames) : entries2; const boundary = `openai-${Math.random().toString(36).slice(2)}`; - const body = ReadableStreamFrom2(iterateMultipartBody(multipartEntries, boundary, options, preservedFilenames)); + const body = ReadableStreamFrom(iterateMultipartBody(multipartEntries, boundary, options, preservedFilenames)); return { ...opts, body, - headers: buildHeaders2([{ "content-type": `multipart/form-data; boundary=${boundary}` }, opts.headers]) + headers: buildHeaders([{ "content-type": `multipart/form-data; boundary=${boundary}` }, opts.headers]) }; }; - addFormValue2 = async (form, key, value2, options) => { + addFormValue = async (form, key, value2, options) => { if (value2 === void 0) { return; } @@ -23598,11 +5797,11 @@ var init_uploads3 = __esm({ form.append(key, String(value2)); } else if (value2 instanceof Response) { const blob = await value2.blob(); - form.append(key, makeFile2([blob], getName2(value2, { stripFilename: options.stripFilenames }), { type: blob.type })); - } else if (isAsyncIterable2(value2)) { - form.append(key, makeFile2([await new Response(ReadableStreamFrom2(value2)).blob()], getName2(value2, { stripFilename: options.stripFilenames }))); + form.append(key, makeFile([blob], getName(value2, { stripFilename: options.stripFilenames }), { type: blob.type })); + } else if (isAsyncIterable(value2)) { + form.append(key, makeFile([await new Response(ReadableStreamFrom(value2)).blob()], getName(value2, { stripFilename: options.stripFilenames }))); } else if (isBlob(value2)) { - const filename = getName2(value2, { stripFilename: options.stripFilenames }); + const filename = getName(value2, { stripFilename: options.stripFilenames }); if (filename === void 0) { form.append(key, value2); } else { @@ -23611,7 +5810,7 @@ var init_uploads3 = __esm({ } else if (Array.isArray(value2)) { const entries2 = await Promise.all(value2.map(async (entry2) => { const entryForm = new FormData(); - await addFormValue2(entryForm, key + "[]", entry2, options); + await addFormValue(entryForm, key + "[]", entry2, options); return entryForm; })); for (const entryForm of entries2) { @@ -23623,7 +5822,7 @@ var init_uploads3 = __esm({ } } } else if (typeof value2 === "object") { - await Promise.all(Object.entries(value2).map(([name, prop]) => addFormValue2(form, `${key}[${name}]`, prop, options))); + await Promise.all(Object.entries(value2).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop, options))); } else { throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value2} instead`); } @@ -23632,10 +5831,10 @@ var init_uploads3 = __esm({ }); // node_modules/openai/internal/to-file.mjs -async function toFile2(value2, name, options) { - checkFileSupport2(); +async function toFile(value2, name, options) { + checkFileSupport(); value2 = await value2; - if (isFileLike2(value2)) { + if (isFileLike(value2)) { const fileOptions = { ...options, type: options?.type ?? value2.type, @@ -23645,75 +5844,75 @@ async function toFile2(value2, name, options) { if (canReuseNativeFile(value2, name, options)) { return value2; } - return makeFile2([value2], name ?? value2.name, fileOptions); + return makeFile([value2], name ?? value2.name, fileOptions); } - return makeFile2([await value2.arrayBuffer()], name ?? value2.name, fileOptions); + return makeFile([await value2.arrayBuffer()], name ?? value2.name, fileOptions); } - if (isResponseLike2(value2)) { + if (isResponseLike(value2)) { const blob = await value2.blob(); - name ?? (name = getName2(value2)); + name ?? (name = getName(value2)); const responseOptions = options?.type === void 0 && blob.type ? { ...options, type: blob.type } : options; - return makeFile2(await getBytes2(blob), name, responseOptions); + return makeFile(await getBytes(blob), name, responseOptions); } - const parts = await getBytes2(value2); - name ?? (name = getName2(value2)); + const parts = await getBytes(value2); + name ?? (name = getName(value2)); if (options?.type === void 0) { const typedPart = parts.find((part) => typeof part === "object" && "type" in part && !!part.type); if (typedPart) { options = { ...options, type: typedPart.type }; } } - return makeFile2(parts, name, options); + return makeFile(parts, name, options); } -async function getBytes2(value2) { +async function getBytes(value2) { const parts = []; if (typeof value2 === "string" || ArrayBuffer.isView(value2) || // includes Uint8Array, Buffer, etc. isArrayBuffer(value2)) { parts.push(value2); - } else if (isBlobLike2(value2)) { + } else if (isBlobLike(value2)) { parts.push(value2 instanceof Blob ? value2 : new Blob([await value2.arrayBuffer()], { type: value2.type })); - } else if (isAsyncIterable2(value2)) { + } else if (isAsyncIterable(value2)) { for await (const chunk of value2) { - parts.push(...await getBytes2(chunk)); + parts.push(...await getBytes(chunk)); } } else { const constructor = value2?.constructor?.name; - throw new Error(`Unexpected data type: ${typeof value2}${constructor ? `; constructor: ${constructor}` : ""}${propsForError2(value2)}`); + throw new Error(`Unexpected data type: ${typeof value2}${constructor ? `; constructor: ${constructor}` : ""}${propsForError(value2)}`); } return parts; } -function propsForError2(value2) { +function propsForError(value2) { if (typeof value2 !== "object" || value2 === null) { return ""; } const props = Object.getOwnPropertyNames(value2); return `; props: [${props.map((p) => `"${p}"`).join(", ")}]`; } -var isBlobLike2, isFileLike2, isResponseLike2, hasFilePropertyOverrides, canReuseNativeFile; -var init_to_file2 = __esm({ +var isBlobLike, isFileLike, isResponseLike, hasFilePropertyOverrides, canReuseNativeFile; +var init_to_file = __esm({ "node_modules/openai/internal/to-file.mjs"() { - init_uploads3(); - isBlobLike2 = (value2) => value2 != null && typeof value2 === "object" && typeof value2.size === "number" && typeof value2.type === "string" && typeof value2.text === "function" && typeof value2.slice === "function" && typeof value2.arrayBuffer === "function"; - isFileLike2 = (value2) => value2 != null && typeof value2 === "object" && typeof value2.name === "string" && typeof value2.lastModified === "number" && isBlobLike2(value2); - isResponseLike2 = (value2) => value2 != null && typeof value2 === "object" && typeof value2.url === "string" && typeof value2.blob === "function"; + init_uploads(); + isBlobLike = (value2) => value2 != null && typeof value2 === "object" && typeof value2.size === "number" && typeof value2.type === "string" && typeof value2.text === "function" && typeof value2.slice === "function" && typeof value2.arrayBuffer === "function"; + isFileLike = (value2) => value2 != null && typeof value2 === "object" && typeof value2.name === "string" && typeof value2.lastModified === "number" && isBlobLike(value2); + isResponseLike = (value2) => value2 != null && typeof value2 === "object" && typeof value2.url === "string" && typeof value2.blob === "function"; hasFilePropertyOverrides = (value2, options) => options?.type != null && options.type !== value2.type || options?.lastModified != null && options.lastModified !== value2.lastModified || options?.endings != null; canReuseNativeFile = (value2, name, options) => (name == null || name === value2.name) && !hasFilePropertyOverrides(value2, options); } }); // node_modules/openai/core/uploads.mjs -var init_uploads4 = __esm({ +var init_uploads2 = __esm({ "node_modules/openai/core/uploads.mjs"() { - init_uploads3(); - init_to_file2(); + init_uploads(); + init_to_file(); } }); // node_modules/openai/core/resource.mjs -var APIResource2; -var init_resource2 = __esm({ +var APIResource; +var init_resource = __esm({ "node_modules/openai/core/resource.mjs"() { - APIResource2 = class { + APIResource = class { constructor(client) { this._client = client; } @@ -23722,15 +5921,15 @@ var init_resource2 = __esm({ }); // node_modules/openai/internal/utils/path.mjs -function encodeURIPath2(str2) { +function encodeURIPath(str2) { return str2.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g, encodeURIComponent); } -var EMPTY2, createPathTagFunction2, path3; -var init_path2 = __esm({ +var EMPTY, createPathTagFunction, path; +var init_path = __esm({ "node_modules/openai/internal/utils/path.mjs"() { - init_error3(); - EMPTY2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null)); - createPathTagFunction2 = (pathEncoder = encodeURIPath2) => function path5(statics, ...params) { + init_error(); + EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null)); + createPathTagFunction = (pathEncoder = encodeURIPath) => function path5(statics, ...params) { if (statics.length === 1) { return statics[0]; } @@ -23747,7 +5946,7 @@ var init_path2 = __esm({ let encoded = (postPath ? encodeURIComponent : pathEncoder)("" + value2); if (index !== params.length && (value2 == null || // oxlint-disable-next-line anti-slop/no-runtime-typeof -- Path parameters may arrive from JavaScript callers and require runtime validation before URL encoding. typeof value2 === "object" && // handle values from other realms - value2.toString === Object.getPrototypeOf(Object.getPrototypeOf(value2.hasOwnProperty ?? EMPTY2) ?? EMPTY2)?.toString)) { + value2.toString === Object.getPrototypeOf(Object.getPrototypeOf(value2.hasOwnProperty ?? EMPTY) ?? EMPTY)?.toString)) { encoded = value2 + ""; invalidSegments.push({ start: path6.length + currentValue.length, @@ -23785,18 +5984,18 @@ ${underline}`); } return path6; }; - path3 = /* @__PURE__ */ createPathTagFunction2(encodeURIPath2); + path = /* @__PURE__ */ createPathTagFunction(encodeURIPath); } }); // node_modules/openai/resources/chat/completions/messages.mjs -var Messages3; -var init_messages3 = __esm({ +var Messages; +var init_messages = __esm({ "node_modules/openai/resources/chat/completions/messages.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Messages3 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Messages = class extends APIResource { /** * Get the messages in a stored chat completion. Only Chat Completions that have * been created with the `store` parameter set to `true` will be returned. @@ -23812,16 +6011,16 @@ var init_messages3 = __esm({ * ``` */ list(completionID, query = {}, options) { - return this._client.getAPIList(path3`/chat/completions/${completionID}/messages`, CursorPage, { query, ...options, __security: { bearerAuth: true } }); + return this._client.getAPIList(path`/chat/completions/${completionID}/messages`, CursorPage, { query, ...options, __security: { bearerAuth: true } }); } }; } }); // node_modules/openai/error.mjs -var init_error4 = __esm({ +var init_error2 = __esm({ "node_modules/openai/error.mjs"() { - init_error3(); + init_error(); } }); @@ -23946,9 +6145,9 @@ function validateInputTools(tools) { } } } -var init_parser3 = __esm({ +var init_parser = __esm({ "node_modules/openai/lib/parser.mjs"() { - init_error4(); + init_error2(); } }); @@ -24722,8 +6921,8 @@ function createBufferedEventLedger() { var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_abortListeners, _EventStream_emittedListenerRegistrations, _EventStream_pendingListenerCleanup, _EventStream_pendingBufferedEventChecks, _EventStream_listenerDispatchDepth, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_terminalFailure, _EventStream_abortFromSignal, _EventStream_removeAbortListeners, _EventStream_onceForEmitted, _EventStream_removeEmittedListener, _EventStream_cleanupEmittedListeners, _EventStream_handleError, _EventStream_settleTerminalEvent, MAX_BUFFERED_ITERATOR_EVENTS, MAX_BUFFERED_ITERATOR_BYTES, MAX_INSPECTABLE_TYPED_ARRAY_ELEMENTS, MAX_BUFFERED_EVENT_DEPTH, bufferedJSONStringify, bufferedJSONParse, sdkOwnedBufferedEventArguments, typedArrayBufferGetter, typedArrayLengthGetter, dataViewBufferGetter, symbolDescriptionGetter, dateTimestampGetter, arrayBufferByteLengthGetter2, sharedArrayBufferByteLengthGetter, errorStackDescriptor, functionToString, objectToString, errorBrandDescriptor, nativeErrorBrand, nativeErrorConstructorSource, nativeDateConstructorSource, nativeFunctionConstructorSource, trustedIntrinsicPrototypes, trustedNativeConstructorSources, canonicalIntrinsicDescriptors, foreignErrorStackDescriptors, nativeProxyDetector, typedArrayConstructorDescriptor, blobInternalHandlePrototype, mapEntries, setValues, headersEntriesDescriptor, headersEntries, retainedStorageBrands, BUFFERED_LEDGER_ENTRY_BYTES, BUFFERED_LEDGER_NODE_BYTES, BUFFERED_LEDGER_EDGE_BYTES, BUFFERED_LEDGER_OWNER_BYTES, MAX_BUFFERED_LEDGER_RECONCILIATION_WORK, EventStream2; var init_EventStream = __esm({ "node_modules/openai/lib/EventStream.mjs"() { - init_tslib2(); - init_error4(); + init_tslib(); + init_error2(); MAX_BUFFERED_ITERATOR_EVENTS = 4096; MAX_BUFFERED_ITERATOR_BYTES = 8 * 1024 * 1024; MAX_INSPECTABLE_TYPED_ARRAY_ELEMENTS = 4096; @@ -24747,24 +6946,24 @@ var init_EventStream = __esm({ nativeDateConstructorSource = functionToString.call(Date); nativeFunctionConstructorSource = functionToString.call(Function); trustedIntrinsicPrototypes = /* @__PURE__ */ new Set([ - APIConnectionError2.prototype, - APIConnectionTimeoutError2.prototype, - APIError2.prototype, + APIConnectionError.prototype, + APIConnectionTimeoutError.prototype, + APIError.prototype, OpenAIError.prototype, - APIUserAbortError2.prototype, - AuthenticationError2.prototype, - BadRequestError2.prototype, - ConflictError2.prototype, + APIUserAbortError.prototype, + AuthenticationError.prototype, + BadRequestError.prototype, + ConflictError.prototype, ContentFilterFinishReasonError.prototype, - InternalServerError2.prototype, + InternalServerError.prototype, InvalidWebhookSignatureError.prototype, LengthFinishReasonError.prototype, - NotFoundError2.prototype, + NotFoundError.prototype, OAuthError.prototype, - PermissionDeniedError2.prototype, - RateLimitError2.prototype, + PermissionDeniedError.prototype, + RateLimitError.prototype, SubjectTokenProviderError.prototype, - UnprocessableEntityError2.prototype + UnprocessableEntityError.prototype ]); trustedNativeConstructorSources = /* @__PURE__ */ new Set(); canonicalIntrinsicDescriptors = /* @__PURE__ */ new Map(); @@ -24878,23 +7077,23 @@ var init_EventStream = __esm({ _EventStream_aborted.set(this, false); _EventStream_catchingPromiseCreated.set(this, false); _EventStream_terminalFailure.set(this, void 0); - __classPrivateFieldSet2(this, _EventStream_connectedPromise, new Promise((resolve2, reject2) => { - __classPrivateFieldSet2(this, _EventStream_resolveConnectedPromise, resolve2, "f"); - __classPrivateFieldSet2(this, _EventStream_rejectConnectedPromise, reject2, "f"); + __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve2, reject2) => { + __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve2, "f"); + __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject2, "f"); }), "f"); - __classPrivateFieldSet2(this, _EventStream_endPromise, new Promise((resolve2, reject2) => { - __classPrivateFieldSet2(this, _EventStream_resolveEndPromise, resolve2, "f"); - __classPrivateFieldSet2(this, _EventStream_rejectEndPromise, reject2, "f"); + __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve2, reject2) => { + __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve2, "f"); + __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject2, "f"); }), "f"); - __classPrivateFieldGet2(this, _EventStream_connectedPromise, "f").catch(() => void 0); - __classPrivateFieldGet2(this, _EventStream_endPromise, "f").catch(() => void 0); + __classPrivateFieldGet(this, _EventStream_connectedPromise, "f").catch(() => void 0); + __classPrivateFieldGet(this, _EventStream_endPromise, "f").catch(() => void 0); } _run(executor) { setTimeout(() => { let failed = false; Promise.resolve().then(executor).catch((error) => { failed = true; - __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_handleError).call(this, error); + __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_handleError).call(this, error); }).then(() => { if (failed) { return; @@ -24902,7 +7101,7 @@ var init_EventStream = __esm({ try { this._emitFinal(); } catch (error) { - __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_handleError).call(this, error); + __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_handleError).call(this, error); return; } this._emit("end"); @@ -24913,20 +7112,20 @@ var init_EventStream = __esm({ if (this.ended) { return; } - __classPrivateFieldGet2(this, _EventStream_resolveConnectedPromise, "f").call(this); + __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, "f").call(this); this._emit("connect"); } /** Whether the stream has finished successfully, failed, or been aborted. */ get ended() { - return __classPrivateFieldGet2(this, _EventStream_ended, "f"); + return __classPrivateFieldGet(this, _EventStream_ended, "f"); } /** Whether an error or user cancellation has been observed. */ get errored() { - return __classPrivateFieldGet2(this, _EventStream_errored, "f"); + return __classPrivateFieldGet(this, _EventStream_errored, "f"); } /** Whether the stream ended because its request was cancelled. */ get aborted() { - return __classPrivateFieldGet2(this, _EventStream_aborted, "f"); + return __classPrivateFieldGet(this, _EventStream_aborted, "f"); } /** * Cancels the underlying request; {@link done} and {@link events} observe cancellation. @@ -24937,7 +7136,7 @@ var init_EventStream = __esm({ } /** Creates a user-abort error retaining this runner's cancellation reason. */ _userAbortError() { - const error = new APIUserAbortError2(); + const error = new APIUserAbortError(); Object.defineProperty(error, "cause", { value: this.controller.signal.reason, writable: true, @@ -24950,15 +7149,15 @@ var init_EventStream = __esm({ return; } if (signal.aborted) { - __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_abortFromSignal).call(this, signal); + __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_abortFromSignal).call(this, signal); return; } - if (__classPrivateFieldGet2(this, _EventStream_abortListeners, "f").some((registration) => registration.signal === signal)) { + if (__classPrivateFieldGet(this, _EventStream_abortListeners, "f").some((registration) => registration.signal === signal)) { return; } - const listener = () => __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_abortFromSignal).call(this, signal); + const listener = () => __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_abortFromSignal).call(this, signal); signal.addEventListener("abort", listener, { once: true }); - __classPrivateFieldGet2(this, _EventStream_abortListeners, "f").push({ signal, listener }); + __classPrivateFieldGet(this, _EventStream_abortListeners, "f").push({ signal, listener }); } /** * Adds the listener function to the end of the listeners array for the event. @@ -24969,7 +7168,7 @@ var init_EventStream = __esm({ */ on(event, listener) { var _a6; - const listeners = (_a6 = __classPrivateFieldGet2(this, _EventStream_listeners, "f"))[event] || (_a6[event] = []); + const listeners = (_a6 = __classPrivateFieldGet(this, _EventStream_listeners, "f"))[event] || (_a6[event] = []); listeners.push({ listener }); return this; } @@ -24981,13 +7180,13 @@ var init_EventStream = __esm({ * @returns This stream, so that listener registration calls can be chained. */ off(event, listener) { - const listeners = __classPrivateFieldGet2(this, _EventStream_listeners, "f")[event]; + const listeners = __classPrivateFieldGet(this, _EventStream_listeners, "f")[event]; if (!listeners) { return this; } - const emittedRegistration = __classPrivateFieldGet2(this, _EventStream_emittedListenerRegistrations, "f").get(listener); + const emittedRegistration = __classPrivateFieldGet(this, _EventStream_emittedListenerRegistrations, "f").get(listener); if (emittedRegistration?.event === event && !emittedRegistration.registration.removed && !emittedRegistration.registration.detached) { - __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_removeEmittedListener).call(this, event, emittedRegistration.registration); + __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_removeEmittedListener).call(this, event, emittedRegistration.registration); return this; } const index = listeners.findIndex((l) => !l.removed && l.listener === listener); @@ -25003,7 +7202,7 @@ var init_EventStream = __esm({ */ once(event, listener) { var _a6; - const listeners = (_a6 = __classPrivateFieldGet2(this, _EventStream_listeners, "f"))[event] || (_a6[event] = []); + const listeners = (_a6 = __classPrivateFieldGet(this, _EventStream_listeners, "f"))[event] || (_a6[event] = []); listeners.push({ listener, once: true }); return this; } @@ -25022,7 +7221,7 @@ var init_EventStream = __esm({ */ emitted(event) { return new Promise((resolve2, reject2) => { - __classPrivateFieldSet2(this, _EventStream_catchingPromiseCreated, true, "f"); + __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, "f"); const onError = (error) => { this.off(event, onEvent); reject2(error); @@ -25034,9 +7233,9 @@ var init_EventStream = __esm({ resolve2(values.length > 1 ? values : values[0]); }; if (event !== "error") { - __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_onceForEmitted).call(this, "error", onError); + __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_onceForEmitted).call(this, "error", onError); } - __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_onceForEmitted).call(this, event, onEvent); + __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_onceForEmitted).call(this, event, onEvent); }); } /** @@ -25118,7 +7317,7 @@ var init_EventStream = __esm({ const deactivateBufferedEvent = (entry2) => { entry2.active = false; if (entry2.check) { - __classPrivateFieldGet2(this, _EventStream_pendingBufferedEventChecks, "f").delete(entry2.check); + __classPrivateFieldGet(this, _EventStream_pendingBufferedEventChecks, "f").delete(entry2.check); entry2.check = void 0; } }; @@ -25132,14 +7331,14 @@ var init_EventStream = __esm({ } const error = new OpenAIError(`Event stream iterator buffer limit exceeded (${MAX_BUFFERED_ITERATOR_EVENTS} events or ${MAX_BUFFERED_ITERATOR_BYTES} bytes); consume events as they arrive.`); try { - __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_handleError).call(this, error); + __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_handleError).call(this, error); } finally { this.controller.abort(); } return error; }; const revalidateBufferedEvent = (value2, entry2) => { - if (!entry2.active || __classPrivateFieldGet2(this, _EventStream_ended, "f")) { + if (!entry2.active || __classPrivateFieldGet(this, _EventStream_ended, "f")) { return; } const graph = inspectBufferedEventGraph(value2, MAX_BUFFERED_ITERATOR_BYTES); @@ -25182,7 +7381,7 @@ var init_EventStream = __esm({ revalidateBufferedEvent(value2, entry2); }; entry2.check = check; - __classPrivateFieldGet2(this, _EventStream_pendingBufferedEventChecks, "f").add(check); + __classPrivateFieldGet(this, _EventStream_pendingBufferedEventChecks, "f").add(check); } }; const onFailure = (error) => { @@ -25195,7 +7394,7 @@ var init_EventStream = __esm({ if (failure2) { return; } - const terminal = __classPrivateFieldGet2(this, _EventStream_terminalFailure, "f"); + const terminal = __classPrivateFieldGet(this, _EventStream_terminalFailure, "f"); if (!terminal) { return; } @@ -25274,35 +7473,35 @@ var init_EventStream = __esm({ } /** Resolves when the stream ends successfully or rejects when it fails or is aborted. */ async done() { - __classPrivateFieldSet2(this, _EventStream_catchingPromiseCreated, true, "f"); - await __classPrivateFieldGet2(this, _EventStream_endPromise, "f"); + __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, "f"); + await __classPrivateFieldGet(this, _EventStream_endPromise, "f"); } /** Returns whether an event currently has one or more registered listeners. */ _hasListeners(event) { - return Boolean(__classPrivateFieldGet2(this, _EventStream_listeners, "f")[event]?.some((listener) => !listener.removed)); + return Boolean(__classPrivateFieldGet(this, _EventStream_listeners, "f")[event]?.some((listener) => !listener.removed)); } /** Dispatches a stream event and performs the associated lifecycle transitions. */ _emit(event, ...args) { - if (__classPrivateFieldGet2(this, _EventStream_ended, "f")) { + if (__classPrivateFieldGet(this, _EventStream_ended, "f")) { return; } if (event === "end") { - __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_removeAbortListeners).call(this); - __classPrivateFieldSet2(this, _EventStream_ended, true, "f"); - __classPrivateFieldGet2(this, _EventStream_resolveEndPromise, "f").call(this); + __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_removeAbortListeners).call(this); + __classPrivateFieldSet(this, _EventStream_ended, true, "f"); + __classPrivateFieldGet(this, _EventStream_resolveEndPromise, "f").call(this); } - const listeners = __classPrivateFieldGet2(this, _EventStream_listeners, "f")[event]; + const listeners = __classPrivateFieldGet(this, _EventStream_listeners, "f")[event]; let dispatchError; let dispatchThrew = false; try { if (listeners) { - __classPrivateFieldGet2(this, _EventStream_listeners, "f")[event] = listeners.filter((listener) => { + __classPrivateFieldGet(this, _EventStream_listeners, "f")[event] = listeners.filter((listener) => { if (listener.once) { listener.detached = true; } return !listener.once && !listener.removed; }); - __classPrivateFieldSet2(this, _EventStream_listenerDispatchDepth, __classPrivateFieldGet2(this, _EventStream_listenerDispatchDepth, "f") + 1, "f"); + __classPrivateFieldSet(this, _EventStream_listenerDispatchDepth, __classPrivateFieldGet(this, _EventStream_listenerDispatchDepth, "f") + 1, "f"); try { for (const registration of listeners) { if (!registration.removed) { @@ -25311,12 +7510,12 @@ var init_EventStream = __esm({ } } } finally { - __classPrivateFieldSet2(this, _EventStream_listenerDispatchDepth, __classPrivateFieldGet2(this, _EventStream_listenerDispatchDepth, "f") - 1, "f"); - if (__classPrivateFieldGet2(this, _EventStream_listenerDispatchDepth, "f") === 0) { - __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_cleanupEmittedListeners).call(this); - for (const check of __classPrivateFieldGet2(this, _EventStream_pendingBufferedEventChecks, "f")) { - __classPrivateFieldGet2(this, _EventStream_pendingBufferedEventChecks, "f").delete(check); - if (!__classPrivateFieldGet2(this, _EventStream_ended, "f")) { + __classPrivateFieldSet(this, _EventStream_listenerDispatchDepth, __classPrivateFieldGet(this, _EventStream_listenerDispatchDepth, "f") - 1, "f"); + if (__classPrivateFieldGet(this, _EventStream_listenerDispatchDepth, "f") === 0) { + __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_cleanupEmittedListeners).call(this); + for (const check of __classPrivateFieldGet(this, _EventStream_pendingBufferedEventChecks, "f")) { + __classPrivateFieldGet(this, _EventStream_pendingBufferedEventChecks, "f").delete(check); + if (!__classPrivateFieldGet(this, _EventStream_ended, "f")) { check(); } } @@ -25328,7 +7527,7 @@ var init_EventStream = __esm({ dispatchThrew = true; } try { - __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_settleTerminalEvent).call(this, event, args, Boolean(listeners?.length)); + __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_settleTerminalEvent).call(this, event, args, Boolean(listeners?.length)); } catch (error) { if (!dispatchThrew) { dispatchError = error; @@ -25350,44 +7549,44 @@ var init_EventStream = __esm({ this.controller.abort(); } }, _EventStream_removeAbortListeners = function _EventStream_removeAbortListeners2() { - for (const { signal, listener } of __classPrivateFieldGet2(this, _EventStream_abortListeners, "f").splice(0)) { + for (const { signal, listener } of __classPrivateFieldGet(this, _EventStream_abortListeners, "f").splice(0)) { signal.removeEventListener("abort", listener); } }, _EventStream_onceForEmitted = function _EventStream_onceForEmitted2(event, listener) { - const previousListeners = __classPrivateFieldGet2(this, _EventStream_listeners, "f")[event]; + const previousListeners = __classPrivateFieldGet(this, _EventStream_listeners, "f")[event]; const previousLength = previousListeners?.length ?? 0; this.once(event, listener); - const listeners = __classPrivateFieldGet2(this, _EventStream_listeners, "f")[event]; + const listeners = __classPrivateFieldGet(this, _EventStream_listeners, "f")[event]; const [registration] = listeners?.slice(-1) ?? []; if ((previousListeners === void 0 || listeners === previousListeners) && listeners?.length === previousLength + 1 && registration?.listener === listener && registration.once) { - __classPrivateFieldGet2(this, _EventStream_emittedListenerRegistrations, "f").set(listener, { event, registration }); + __classPrivateFieldGet(this, _EventStream_emittedListenerRegistrations, "f").set(listener, { event, registration }); } }, _EventStream_removeEmittedListener = function _EventStream_removeEmittedListener2(event, registration) { if (registration.removed) { return; } registration.removed = true; - __classPrivateFieldGet2(this, _EventStream_emittedListenerRegistrations, "f").delete(registration.listener); - __classPrivateFieldGet2(this, _EventStream_pendingListenerCleanup, "f").add(event); - if (__classPrivateFieldGet2(this, _EventStream_listenerDispatchDepth, "f") === 0) { - __classPrivateFieldGet2(this, _EventStream_instances, "m", _EventStream_cleanupEmittedListeners).call(this); + __classPrivateFieldGet(this, _EventStream_emittedListenerRegistrations, "f").delete(registration.listener); + __classPrivateFieldGet(this, _EventStream_pendingListenerCleanup, "f").add(event); + if (__classPrivateFieldGet(this, _EventStream_listenerDispatchDepth, "f") === 0) { + __classPrivateFieldGet(this, _EventStream_instances, "m", _EventStream_cleanupEmittedListeners).call(this); } }, _EventStream_cleanupEmittedListeners = function _EventStream_cleanupEmittedListeners2() { - for (const event of __classPrivateFieldGet2(this, _EventStream_pendingListenerCleanup, "f")) { + for (const event of __classPrivateFieldGet(this, _EventStream_pendingListenerCleanup, "f")) { const eventType = event; - const listeners = __classPrivateFieldGet2(this, _EventStream_listeners, "f")[eventType]; + const listeners = __classPrivateFieldGet(this, _EventStream_listeners, "f")[eventType]; if (listeners) { - __classPrivateFieldGet2(this, _EventStream_listeners, "f")[eventType] = listeners.filter((listener) => !listener.removed); + __classPrivateFieldGet(this, _EventStream_listeners, "f")[eventType] = listeners.filter((listener) => !listener.removed); } } - __classPrivateFieldGet2(this, _EventStream_pendingListenerCleanup, "f").clear(); + __classPrivateFieldGet(this, _EventStream_pendingListenerCleanup, "f").clear(); }, _EventStream_handleError = function _EventStream_handleError2(error) { - __classPrivateFieldSet2(this, _EventStream_errored, true, "f"); + __classPrivateFieldSet(this, _EventStream_errored, true, "f"); if (error instanceof Error && error.name === "AbortError") { error = this._userAbortError(); } - if (error instanceof APIUserAbortError2) { - __classPrivateFieldSet2(this, _EventStream_aborted, true, "f"); + if (error instanceof APIUserAbortError) { + __classPrivateFieldSet(this, _EventStream_aborted, true, "f"); return this._emit("abort", error); } if (error instanceof OpenAIError) { @@ -25402,23 +7601,23 @@ var init_EventStream = __esm({ }, _EventStream_settleTerminalEvent = function _EventStream_settleTerminalEvent2(event, args, hasListeners) { if (event === "abort") { const error = args[0]; - __classPrivateFieldSet2(this, _EventStream_terminalFailure, __classPrivateFieldGet2(this, _EventStream_terminalFailure, "f") ?? { kind: "abort", error }, "f"); - if (!__classPrivateFieldGet2(this, _EventStream_catchingPromiseCreated, "f") && !hasListeners) { + __classPrivateFieldSet(this, _EventStream_terminalFailure, __classPrivateFieldGet(this, _EventStream_terminalFailure, "f") ?? { kind: "abort", error }, "f"); + if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, "f") && !hasListeners) { Promise.reject(error); } - __classPrivateFieldGet2(this, _EventStream_rejectConnectedPromise, "f").call(this, error); - __classPrivateFieldGet2(this, _EventStream_rejectEndPromise, "f").call(this, error); + __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, "f").call(this, error); + __classPrivateFieldGet(this, _EventStream_rejectEndPromise, "f").call(this, error); this._emit("end"); return; } if (event === "error") { const error = args[0]; - __classPrivateFieldSet2(this, _EventStream_terminalFailure, __classPrivateFieldGet2(this, _EventStream_terminalFailure, "f") ?? { kind: "error", error }, "f"); - if (!__classPrivateFieldGet2(this, _EventStream_catchingPromiseCreated, "f") && !hasListeners) { + __classPrivateFieldSet(this, _EventStream_terminalFailure, __classPrivateFieldGet(this, _EventStream_terminalFailure, "f") ?? { kind: "error", error }, "f"); + if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, "f") && !hasListeners) { Promise.reject(error); } - __classPrivateFieldGet2(this, _EventStream_rejectConnectedPromise, "f").call(this, error); - __classPrivateFieldGet2(this, _EventStream_rejectEndPromise, "f").call(this, error); + __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, "f").call(this, error); + __classPrivateFieldGet(this, _EventStream_rejectEndPromise, "f").call(this, error); this._emit("end"); } }; @@ -25439,7 +7638,7 @@ function normalizeToolCallIds(chatCompletion) { for (const choice of chatCompletion.choices) { for (const toolCall of choice.message.tool_calls ?? []) { if (!toolCall.id) { - toolCall.id = `call_${uuid42()}`; + toolCall.id = `call_${uuid4()}`; } } } @@ -25488,13 +7687,13 @@ function toRequestMessage(message) { } return requestMessage; } -var _AbstractChatCompletionRunner_instances, _a3, _AbstractChatCompletionRunner_completionArrivedBeforeAbort, _AbstractChatCompletionRunner_afterCompletionInvoked, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_throwIfAborted, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult, DEFAULT_MAX_CHAT_COMPLETIONS, AbstractChatCompletionRunner; +var _AbstractChatCompletionRunner_instances, _a2, _AbstractChatCompletionRunner_completionArrivedBeforeAbort, _AbstractChatCompletionRunner_afterCompletionInvoked, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_throwIfAborted, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult, DEFAULT_MAX_CHAT_COMPLETIONS, AbstractChatCompletionRunner; var init_AbstractChatCompletionRunner = __esm({ "node_modules/openai/lib/AbstractChatCompletionRunner.mjs"() { - init_tslib2(); - init_error4(); - init_uuid2(); - init_parser3(); + init_tslib(); + init_error2(); + init_uuid(); + init_parser(); init_chatCompletionUtils(); init_EventStream(); init_RunnableFunction(); @@ -25509,7 +7708,7 @@ var init_AbstractChatCompletionRunner = __esm({ this.messages = []; } _addChatCompletion(chatCompletion) { - __classPrivateFieldSet2(this, _AbstractChatCompletionRunner_completionArrivedBeforeAbort, !this.controller.signal.aborted, "f"); + __classPrivateFieldSet(this, _AbstractChatCompletionRunner_completionArrivedBeforeAbort, !this.controller.signal.aborted, "f"); normalizeToolCallIds(chatCompletion); this._chatCompletions.push(chatCompletion); this._emit("chatCompletion", chatCompletion); @@ -25555,7 +7754,7 @@ var init_AbstractChatCompletionRunner = __esm({ */ async finalContent() { await this.done(); - return __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalContent).call(this); + return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalContent).call(this); } /** * @returns a promise that resolves with the final assistant ChatCompletionMessage response, @@ -25563,7 +7762,7 @@ var init_AbstractChatCompletionRunner = __esm({ */ async finalMessage() { await this.done(); - return __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalMessage).call(this); + return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalMessage).call(this); } /** * Waits for completion and returns the last function-tool call, or `undefined` @@ -25571,53 +7770,53 @@ var init_AbstractChatCompletionRunner = __esm({ */ async finalFunctionToolCall() { await this.done(); - return __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this); + return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this); } /** Waits for completion and returns the last matching function-tool result, if any. */ async finalFunctionToolCallResult() { await this.done(); - return __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this); + return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this); } /** Waits for completion and sums token usage across every chat completion in the run. */ async totalUsage() { await this.done(); - return __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_calculateTotalUsage).call(this); + return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_calculateTotalUsage).call(this); } /** Returns a copy of the chat completions received so far, in request order. */ allChatCompletions() { return [...this._chatCompletions]; } _emitFinal() { - if (__classPrivateFieldGet2(this, _AbstractChatCompletionRunner_afterCompletionInvoked, "f")) { - __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_throwIfAborted).call(this); + if (__classPrivateFieldGet(this, _AbstractChatCompletionRunner_afterCompletionInvoked, "f")) { + __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_throwIfAborted).call(this); } const completion = this._chatCompletions[this._chatCompletions.length - 1]; if (completion) { this._emit("finalChatCompletion", completion); } - const finalMessage = __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalMessage).call(this); + const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalMessage).call(this); if (finalMessage) { this._emit("finalMessage", finalMessage); } - const finalContent = __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalContent).call(this); + const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalContent).call(this); if (finalContent) { this._emit("finalContent", finalContent); } - const finalFunctionCall = __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this); + const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this); if (finalFunctionCall) { this._emit("finalFunctionToolCall", finalFunctionCall); } - const finalFunctionCallResult = __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this); + const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this); if (finalFunctionCallResult != null) { this._emit("finalFunctionToolCallResult", finalFunctionCallResult); } if (this._chatCompletions.some((c) => c.usage)) { - this._emit("totalUsage", __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_calculateTotalUsage).call(this)); + this._emit("totalUsage", __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_calculateTotalUsage).call(this)); } } async _createChatCompletion(client, params, options) { this._listenForAbort(options?.signal); - __classPrivateFieldGet2(_a3, _a3, "m", _AbstractChatCompletionRunner_validateParams).call(_a3, params); + __classPrivateFieldGet(_a2, _a2, "m", _AbstractChatCompletionRunner_validateParams).call(_a2, params); const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal }); this._connected(); return this._addChatCompletion(parseChatCompletion(chatCompletion, params)); @@ -25641,9 +7840,9 @@ var init_AbstractChatCompletionRunner = __esm({ if (afterCompletion == null) { return; } - __classPrivateFieldSet2(this, _AbstractChatCompletionRunner_afterCompletionInvoked, true, "f"); + __classPrivateFieldSet(this, _AbstractChatCompletionRunner_afterCompletionInvoked, true, "f"); await afterCompletion(completion, runner); - __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_throwIfAborted).call(this); + __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_throwIfAborted).call(this); }; const inputTools = params.tools.map((tool) => { if (isAutoParsableTool(tool)) { @@ -25740,7 +7939,7 @@ var init_AbstractChatCompletionRunner = __esm({ throw error; } } - const content = __classPrivateFieldGet2(_a3, _a3, "m", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(_a3, rawContent); + const content = __classPrivateFieldGet(_a2, _a2, "m", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(_a2, rawContent); return { message: { role, tool_call_id, content }, functionCalled: true }; }; for (let i = 0; i < maxChatCompletions; ++i) { @@ -25750,7 +7949,7 @@ var init_AbstractChatCompletionRunner = __esm({ tools, messages: this.messages.map(toRequestMessage) }, options); - allowBufferedToolCall = this.controller.signal.aborted && __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_completionArrivedBeforeAbort, "f"); + allowBufferedToolCall = this.controller.signal.aborted && __classPrivateFieldGet(this, _AbstractChatCompletionRunner_completionArrivedBeforeAbort, "f"); const message = chatCompletion.choices[0]?.message; if (!message) { throw new OpenAIError(`missing message in ChatCompletion response`); @@ -25795,8 +7994,8 @@ var init_AbstractChatCompletionRunner = __esm({ } } }; - _a3 = AbstractChatCompletionRunner, _AbstractChatCompletionRunner_completionArrivedBeforeAbort = /* @__PURE__ */ new WeakMap(), _AbstractChatCompletionRunner_afterCompletionInvoked = /* @__PURE__ */ new WeakMap(), _AbstractChatCompletionRunner_instances = /* @__PURE__ */ new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent2() { - return __classPrivateFieldGet2(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null; + _a2 = AbstractChatCompletionRunner, _AbstractChatCompletionRunner_completionArrivedBeforeAbort = /* @__PURE__ */ new WeakMap(), _AbstractChatCompletionRunner_afterCompletionInvoked = /* @__PURE__ */ new WeakMap(), _AbstractChatCompletionRunner_instances = /* @__PURE__ */ new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent2() { + return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, "m", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null; }, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage2() { let i = this.messages.length; while (i-- > 0) { @@ -25908,8 +8107,8 @@ function parseJSON(jsonString, allowPartial = Allow.ALL) { } return _parseJSON(jsonString.trim(), allowPartial); } -var STR, NUM, ARR, OBJ, NULL, BOOL, NAN, INFINITY, MINUS_INFINITY, INF, SPECIAL, ATOM, COLLECTION, ALL, Allow, PartialJSON, MalformedJSON, _parseJSON, partialParse3; -var init_parser4 = __esm({ +var STR, NUM, ARR, OBJ, NULL, BOOL, NAN, INFINITY, MINUS_INFINITY, INF, SPECIAL, ATOM, COLLECTION, ALL, Allow, PartialJSON, MalformedJSON, _parseJSON, partialParse; +var init_parser2 = __esm({ "node_modules/openai/_vendor/partial-json-parser/parser.mjs"() { STR = 1; NUM = 2; @@ -26124,21 +8323,21 @@ var init_parser4 = __esm({ }; return parseAny(); }; - partialParse3 = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM); + partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM); } }); // node_modules/openai/streaming.mjs -var init_streaming4 = __esm({ +var init_streaming2 = __esm({ "node_modules/openai/streaming.mjs"() { - init_streaming3(); + init_streaming(); } }); // node_modules/openai/lib/ChatCompletionStream.mjs function parseStructuredStreamingJSON(content) { try { - return partialParse3(content); + return partialParse(content); } catch (error) { if (error instanceof MalformedJSON || error instanceof SyntaxError) { return parseResponseFormatContent({ type: "json_schema", $parseRaw: void 0 }, content); @@ -26378,7 +8577,7 @@ function assertBoundToolCallIdentity(toolCall, identity) { } } function assignOwnProperties(target, source) { - if (Object.prototype.propertyIsEnumerable.call(source, "__proto__") && !hasOwn2(target, "__proto__")) { + if (Object.prototype.propertyIsEnumerable.call(source, "__proto__") && !hasOwn(target, "__proto__")) { Object.defineProperty(target, "__proto__", { value: void 0, writable: true, @@ -26920,14 +9119,14 @@ function finalizeChatCompletion(snapshot, params, audioDoneChoiceIndexes, valida throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type`); } if (stableTool.type === "custom") { - const { custom, type: type2, id: id3, ...toolRest2 } = stableTool; - const { input = "", name: name2, ...customRest } = custom || {}; + const { custom: custom2, type: type2, id: id3, ...toolRest2 } = stableTool; + const { input = "", name: name2, ...customRest } = custom2 || {}; if (name2 == null) { throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].custom.name`); } return { ...toolRest2, - id: id3 || `call_${uuid42()}`, + id: id3 || `call_${uuid4()}`, type: type2, custom: { ...customRest, name: name2, input } }; @@ -26942,7 +9141,7 @@ function finalizeChatCompletion(snapshot, params, audioDoneChoiceIndexes, valida } return { ...toolRest, - id: id2 || `call_${uuid42()}`, + id: id2 || `call_${uuid4()}`, type, function: { ...fnRest, name, arguments: args } }; @@ -26978,14 +9177,14 @@ function assertNever(_x) { var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_rejectsUnfinishedTurns, _ChatCompletionStream_audioDoneChoiceIndexes, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_hasAutoParseableTool, _ChatCompletionStream_partialJSONParseBudget, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_validateStructuredSnapshots, _ChatCompletionStream_endRequest, _ChatCompletionStream_accumulateChatCompletion, CHAT_COMPLETION_READABLE_STREAM_MESSAGE_PREFIX, MAX_STREAM_CHOICES, MAX_STREAM_TOOL_CALLS, MAX_PARTIAL_JSON_BYTES, MAX_PARTIAL_JSON_FRAGMENTS, MAX_PARTIAL_JSON_DEPTH, MAX_PARTIAL_JSON_PARSE_WORK, EAGER_PARTIAL_JSON_BYTES, MAX_SERIALIZED_PARSER_SCHEMA_NODES, stringifyParserSchemaValue, MAX_SERIALIZED_PARSER_SCHEMA_BYTES, MAX_SERIALIZED_PARSER_SCHEMA_DEPTH, OMITTED_SERIALIZED_PARSER_VALUE, UNSAFE_SERIALIZED_PARSER_VALUE, ChatCompletionStream; var init_ChatCompletionStream = __esm({ "node_modules/openai/lib/ChatCompletionStream.mjs"() { - init_tslib2(); - init_parser4(); - init_error4(); - init_request_options2(); - init_uuid2(); - init_values2(); - init_parser3(); - init_streaming4(); + init_tslib(); + init_parser2(); + init_error2(); + init_request_options(); + init_uuid(); + init_values(); + init_parser(); + init_streaming2(); init_AbstractChatCompletionRunner(); CHAT_COMPLETION_READABLE_STREAM_MESSAGE_PREFIX = "chat.completion.chunk.message:"; MAX_STREAM_CHOICES = 128; @@ -27013,10 +9212,10 @@ var init_ChatCompletionStream = __esm({ _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0); _ChatCompletionStream_hasAutoParseableTool.set(this, void 0); _ChatCompletionStream_partialJSONParseBudget.set(this, void 0); - __classPrivateFieldSet2(this, _ChatCompletionStream_params, params, "f"); - __classPrivateFieldSet2(this, _ChatCompletionStream_audioDoneChoiceIndexes, /* @__PURE__ */ new Set(), "f"); - __classPrivateFieldSet2(this, _ChatCompletionStream_choiceEventStates, [], "f"); - __classPrivateFieldSet2(this, _ChatCompletionStream_hasAutoParseableTool, false, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_params, params, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_audioDoneChoiceIndexes, /* @__PURE__ */ new Set(), "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_hasAutoParseableTool, false, "f"); const tools = params?.tools; const lengthDescriptor = tools && Object.getOwnPropertyDescriptor(tools, "length"); const length = lengthDescriptor && "value" in lengthDescriptor ? lengthDescriptor.value : void 0; @@ -27028,16 +9227,16 @@ var init_ChatCompletionStream = __esm({ } const tool = descriptor.value; if (isChatCompletionFunctionTool(tool) && (isAutoParsableTool(tool) || tool.function.strict === true)) { - __classPrivateFieldSet2(this, _ChatCompletionStream_hasAutoParseableTool, true, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_hasAutoParseableTool, true, "f"); break; } } } - __classPrivateFieldSet2(this, _ChatCompletionStream_partialJSONParseBudget, { bytes: 0, fragments: 0, work: 0 }, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_partialJSONParseBudget, { bytes: 0, fragments: 0, work: 0 }, "f"); } /** The latest accumulated completion, or `undefined` before a chunk arrives or after finalization. */ get currentChatCompletionSnapshot() { - return __classPrivateFieldGet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f"); + return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f"); } /** * Intended for use on the frontend, consuming a stream produced with @@ -27059,20 +9258,20 @@ var init_ChatCompletionStream = __esm({ } /** Rejects unfinished turns before tool callbacks while preserving ordinary stream and replay behavior. */ _runTools(client, params, runner, options) { - __classPrivateFieldSet2(this, _ChatCompletionStream_rejectsUnfinishedTurns, true, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_rejectsUnfinishedTurns, true, "f"); return super._runTools(client, params, runner, options); } async _createChatCompletion(client, params, options) { this._listenForAbort(options?.signal); const requestParams = { ...params, stream: true }; - __classPrivateFieldSet2(this, _ChatCompletionStream_params, requestParams, "f"); - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_beginRequest).call(this); + __classPrivateFieldSet(this, _ChatCompletionStream_params, requestParams, "f"); + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_beginRequest).call(this); const parserParams = snapshotChatCompletionParserParams(requestParams); - __classPrivateFieldSet2(this, _ChatCompletionStream_params, parserParams, "f"); - __classPrivateFieldSet2(this, _ChatCompletionStream_hasAutoParseableTool, parserParams.tools?.some((tool) => isChatCompletionFunctionTool(tool) && (isAutoParsableTool(tool) || tool.function.strict === true)) ?? false, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_params, parserParams, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_hasAutoParseableTool, parserParams.tools?.some((tool) => isChatCompletionFunctionTool(tool) && (isAutoParsableTool(tool) || tool.function.strict === true)) ?? false, "f"); const stopObserving = requestParams.tools || requestParams.response_format ? observeSerializedChatCompletionParserParams(requestParams, parserParams, (serialized) => { - __classPrivateFieldSet2(this, _ChatCompletionStream_params, serialized, "f"); - __classPrivateFieldSet2(this, _ChatCompletionStream_hasAutoParseableTool, serialized.tools?.some((tool) => isChatCompletionFunctionTool(tool) && (isAutoParsableTool(tool) || tool.function.strict === true)) ?? false, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_params, serialized, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_hasAutoParseableTool, serialized.tools?.some((tool) => isChatCompletionFunctionTool(tool) && (isAutoParsableTool(tool) || tool.function.strict === true)) ?? false, "f"); }) : void 0; const stream5 = await client.chat.completions.create(requestParams, { ...options, @@ -27080,34 +9279,34 @@ var init_ChatCompletionStream = __esm({ }).finally(stopObserving); this._connected(); for await (const chunk of stream5) { - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_addChunk).call(this, chunk); + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_addChunk).call(this, chunk); } if (stream5.controller.signal?.aborted) { throw this._userAbortError(); } - return this._addChatCompletion(__classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_endRequest).call(this)); + return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_endRequest).call(this)); } async _fromReadableStream(readableStream, options) { this._listenForAbort(options?.signal); - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_beginRequest).call(this); + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_beginRequest).call(this); this._connected(); - const stream5 = Stream2.fromReadableStream(readableStream, this.controller); + const stream5 = Stream.fromReadableStream(readableStream, this.controller); let chatId; for await (const item of stream5) { - if ("error" in item && hasOwn2(item, "error") && typeof item.error === "object" && item.error !== null) { - throw new APIError2(void 0, item.error, void 0, void 0); + if ("error" in item && hasOwn(item, "error") && typeof item.error === "object" && item.error !== null) { + throw new APIError(void 0, item.error, void 0, void 0); } if (isChatCompletionReadableStreamMessage(item)) { const message = getChatCompletionReadableStreamMessage(item); - if (__classPrivateFieldGet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")) { - const toolCalls = __classPrivateFieldGet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f").choices[0]?.message.tool_calls; + if (__classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")) { + const toolCalls = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f").choices[0]?.message.tool_calls; for (const [index, id] of message.tool_call_ids?.entries() ?? []) { const toolCall = toolCalls?.[index]; if (toolCall && id) { toolCall.id = id; } } - this._addChatCompletion(__classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_endRequest).call(this)); + this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_endRequest).call(this)); chatId = void 0; } this._addMessage(message.message); @@ -27115,9 +9314,9 @@ var init_ChatCompletionStream = __esm({ } const chunk = item; if (chatId && chunk.id && chatId !== chunk.id) { - this._addChatCompletion(__classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_endRequest).call(this)); + this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_endRequest).call(this)); } - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_addChunk).call(this, chunk); + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_addChunk).call(this, chunk); if (chunk.id) { chatId = chunk.id; } @@ -27125,8 +9324,8 @@ var init_ChatCompletionStream = __esm({ if (stream5.controller.signal?.aborted) { throw this._userAbortError(); } - if (__classPrivateFieldGet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")) { - return this._addChatCompletion(__classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_endRequest).call(this)); + if (__classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")) { + return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_endRequest).call(this)); } const lastChatCompletion = this._chatCompletions[this._chatCompletions.length - 1]; if (lastChatCompletion) { @@ -27139,11 +9338,11 @@ var init_ChatCompletionStream = __esm({ if (this.ended) { return; } - __classPrivateFieldSet2(this, _ChatCompletionStream_audioDoneChoiceIndexes, /* @__PURE__ */ new Set(), "f"); - __classPrivateFieldSet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, void 0, "f"); - __classPrivateFieldSet2(this, _ChatCompletionStream_partialJSONParseBudget, { bytes: 0, fragments: 0, work: 0 }, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_audioDoneChoiceIndexes, /* @__PURE__ */ new Set(), "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, void 0, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_partialJSONParseBudget, { bytes: 0, fragments: 0, work: 0 }, "f"); }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState2(choice) { - let state2 = __classPrivateFieldGet2(this, _ChatCompletionStream_choiceEventStates, "f")[choice.index]; + let state2 = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, "f")[choice.index]; if (state2) { return state2; } @@ -27158,22 +9357,22 @@ var init_ChatCompletionStream = __esm({ tool_call_parse_states: /* @__PURE__ */ new Map(), tool_call_identities: /* @__PURE__ */ new Map() }; - __classPrivateFieldGet2(this, _ChatCompletionStream_choiceEventStates, "f")[choice.index] = state2; + __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, "f")[choice.index] = state2; return state2; }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk2(chunk) { if (this.ended) { return; } const capturedChoiceFrames = /* @__PURE__ */ new WeakMap(); - const completion = __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk, capturedChoiceFrames); + const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk, capturedChoiceFrames); this._emit("chunk", chunk, completion); for (const choice of chunk.choices) { const capturedChoice = capturedChoiceFrames.get(choice); const choiceSnapshot = completion.choices[capturedChoice?.index ?? choice.index]; const capturedToolCalls = capturedChoice?.tool_calls ?? []; const { delta } = choice; - const structuredResponse = isParseableResponseFormat(__classPrivateFieldGet2(this, _ChatCompletionStream_params, "f")?.response_format); - const boundedSnapshot = structuredResponse || __classPrivateFieldGet2(this, _ChatCompletionStream_hasAutoParseableTool, "f"); + const structuredResponse = isParseableResponseFormat(__classPrivateFieldGet(this, _ChatCompletionStream_params, "f")?.response_format); + const boundedSnapshot = structuredResponse || __classPrivateFieldGet(this, _ChatCompletionStream_hasAutoParseableTool, "f"); const messageSnapshot = boundedSnapshot ? captureStructuredMessageSnapshot(choiceSnapshot) : choiceSnapshot.message; const refusal = boundedSnapshot ? captureStructuredJSONSnapshot(messageSnapshot, "refusal") : messageSnapshot.refusal; const parseableContent = !refusal && structuredResponse; @@ -27204,18 +9403,18 @@ var init_ChatCompletionStream = __esm({ snapshot: choiceSnapshot.logprobs?.refusal ?? [] }); } - const state2 = __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot); + const state2 = __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot); if (choiceSnapshot.finish_reason) { - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot); + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot); if (state2.current_tool_call_index != null) { - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state2.current_tool_call_index); + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state2.current_tool_call_index); } } for (const toolCall of capturedToolCalls) { if (state2.current_tool_call_index !== toolCall.index) { - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot); + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot); if (state2.current_tool_call_index != null) { - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state2.current_tool_call_index); + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state2.current_tool_call_index); } } state2.current_tool_call_index = toolCall.index; @@ -27250,11 +9449,11 @@ var init_ChatCompletionStream = __esm({ } } }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent2(choiceSnapshot, toolCallIndex) { - const state2 = __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot); + const state2 = __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot); if (state2.done_tool_calls.has(toolCallIndex)) { return; } - const messageSnapshot = __classPrivateFieldGet2(this, _ChatCompletionStream_hasAutoParseableTool, "f") ? captureStructuredMessageSnapshot(choiceSnapshot) : choiceSnapshot.message; + const messageSnapshot = __classPrivateFieldGet(this, _ChatCompletionStream_hasAutoParseableTool, "f") ? captureStructuredMessageSnapshot(choiceSnapshot) : choiceSnapshot.message; const toolCallSnapshot = messageSnapshot.tool_calls?.[toolCallIndex]; if (!toolCallSnapshot) { throw new Error("no tool call snapshot"); @@ -27267,13 +9466,13 @@ var init_ChatCompletionStream = __esm({ throw new Error("tool call snapshot missing `type`"); } if (toolCallSnapshot.type === "function") { - const inputTool = __classPrivateFieldGet2(this, _ChatCompletionStream_params, "f")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); + const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, "f")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); let parsedArguments = null; const parseable = isAutoParsableTool(inputTool) || inputTool?.function.strict === true; let argumentsSnapshot; if (parseable) { - if (__classPrivateFieldGet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")) { - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_validateStructuredSnapshots).call(this, __classPrivateFieldGet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")); + if (__classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")) { + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_validateStructuredSnapshots).call(this, __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")); } const capturedArguments = captureStructuredJSONSnapshot(toolCallSnapshot.function, "arguments"); if (typeof capturedArguments !== "string") { @@ -27301,21 +9500,21 @@ var init_ChatCompletionStream = __esm({ assertNever(toolCallSnapshot); } }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents2(choiceSnapshot) { - const state2 = __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot); - const structuredResponse = isParseableResponseFormat(__classPrivateFieldGet2(this, _ChatCompletionStream_params, "f")?.response_format); - const boundedSnapshot = structuredResponse || __classPrivateFieldGet2(this, _ChatCompletionStream_hasAutoParseableTool, "f"); + const state2 = __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot); + const structuredResponse = isParseableResponseFormat(__classPrivateFieldGet(this, _ChatCompletionStream_params, "f")?.response_format); + const boundedSnapshot = structuredResponse || __classPrivateFieldGet(this, _ChatCompletionStream_hasAutoParseableTool, "f"); const messageSnapshot = boundedSnapshot ? captureStructuredMessageSnapshot(choiceSnapshot) : choiceSnapshot.message; const refusal = boundedSnapshot ? captureStructuredJSONSnapshot(messageSnapshot, "refusal") : messageSnapshot.refusal; const parseableContent = !refusal && structuredResponse; const content = parseableContent ? captureStructuredJSONSnapshot(messageSnapshot, "content") : messageSnapshot.content; if (content != null && (content !== "" || !refusal && !messageSnapshot.tool_calls?.length && !messageSnapshot.function_call) && !state2.content_done) { - if (parseableContent && __classPrivateFieldGet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")) { - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_validateStructuredSnapshots).call(this, __classPrivateFieldGet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")); + if (parseableContent && __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")) { + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_validateStructuredSnapshots).call(this, __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f")); } state2.content_done = true; this._emit("content.done", { content, - parsed: refusal ? null : parseResponseFormatContent(__classPrivateFieldGet2(this, _ChatCompletionStream_params, "f")?.response_format, parseableContent ? validateStructuredJSONSnapshot(content) : content) + parsed: refusal ? null : parseResponseFormatContent(__classPrivateFieldGet(this, _ChatCompletionStream_params, "f")?.response_format, parseableContent ? validateStructuredJSONSnapshot(content) : content) }); } if (refusal && !state2.refusal_done) { @@ -27332,7 +9531,7 @@ var init_ChatCompletionStream = __esm({ } }, _ChatCompletionStream_validateStructuredSnapshots = function _ChatCompletionStream_validateStructuredSnapshots2(snapshot) { const finalJSONBudget = { bytes: 0, fragments: 0, work: 0 }; - const parseableContent = isParseableResponseFormat(__classPrivateFieldGet2(this, _ChatCompletionStream_params, "f")?.response_format); + const parseableContent = isParseableResponseFormat(__classPrivateFieldGet(this, _ChatCompletionStream_params, "f")?.response_format); const validatedMessages = /* @__PURE__ */ new WeakMap(); const choices = captureSnapshotArray(snapshot, "choices", MAX_STREAM_CHOICES, "choice"); if (!choices) { @@ -27355,9 +9554,9 @@ var init_ChatCompletionStream = __esm({ toolCallCollection: toolCalls, toolCalls: validatedTools })); - const state2 = __classPrivateFieldGet2(this, _ChatCompletionStream_choiceEventStates, "f")[choice.index]; + const state2 = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, "f")[choice.index]; if (parseableContent && !refusal && typeof content === "string") { - validateStructuredJSONSnapshot(content, finalJSONBudget, __classPrivateFieldGet2(this, _ChatCompletionStream_partialJSONParseBudget, "f")); + validateStructuredJSONSnapshot(content, finalJSONBudget, __classPrivateFieldGet(this, _ChatCompletionStream_partialJSONParseBudget, "f")); } for (const [index, identity] of state2?.tool_call_identities ?? []) { const toolCall = toolCalls && captureSnapshotArrayItem(toolCalls, index); @@ -27366,7 +9565,7 @@ var init_ChatCompletionStream = __esm({ } assertBoundToolCallIdentity(toolCall, identity); } - if (!__classPrivateFieldGet2(this, _ChatCompletionStream_hasAutoParseableTool, "f")) { + if (!__classPrivateFieldGet(this, _ChatCompletionStream_hasAutoParseableTool, "f")) { continue; } for (let toolCallIndex = 0; toolCallIndex < (toolCalls?.length ?? 0); toolCallIndex += 1) { @@ -27395,7 +9594,7 @@ var init_ChatCompletionStream = __esm({ } continue; } - if (!shouldParseToolCall(__classPrivateFieldGet2(this, _ChatCompletionStream_params, "f"), { + if (!shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, "f"), { type: identity.type, function: { name: identity.name } })) { @@ -27410,7 +9609,7 @@ var init_ChatCompletionStream = __esm({ if (typeof argumentsSnapshot !== "string") { throw new OpenAIError("Chat completion stream contains an unsafe structured JSON snapshot"); } - validateStructuredJSONSnapshot(argumentsSnapshot, finalJSONBudget, __classPrivateFieldGet2(this, _ChatCompletionStream_partialJSONParseBudget, "f")); + validateStructuredJSONSnapshot(argumentsSnapshot, finalJSONBudget, __classPrivateFieldGet(this, _ChatCompletionStream_partialJSONParseBudget, "f")); validatedTools.set(toolCallIndex, Object.freeze({ tool: toolCall, function: fn, @@ -27425,31 +9624,31 @@ var init_ChatCompletionStream = __esm({ if (this.ended) { throw new OpenAIError(`stream has ended, this shouldn't happen`); } - const snapshot = __classPrivateFieldGet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f"); + const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f"); if (!snapshot) { throw new OpenAIError(`request ended without sending any chunks`); } - const validatedMessages = __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_validateStructuredSnapshots).call(this, snapshot); - const audioDoneChoiceIndexes = __classPrivateFieldGet2(this, _ChatCompletionStream_audioDoneChoiceIndexes, "f"); - __classPrivateFieldSet2(this, _ChatCompletionStream_audioDoneChoiceIndexes, /* @__PURE__ */ new Set(), "f"); - __classPrivateFieldSet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, void 0, "f"); - __classPrivateFieldSet2(this, _ChatCompletionStream_choiceEventStates, [], "f"); - return finalizeChatCompletion(snapshot, __classPrivateFieldGet2(this, _ChatCompletionStream_params, "f"), audioDoneChoiceIndexes, validatedMessages); + const validatedMessages = __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_validateStructuredSnapshots).call(this, snapshot); + const audioDoneChoiceIndexes = __classPrivateFieldGet(this, _ChatCompletionStream_audioDoneChoiceIndexes, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_audioDoneChoiceIndexes, /* @__PURE__ */ new Set(), "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, void 0, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], "f"); + return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, "f"), audioDoneChoiceIndexes, validatedMessages); }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion2(chunk, capturedChoiceFrames) { var _a6, _b, _c, _d, _e; - let snapshot = __classPrivateFieldGet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f"); + let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, "f"); const { choices, obfuscation: _obfuscation, ...rest } = chunk; if (!snapshot) { const newSnapshot = { ...rest, choices: [] }; - __classPrivateFieldSet2(this, _ChatCompletionStream_currentChatCompletionSnapshot, newSnapshot, "f"); + __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, newSnapshot, "f"); snapshot = newSnapshot; } else if (chunk.id) { assignOwnProperties(snapshot, rest); } - const requestedChoiceCount = __classPrivateFieldGet2(this, _ChatCompletionStream_params, "f")?.n; + const requestedChoiceCount = __classPrivateFieldGet(this, _ChatCompletionStream_params, "f")?.n; const maxChoices = typeof requestedChoiceCount === "number" && Number.isSafeInteger(requestedChoiceCount) && requestedChoiceCount > 0 ? Math.min(requestedChoiceCount, MAX_STREAM_CHOICES) : MAX_STREAM_CHOICES; for (const chunkChoice of chunk.choices) { const { delta, finish_reason, index, logprobs = null, ...other } = chunkChoice; @@ -27464,7 +9663,7 @@ var init_ChatCompletionStream = __esm({ snapshot.choices[index] = newChoice; choice = newChoice; } - if (isParseableResponseFormat(__classPrivateFieldGet2(this, _ChatCompletionStream_params, "f")?.response_format) || __classPrivateFieldGet2(this, _ChatCompletionStream_hasAutoParseableTool, "f")) { + if (isParseableResponseFormat(__classPrivateFieldGet(this, _ChatCompletionStream_params, "f")?.response_format) || __classPrivateFieldGet(this, _ChatCompletionStream_hasAutoParseableTool, "f")) { captureStructuredJSONSnapshot(captureStructuredMessageSnapshot(choice), "refusal"); } if (logprobs) { @@ -27492,7 +9691,7 @@ var init_ChatCompletionStream = __esm({ } if (finish_reason) { choice.finish_reason = finish_reason; - if (__classPrivateFieldGet2(this, _ChatCompletionStream_params, "f") && (__classPrivateFieldGet2(this, _ChatCompletionStream_rejectsUnfinishedTurns, "f") || hasAutoParseableInput(__classPrivateFieldGet2(this, _ChatCompletionStream_params, "f")))) { + if (__classPrivateFieldGet(this, _ChatCompletionStream_params, "f") && (__classPrivateFieldGet(this, _ChatCompletionStream_rejectsUnfinishedTurns, "f") || hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, "f")))) { if (finish_reason === "length") { throw new LengthFinishReasonError(); } @@ -27506,14 +9705,14 @@ var init_ChatCompletionStream = __esm({ Object.freeze(capturedToolCalls); continue; } - __classPrivateFieldGet2(this, _ChatCompletionStream_audioDoneChoiceIndexes, "f").delete(index); + __classPrivateFieldGet(this, _ChatCompletionStream_audioDoneChoiceIndexes, "f").delete(index); const { audio, content, refusal, function_call, role, ...capturedDeltaFields } = delta; const { tool_calls: capturedToolCallDelta, ...rest2 } = capturedDeltaFields; - const tool_calls = hasOwn2(capturedDeltaFields, "tool_calls") ? capturedToolCallDelta : delta.tool_calls; + const tool_calls = hasOwn(capturedDeltaFields, "tool_calls") ? capturedToolCallDelta : delta.tool_calls; assertIsEmpty(rest2); assignOwnProperties(choice.message, rest2); if (audio?.expires_at != null && audio.id == null && audio.data == null && audio.transcript == null && content == null && refusal == null && function_call == null && role == null && tool_calls == null && Object.keys(rest2).length === 0) { - __classPrivateFieldGet2(this, _ChatCompletionStream_audioDoneChoiceIndexes, "f").add(index); + __classPrivateFieldGet(this, _ChatCompletionStream_audioDoneChoiceIndexes, "f").add(index); } if (refusal) { choice.message.refusal = (choice.message.refusal || "") + refusal; @@ -27550,15 +9749,15 @@ var init_ChatCompletionStream = __esm({ } } if (content != null) { - if (!choice.message.refusal && isParseableResponseFormat(__classPrivateFieldGet2(this, _ChatCompletionStream_params, "f")?.response_format)) { - const eventState = __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choice); + if (!choice.message.refusal && isParseableResponseFormat(__classPrivateFieldGet(this, _ChatCompletionStream_params, "f")?.response_format)) { + const eventState = __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choice); const parseState = eventState.content_parse_state ?? (eventState.content_parse_state = createPartialJSONParseState()); - const shouldParse = recordPartialJSONFragment(parseState, __classPrivateFieldGet2(this, _ChatCompletionStream_partialJSONParseBudget, "f"), content); + const shouldParse = recordPartialJSONFragment(parseState, __classPrivateFieldGet(this, _ChatCompletionStream_partialJSONParseBudget, "f"), content); choice.message.content = (captureStructuredJSONSnapshot(choice.message, "content") || "") + content; if (!parseState.has_non_whitespace) { choice.message.parsed = null; - } else if (shouldParse && reservePartialJSONParse(parseState, __classPrivateFieldGet2(this, _ChatCompletionStream_partialJSONParseBudget, "f"))) { - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_validateStructuredSnapshots).call(this, snapshot); + } else if (shouldParse && reservePartialJSONParse(parseState, __classPrivateFieldGet(this, _ChatCompletionStream_partialJSONParseBudget, "f"))) { + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_validateStructuredSnapshots).call(this, snapshot); choice.message.parsed = parseStructuredStreamingJSON(validateStructuredJSONSnapshot(choice.message.content)); } else if (content.length > 0) { choice.message.parsed = null; @@ -27570,14 +9769,14 @@ var init_ChatCompletionStream = __esm({ if (tool_calls) { const toolCallSnapshots = (_e = choice.message).tool_calls ?? (_e.tool_calls = []); for (const toolCallDelta of tool_calls) { - const { index: index2, id, type, function: fn, custom, ...rest3 } = toolCallDelta; + const { index: index2, id, type, function: fn, custom: custom2, ...rest3 } = toolCallDelta; if (!Number.isSafeInteger(index2) || index2 < 0 || index2 >= MAX_STREAM_TOOL_CALLS) { throw new OpenAIError(`Chat completion stream contains an invalid tool call index: ${index2}`); } let argumentsDelta = ""; const tool_call = toolCallSnapshots[index2] ?? (toolCallSnapshots[index2] = {}); const functionName = fn?.name; - const eventState = __classPrivateFieldGet2(this, _ChatCompletionStream_hasAutoParseableTool, "f") ? __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choice) : void 0; + const eventState = __classPrivateFieldGet(this, _ChatCompletionStream_hasAutoParseableTool, "f") ? __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_getChoiceEventState).call(this, choice) : void 0; let boundIdentity = eventState?.tool_call_identities.get(index2); if (boundIdentity) { assertBoundToolCallIdentity(tool_call, boundIdentity); @@ -27592,13 +9791,13 @@ var init_ChatCompletionStream = __esm({ if (type) { tool_call.type = type; } - if (custom) { - const customSnapshot = tool_call.custom ?? (tool_call.custom = { name: custom.name ?? "", input: "" }); - if (custom.name) { - customSnapshot.name = custom.name; + if (custom2) { + const customSnapshot = tool_call.custom ?? (tool_call.custom = { name: custom2.name ?? "", input: "" }); + if (custom2.name) { + customSnapshot.name = custom2.name; } - if (custom.input) { - customSnapshot.input += custom.input; + if (custom2.input) { + customSnapshot.input += custom2.input; } } if (fn) { @@ -27608,11 +9807,11 @@ var init_ChatCompletionStream = __esm({ } if (eventState && !boundIdentity) { const identity = ownFunctionToolIdentity(tool_call); - const configuredTool = identity && __classPrivateFieldGet2(this, _ChatCompletionStream_params, "f")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === identity.name); + const configuredTool = identity && __classPrivateFieldGet(this, _ChatCompletionStream_params, "f")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === identity.name); if (identity) { boundIdentity = { ...identity, - parseable: configuredTool !== void 0 && shouldParseToolCall(__classPrivateFieldGet2(this, _ChatCompletionStream_params, "f"), { + parseable: configuredTool !== void 0 && shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, "f"), { type: identity.type, function: { name: identity.name } }) @@ -27621,9 +9820,9 @@ var init_ChatCompletionStream = __esm({ if (!boundIdentity.parseable) { const provisionalState = eventState.tool_call_parse_states.get(index2); if (provisionalState) { - __classPrivateFieldGet2(this, _ChatCompletionStream_partialJSONParseBudget, "f").bytes -= provisionalState.bytes; - __classPrivateFieldGet2(this, _ChatCompletionStream_partialJSONParseBudget, "f").fragments -= provisionalState.fragments; - __classPrivateFieldGet2(this, _ChatCompletionStream_partialJSONParseBudget, "f").work -= provisionalState.work; + __classPrivateFieldGet(this, _ChatCompletionStream_partialJSONParseBudget, "f").bytes -= provisionalState.bytes; + __classPrivateFieldGet(this, _ChatCompletionStream_partialJSONParseBudget, "f").fragments -= provisionalState.fragments; + __classPrivateFieldGet(this, _ChatCompletionStream_partialJSONParseBudget, "f").work -= provisionalState.work; eventState.tool_call_parse_states.delete(index2); } } @@ -27638,16 +9837,16 @@ var init_ChatCompletionStream = __esm({ parseState = createPartialJSONParseState(); eventState.tool_call_parse_states.set(index2, parseState); } - const shouldParse = recordPartialJSONFragment(parseState, __classPrivateFieldGet2(this, _ChatCompletionStream_partialJSONParseBudget, "f"), argumentFragment); + const shouldParse = recordPartialJSONFragment(parseState, __classPrivateFieldGet(this, _ChatCompletionStream_partialJSONParseBudget, "f"), argumentFragment); const previousArguments = captureStructuredJSONSnapshot(functionSnapshot, "arguments"); if (typeof previousArguments !== "string") { throw new OpenAIError("Chat completion stream contains an unsafe structured JSON snapshot"); } functionSnapshot.arguments = previousArguments + argumentFragment; - if (shouldParse && boundIdentity?.parseable === true && reservePartialJSONParse(parseState, __classPrivateFieldGet2(this, _ChatCompletionStream_partialJSONParseBudget, "f"))) { - __classPrivateFieldGet2(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_validateStructuredSnapshots).call(this, snapshot); + if (shouldParse && boundIdentity?.parseable === true && reservePartialJSONParse(parseState, __classPrivateFieldGet(this, _ChatCompletionStream_partialJSONParseBudget, "f"))) { + __classPrivateFieldGet(this, _ChatCompletionStream_instances, "m", _ChatCompletionStream_validateStructuredSnapshots).call(this, snapshot); functionSnapshot.parsed_arguments = parseStructuredStreamingJSON(validateStructuredJSONSnapshot(functionSnapshot.arguments)); - } else if (argumentFragment.length > 0 && hasOwn2(functionSnapshot, "parsed_arguments")) { + } else if (argumentFragment.length > 0 && hasOwn(functionSnapshot, "parsed_arguments")) { functionSnapshot.parsed_arguments = void 0; } } else { @@ -27670,7 +9869,7 @@ var init_ChatCompletionStream = __esm({ } /** Serializes raw completion chunks into a readable stream for transfer to another runtime. */ toReadableStream() { - const stream5 = new Stream2(this[Symbol.asyncIterator].bind(this), this.controller); + const stream5 = new Stream(this[Symbol.asyncIterator].bind(this), this.controller); return stream5.toReadableStream(); } }; @@ -27682,8 +9881,8 @@ var ChatCompletionStreamingRunner; var init_ChatCompletionStreamingRunner = __esm({ "node_modules/openai/lib/ChatCompletionStreamingRunner.mjs"() { init_ChatCompletionStream(); - init_error4(); - init_streaming4(); + init_error2(); + init_streaming2(); init_chatCompletionUtils(); ChatCompletionStreamingRunner = class _ChatCompletionStreamingRunner extends ChatCompletionStream { /** Restores a serialized tool run, including intermediate completions and tool-result messages. */ @@ -27721,7 +9920,7 @@ var init_ChatCompletionStreamingRunner = __esm({ this.off("message", onMessage); }; }, { onReturn: () => this.abort() }); - const stream5 = new Stream2(() => iterator, this.controller); + const stream5 = new Stream(() => iterator, this.controller); return stream5.toReadableStream(); } /** Starts a streaming tool loop and returns its event-driven conversation runner. */ @@ -27742,26 +9941,26 @@ var init_ChatCompletionStreamingRunner = __esm({ }); // node_modules/openai/resources/chat/completions/completions.mjs -var Completions2; -var init_completions2 = __esm({ +var Completions; +var init_completions = __esm({ "node_modules/openai/resources/chat/completions/completions.mjs"() { - init_resource2(); - init_messages3(); - init_messages3(); - init_pagination2(); - init_path2(); + init_resource(); + init_messages(); + init_messages(); + init_pagination(); + init_path(); init_ChatCompletionRunner(); init_ChatCompletionStreamingRunner(); init_ChatCompletionStream(); - init_parser3(); + init_parser(); init_ChatCompletionStreamingRunner(); init_RunnableFunction(); init_ChatCompletionStream(); init_ChatCompletionRunner(); - Completions2 = class extends APIResource2 { + Completions = class extends APIResource { constructor() { super(...arguments); - this.messages = new Messages3(this._client); + this.messages = new Messages(this._client); } create(body, options) { return this._client.post("/chat/completions", { @@ -27782,7 +9981,7 @@ var init_completions2 = __esm({ * ``` */ retrieve(completionID, options) { - return this._client.get(path3`/chat/completions/${completionID}`, { + return this._client.get(path`/chat/completions/${completionID}`, { ...options, __security: { bearerAuth: true } }); @@ -27801,7 +10000,7 @@ var init_completions2 = __esm({ * ``` */ update(completionID, body, options) { - return this._client.post(path3`/chat/completions/${completionID}`, { + return this._client.post(path`/chat/completions/${completionID}`, { body, ...options, __security: { bearerAuth: true } @@ -27837,7 +10036,7 @@ var init_completions2 = __esm({ * ``` */ delete(completionID, options) { - return this._client.delete(path3`/chat/completions/${completionID}`, { + return this._client.delete(path`/chat/completions/${completionID}`, { ...options, __security: { bearerAuth: true } }); @@ -27862,7 +10061,7 @@ var init_completions2 = __esm({ return ChatCompletionStream.createChatCompletion(this._client, body, options); } }; - Completions2.Messages = Messages3; + Completions.Messages = Messages; } }); @@ -27870,25 +10069,25 @@ var init_completions2 = __esm({ var Chat; var init_chat = __esm({ "node_modules/openai/resources/chat/chat.mjs"() { - init_resource2(); - init_completions2(); - init_completions2(); - Chat = class extends APIResource2 { + init_resource(); + init_completions(); + init_completions(); + Chat = class extends APIResource { constructor() { super(...arguments); - this.completions = new Completions2(this._client); + this.completions = new Completions(this._client); } }; - Chat.Completions = Completions2; + Chat.Completions = Completions; } }); // node_modules/openai/resources/chat/completions/index.mjs -var init_completions3 = __esm({ +var init_completions2 = __esm({ "node_modules/openai/resources/chat/completions/index.mjs"() { - init_completions2(); - init_completions2(); - init_messages3(); + init_completions(); + init_completions(); + init_messages(); } }); @@ -27896,12 +10095,12 @@ var init_completions3 = __esm({ var init_chat2 = __esm({ "node_modules/openai/resources/chat/index.mjs"() { init_chat(); - init_completions3(); + init_completions2(); } }); // node_modules/openai/resources/shared.mjs -var init_shared2 = __esm({ +var init_shared = __esm({ "node_modules/openai/resources/shared.mjs"() { } }); @@ -27910,10 +10109,10 @@ var init_shared2 = __esm({ var AdminAPIKeys; var init_admin_api_keys = __esm({ "node_modules/openai/resources/admin/organization/admin-api-keys.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - AdminAPIKeys = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + AdminAPIKeys = class extends APIResource { /** * Create an organization admin API key * @@ -27944,7 +10143,7 @@ var init_admin_api_keys = __esm({ * ``` */ retrieve(keyID, options) { - return this._client.get(path3`/organization/admin_api_keys/${keyID}`, { + return this._client.get(path`/organization/admin_api_keys/${keyID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -27979,7 +10178,7 @@ var init_admin_api_keys = __esm({ * ``` */ delete(keyID, options) { - return this._client.delete(path3`/organization/admin_api_keys/${keyID}`, { + return this._client.delete(path`/organization/admin_api_keys/${keyID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -27992,9 +10191,9 @@ var init_admin_api_keys = __esm({ var AuditLogs; var init_audit_logs = __esm({ "node_modules/openai/resources/admin/organization/audit-logs.mjs"() { - init_resource2(); - init_pagination2(); - AuditLogs = class extends APIResource2 { + init_resource(); + init_pagination(); + AuditLogs = class extends APIResource { /** * List user actions and configuration changes within this organization. * @@ -28018,13 +10217,13 @@ var init_audit_logs = __esm({ }); // node_modules/openai/resources/admin/organization/certificates.mjs -var Certificates2; -var init_certificates2 = __esm({ +var Certificates; +var init_certificates = __esm({ "node_modules/openai/resources/admin/organization/certificates.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Certificates2 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Certificates = class extends APIResource { /** * Upload a certificate to the organization. This does **not** automatically * activate the certificate. @@ -28060,7 +10259,7 @@ var init_certificates2 = __esm({ * ``` */ retrieve(certificateID, query = {}, options) { - return this._client.get(path3`/organization/certificates/${certificateID}`, { + return this._client.get(path`/organization/certificates/${certificateID}`, { query, ...options, __security: { adminAPIKeyAuth: true } @@ -28078,7 +10277,7 @@ var init_certificates2 = __esm({ * ``` */ update(certificateID, body, options) { - return this._client.post(path3`/organization/certificates/${certificateID}`, { + return this._client.post(path`/organization/certificates/${certificateID}`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -28112,7 +10311,7 @@ var init_certificates2 = __esm({ * ``` */ delete(certificateID, options) { - return this._client.delete(path3`/organization/certificates/${certificateID}`, { + return this._client.delete(path`/organization/certificates/${certificateID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28133,7 +10332,7 @@ var init_certificates2 = __esm({ * ``` */ activate(body, options) { - return this._client.getAPIList("/organization/certificates/activate", Page2, { + return this._client.getAPIList("/organization/certificates/activate", Page, { body, method: "post", ...options, @@ -28156,7 +10355,7 @@ var init_certificates2 = __esm({ * ``` */ deactivate(body, options) { - return this._client.getAPIList("/organization/certificates/deactivate", Page2, { body, method: "post", ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList("/organization/certificates/deactivate", Page, { body, method: "post", ...options, __security: { adminAPIKeyAuth: true } }); } }; } @@ -28166,8 +10365,8 @@ var init_certificates2 = __esm({ var DataRetention; var init_data_retention = __esm({ "node_modules/openai/resources/admin/organization/data-retention.mjs"() { - init_resource2(); - DataRetention = class extends APIResource2 { + init_resource(); + DataRetention = class extends APIResource { /** * Retrieves organization data retention controls. * @@ -28206,13 +10405,13 @@ var init_data_retention = __esm({ }); // node_modules/openai/resources/admin/organization/invites.mjs -var Invites2; -var init_invites2 = __esm({ +var Invites; +var init_invites = __esm({ "node_modules/openai/resources/admin/organization/invites.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Invites2 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Invites = class extends APIResource { /** * Create an invite for a user to the organization. The invite must be accepted by * the user before they have access to the organization. @@ -28245,7 +10444,7 @@ var init_invites2 = __esm({ * ``` */ retrieve(inviteID, options) { - return this._client.get(path3`/organization/invites/${inviteID}`, { + return this._client.get(path`/organization/invites/${inviteID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28280,7 +10479,7 @@ var init_invites2 = __esm({ * ``` */ delete(inviteID, options) { - return this._client.delete(path3`/organization/invites/${inviteID}`, { + return this._client.delete(path`/organization/invites/${inviteID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28293,10 +10492,10 @@ var init_invites2 = __esm({ var Roles; var init_roles = __esm({ "node_modules/openai/resources/admin/organization/roles.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Roles = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Roles = class extends APIResource { /** * Creates a custom role for the organization. * @@ -28326,7 +10525,7 @@ var init_roles = __esm({ * ``` */ retrieve(roleID, options) { - return this._client.get(path3`/organization/roles/${roleID}`, { + return this._client.get(path`/organization/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28342,7 +10541,7 @@ var init_roles = __esm({ * ``` */ update(roleID, body, options) { - return this._client.post(path3`/organization/roles/${roleID}`, { + return this._client.post(path`/organization/roles/${roleID}`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -28377,7 +10576,7 @@ var init_roles = __esm({ * ``` */ delete(roleID, options) { - return this._client.delete(path3`/organization/roles/${roleID}`, { + return this._client.delete(path`/organization/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28390,10 +10589,10 @@ var init_roles = __esm({ var SpendAlerts; var init_spend_alerts = __esm({ "node_modules/openai/resources/admin/organization/spend-alerts.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - SpendAlerts = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + SpendAlerts = class extends APIResource { /** * Creates an organization spend alert. * @@ -28430,7 +10629,7 @@ var init_spend_alerts = __esm({ * ``` */ retrieve(alertID, options) { - return this._client.get(path3`/organization/spend_alerts/${alertID}`, { + return this._client.get(path`/organization/spend_alerts/${alertID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28456,7 +10655,7 @@ var init_spend_alerts = __esm({ * ``` */ update(alertID, body, options) { - return this._client.post(path3`/organization/spend_alerts/${alertID}`, { + return this._client.post(path`/organization/spend_alerts/${alertID}`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -28488,7 +10687,7 @@ var init_spend_alerts = __esm({ * ``` */ delete(alertID, options) { - return this._client.delete(path3`/organization/spend_alerts/${alertID}`, { + return this._client.delete(path`/organization/spend_alerts/${alertID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28501,8 +10700,8 @@ var init_spend_alerts = __esm({ var SpendLimit; var init_spend_limit = __esm({ "node_modules/openai/resources/admin/organization/spend-limit.mjs"() { - init_resource2(); - SpendLimit = class extends APIResource2 { + init_resource(); + SpendLimit = class extends APIResource { /** * Get the organization's hard spend limit. * @@ -28561,8 +10760,8 @@ var init_spend_limit = __esm({ var Usage; var init_usage = __esm({ "node_modules/openai/resources/admin/organization/usage.mjs"() { - init_resource2(); - Usage = class extends APIResource2 { + init_resource(); + Usage = class extends APIResource { /** * Get audio speeches usage details for the organization. * @@ -28769,10 +10968,10 @@ var init_usage = __esm({ var Roles2; var init_roles2 = __esm({ "node_modules/openai/resources/admin/organization/groups/roles.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Roles2 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Roles2 = class extends APIResource { /** * Assigns an organization role to a group within the organization. * @@ -28786,7 +10985,7 @@ var init_roles2 = __esm({ * ``` */ create(groupID, body, options) { - return this._client.post(path3`/organization/groups/${groupID}/roles`, { + return this._client.post(path`/organization/groups/${groupID}/roles`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -28806,7 +11005,7 @@ var init_roles2 = __esm({ */ retrieve(roleID, params, options) { const { group_id } = params; - return this._client.get(path3`/organization/groups/${group_id}/roles/${roleID}`, { + return this._client.get(path`/organization/groups/${group_id}/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28825,7 +11024,7 @@ var init_roles2 = __esm({ * ``` */ list(groupID, query = {}, options) { - return this._client.getAPIList(path3`/organization/groups/${groupID}/roles`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/groups/${groupID}/roles`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Unassigns an organization role from a group within the organization. @@ -28841,7 +11040,7 @@ var init_roles2 = __esm({ */ delete(roleID, params, options) { const { group_id } = params; - return this._client.delete(path3`/organization/groups/${group_id}/roles/${roleID}`, { + return this._client.delete(path`/organization/groups/${group_id}/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28851,13 +11050,13 @@ var init_roles2 = __esm({ }); // node_modules/openai/resources/admin/organization/groups/users.mjs -var Users2; -var init_users2 = __esm({ +var Users; +var init_users = __esm({ "node_modules/openai/resources/admin/organization/groups/users.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Users2 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Users = class extends APIResource { /** * Adds a user to a group. * @@ -28871,7 +11070,7 @@ var init_users2 = __esm({ * ``` */ create(groupID, body, options) { - return this._client.post(path3`/organization/groups/${groupID}/users`, { + return this._client.post(path`/organization/groups/${groupID}/users`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -28891,7 +11090,7 @@ var init_users2 = __esm({ */ retrieve(userID, params, options) { const { group_id } = params; - return this._client.get(path3`/organization/groups/${group_id}/users/${userID}`, { + return this._client.get(path`/organization/groups/${group_id}/users/${userID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28910,7 +11109,7 @@ var init_users2 = __esm({ * ``` */ list(groupID, query = {}, options) { - return this._client.getAPIList(path3`/organization/groups/${groupID}/users`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/groups/${groupID}/users`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Removes a user from a group. @@ -28926,7 +11125,7 @@ var init_users2 = __esm({ */ delete(userID, params, options) { const { group_id } = params; - return this._client.delete(path3`/organization/groups/${group_id}/users/${userID}`, { + return this._client.delete(path`/organization/groups/${group_id}/users/${userID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28939,17 +11138,17 @@ var init_users2 = __esm({ var Groups; var init_groups = __esm({ "node_modules/openai/resources/admin/organization/groups/groups.mjs"() { - init_resource2(); + init_resource(); init_roles2(); init_roles2(); - init_users2(); - init_users2(); - init_pagination2(); - init_path2(); - Groups = class extends APIResource2 { + init_users(); + init_users(); + init_pagination(); + init_path(); + Groups = class extends APIResource { constructor() { super(...arguments); - this.users = new Users2(this._client); + this.users = new Users(this._client); this.roles = new Roles2(this._client); } /** @@ -28981,7 +11180,7 @@ var init_groups = __esm({ * ``` */ retrieve(groupID, options) { - return this._client.get(path3`/organization/groups/${groupID}`, { + return this._client.get(path`/organization/groups/${groupID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -28998,7 +11197,7 @@ var init_groups = __esm({ * ``` */ update(groupID, body, options) { - return this._client.post(path3`/organization/groups/${groupID}`, { + return this._client.post(path`/organization/groups/${groupID}`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29033,25 +11232,25 @@ var init_groups = __esm({ * ``` */ delete(groupID, options) { - return this._client.delete(path3`/organization/groups/${groupID}`, { + return this._client.delete(path`/organization/groups/${groupID}`, { ...options, __security: { adminAPIKeyAuth: true } }); } }; - Groups.Users = Users2; + Groups.Users = Users; Groups.Roles = Roles2; } }); // node_modules/openai/resources/admin/organization/projects/api-keys.mjs -var APIKeys2; -var init_api_keys2 = __esm({ +var APIKeys; +var init_api_keys = __esm({ "node_modules/openai/resources/admin/organization/projects/api-keys.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - APIKeys2 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + APIKeys = class extends APIResource { /** * Retrieves an API key in the project. * @@ -29066,7 +11265,7 @@ var init_api_keys2 = __esm({ */ retrieve(apiKeyID, params, options) { const { project_id } = params; - return this._client.get(path3`/organization/projects/${project_id}/api_keys/${apiKeyID}`, { + return this._client.get(path`/organization/projects/${project_id}/api_keys/${apiKeyID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29085,7 +11284,7 @@ var init_api_keys2 = __esm({ * ``` */ list(projectID, query = {}, options) { - return this._client.getAPIList(path3`/organization/projects/${projectID}/api_keys`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/projects/${projectID}/api_keys`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Deletes an API key from the project. @@ -29104,7 +11303,7 @@ var init_api_keys2 = __esm({ */ delete(apiKeyID, params, options) { const { project_id } = params; - return this._client.delete(path3`/organization/projects/${project_id}/api_keys/${apiKeyID}`, { + return this._client.delete(path`/organization/projects/${project_id}/api_keys/${apiKeyID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29114,13 +11313,13 @@ var init_api_keys2 = __esm({ }); // node_modules/openai/resources/admin/organization/projects/certificates.mjs -var Certificates3; -var init_certificates3 = __esm({ +var Certificates2; +var init_certificates2 = __esm({ "node_modules/openai/resources/admin/organization/projects/certificates.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Certificates3 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Certificates2 = class extends APIResource { /** * List certificates for this project. * @@ -29135,7 +11334,7 @@ var init_certificates3 = __esm({ * ``` */ list(projectID, query = {}, options) { - return this._client.getAPIList(path3`/organization/projects/${projectID}/certificates`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/projects/${projectID}/certificates`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Activate certificates at the project level. @@ -29154,7 +11353,7 @@ var init_certificates3 = __esm({ * ``` */ activate(projectID, body, options) { - return this._client.getAPIList(path3`/organization/projects/${projectID}/certificates/activate`, Page2, { body, method: "post", ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/projects/${projectID}/certificates/activate`, Page, { body, method: "post", ...options, __security: { adminAPIKeyAuth: true } }); } /** * Deactivate certificates at the project level. You can atomically and @@ -29172,7 +11371,7 @@ var init_certificates3 = __esm({ * ``` */ deactivate(projectID, body, options) { - return this._client.getAPIList(path3`/organization/projects/${projectID}/certificates/deactivate`, Page2, { body, method: "post", ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/projects/${projectID}/certificates/deactivate`, Page, { body, method: "post", ...options, __security: { adminAPIKeyAuth: true } }); } }; } @@ -29182,9 +11381,9 @@ var init_certificates3 = __esm({ var DataRetention2; var init_data_retention2 = __esm({ "node_modules/openai/resources/admin/organization/projects/data-retention.mjs"() { - init_resource2(); - init_path2(); - DataRetention2 = class extends APIResource2 { + init_resource(); + init_path(); + DataRetention2 = class extends APIResource { /** * Retrieves project data retention controls. * @@ -29197,7 +11396,7 @@ var init_data_retention2 = __esm({ * ``` */ retrieve(projectID, options) { - return this._client.get(path3`/organization/projects/${projectID}/data_retention`, { + return this._client.get(path`/organization/projects/${projectID}/data_retention`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29215,7 +11414,7 @@ var init_data_retention2 = __esm({ * ``` */ update(projectID, body, options) { - return this._client.post(path3`/organization/projects/${projectID}/data_retention`, { + return this._client.post(path`/organization/projects/${projectID}/data_retention`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29229,9 +11428,9 @@ var init_data_retention2 = __esm({ var HostedToolPermissions; var init_hosted_tool_permissions = __esm({ "node_modules/openai/resources/admin/organization/projects/hosted-tool-permissions.mjs"() { - init_resource2(); - init_path2(); - HostedToolPermissions = class extends APIResource2 { + init_resource(); + init_path(); + HostedToolPermissions = class extends APIResource { /** * Returns hosted tool permissions for a project. * @@ -29244,7 +11443,7 @@ var init_hosted_tool_permissions = __esm({ * ``` */ retrieve(projectID, options) { - return this._client.get(path3`/organization/projects/${projectID}/hosted_tool_permissions`, { + return this._client.get(path`/organization/projects/${projectID}/hosted_tool_permissions`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29261,7 +11460,7 @@ var init_hosted_tool_permissions = __esm({ * ``` */ update(projectID, body, options) { - return this._client.post(path3`/organization/projects/${projectID}/hosted_tool_permissions`, { + return this._client.post(path`/organization/projects/${projectID}/hosted_tool_permissions`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29275,9 +11474,9 @@ var init_hosted_tool_permissions = __esm({ var ModelPermissions; var init_model_permissions = __esm({ "node_modules/openai/resources/admin/organization/projects/model-permissions.mjs"() { - init_resource2(); - init_path2(); - ModelPermissions = class extends APIResource2 { + init_resource(); + init_path(); + ModelPermissions = class extends APIResource { /** * Returns model permissions for a project. * @@ -29290,7 +11489,7 @@ var init_model_permissions = __esm({ * ``` */ retrieve(projectID, options) { - return this._client.get(path3`/organization/projects/${projectID}/model_permissions`, { + return this._client.get(path`/organization/projects/${projectID}/model_permissions`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29308,7 +11507,7 @@ var init_model_permissions = __esm({ * ``` */ update(projectID, body, options) { - return this._client.post(path3`/organization/projects/${projectID}/model_permissions`, { + return this._client.post(path`/organization/projects/${projectID}/model_permissions`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29326,7 +11525,7 @@ var init_model_permissions = __esm({ * ``` */ delete(projectID, options) { - return this._client.delete(path3`/organization/projects/${projectID}/model_permissions`, { + return this._client.delete(path`/organization/projects/${projectID}/model_permissions`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29336,13 +11535,13 @@ var init_model_permissions = __esm({ }); // node_modules/openai/resources/admin/organization/projects/rate-limits.mjs -var RateLimits3; -var init_rate_limits3 = __esm({ +var RateLimits; +var init_rate_limits = __esm({ "node_modules/openai/resources/admin/organization/projects/rate-limits.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - RateLimits3 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + RateLimits = class extends APIResource { /** * Returns the rate limits per model for a project. * @@ -29357,7 +11556,7 @@ var init_rate_limits3 = __esm({ * ``` */ listRateLimits(projectID, query = {}, options) { - return this._client.getAPIList(path3`/organization/projects/${projectID}/rate_limits`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/projects/${projectID}/rate_limits`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Updates a project rate limit. @@ -29373,7 +11572,7 @@ var init_rate_limits3 = __esm({ */ updateRateLimit(rateLimitID, params, options) { const { project_id, ...body } = params; - return this._client.post(path3`/organization/projects/${project_id}/rate_limits/${rateLimitID}`, { + return this._client.post(path`/organization/projects/${project_id}/rate_limits/${rateLimitID}`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29387,10 +11586,10 @@ var init_rate_limits3 = __esm({ var Roles3; var init_roles3 = __esm({ "node_modules/openai/resources/admin/organization/projects/roles.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Roles3 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Roles3 = class extends APIResource { /** * Creates a custom role for a project. * @@ -29404,7 +11603,7 @@ var init_roles3 = __esm({ * ``` */ create(projectID, body, options) { - return this._client.post(path3`/projects/${projectID}/roles`, { + return this._client.post(path`/projects/${projectID}/roles`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29424,7 +11623,7 @@ var init_roles3 = __esm({ */ retrieve(roleID, params, options) { const { project_id } = params; - return this._client.get(path3`/projects/${project_id}/roles/${roleID}`, { + return this._client.get(path`/projects/${project_id}/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29443,7 +11642,7 @@ var init_roles3 = __esm({ */ update(roleID, params, options) { const { project_id, ...body } = params; - return this._client.post(path3`/projects/${project_id}/roles/${roleID}`, { + return this._client.post(path`/projects/${project_id}/roles/${roleID}`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29463,7 +11662,7 @@ var init_roles3 = __esm({ * ``` */ list(projectID, query = {}, options) { - return this._client.getAPIList(path3`/projects/${projectID}/roles`, NextCursorPage, { + return this._client.getAPIList(path`/projects/${projectID}/roles`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } @@ -29483,7 +11682,7 @@ var init_roles3 = __esm({ */ delete(roleID, params, options) { const { project_id } = params; - return this._client.delete(path3`/projects/${project_id}/roles/${roleID}`, { + return this._client.delete(path`/projects/${project_id}/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29496,10 +11695,10 @@ var init_roles3 = __esm({ var SpendAlerts2; var init_spend_alerts2 = __esm({ "node_modules/openai/resources/admin/organization/projects/spend-alerts.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - SpendAlerts2 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + SpendAlerts2 = class extends APIResource { /** * Creates a project spend alert. * @@ -29521,7 +11720,7 @@ var init_spend_alerts2 = __esm({ * ``` */ create(projectID, body, options) { - return this._client.post(path3`/organization/projects/${projectID}/spend_alerts`, { + return this._client.post(path`/organization/projects/${projectID}/spend_alerts`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29541,7 +11740,7 @@ var init_spend_alerts2 = __esm({ */ retrieve(alertID, params, options) { const { project_id } = params; - return this._client.get(path3`/organization/projects/${project_id}/spend_alerts/${alertID}`, { + return this._client.get(path`/organization/projects/${project_id}/spend_alerts/${alertID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29569,7 +11768,7 @@ var init_spend_alerts2 = __esm({ */ update(alertID, params, options) { const { project_id, ...body } = params; - return this._client.post(path3`/organization/projects/${project_id}/spend_alerts/${alertID}`, { + return this._client.post(path`/organization/projects/${project_id}/spend_alerts/${alertID}`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29589,7 +11788,7 @@ var init_spend_alerts2 = __esm({ * ``` */ list(projectID, query = {}, options) { - return this._client.getAPIList(path3`/organization/projects/${projectID}/spend_alerts`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/projects/${projectID}/spend_alerts`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Deletes a project spend alert. @@ -29605,7 +11804,7 @@ var init_spend_alerts2 = __esm({ */ delete(alertID, params, options) { const { project_id } = params; - return this._client.delete(path3`/organization/projects/${project_id}/spend_alerts/${alertID}`, { + return this._client.delete(path`/organization/projects/${project_id}/spend_alerts/${alertID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29618,9 +11817,9 @@ var init_spend_alerts2 = __esm({ var SpendLimit2; var init_spend_limit2 = __esm({ "node_modules/openai/resources/admin/organization/projects/spend-limit.mjs"() { - init_resource2(); - init_path2(); - SpendLimit2 = class extends APIResource2 { + init_resource(); + init_path(); + SpendLimit2 = class extends APIResource { /** * Get a project's hard spend limit. * @@ -29633,7 +11832,7 @@ var init_spend_limit2 = __esm({ * ``` */ retrieve(projectID, options) { - return this._client.get(path3`/organization/projects/${projectID}/spend_limit`, { + return this._client.get(path`/organization/projects/${projectID}/spend_limit`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29655,7 +11854,7 @@ var init_spend_limit2 = __esm({ * ``` */ update(projectID, body, options) { - return this._client.post(path3`/organization/projects/${projectID}/spend_limit`, { + return this._client.post(path`/organization/projects/${projectID}/spend_limit`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29673,7 +11872,7 @@ var init_spend_limit2 = __esm({ * ``` */ delete(projectID, options) { - return this._client.delete(path3`/organization/projects/${projectID}/spend_limit`, { + return this._client.delete(path`/organization/projects/${projectID}/spend_limit`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29686,10 +11885,10 @@ var init_spend_limit2 = __esm({ var Roles4; var init_roles4 = __esm({ "node_modules/openai/resources/admin/organization/projects/groups/roles.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Roles4 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Roles4 = class extends APIResource { /** * Assigns a project role to a group within a project. * @@ -29704,7 +11903,7 @@ var init_roles4 = __esm({ */ create(groupID, params, options) { const { project_id, ...body } = params; - return this._client.post(path3`/projects/${project_id}/groups/${groupID}/roles`, { + return this._client.post(path`/projects/${project_id}/groups/${groupID}/roles`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29724,7 +11923,7 @@ var init_roles4 = __esm({ */ retrieve(roleID, params, options) { const { project_id, group_id } = params; - return this._client.get(path3`/projects/${project_id}/groups/${group_id}/roles/${roleID}`, { + return this._client.get(path`/projects/${project_id}/groups/${group_id}/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29745,7 +11944,7 @@ var init_roles4 = __esm({ */ list(groupID, params, options) { const { project_id, ...query } = params; - return this._client.getAPIList(path3`/projects/${project_id}/groups/${groupID}/roles`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/projects/${project_id}/groups/${groupID}/roles`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Unassigns a project role from a group within a project. @@ -29761,7 +11960,7 @@ var init_roles4 = __esm({ */ delete(roleID, params, options) { const { project_id, group_id } = params; - return this._client.delete(path3`/projects/${project_id}/groups/${group_id}/roles/${roleID}`, { + return this._client.delete(path`/projects/${project_id}/groups/${group_id}/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29774,12 +11973,12 @@ var init_roles4 = __esm({ var Groups2; var init_groups2 = __esm({ "node_modules/openai/resources/admin/organization/projects/groups/groups.mjs"() { - init_resource2(); + init_resource(); init_roles4(); init_roles4(); - init_pagination2(); - init_path2(); - Groups2 = class extends APIResource2 { + init_pagination(); + init_path(); + Groups2 = class extends APIResource { constructor() { super(...arguments); this.roles = new Roles4(this._client); @@ -29797,7 +11996,7 @@ var init_groups2 = __esm({ * ``` */ create(projectID, body, options) { - return this._client.post(path3`/organization/projects/${projectID}/groups`, { + return this._client.post(path`/organization/projects/${projectID}/groups`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29817,7 +12016,7 @@ var init_groups2 = __esm({ */ retrieve(groupID, params, options) { const { project_id, ...query } = params; - return this._client.get(path3`/organization/projects/${project_id}/groups/${groupID}`, { + return this._client.get(path`/organization/projects/${project_id}/groups/${groupID}`, { query, ...options, __security: { adminAPIKeyAuth: true } @@ -29837,7 +12036,7 @@ var init_groups2 = __esm({ * ``` */ list(projectID, query = {}, options) { - return this._client.getAPIList(path3`/organization/projects/${projectID}/groups`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/projects/${projectID}/groups`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Revokes a group's access to a project. @@ -29853,7 +12052,7 @@ var init_groups2 = __esm({ */ delete(groupID, params, options) { const { project_id } = params; - return this._client.delete(path3`/organization/projects/${project_id}/groups/${groupID}`, { + return this._client.delete(path`/organization/projects/${project_id}/groups/${groupID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29864,12 +12063,12 @@ var init_groups2 = __esm({ }); // node_modules/openai/resources/admin/organization/projects/service-accounts/api-keys.mjs -var APIKeys3; -var init_api_keys3 = __esm({ +var APIKeys2; +var init_api_keys2 = __esm({ "node_modules/openai/resources/admin/organization/projects/service-accounts/api-keys.mjs"() { - init_resource2(); - init_path2(); - APIKeys3 = class extends APIResource2 { + init_resource(); + init_path(); + APIKeys2 = class extends APIResource { /** * Creates an API key for a service account in the project. * @@ -29884,25 +12083,25 @@ var init_api_keys3 = __esm({ */ create(serviceAccountID, params, options) { const { project_id, ...body } = params; - return this._client.post(path3`/organization/projects/${project_id}/service_accounts/${serviceAccountID}/api_keys`, { body, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.post(path`/organization/projects/${project_id}/service_accounts/${serviceAccountID}/api_keys`, { body, ...options, __security: { adminAPIKeyAuth: true } }); } }; } }); // node_modules/openai/resources/admin/organization/projects/service-accounts/service-accounts.mjs -var ServiceAccounts3; -var init_service_accounts3 = __esm({ +var ServiceAccounts; +var init_service_accounts = __esm({ "node_modules/openai/resources/admin/organization/projects/service-accounts/service-accounts.mjs"() { - init_resource2(); - init_api_keys3(); - init_api_keys3(); - init_pagination2(); - init_path2(); - ServiceAccounts3 = class extends APIResource2 { + init_resource(); + init_api_keys2(); + init_api_keys2(); + init_pagination(); + init_path(); + ServiceAccounts = class extends APIResource { constructor() { super(...arguments); - this.apiKeys = new APIKeys3(this._client); + this.apiKeys = new APIKeys2(this._client); } /** * Creates a new service account in the project. By default, this also returns an @@ -29918,7 +12117,7 @@ var init_service_accounts3 = __esm({ * ``` */ create(projectID, body, options) { - return this._client.post(path3`/organization/projects/${projectID}/service_accounts`, { + return this._client.post(path`/organization/projects/${projectID}/service_accounts`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -29938,7 +12137,7 @@ var init_service_accounts3 = __esm({ */ retrieve(serviceAccountID, params, options) { const { project_id } = params; - return this._client.get(path3`/organization/projects/${project_id}/service_accounts/${serviceAccountID}`, { + return this._client.get(path`/organization/projects/${project_id}/service_accounts/${serviceAccountID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -29957,7 +12156,7 @@ var init_service_accounts3 = __esm({ */ update(serviceAccountID, params, options) { const { project_id, ...body } = params; - return this._client.post(path3`/organization/projects/${project_id}/service_accounts/${serviceAccountID}`, { body, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.post(path`/organization/projects/${project_id}/service_accounts/${serviceAccountID}`, { body, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Returns a list of service accounts in the project. @@ -29973,7 +12172,7 @@ var init_service_accounts3 = __esm({ * ``` */ list(projectID, query = {}, options) { - return this._client.getAPIList(path3`/organization/projects/${projectID}/service_accounts`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/projects/${projectID}/service_accounts`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Deletes a service account from the project. @@ -29992,10 +12191,10 @@ var init_service_accounts3 = __esm({ */ delete(serviceAccountID, params, options) { const { project_id } = params; - return this._client.delete(path3`/organization/projects/${project_id}/service_accounts/${serviceAccountID}`, { ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.delete(path`/organization/projects/${project_id}/service_accounts/${serviceAccountID}`, { ...options, __security: { adminAPIKeyAuth: true } }); } }; - ServiceAccounts3.APIKeys = APIKeys3; + ServiceAccounts.APIKeys = APIKeys2; } }); @@ -30003,10 +12202,10 @@ var init_service_accounts3 = __esm({ var Roles5; var init_roles5 = __esm({ "node_modules/openai/resources/admin/organization/projects/users/roles.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Roles5 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Roles5 = class extends APIResource { /** * Assigns a project role to a user within a project. * @@ -30021,7 +12220,7 @@ var init_roles5 = __esm({ */ create(userID, params, options) { const { project_id, ...body } = params; - return this._client.post(path3`/projects/${project_id}/users/${userID}/roles`, { + return this._client.post(path`/projects/${project_id}/users/${userID}/roles`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -30041,7 +12240,7 @@ var init_roles5 = __esm({ */ retrieve(roleID, params, options) { const { project_id, user_id } = params; - return this._client.get(path3`/projects/${project_id}/users/${user_id}/roles/${roleID}`, { + return this._client.get(path`/projects/${project_id}/users/${user_id}/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -30062,7 +12261,7 @@ var init_roles5 = __esm({ */ list(userID, params, options) { const { project_id, ...query } = params; - return this._client.getAPIList(path3`/projects/${project_id}/users/${userID}/roles`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/projects/${project_id}/users/${userID}/roles`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Unassigns a project role from a user within a project. @@ -30078,7 +12277,7 @@ var init_roles5 = __esm({ */ delete(roleID, params, options) { const { project_id, user_id } = params; - return this._client.delete(path3`/projects/${project_id}/users/${user_id}/roles/${roleID}`, { + return this._client.delete(path`/projects/${project_id}/users/${user_id}/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -30088,15 +12287,15 @@ var init_roles5 = __esm({ }); // node_modules/openai/resources/admin/organization/projects/users/users.mjs -var Users3; -var init_users3 = __esm({ +var Users2; +var init_users2 = __esm({ "node_modules/openai/resources/admin/organization/projects/users/users.mjs"() { - init_resource2(); + init_resource(); init_roles5(); init_roles5(); - init_pagination2(); - init_path2(); - Users3 = class extends APIResource2 { + init_pagination(); + init_path(); + Users2 = class extends APIResource { constructor() { super(...arguments); this.roles = new Roles5(this._client); @@ -30115,7 +12314,7 @@ var init_users3 = __esm({ * ``` */ create(projectID, body, options) { - return this._client.post(path3`/organization/projects/${projectID}/users`, { + return this._client.post(path`/organization/projects/${projectID}/users`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -30135,7 +12334,7 @@ var init_users3 = __esm({ */ retrieve(userID, params, options) { const { project_id } = params; - return this._client.get(path3`/organization/projects/${project_id}/users/${userID}`, { + return this._client.get(path`/organization/projects/${project_id}/users/${userID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -30154,7 +12353,7 @@ var init_users3 = __esm({ */ update(userID, params, options) { const { project_id, ...body } = params; - return this._client.post(path3`/organization/projects/${project_id}/users/${userID}`, { + return this._client.post(path`/organization/projects/${project_id}/users/${userID}`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -30174,7 +12373,7 @@ var init_users3 = __esm({ * ``` */ list(projectID, query = {}, options) { - return this._client.getAPIList(path3`/organization/projects/${projectID}/users`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/projects/${projectID}/users`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Deletes a user from the project. @@ -30193,13 +12392,13 @@ var init_users3 = __esm({ */ delete(userID, params, options) { const { project_id } = params; - return this._client.delete(path3`/organization/projects/${project_id}/users/${userID}`, { + return this._client.delete(path`/organization/projects/${project_id}/users/${userID}`, { ...options, __security: { adminAPIKeyAuth: true } }); } }; - Users3.Roles = Roles5; + Users2.Roles = Roles5; } }); @@ -30207,19 +12406,19 @@ var init_users3 = __esm({ var Projects; var init_projects = __esm({ "node_modules/openai/resources/admin/organization/projects/projects.mjs"() { - init_resource2(); - init_api_keys2(); - init_api_keys2(); - init_certificates3(); - init_certificates3(); + init_resource(); + init_api_keys(); + init_api_keys(); + init_certificates2(); + init_certificates2(); init_data_retention2(); init_data_retention2(); init_hosted_tool_permissions(); init_hosted_tool_permissions(); init_model_permissions(); init_model_permissions(); - init_rate_limits3(); - init_rate_limits3(); + init_rate_limits(); + init_rate_limits(); init_roles3(); init_roles3(); init_spend_alerts2(); @@ -30228,19 +12427,19 @@ var init_projects = __esm({ init_spend_limit2(); init_groups2(); init_groups2(); - init_service_accounts3(); - init_service_accounts3(); - init_users3(); - init_users3(); - init_pagination2(); - init_path2(); - Projects = class extends APIResource2 { + init_service_accounts(); + init_service_accounts(); + init_users2(); + init_users2(); + init_pagination(); + init_path(); + Projects = class extends APIResource { constructor() { super(...arguments); - this.users = new Users3(this._client); - this.serviceAccounts = new ServiceAccounts3(this._client); - this.apiKeys = new APIKeys2(this._client); - this.rateLimits = new RateLimits3(this._client); + this.users = new Users2(this._client); + this.serviceAccounts = new ServiceAccounts(this._client); + this.apiKeys = new APIKeys(this._client); + this.rateLimits = new RateLimits(this._client); this.modelPermissions = new ModelPermissions(this._client); this.hostedToolPermissions = new HostedToolPermissions(this._client); this.groups = new Groups2(this._client); @@ -30248,7 +12447,7 @@ var init_projects = __esm({ this.dataRetention = new DataRetention2(this._client); this.spendLimit = new SpendLimit2(this._client); this.spendAlerts = new SpendAlerts2(this._client); - this.certificates = new Certificates3(this._client); + this.certificates = new Certificates2(this._client); } /** * Create a new project in the organization. Projects can be created and archived, @@ -30281,7 +12480,7 @@ var init_projects = __esm({ * ``` */ retrieve(projectID, options) { - return this._client.get(path3`/organization/projects/${projectID}`, { + return this._client.get(path`/organization/projects/${projectID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -30298,7 +12497,7 @@ var init_projects = __esm({ * ``` */ update(projectID, body, options) { - return this._client.post(path3`/organization/projects/${projectID}`, { + return this._client.post(path`/organization/projects/${projectID}`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -30335,16 +12534,16 @@ var init_projects = __esm({ * ``` */ archive(projectID, options) { - return this._client.post(path3`/organization/projects/${projectID}/archive`, { + return this._client.post(path`/organization/projects/${projectID}/archive`, { ...options, __security: { adminAPIKeyAuth: true } }); } }; - Projects.Users = Users3; - Projects.ServiceAccounts = ServiceAccounts3; - Projects.APIKeys = APIKeys2; - Projects.RateLimits = RateLimits3; + Projects.Users = Users2; + Projects.ServiceAccounts = ServiceAccounts; + Projects.APIKeys = APIKeys; + Projects.RateLimits = RateLimits; Projects.ModelPermissions = ModelPermissions; Projects.HostedToolPermissions = HostedToolPermissions; Projects.Groups = Groups2; @@ -30352,7 +12551,7 @@ var init_projects = __esm({ Projects.DataRetention = DataRetention2; Projects.SpendLimit = SpendLimit2; Projects.SpendAlerts = SpendAlerts2; - Projects.Certificates = Certificates3; + Projects.Certificates = Certificates2; } }); @@ -30360,10 +12559,10 @@ var init_projects = __esm({ var Roles6; var init_roles6 = __esm({ "node_modules/openai/resources/admin/organization/users/roles.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Roles6 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Roles6 = class extends APIResource { /** * Assigns an organization role to a user within the organization. * @@ -30377,7 +12576,7 @@ var init_roles6 = __esm({ * ``` */ create(userID, body, options) { - return this._client.post(path3`/organization/users/${userID}/roles`, { + return this._client.post(path`/organization/users/${userID}/roles`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -30397,7 +12596,7 @@ var init_roles6 = __esm({ */ retrieve(roleID, params, options) { const { user_id } = params; - return this._client.get(path3`/organization/users/${user_id}/roles/${roleID}`, { + return this._client.get(path`/organization/users/${user_id}/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -30416,7 +12615,7 @@ var init_roles6 = __esm({ * ``` */ list(userID, query = {}, options) { - return this._client.getAPIList(path3`/organization/users/${userID}/roles`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/organization/users/${userID}/roles`, NextCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * Unassigns an organization role from a user within the organization. @@ -30432,7 +12631,7 @@ var init_roles6 = __esm({ */ delete(roleID, params, options) { const { user_id } = params; - return this._client.delete(path3`/organization/users/${user_id}/roles/${roleID}`, { + return this._client.delete(path`/organization/users/${user_id}/roles/${roleID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -30442,15 +12641,15 @@ var init_roles6 = __esm({ }); // node_modules/openai/resources/admin/organization/users/users.mjs -var Users4; -var init_users4 = __esm({ +var Users3; +var init_users3 = __esm({ "node_modules/openai/resources/admin/organization/users/users.mjs"() { - init_resource2(); + init_resource(); init_roles6(); init_roles6(); - init_pagination2(); - init_path2(); - Users4 = class extends APIResource2 { + init_pagination(); + init_path(); + Users3 = class extends APIResource { constructor() { super(...arguments); this.roles = new Roles6(this._client); @@ -30465,7 +12664,7 @@ var init_users4 = __esm({ * ``` */ retrieve(userID, options) { - return this._client.get(path3`/organization/users/${userID}`, { + return this._client.get(path`/organization/users/${userID}`, { ...options, __security: { adminAPIKeyAuth: true } }); @@ -30480,7 +12679,7 @@ var init_users4 = __esm({ * ``` */ update(userID, body, options) { - return this._client.post(path3`/organization/users/${userID}`, { + return this._client.post(path`/organization/users/${userID}`, { body, ...options, __security: { adminAPIKeyAuth: true } @@ -30515,31 +12714,31 @@ var init_users4 = __esm({ * ``` */ delete(userID, options) { - return this._client.delete(path3`/organization/users/${userID}`, { + return this._client.delete(path`/organization/users/${userID}`, { ...options, __security: { adminAPIKeyAuth: true } }); } }; - Users4.Roles = Roles6; + Users3.Roles = Roles6; } }); // node_modules/openai/resources/admin/organization/organization.mjs -var Organization2; -var init_organization2 = __esm({ +var Organization; +var init_organization = __esm({ "node_modules/openai/resources/admin/organization/organization.mjs"() { - init_resource2(); + init_resource(); init_admin_api_keys(); init_admin_api_keys(); init_audit_logs(); init_audit_logs(); - init_certificates2(); - init_certificates2(); + init_certificates(); + init_certificates(); init_data_retention(); init_data_retention(); - init_invites2(); - init_invites2(); + init_invites(); + init_invites(); init_roles(); init_roles(); init_spend_alerts(); @@ -30552,37 +12751,37 @@ var init_organization2 = __esm({ init_groups(); init_projects(); init_projects(); - init_users4(); - init_users4(); - Organization2 = class extends APIResource2 { + init_users3(); + init_users3(); + Organization = class extends APIResource { constructor() { super(...arguments); this.auditLogs = new AuditLogs(this._client); this.adminAPIKeys = new AdminAPIKeys(this._client); this.usage = new Usage(this._client); - this.invites = new Invites2(this._client); - this.users = new Users4(this._client); + this.invites = new Invites(this._client); + this.users = new Users3(this._client); this.groups = new Groups(this._client); this.roles = new Roles(this._client); this.dataRetention = new DataRetention(this._client); this.spendLimit = new SpendLimit(this._client); this.spendAlerts = new SpendAlerts(this._client); - this.certificates = new Certificates2(this._client); + this.certificates = new Certificates(this._client); this.projects = new Projects(this._client); } }; - Organization2.AuditLogs = AuditLogs; - Organization2.AdminAPIKeys = AdminAPIKeys; - Organization2.Usage = Usage; - Organization2.Invites = Invites2; - Organization2.Users = Users4; - Organization2.Groups = Groups; - Organization2.Roles = Roles; - Organization2.DataRetention = DataRetention; - Organization2.SpendLimit = SpendLimit; - Organization2.SpendAlerts = SpendAlerts; - Organization2.Certificates = Certificates2; - Organization2.Projects = Projects; + Organization.AuditLogs = AuditLogs; + Organization.AdminAPIKeys = AdminAPIKeys; + Organization.Usage = Usage; + Organization.Invites = Invites; + Organization.Users = Users3; + Organization.Groups = Groups; + Organization.Roles = Roles; + Organization.DataRetention = DataRetention; + Organization.SpendLimit = SpendLimit; + Organization.SpendAlerts = SpendAlerts; + Organization.Certificates = Certificates; + Organization.Projects = Projects; } }); @@ -30590,16 +12789,16 @@ var init_organization2 = __esm({ var Admin; var init_admin = __esm({ "node_modules/openai/resources/admin/admin.mjs"() { - init_resource2(); - init_organization2(); - init_organization2(); - Admin = class extends APIResource2 { + init_resource(); + init_organization(); + init_organization(); + Admin = class extends APIResource { constructor() { super(...arguments); - this.organization = new Organization2(this._client); + this.organization = new Organization(this._client); } }; - Admin.Organization = Organization2; + Admin.Organization = Organization; } }); @@ -30607,9 +12806,9 @@ var init_admin = __esm({ var Speech; var init_speech = __esm({ "node_modules/openai/resources/audio/speech.mjs"() { - init_resource2(); - init_headers3(); - Speech = class extends APIResource2 { + init_resource(); + init_headers(); + Speech = class extends APIResource { /** * Generates audio from the input text. * @@ -30631,7 +12830,7 @@ var init_speech = __esm({ return this._client.post("/audio/speech", { body, ...options, - headers: buildHeaders2([{ Accept: "application/octet-stream" }, options?.headers]), + headers: buildHeaders([{ Accept: "application/octet-stream" }, options?.headers]), __security: { bearerAuth: true }, __binaryResponse: true }); @@ -30644,11 +12843,11 @@ var init_speech = __esm({ var Transcriptions; var init_transcriptions = __esm({ "node_modules/openai/resources/audio/transcriptions.mjs"() { - init_resource2(); - init_uploads3(); - Transcriptions = class extends APIResource2 { + init_resource(); + init_uploads(); + Transcriptions = class extends APIResource { create(body, options) { - return this._client.post("/audio/transcriptions", multipartFormRequestOptions2({ + return this._client.post("/audio/transcriptions", multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false, @@ -30664,11 +12863,11 @@ var init_transcriptions = __esm({ var Translations; var init_translations = __esm({ "node_modules/openai/resources/audio/translations.mjs"() { - init_resource2(); - init_uploads3(); - Translations = class extends APIResource2 { + init_resource(); + init_uploads(); + Translations = class extends APIResource { create(body, options) { - return this._client.post("/audio/translations", multipartFormRequestOptions2({ body, ...options, __metadata: { model: body.model }, __security: { bearerAuth: true } }, this._client)); + return this._client.post("/audio/translations", multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model }, __security: { bearerAuth: true } }, this._client)); } }; } @@ -30678,14 +12877,14 @@ var init_translations = __esm({ var Audio; var init_audio = __esm({ "node_modules/openai/resources/audio/audio.mjs"() { - init_resource2(); + init_resource(); init_speech(); init_speech(); init_transcriptions(); init_transcriptions(); init_translations(); init_translations(); - Audio = class extends APIResource2 { + Audio = class extends APIResource { constructor() { super(...arguments); this.transcriptions = new Transcriptions(this._client); @@ -30700,13 +12899,13 @@ var init_audio = __esm({ }); // node_modules/openai/resources/batches.mjs -var Batches3; -var init_batches3 = __esm({ +var Batches; +var init_batches = __esm({ "node_modules/openai/resources/batches.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Batches3 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Batches = class extends APIResource { /** * Creates and executes a batch from an uploaded file of requests */ @@ -30717,7 +12916,7 @@ var init_batches3 = __esm({ * Retrieves a batch. */ retrieve(batchID, options) { - return this._client.get(path3`/batches/${batchID}`, { ...options, __security: { bearerAuth: true } }); + return this._client.get(path`/batches/${batchID}`, { ...options, __security: { bearerAuth: true } }); } /** * List your organization's batches. @@ -30735,7 +12934,7 @@ var init_batches3 = __esm({ * (if any) available in the output file. */ cancel(batchID, options) { - return this._client.post(path3`/batches/${batchID}/cancel`, { + return this._client.post(path`/batches/${batchID}/cancel`, { ...options, __security: { bearerAuth: true } }); @@ -30748,11 +12947,11 @@ var init_batches3 = __esm({ var Assistants; var init_assistants = __esm({ "node_modules/openai/resources/beta/assistants.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Assistants = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Assistants = class extends APIResource { /** * Create an assistant with a model and instructions. * @@ -30762,7 +12961,7 @@ var init_assistants = __esm({ return this._client.post("/assistants", { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -30772,9 +12971,9 @@ var init_assistants = __esm({ * @deprecated */ retrieve(assistantID, options) { - return this._client.get(path3`/assistants/${assistantID}`, { + return this._client.get(path`/assistants/${assistantID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -30784,10 +12983,10 @@ var init_assistants = __esm({ * @deprecated */ update(assistantID, body, options) { - return this._client.post(path3`/assistants/${assistantID}`, { + return this._client.post(path`/assistants/${assistantID}`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -30800,7 +12999,7 @@ var init_assistants = __esm({ return this._client.getAPIList("/assistants", CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -30810,9 +13009,9 @@ var init_assistants = __esm({ * @deprecated */ delete(assistantID, options) { - return this._client.delete(path3`/assistants/${assistantID}`, { + return this._client.delete(path`/assistants/${assistantID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -30821,12 +13020,12 @@ var init_assistants = __esm({ }); // node_modules/openai/resources/beta/realtime/sessions.mjs -var Sessions2; -var init_sessions2 = __esm({ +var Sessions; +var init_sessions = __esm({ "node_modules/openai/resources/beta/realtime/sessions.mjs"() { - init_resource2(); - init_headers3(); - Sessions2 = class extends APIResource2 { + init_resource(); + init_headers(); + Sessions = class extends APIResource { /** * Create an ephemeral API token for use in client-side applications with the * Realtime API. Can be configured with the same session parameters as the @@ -30846,7 +13045,7 @@ var init_sessions2 = __esm({ return this._client.post("/realtime/sessions", { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -30858,9 +13057,9 @@ var init_sessions2 = __esm({ var TranscriptionSessions; var init_transcription_sessions = __esm({ "node_modules/openai/resources/beta/realtime/transcription-sessions.mjs"() { - init_resource2(); - init_headers3(); - TranscriptionSessions = class extends APIResource2 { + init_resource(); + init_headers(); + TranscriptionSessions = class extends APIResource { /** * Create an ephemeral API token for use in client-side applications with the * Realtime API specifically for realtime transcriptions. Can be configured with @@ -30880,7 +13079,7 @@ var init_transcription_sessions = __esm({ return this._client.post("/realtime/transcription_sessions", { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -30892,32 +13091,32 @@ var init_transcription_sessions = __esm({ var Realtime; var init_realtime = __esm({ "node_modules/openai/resources/beta/realtime/realtime.mjs"() { - init_resource2(); - init_sessions2(); - init_sessions2(); + init_resource(); + init_sessions(); + init_sessions(); init_transcription_sessions(); init_transcription_sessions(); - Realtime = class extends APIResource2 { + Realtime = class extends APIResource { constructor() { super(...arguments); - this.sessions = new Sessions2(this._client); + this.sessions = new Sessions(this._client); this.transcriptionSessions = new TranscriptionSessions(this._client); } }; - Realtime.Sessions = Sessions2; + Realtime.Sessions = Sessions; Realtime.TranscriptionSessions = TranscriptionSessions; } }); // node_modules/openai/resources/beta/agents/environments/files.mjs -var Files3; -var init_files3 = __esm({ +var Files; +var init_files = __esm({ "node_modules/openai/resources/beta/agents/environments/files.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Files3 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Files = class extends APIResource { /** * Copies inline bytes or a Files API file into a connected execution environment. * See @@ -30937,10 +13136,10 @@ var init_files3 = __esm({ * ``` */ create(environmentID, body, options) { - return this._client.post(path3`/agents/environments/${environmentID}/files`, { + return this._client.post(path`/agents/environments/${environmentID}/files`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -30960,10 +13159,10 @@ var init_files3 = __esm({ * ``` */ list(environmentID, query = {}, options) { - return this._client.getAPIList(path3`/agents/environments/${environmentID}/files`, TokenPage, { + return this._client.getAPIList(path`/agents/environments/${environmentID}/files`, TokenPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -30975,11 +13174,11 @@ var init_files3 = __esm({ var Templates; var init_templates = __esm({ "node_modules/openai/resources/beta/agents/environments/templates.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Templates = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Templates = class extends APIResource { /** * Creates reusable environment configuration without returning confidential setup * commands or environment values. See @@ -30995,7 +13194,7 @@ var init_templates = __esm({ return this._client.post("/agents/environments/templates", { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31013,9 +13212,9 @@ var init_templates = __esm({ * ``` */ retrieve(environmentTemplateID, options) { - return this._client.get(path3`/agents/environments/templates/${environmentTemplateID}`, { + return this._client.get(path`/agents/environments/templates/${environmentTemplateID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31033,10 +13232,10 @@ var init_templates = __esm({ * ``` */ update(environmentTemplateID, body = {}, options) { - return this._client.post(path3`/agents/environments/templates/${environmentTemplateID}`, { + return this._client.post(path`/agents/environments/templates/${environmentTemplateID}`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31056,7 +13255,7 @@ var init_templates = __esm({ return this._client.getAPIList("/agents/environments/templates", CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31074,9 +13273,9 @@ var init_templates = __esm({ * ``` */ delete(environmentTemplateID, options) { - return this._client.delete(path3`/agents/environments/templates/${environmentTemplateID}`, { + return this._client.delete(path`/agents/environments/templates/${environmentTemplateID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31085,20 +13284,20 @@ var init_templates = __esm({ }); // node_modules/openai/resources/beta/agents/environments/environments.mjs -var Environments2; -var init_environments2 = __esm({ +var Environments; +var init_environments = __esm({ "node_modules/openai/resources/beta/agents/environments/environments.mjs"() { - init_resource2(); - init_files3(); - init_files3(); + init_resource(); + init_files(); + init_files(); init_templates(); init_templates(); - init_headers3(); - init_path2(); - Environments2 = class extends APIResource2 { + init_headers(); + init_path(); + Environments = class extends APIResource { constructor() { super(...arguments); - this.files = new Files3(this._client); + this.files = new Files(this._client); this.templates = new Templates(this._client); } /** @@ -31115,15 +13314,15 @@ var init_environments2 = __esm({ * ``` */ retrieve(environmentID, options) { - return this._client.get(path3`/agents/environments/${environmentID}`, { + return this._client.get(path`/agents/environments/${environmentID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } }; - Environments2.Files = Files3; - Environments2.Templates = Templates; + Environments.Files = Files; + Environments.Templates = Templates; } }); @@ -31131,7 +13330,7 @@ var init_environments2 = __esm({ var _TurnState_turnID, _TurnState_turnEnded, _TurnState_eventIDs, _TurnState_calls, TurnState; var init_turn_state = __esm({ "node_modules/openai/lib/agents/turn-state.mjs"() { - init_tslib2(); + init_tslib(); TurnState = class { constructor() { _TurnState_turnID.set(this, void 0); @@ -31141,27 +13340,27 @@ var init_turn_state = __esm({ } /** Records a delivery unless its event ID is in the bounded recent window. */ accept(event) { - if (__classPrivateFieldGet2(this, _TurnState_eventIDs, "f").has(event.event_id)) { + if (__classPrivateFieldGet(this, _TurnState_eventIDs, "f").has(event.event_id)) { return false; } - if (__classPrivateFieldGet2(this, _TurnState_eventIDs, "f").size === 1024) { - const oldest = __classPrivateFieldGet2(this, _TurnState_eventIDs, "f").values().next(); + if (__classPrivateFieldGet(this, _TurnState_eventIDs, "f").size === 1024) { + const oldest = __classPrivateFieldGet(this, _TurnState_eventIDs, "f").values().next(); if (!oldest.done) { - __classPrivateFieldGet2(this, _TurnState_eventIDs, "f").delete(oldest.value); + __classPrivateFieldGet(this, _TurnState_eventIDs, "f").delete(oldest.value); } } - __classPrivateFieldGet2(this, _TurnState_eventIDs, "f").add(event.event_id); - if (event.type === "agent.session.turn.created" && event.turn.subagent_id === null && __classPrivateFieldGet2(this, _TurnState_turnID, "f") === void 0) { - __classPrivateFieldSet2(this, _TurnState_turnID, event.turn_id, "f"); + __classPrivateFieldGet(this, _TurnState_eventIDs, "f").add(event.event_id); + if (event.type === "agent.session.turn.created" && event.turn.subagent_id === null && __classPrivateFieldGet(this, _TurnState_turnID, "f") === void 0) { + __classPrivateFieldSet(this, _TurnState_turnID, event.turn_id, "f"); } - if ((event.type === "agent.session.turn.completed" || event.type === "agent.session.turn.failed" || event.type === "agent.session.turn.cancelled") && __classPrivateFieldGet2(this, _TurnState_turnID, "f") !== void 0 && event.turn_id === __classPrivateFieldGet2(this, _TurnState_turnID, "f")) { - __classPrivateFieldSet2(this, _TurnState_turnEnded, true, "f"); + if ((event.type === "agent.session.turn.completed" || event.type === "agent.session.turn.failed" || event.type === "agent.session.turn.cancelled") && __classPrivateFieldGet(this, _TurnState_turnID, "f") !== void 0 && event.turn_id === __classPrivateFieldGet(this, _TurnState_turnID, "f")) { + __classPrivateFieldSet(this, _TurnState_turnEnded, true, "f"); } return true; } /** Checks session termination after updating the selected turn state. */ terminal(event) { - return event.type === "agent.session.failed" || event.type === "agent.session.idle" && __classPrivateFieldGet2(this, _TurnState_turnEnded, "f"); + return event.type === "agent.session.failed" || event.type === "agent.session.idle" && __classPrivateFieldGet(this, _TurnState_turnEnded, "f"); } /** Returns each tool call once for the full invocation, including subagent turns. */ call(event) { @@ -31170,10 +13369,10 @@ var init_turn_state = __esm({ } const call = event.item; const key = JSON.stringify([call.turn_id, call.call_id]); - if (__classPrivateFieldGet2(this, _TurnState_calls, "f").has(key)) { + if (__classPrivateFieldGet(this, _TurnState_calls, "f").has(key)) { return; } - __classPrivateFieldGet2(this, _TurnState_calls, "f").add(key); + __classPrivateFieldGet(this, _TurnState_calls, "f").add(key); return call; } }; @@ -31183,7 +13382,7 @@ var init_turn_state = __esm({ // node_modules/openai/lib/agents/agent-session-stream.mjs function isInputContent(value2) { - if (!isObj2(value2)) { + if (!isObj(value2)) { return false; } const content = value2; @@ -31195,7 +13394,7 @@ function isInputContent(value2) { } else { return false; } - return hasOwn2(content, "type") && hasOwn2(content, field) && typeof content[field] === "string"; + return hasOwn(content, "type") && hasOwn(content, field) && typeof content[field] === "string"; } function normalizedOutput(value2) { if (value2 === null) { @@ -31207,7 +13406,7 @@ function normalizedOutput(value2) { throw new OpenAIError("Tool output must be text, content, a JSON object, or null"); } function toolResult(call, value2) { - const output = isObj2(value2) ? JSON.stringify(value2) : value2; + const output = isObj(value2) ? JSON.stringify(value2) : value2; const serialized = JSON.stringify(output); if (serialized === void 0) { throw new OpenAIError("Tool output must be JSON serializable"); @@ -31229,12 +13428,12 @@ async function cancelBody(response) { var _AgentSessionStream_instances, _AgentSessionStream_consumed, _AgentSessionStream_stream, _AgentSessionStream_response, _AgentSessionStream_reading, _AgentSessionStream_sessions, _AgentSessionStream_sessionID, _AgentSessionStream_input, _AgentSessionStream_handlers, _AgentSessionStream_inputKey, _AgentSessionStream_options, _AgentSessionStream_iterate, _AgentSessionStream_result, _AgentSessionStream_checkAbort, _AgentSessionStream_abortError, _AgentSessionStream_wait, _AgentSessionStream_submit, AgentSessionStream; var init_agent_session_stream = __esm({ "node_modules/openai/lib/agents/agent-session-stream.mjs"() { - init_tslib2(); + init_tslib(); init_turn_state(); - init_error3(); - init_headers3(); - init_uuid2(); - init_values2(); + init_error(); + init_headers(); + init_uuid(); + init_values(); AgentSessionStream = class { /** Creates an unstarted helper. Prefer client.beta.agents.sessions.stream(). */ constructor(sessions, sessionID, params, options) { @@ -31254,89 +13453,89 @@ var init_agent_session_stream = __esm({ if (params.input.length === 0) { throw new OpenAIError("input must not be empty"); } - __classPrivateFieldSet2(this, _AgentSessionStream_sessions, sessions, "f"); - __classPrivateFieldSet2(this, _AgentSessionStream_sessionID, sessionID, "f"); - __classPrivateFieldSet2(this, _AgentSessionStream_input, { type: "agent.session.input.message", input }, "f"); - __classPrivateFieldSet2(this, _AgentSessionStream_handlers, new Map(Object.entries(params.toolHandlers ?? {})), "f"); - const headers = buildHeaders2([options?.headers]); - __classPrivateFieldSet2(this, _AgentSessionStream_inputKey, headers.nulls.has("idempotency-key") ? void 0 : headers.values.get("idempotency-key") ?? params.idempotencyKey ?? options?.idempotencyKey ?? uuid42(), "f"); + __classPrivateFieldSet(this, _AgentSessionStream_sessions, sessions, "f"); + __classPrivateFieldSet(this, _AgentSessionStream_sessionID, sessionID, "f"); + __classPrivateFieldSet(this, _AgentSessionStream_input, { type: "agent.session.input.message", input }, "f"); + __classPrivateFieldSet(this, _AgentSessionStream_handlers, new Map(Object.entries(params.toolHandlers ?? {})), "f"); + const headers = buildHeaders([options?.headers]); + __classPrivateFieldSet(this, _AgentSessionStream_inputKey, headers.nulls.has("idempotency-key") ? void 0 : headers.values.get("idempotency-key") ?? params.idempotencyKey ?? options?.idempotencyKey ?? uuid4(), "f"); headers.values.delete("idempotency-key"); headers.nulls.delete("idempotency-key"); const { idempotencyKey: _key, ...rest } = options ?? {}; - __classPrivateFieldSet2(this, _AgentSessionStream_options, { ...rest, headers }, "f"); + __classPrivateFieldSet(this, _AgentSessionStream_options, { ...rest, headers }, "f"); } /** Closes local requests without cancelling the turn; an optional reason becomes the abort error's cause. */ abort(reason) { this.controller.abort(reason); - __classPrivateFieldGet2(this, _AgentSessionStream_stream, "f")?.controller.abort(this.controller.signal.reason); - if (!__classPrivateFieldGet2(this, _AgentSessionStream_reading, "f")) { - void cancelBody(__classPrivateFieldGet2(this, _AgentSessionStream_response, "f")); + __classPrivateFieldGet(this, _AgentSessionStream_stream, "f")?.controller.abort(this.controller.signal.reason); + if (!__classPrivateFieldGet(this, _AgentSessionStream_reading, "f")) { + void cancelBody(__classPrivateFieldGet(this, _AgentSessionStream_response, "f")); } } /** Starts iteration once; use for await to ensure early exits close the connection. */ [(_AgentSessionStream_consumed = /* @__PURE__ */ new WeakMap(), _AgentSessionStream_stream = /* @__PURE__ */ new WeakMap(), _AgentSessionStream_response = /* @__PURE__ */ new WeakMap(), _AgentSessionStream_reading = /* @__PURE__ */ new WeakMap(), _AgentSessionStream_sessions = /* @__PURE__ */ new WeakMap(), _AgentSessionStream_sessionID = /* @__PURE__ */ new WeakMap(), _AgentSessionStream_input = /* @__PURE__ */ new WeakMap(), _AgentSessionStream_handlers = /* @__PURE__ */ new WeakMap(), _AgentSessionStream_inputKey = /* @__PURE__ */ new WeakMap(), _AgentSessionStream_options = /* @__PURE__ */ new WeakMap(), _AgentSessionStream_instances = /* @__PURE__ */ new WeakSet(), Symbol.asyncIterator)]() { - if (__classPrivateFieldGet2(this, _AgentSessionStream_consumed, "f")) { + if (__classPrivateFieldGet(this, _AgentSessionStream_consumed, "f")) { throw new OpenAIError("An AgentSessionStream can only be consumed once"); } - __classPrivateFieldSet2(this, _AgentSessionStream_consumed, true, "f"); - return __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_iterate).call(this); + __classPrivateFieldSet(this, _AgentSessionStream_consumed, true, "f"); + return __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_iterate).call(this); } }; _AgentSessionStream_iterate = async function* _AgentSessionStream_iterate2() { - const externalSignal = __classPrivateFieldGet2(this, _AgentSessionStream_options, "f").signal; + const externalSignal = __classPrivateFieldGet(this, _AgentSessionStream_options, "f").signal; const abort = () => this.abort(externalSignal?.aborted ? externalSignal.reason : this.controller.signal.reason); externalSignal?.addEventListener("abort", abort, { once: true }); this.controller.signal.addEventListener("abort", abort, { once: true }); - const options = { ...__classPrivateFieldGet2(this, _AgentSessionStream_options, "f"), signal: this.controller.signal }; + const options = { ...__classPrivateFieldGet(this, _AgentSessionStream_options, "f"), signal: this.controller.signal }; const state2 = new TurnState(); try { if (externalSignal?.aborted) { this.abort(externalSignal.reason); } - __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); - const session = await __classPrivateFieldGet2(this, _AgentSessionStream_sessions, "f").retrieve(__classPrivateFieldGet2(this, _AgentSessionStream_sessionID, "f"), options); + __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); + const session = await __classPrivateFieldGet(this, _AgentSessionStream_sessions, "f").retrieve(__classPrivateFieldGet(this, _AgentSessionStream_sessionID, "f"), options); if (session.status !== "idle") { throw new OpenAIError("sessions.stream requires an idle session; use sessions.events.stream for active sessions"); } - const subscription = await __classPrivateFieldGet2(this, _AgentSessionStream_sessions, "f").events.stream(__classPrivateFieldGet2(this, _AgentSessionStream_sessionID, "f"), options).withResponse(); - __classPrivateFieldSet2(this, _AgentSessionStream_stream, subscription.data, "f"); - __classPrivateFieldSet2(this, _AgentSessionStream_response, subscription.response, "f"); - __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); - await __classPrivateFieldGet2(this, _AgentSessionStream_sessions, "f").events.create(__classPrivateFieldGet2(this, _AgentSessionStream_sessionID, "f"), { - events: [__classPrivateFieldGet2(this, _AgentSessionStream_input, "f")], + const subscription = await __classPrivateFieldGet(this, _AgentSessionStream_sessions, "f").events.stream(__classPrivateFieldGet(this, _AgentSessionStream_sessionID, "f"), options).withResponse(); + __classPrivateFieldSet(this, _AgentSessionStream_stream, subscription.data, "f"); + __classPrivateFieldSet(this, _AgentSessionStream_response, subscription.response, "f"); + __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); + await __classPrivateFieldGet(this, _AgentSessionStream_sessions, "f").events.create(__classPrivateFieldGet(this, _AgentSessionStream_sessionID, "f"), { + events: [__classPrivateFieldGet(this, _AgentSessionStream_input, "f")], // Spread creates an own data property without invoking inherited setters or changing the object prototype. - ...__classPrivateFieldGet2(this, _AgentSessionStream_inputKey, "f") === void 0 ? {} : { "Idempotency-Key": __classPrivateFieldGet2(this, _AgentSessionStream_inputKey, "f") } + ...__classPrivateFieldGet(this, _AgentSessionStream_inputKey, "f") === void 0 ? {} : { "Idempotency-Key": __classPrivateFieldGet(this, _AgentSessionStream_inputKey, "f") } }, { ...options, - headers: buildHeaders2([options.headers, { "Idempotency-Key": __classPrivateFieldGet2(this, _AgentSessionStream_inputKey, "f") ?? null }]) + headers: buildHeaders([options.headers, { "Idempotency-Key": __classPrivateFieldGet(this, _AgentSessionStream_inputKey, "f") ?? null }]) }); - __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); - __classPrivateFieldSet2(this, _AgentSessionStream_reading, true, "f"); - for await (const event of __classPrivateFieldGet2(this, _AgentSessionStream_stream, "f")) { - __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); + __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); + __classPrivateFieldSet(this, _AgentSessionStream_reading, true, "f"); + for await (const event of __classPrivateFieldGet(this, _AgentSessionStream_stream, "f")) { + __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); if (!state2.accept(event)) { continue; } const terminal = state2.terminal(event); const pendingCall = state2.call(event); - const handler = pendingCall && __classPrivateFieldGet2(this, _AgentSessionStream_handlers, "f").get(pendingCall.name); + const handler = pendingCall && __classPrivateFieldGet(this, _AgentSessionStream_handlers, "f").get(pendingCall.name); const call = pendingCall && handler ? structuredClone(pendingCall) : void 0; if (terminal) { - __classPrivateFieldGet2(this, _AgentSessionStream_stream, "f").controller.abort(); + __classPrivateFieldGet(this, _AgentSessionStream_stream, "f").controller.abort(); } yield event; if (terminal) { return; } - __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); + __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); if (!call || !handler) { continue; } - const result = await __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_result).call(this, call, handler); - __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); - await __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_submit).call(this, result, options); + const result = await __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_result).call(this, call, handler); + __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); + await __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_submit).call(this, result, options); } - __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); + __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); throw new OpenAIError("Session event stream ended before the turn reached idle or failed"); } finally { externalSignal?.removeEventListener("abort", abort); @@ -31346,12 +13545,12 @@ var init_agent_session_stream = __esm({ }, _AgentSessionStream_result = async function _AgentSessionStream_result2(call, handler) { try { const args = typeof call.arguments === "string" ? JSON.parse(call.arguments) : call.arguments; - if (!isObj2(args)) { + if (!isObj(args)) { throw new OpenAIError("Function arguments must be a JSON object"); } - return toolResult(call, await __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_wait).call(this, () => handler(args))); + return toolResult(call, await __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_wait).call(this, () => handler(args))); } catch { - __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); + __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); return { type: "agent.session.input.tool_result", turn_id: call.turn_id, @@ -31362,10 +13561,10 @@ var init_agent_session_stream = __esm({ } }, _AgentSessionStream_checkAbort = function _AgentSessionStream_checkAbort2() { if (this.controller.signal.aborted) { - throw __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_abortError).call(this); + throw __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_abortError).call(this); } }, _AgentSessionStream_abortError = function _AgentSessionStream_abortError2() { - const error = new APIUserAbortError2(); + const error = new APIUserAbortError(); Object.defineProperty(error, "cause", { value: this.controller.signal.reason, writable: true, @@ -31375,11 +13574,11 @@ var init_agent_session_stream = __esm({ }, _AgentSessionStream_wait = async function _AgentSessionStream_wait2(action) { let onAbort; const aborted = new Promise((_resolve, reject2) => { - onAbort = () => reject2(__classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_abortError).call(this)); + onAbort = () => reject2(__classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_abortError).call(this)); this.controller.signal.addEventListener("abort", onAbort, { once: true }); }); try { - __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); + __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); const invoke = async () => await action(); return await Promise.race([invoke(), aborted]); } finally { @@ -31387,18 +13586,18 @@ var init_agent_session_stream = __esm({ this.controller.signal.removeEventListener("abort", onAbort); } } - }, _AgentSessionStream_submit = async function _AgentSessionStream_submit2(result, options, key = uuid42(), attempt = 0) { - __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); + }, _AgentSessionStream_submit = async function _AgentSessionStream_submit2(result, options, key = uuid4(), attempt = 0) { + __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_checkAbort).call(this); try { - await __classPrivateFieldGet2(this, _AgentSessionStream_sessions, "f").events.create(__classPrivateFieldGet2(this, _AgentSessionStream_sessionID, "f"), { events: [result], "Idempotency-Key": key }, options); + await __classPrivateFieldGet(this, _AgentSessionStream_sessions, "f").events.create(__classPrivateFieldGet(this, _AgentSessionStream_sessionID, "f"), { events: [result], "Idempotency-Key": key }, options); } catch (error) { const delay = [100, 300, 600][attempt]; - if (delay === void 0 || !(error instanceof BadRequestError2) || error.code !== "invalid_request_error" || !error.error || !("message" in error.error) || error.error.message !== `Unknown pending tool call: ${result.call_id}`) { + if (delay === void 0 || !(error instanceof BadRequestError) || error.code !== "invalid_request_error" || !error.error || !("message" in error.error) || error.error.message !== `Unknown pending tool call: ${result.call_id}`) { throw error; } let timer; try { - await __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_wait).call(this, () => ( + await __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_wait).call(this, () => ( // oxlint-disable-next-line promise/avoid-new -- Own the registration timer so cancellation clears it promptly. new Promise((resolve2) => { timer = setTimeout(resolve2, delay); @@ -31409,7 +13608,7 @@ var init_agent_session_stream = __esm({ clearTimeout(timer); } } - await __classPrivateFieldGet2(this, _AgentSessionStream_instances, "m", _AgentSessionStream_submit2).call(this, result, options, key, attempt + 1); + await __classPrivateFieldGet(this, _AgentSessionStream_instances, "m", _AgentSessionStream_submit2).call(this, result, options, key, attempt + 1); } }; } @@ -31419,11 +13618,11 @@ var init_agent_session_stream = __esm({ var Artifacts; var init_artifacts = __esm({ "node_modules/openai/resources/beta/agents/sessions/artifacts.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Artifacts = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Artifacts = class extends APIResource { /** * Retrieves immutable metadata for one durable session artifact. See * [session artifacts](https://developers.openai.com/api/docs/guides/agents-api/environments/files#openai-hosted-artifacts). @@ -31439,9 +13638,9 @@ var init_artifacts = __esm({ */ retrieve(artifactID, params, options) { const { session_id } = params; - return this._client.get(path3`/agents/sessions/${session_id}/artifacts/${artifactID}`, { + return this._client.get(path`/agents/sessions/${session_id}/artifacts/${artifactID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31460,10 +13659,10 @@ var init_artifacts = __esm({ * ``` */ list(sessionID, query = {}, options) { - return this._client.getAPIList(path3`/agents/sessions/${sessionID}/artifacts`, CursorPage, { + return this._client.getAPIList(path`/agents/sessions/${sessionID}/artifacts`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31483,9 +13682,9 @@ var init_artifacts = __esm({ */ delete(artifactID, params, options) { const { session_id } = params; - return this._client.delete(path3`/agents/sessions/${session_id}/artifacts/${artifactID}`, { + return this._client.delete(path`/agents/sessions/${session_id}/artifacts/${artifactID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31508,9 +13707,9 @@ var init_artifacts = __esm({ */ content(artifactID, params, options) { const { session_id } = params; - return this._client.get(path3`/agents/sessions/${session_id}/artifacts/${artifactID}/content`, { + return this._client.get(path`/agents/sessions/${session_id}/artifacts/${artifactID}/content`, { ...options, - headers: buildHeaders2([ + headers: buildHeaders([ { "OpenAI-Beta": "agents=v1", Accept: "application/octet-stream" }, options?.headers ]), @@ -31523,13 +13722,13 @@ var init_artifacts = __esm({ }); // node_modules/openai/resources/beta/agents/sessions/events.mjs -var Events3; -var init_events3 = __esm({ +var Events; +var init_events = __esm({ "node_modules/openai/resources/beta/agents/sessions/events.mjs"() { - init_resource2(); - init_headers3(); - init_path2(); - Events3 = class extends APIResource2 { + init_resource(); + init_headers(); + init_path(); + Events = class extends APIResource { /** * Submits message, cancellation, or tool-result events to a managed agent session. * Cancellation can recover a still-open turn whose backend execution has ended by @@ -31560,10 +13759,10 @@ var init_events3 = __esm({ */ create(sessionID, params, options) { const { "Idempotency-Key": idempotencyKey, ...body } = params; - return this._client.post(path3`/agents/sessions/${sessionID}/events`, { + return this._client.post(path`/agents/sessions/${sessionID}/events`, { body, ...options, - headers: buildHeaders2([ + headers: buildHeaders([ { "OpenAI-Beta": "agents=v1", Accept: "*/*", @@ -31587,9 +13786,9 @@ var init_events3 = __esm({ * ``` */ stream(sessionID, options) { - return this._client.get(path3`/agents/sessions/${sessionID}/events`, { + return this._client.get(path`/agents/sessions/${sessionID}/events`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1", Accept: "text/event-stream" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1", Accept: "text/event-stream" }, options?.headers]), stream: true, __security: { bearerAuth: true } }); @@ -31602,11 +13801,11 @@ var init_events3 = __esm({ var Items; var init_items = __esm({ "node_modules/openai/resources/beta/agents/sessions/items.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Items = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Items = class extends APIResource { /** * Lists items produced by the session's root agent, including its interactions * with subagents. Each subagent has its own item history. See @@ -31623,10 +13822,10 @@ var init_items = __esm({ * ``` */ list(sessionID, query = {}, options) { - return this._client.getAPIList(path3`/agents/sessions/${sessionID}/items`, CursorPage, { + return this._client.getAPIList(path`/agents/sessions/${sessionID}/items`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31638,11 +13837,11 @@ var init_items = __esm({ var Turns; var init_turns = __esm({ "node_modules/openai/resources/beta/agents/sessions/turns.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Turns = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Turns = class extends APIResource { /** * Retrieves a turn's current status, timestamps, usage, and error. Returns 404 if * the turn does not belong to the session. See @@ -31659,9 +13858,9 @@ var init_turns = __esm({ */ retrieve(turnID, params, options) { const { session_id } = params; - return this._client.get(path3`/agents/sessions/${session_id}/turns/${turnID}`, { + return this._client.get(path`/agents/sessions/${session_id}/turns/${turnID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31681,10 +13880,10 @@ var init_turns = __esm({ * ``` */ list(sessionID, query = {}, options) { - return this._client.getAPIList(path3`/agents/sessions/${sessionID}/turns`, CursorPage, { + return this._client.getAPIList(path`/agents/sessions/${sessionID}/turns`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31696,11 +13895,11 @@ var init_turns = __esm({ var Items2; var init_items2 = __esm({ "node_modules/openai/resources/beta/agents/sessions/subagents/items.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Items2 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Items2 = class extends APIResource { /** * Lists this subagent's own items across all of its turns. See * [subagent workflows](https://developers.openai.com/api/docs/guides/agents-api/multi-agent). @@ -31718,10 +13917,10 @@ var init_items2 = __esm({ */ list(subagentID, params, options) { const { session_id, ...query } = params; - return this._client.getAPIList(path3`/agents/sessions/${session_id}/subagents/${subagentID}/items`, CursorPage, { + return this._client.getAPIList(path`/agents/sessions/${session_id}/subagents/${subagentID}/items`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31733,11 +13932,11 @@ var init_items2 = __esm({ var Items3; var init_items3 = __esm({ "node_modules/openai/resources/beta/agents/sessions/subagents/turns/items.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Items3 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Items3 = class extends APIResource { /** * Lists items belonging to one turn of this subagent. See * [subagent workflows](https://developers.openai.com/api/docs/guides/agents-api/multi-agent). @@ -31755,10 +13954,10 @@ var init_items3 = __esm({ */ list(turnID, params, options) { const { session_id, subagent_id, ...query } = params; - return this._client.getAPIList(path3`/agents/sessions/${session_id}/subagents/${subagent_id}/turns/${turnID}/items`, CursorPage, { + return this._client.getAPIList(path`/agents/sessions/${session_id}/subagents/${subagent_id}/turns/${turnID}/items`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31770,13 +13969,13 @@ var init_items3 = __esm({ var Turns2; var init_turns2 = __esm({ "node_modules/openai/resources/beta/agents/sessions/subagents/turns/turns.mjs"() { - init_resource2(); + init_resource(); init_items3(); init_items3(); - init_pagination2(); - init_headers3(); - init_path2(); - Turns2 = class extends APIResource2 { + init_pagination(); + init_headers(); + init_path(); + Turns2 = class extends APIResource { constructor() { super(...arguments); this.items = new Items3(this._client); @@ -31799,9 +13998,9 @@ var init_turns2 = __esm({ */ retrieve(turnID, params, options) { const { session_id, subagent_id } = params; - return this._client.get(path3`/agents/sessions/${session_id}/subagents/${subagent_id}/turns/${turnID}`, { + return this._client.get(path`/agents/sessions/${session_id}/subagents/${subagent_id}/turns/${turnID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31822,10 +14021,10 @@ var init_turns2 = __esm({ */ list(subagentID, params, options) { const { session_id, ...query } = params; - return this._client.getAPIList(path3`/agents/sessions/${session_id}/subagents/${subagentID}/turns`, CursorPage, { + return this._client.getAPIList(path`/agents/sessions/${session_id}/subagents/${subagentID}/turns`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31838,15 +14037,15 @@ var init_turns2 = __esm({ var Subagents; var init_subagents = __esm({ "node_modules/openai/resources/beta/agents/sessions/subagents/subagents.mjs"() { - init_resource2(); + init_resource(); init_items2(); init_items2(); init_turns2(); init_turns2(); - init_pagination2(); - init_headers3(); - init_path2(); - Subagents = class extends APIResource2 { + init_pagination(); + init_headers(); + init_path(); + Subagents = class extends APIResource { constructor() { super(...arguments); this.items = new Items2(this._client); @@ -31867,9 +14066,9 @@ var init_subagents = __esm({ */ retrieve(subagentID, params, options) { const { session_id } = params; - return this._client.get(path3`/agents/sessions/${session_id}/subagents/${subagentID}`, { + return this._client.get(path`/agents/sessions/${session_id}/subagents/${subagentID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31888,10 +14087,10 @@ var init_subagents = __esm({ * ``` */ list(sessionID, query = {}, options) { - return this._client.getAPIList(path3`/agents/sessions/${sessionID}/subagents`, CursorPage, { + return this._client.getAPIList(path`/agents/sessions/${sessionID}/subagents`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31902,31 +14101,31 @@ var init_subagents = __esm({ }); // node_modules/openai/resources/beta/agents/sessions/sessions.mjs -var Sessions3; -var init_sessions3 = __esm({ +var Sessions2; +var init_sessions2 = __esm({ "node_modules/openai/resources/beta/agents/sessions/sessions.mjs"() { init_agent_session_stream(); - init_resource2(); + init_resource(); init_artifacts(); init_artifacts(); - init_events3(); - init_events3(); + init_events(); + init_events(); init_items(); init_items(); init_turns(); init_turns(); init_subagents(); init_subagents(); - init_pagination2(); - init_headers3(); - init_path2(); - Sessions3 = class extends APIResource2 { + init_pagination(); + init_headers(); + init_path(); + Sessions2 = class extends APIResource { constructor() { super(...arguments); this.subagents = new Subagents(this._client); this.artifacts = new Artifacts(this._client); this.items = new Items(this._client); - this.events = new Events3(this._client); + this.events = new Events(this._client); this.turns = new Turns(this._client); } /** Stream one turn on an idle session with a single input writer. See AgentSessionStream for lifecycle and tool handling. */ @@ -31937,7 +14136,7 @@ var init_sessions3 = __esm({ return this._client.post("/agents/sessions", { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), stream: body.stream ?? false, __security: { bearerAuth: true } }); @@ -31953,9 +14152,9 @@ var init_sessions3 = __esm({ * ``` */ retrieve(sessionID, options) { - return this._client.get(path3`/agents/sessions/${sessionID}`, { + return this._client.get(path`/agents/sessions/${sessionID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31971,10 +14170,10 @@ var init_sessions3 = __esm({ * ``` */ update(sessionID, body = {}, options) { - return this._client.post(path3`/agents/sessions/${sessionID}`, { + return this._client.post(path`/agents/sessions/${sessionID}`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -31995,7 +14194,7 @@ var init_sessions3 = __esm({ return this._client.getAPIList("/agents/sessions", CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32013,30 +14212,30 @@ var init_sessions3 = __esm({ * ``` */ delete(sessionID, options) { - return this._client.delete(path3`/agents/sessions/${sessionID}`, { + return this._client.delete(path`/agents/sessions/${sessionID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } }; - Sessions3.Subagents = Subagents; - Sessions3.Artifacts = Artifacts; - Sessions3.Items = Items; - Sessions3.Events = Events3; - Sessions3.Turns = Turns; + Sessions2.Subagents = Subagents; + Sessions2.Artifacts = Artifacts; + Sessions2.Items = Items; + Sessions2.Events = Events; + Sessions2.Turns = Turns; } }); // node_modules/openai/resources/beta/agents/vaults/credentials.mjs -var Credentials2; -var init_credentials3 = __esm({ +var Credentials; +var init_credentials = __esm({ "node_modules/openai/resources/beta/agents/vaults/credentials.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Credentials2 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Credentials = class extends APIResource { /** * Creates a vault credential. Secret values are write-only and are never returned. * See @@ -32059,10 +14258,10 @@ var init_credentials3 = __esm({ * ``` */ create(vaultID, body, options) { - return this._client.post(path3`/vaults/${vaultID}/credentials`, { + return this._client.post(path`/vaults/${vaultID}/credentials`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32081,9 +14280,9 @@ var init_credentials3 = __esm({ */ retrieve(credentialID, params, options) { const { vault_id } = params; - return this._client.get(path3`/vaults/${vault_id}/credentials/${credentialID}`, { + return this._client.get(path`/vaults/${vault_id}/credentials/${credentialID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32106,10 +14305,10 @@ var init_credentials3 = __esm({ */ update(credentialID, params, options) { const { vault_id, ...body } = params; - return this._client.post(path3`/vaults/${vault_id}/credentials/${credentialID}`, { + return this._client.post(path`/vaults/${vault_id}/credentials/${credentialID}`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32129,10 +14328,10 @@ var init_credentials3 = __esm({ * ``` */ list(vaultID, query = {}, options) { - return this._client.getAPIList(path3`/vaults/${vaultID}/credentials`, CursorPage, { + return this._client.getAPIList(path`/vaults/${vaultID}/credentials`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32151,9 +14350,9 @@ var init_credentials3 = __esm({ */ delete(credentialID, params, options) { const { vault_id } = params; - return this._client.delete(path3`/vaults/${vault_id}/credentials/${credentialID}`, { + return this._client.delete(path`/vaults/${vault_id}/credentials/${credentialID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32162,19 +14361,19 @@ var init_credentials3 = __esm({ }); // node_modules/openai/resources/beta/agents/vaults/vaults.mjs -var Vaults2; -var init_vaults2 = __esm({ +var Vaults; +var init_vaults = __esm({ "node_modules/openai/resources/beta/agents/vaults/vaults.mjs"() { - init_resource2(); - init_credentials3(); - init_credentials3(); - init_pagination2(); - init_headers3(); - init_path2(); - Vaults2 = class extends APIResource2 { + init_resource(); + init_credentials(); + init_credentials(); + init_pagination(); + init_headers(); + init_path(); + Vaults = class extends APIResource { constructor() { super(...arguments); - this.credentials = new Credentials2(this._client); + this.credentials = new Credentials(this._client); } /** * Creates a vault for the current project. See @@ -32189,7 +14388,7 @@ var init_vaults2 = __esm({ return this._client.post("/vaults", { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32205,9 +14404,9 @@ var init_vaults2 = __esm({ * ``` */ retrieve(vaultID, options) { - return this._client.get(path3`/vaults/${vaultID}`, { + return this._client.get(path`/vaults/${vaultID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32227,7 +14426,7 @@ var init_vaults2 = __esm({ return this._client.getAPIList("/vaults", CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32243,37 +14442,37 @@ var init_vaults2 = __esm({ * ``` */ delete(vaultID, options) { - return this._client.delete(path3`/vaults/${vaultID}`, { + return this._client.delete(path`/vaults/${vaultID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } }; - Vaults2.Credentials = Credentials2; + Vaults.Credentials = Credentials; } }); // node_modules/openai/resources/beta/agents/agents.mjs -var Agents2; -var init_agents2 = __esm({ +var Agents; +var init_agents = __esm({ "node_modules/openai/resources/beta/agents/agents.mjs"() { - init_resource2(); - init_environments2(); - init_environments2(); - init_sessions3(); - init_sessions3(); - init_vaults2(); - init_vaults2(); - init_pagination2(); - init_headers3(); - init_path2(); - Agents2 = class extends APIResource2 { + init_resource(); + init_environments(); + init_environments(); + init_sessions2(); + init_sessions2(); + init_vaults(); + init_vaults(); + init_pagination(); + init_headers(); + init_path(); + Agents = class extends APIResource { constructor() { super(...arguments); - this.environments = new Environments2(this._client); - this.vaults = new Vaults2(this._client); - this.sessions = new Sessions3(this._client); + this.environments = new Environments(this._client); + this.vaults = new Vaults(this._client); + this.sessions = new Sessions2(this._client); } /** * Creates a reusable agent without storing credentials. See @@ -32290,7 +14489,7 @@ var init_agents2 = __esm({ return this._client.post("/agents", { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32304,9 +14503,9 @@ var init_agents2 = __esm({ * ``` */ retrieve(agentID, options) { - return this._client.get(path3`/agents/${agentID}`, { + return this._client.get(path`/agents/${agentID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32320,10 +14519,10 @@ var init_agents2 = __esm({ * ``` */ update(agentID, body = {}, options) { - return this._client.post(path3`/agents/${agentID}`, { + return this._client.post(path`/agents/${agentID}`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32343,7 +14542,7 @@ var init_agents2 = __esm({ return this._client.getAPIList("/agents", CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32359,27 +14558,27 @@ var init_agents2 = __esm({ * ``` */ delete(agentID, options) { - return this._client.delete(path3`/agents/${agentID}`, { + return this._client.delete(path`/agents/${agentID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "agents=v1" }, options?.headers]), __security: { bearerAuth: true } }); } }; - Agents2.Environments = Environments2; - Agents2.Vaults = Vaults2; - Agents2.Sessions = Sessions3; + Agents.Environments = Environments; + Agents.Vaults = Vaults; + Agents.Sessions = Sessions2; } }); // node_modules/openai/resources/beta/chatkit/sessions.mjs -var Sessions4; -var init_sessions4 = __esm({ +var Sessions3; +var init_sessions3 = __esm({ "node_modules/openai/resources/beta/chatkit/sessions.mjs"() { - init_resource2(); - init_headers3(); - init_path2(); - Sessions4 = class extends APIResource2 { + init_resource(); + init_headers(); + init_path(); + Sessions3 = class extends APIResource { /** * Create a ChatKit session. * @@ -32396,7 +14595,7 @@ var init_sessions4 = __esm({ return this._client.post("/chatkit/sessions", { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32412,9 +14611,9 @@ var init_sessions4 = __esm({ * ``` */ cancel(sessionID, options) { - return this._client.post(path3`/chatkit/sessions/${sessionID}/cancel`, { + return this._client.post(path`/chatkit/sessions/${sessionID}/cancel`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32423,14 +14622,14 @@ var init_sessions4 = __esm({ }); // node_modules/openai/resources/beta/chatkit/threads.mjs -var Threads2; -var init_threads2 = __esm({ +var Threads; +var init_threads = __esm({ "node_modules/openai/resources/beta/chatkit/threads.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Threads2 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Threads = class extends APIResource { /** * Retrieve a ChatKit thread by its identifier. * @@ -32441,9 +14640,9 @@ var init_threads2 = __esm({ * ``` */ retrieve(threadID, options) { - return this._client.get(path3`/chatkit/threads/${threadID}`, { + return this._client.get(path`/chatkit/threads/${threadID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32462,7 +14661,7 @@ var init_threads2 = __esm({ return this._client.getAPIList("/chatkit/threads", ConversationCursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32477,9 +14676,9 @@ var init_threads2 = __esm({ * ``` */ delete(threadID, options) { - return this._client.delete(path3`/chatkit/threads/${threadID}`, { + return this._client.delete(path`/chatkit/threads/${threadID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32497,10 +14696,10 @@ var init_threads2 = __esm({ * ``` */ listItems(threadID, query = {}, options) { - return this._client.getAPIList(path3`/chatkit/threads/${threadID}/items`, ConversationCursorPage, { + return this._client.getAPIList(path`/chatkit/threads/${threadID}/items`, ConversationCursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "chatkit_beta=v1" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32512,20 +14711,20 @@ var init_threads2 = __esm({ var ChatKit; var init_chatkit = __esm({ "node_modules/openai/resources/beta/chatkit/chatkit.mjs"() { - init_resource2(); - init_sessions4(); - init_sessions4(); - init_threads2(); - init_threads2(); - ChatKit = class extends APIResource2 { + init_resource(); + init_sessions3(); + init_sessions3(); + init_threads(); + init_threads(); + ChatKit = class extends APIResource { constructor() { super(...arguments); - this.sessions = new Sessions4(this._client); - this.threads = new Threads2(this._client); + this.sessions = new Sessions3(this._client); + this.threads = new Threads(this._client); } }; - ChatKit.Sessions = Sessions4; - ChatKit.Threads = Threads2; + ChatKit.Sessions = Sessions3; + ChatKit.Threads = Threads; } }); @@ -32533,11 +14732,11 @@ var init_chatkit = __esm({ var InputItems; var init_input_items = __esm({ "node_modules/openai/resources/beta/responses/input-items.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - InputItems = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + InputItems = class extends APIResource { /** * Returns a list of input items for a given response. * @@ -32553,10 +14752,10 @@ var init_input_items = __esm({ */ list(responseID, params = {}, options) { const { betas, ...query } = params ?? {}; - return this._client.getAPIList(path3`/responses/${responseID}/input_items?beta=true`, CursorPage, { + return this._client.getAPIList(path`/responses/${responseID}/input_items?beta=true`, CursorPage, { query, ...options, - headers: buildHeaders2([ + headers: buildHeaders([ { ...betas?.toString() != null ? { "openai-beta": betas?.toString() } : void 0 }, options?.headers ]), @@ -32571,9 +14770,9 @@ var init_input_items = __esm({ var InputTokens; var init_input_tokens = __esm({ "node_modules/openai/resources/beta/responses/input-tokens.mjs"() { - init_resource2(); - init_headers3(); - InputTokens = class extends APIResource2 { + init_resource(); + init_headers(); + InputTokens = class extends APIResource { /** * Returns input token counts of the request. * @@ -32591,7 +14790,7 @@ var init_input_tokens = __esm({ return this._client.post("/responses/input_tokens?beta=true", { body, ...options, - headers: buildHeaders2([ + headers: buildHeaders([ { ...betas?.toString() != null ? { "openai-beta": betas?.toString() } : void 0 }, options?.headers ]), @@ -32606,14 +14805,14 @@ var init_input_tokens = __esm({ var Responses; var init_responses = __esm({ "node_modules/openai/resources/beta/responses/responses.mjs"() { - init_resource2(); + init_resource(); init_input_items(); init_input_items(); init_input_tokens(); init_input_tokens(); - init_headers3(); - init_path2(); - Responses = class extends APIResource2 { + init_headers(); + init_path(); + Responses = class extends APIResource { constructor() { super(...arguments); this.inputItems = new InputItems(this._client); @@ -32624,7 +14823,7 @@ var init_responses = __esm({ return this._client.post("/responses?beta=true", { body, ...options, - headers: buildHeaders2([ + headers: buildHeaders([ { ...betas?.toString() != null ? { "openai-beta": betas?.toString() } : void 0 }, options?.headers ]), @@ -32634,10 +14833,10 @@ var init_responses = __esm({ } retrieve(responseID, params = {}, options) { const { betas, ...query } = params ?? {}; - return this._client.get(path3`/responses/${responseID}?beta=true`, { + return this._client.get(path`/responses/${responseID}?beta=true`, { query, ...options, - headers: buildHeaders2([ + headers: buildHeaders([ { ...betas?.toString() != null ? { "openai-beta": betas?.toString() } : void 0 }, options?.headers ]), @@ -32657,9 +14856,9 @@ var init_responses = __esm({ */ delete(responseID, params = {}, options) { const { betas } = params ?? {}; - return this._client.delete(path3`/responses/${responseID}?beta=true`, { + return this._client.delete(path`/responses/${responseID}?beta=true`, { ...options, - headers: buildHeaders2([ + headers: buildHeaders([ { Accept: "*/*", ...betas?.toString() != null ? { "openai-beta": betas?.toString() } : void 0 }, options?.headers ]), @@ -32680,9 +14879,9 @@ var init_responses = __esm({ */ cancel(responseID, params = {}, options) { const { betas } = params ?? {}; - return this._client.post(path3`/responses/${responseID}/cancel?beta=true`, { + return this._client.post(path`/responses/${responseID}/cancel?beta=true`, { ...options, - headers: buildHeaders2([ + headers: buildHeaders([ { ...betas?.toString() != null ? { "openai-beta": betas?.toString() } : void 0 }, options?.headers ]), @@ -32710,7 +14909,7 @@ var init_responses = __esm({ return this._client.post("/responses/compact?beta=true", { body, ...options, - headers: buildHeaders2([ + headers: buildHeaders([ { ...betas?.toString() != null ? { "openai-beta": betas?.toString() } : void 0 }, options?.headers ]), @@ -32724,24 +14923,24 @@ var init_responses = __esm({ }); // node_modules/openai/resources/beta/threads/messages.mjs -var Messages4; -var init_messages4 = __esm({ +var Messages2; +var init_messages2 = __esm({ "node_modules/openai/resources/beta/threads/messages.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Messages4 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Messages2 = class extends APIResource { /** * Create a message. * * @deprecated The Assistants API is deprecated in favor of the Responses API */ create(threadID, body, options) { - return this._client.post(path3`/threads/${threadID}/messages`, { + return this._client.post(path`/threads/${threadID}/messages`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32752,9 +14951,9 @@ var init_messages4 = __esm({ */ retrieve(messageID, params, options) { const { thread_id } = params; - return this._client.get(path3`/threads/${thread_id}/messages/${messageID}`, { + return this._client.get(path`/threads/${thread_id}/messages/${messageID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32765,10 +14964,10 @@ var init_messages4 = __esm({ */ update(messageID, params, options) { const { thread_id, ...body } = params; - return this._client.post(path3`/threads/${thread_id}/messages/${messageID}`, { + return this._client.post(path`/threads/${thread_id}/messages/${messageID}`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32778,10 +14977,10 @@ var init_messages4 = __esm({ * @deprecated The Assistants API is deprecated in favor of the Responses API */ list(threadID, query = {}, options) { - return this._client.getAPIList(path3`/threads/${threadID}/messages`, CursorPage, { + return this._client.getAPIList(path`/threads/${threadID}/messages`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32792,9 +14991,9 @@ var init_messages4 = __esm({ */ delete(messageID, params, options) { const { thread_id } = params; - return this._client.delete(path3`/threads/${thread_id}/messages/${messageID}`, { + return this._client.delete(path`/threads/${thread_id}/messages/${messageID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32806,11 +15005,11 @@ var init_messages4 = __esm({ var Steps; var init_steps = __esm({ "node_modules/openai/resources/beta/threads/runs/steps.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_path2(); - Steps = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_path(); + Steps = class extends APIResource { /** * Retrieves a run step. * @@ -32818,10 +15017,10 @@ var init_steps = __esm({ */ retrieve(stepID, params, options) { const { thread_id, run_id, ...query } = params; - return this._client.get(path3`/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, { + return this._client.get(path`/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32832,10 +15031,10 @@ var init_steps = __esm({ */ list(runID, params, options) { const { thread_id, ...query } = params; - return this._client.getAPIList(path3`/threads/${thread_id}/runs/${runID}/steps`, CursorPage, { + return this._client.getAPIList(path`/threads/${thread_id}/runs/${runID}/steps`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -32844,12 +15043,12 @@ var init_steps = __esm({ }); // node_modules/openai/internal/utils/base64.mjs -var fromBase642, toFloat32Array; -var init_base642 = __esm({ +var fromBase64, toFloat32Array; +var init_base64 = __esm({ "node_modules/openai/internal/utils/base64.mjs"() { - init_error3(); - init_bytes2(); - fromBase642 = (str2) => { + init_error(); + init_bytes(); + fromBase64 = (str2) => { if (typeof globalThis.Buffer !== "undefined") { const buf = globalThis.Buffer.from(str2, "base64"); return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength); @@ -32885,10 +15084,10 @@ var init_base642 = __esm({ }); // node_modules/openai/internal/utils/env.mjs -var readEnv2; -var init_env2 = __esm({ +var readEnv; +var init_env = __esm({ "node_modules/openai/internal/utils/env.mjs"() { - readEnv2 = (env) => { + readEnv = (env) => { try { if (typeof globalThis.process !== "undefined") { return globalThis.process.env?.[env]?.trim() || void 0; @@ -32905,15 +15104,15 @@ var init_env2 = __esm({ }); // node_modules/openai/internal/utils.mjs -var init_utils4 = __esm({ +var init_utils2 = __esm({ "node_modules/openai/internal/utils.mjs"() { - init_values2(); - init_base642(); - init_env2(); - init_log2(); - init_uuid2(); - init_sleep2(); - init_query2(); + init_values(); + init_base64(); + init_env(); + init_log(); + init_uuid(); + init_sleep(); + init_query(); } }); @@ -33009,14 +15208,14 @@ function assertValidAssistantStreamArrayDelta(accumulator, delta, kind, projecti projection.arrays.set(accumulator, projectedArray); } for (const deltaEntry of delta) { - if (!isObj2(deltaEntry)) { + if (!isObj(deltaEntry)) { throw new Error("Expected array delta entry to be an object but got an invalid value"); } const validatedIndex = getAssistantStreamDeltaIndex(deltaEntry, kind, projectedArray.baselineLength); let accumulatedEntry; if (projectedArray.entries.has(validatedIndex)) { accumulatedEntry = projectedArray.entries.get(validatedIndex); - } else if (hasOwn2(accumulator, validatedIndex)) { + } else if (hasOwn(accumulator, validatedIndex)) { accumulatedEntry = accumulator[validatedIndex]; if (accumulatedEntry === null || accumulatedEntry === void 0) { projectedArray.entries.set(validatedIndex, deltaEntry); @@ -33029,7 +15228,7 @@ function assertValidAssistantStreamArrayDelta(accumulator, delta, kind, projecti if (projectedArray.enforceSparseHoleBudget && projectedLength - projectedArray.ownEntryCount > MAX_ASSISTANT_STREAM_ARRAY_GROWTH) { throw new OpenAIError(`Assistant stream delta contains an invalid ${kind} index: ${validatedIndex}`); } - if (isObj2(accumulatedEntry)) { + if (isObj(accumulatedEntry)) { validateRecord(accumulatedEntry, deltaEntry, projection); } projectedArray.length = projectedLength; @@ -33044,7 +15243,7 @@ function assertValidAssistantStreamDeltaIndices(accumulator, delta, projection) let accumulatedValue; if (projectedValues?.has(key)) { accumulatedValue = projectedValues.get(key); - } else if (hasOwn2(accumulator, key)) { + } else if (hasOwn(accumulator, key)) { accumulatedValue = accumulator[key]; } if (accumulatedValue === null || accumulatedValue === void 0) { @@ -33055,7 +15254,7 @@ function assertValidAssistantStreamDeltaIndices(accumulator, delta, projection) projectedValues.set(key, deltaValue); continue; } - if (isObj2(accumulatedValue) && isObj2(deltaValue)) { + if (isObj(accumulatedValue) && isObj(deltaValue)) { assertValidAssistantStreamDeltaIndices(accumulatedValue, deltaValue, projection); } else if (Array.isArray(accumulatedValue) && Array.isArray(deltaValue) && !isPrimitiveAssistantStreamArrayDelta(accumulatedValue, deltaValue)) { assertValidAssistantStreamArrayDelta(accumulatedValue, deltaValue, "array", projection, assertValidAssistantStreamDeltaIndices); @@ -33063,10 +15262,10 @@ function assertValidAssistantStreamDeltaIndices(accumulator, delta, projection) } } function isAssistantStreamValueExternallyMutable(value2) { - return (isObj2(value2) || Array.isArray(value2)) && externallyMutableAssistantStreamValues.has(value2); + return (isObj(value2) || Array.isArray(value2)) && externallyMutableAssistantStreamValues.has(value2); } function markAssistantStreamValueExternallyMutable(value2) { - if (!isObj2(value2) && !Array.isArray(value2) || externallyMutableAssistantStreamValues.has(value2)) { + if (!isObj(value2) && !Array.isArray(value2) || externallyMutableAssistantStreamValues.has(value2)) { return; } externallyMutableAssistantStreamValues.add(value2); @@ -33108,11 +15307,11 @@ function applyAssistantStreamArrayDelta(accumulator, delta, applyRecord) { return; } for (const deltaEntry of delta) { - if (!isObj2(deltaEntry)) { + if (!isObj(deltaEntry)) { throw new Error("Expected array delta entry to be an object but got an invalid value"); } const index = getRequiredAssistantStreamArrayIndex(deltaEntry); - if (hasOwn2(accumulator, index)) { + if (hasOwn(accumulator, index)) { const accumulatedEntry = accumulator[index]; if (accumulatedEntry === null || accumulatedEntry === void 0) { if (externallyMutableAssistantStreamValues.has(accumulator)) { @@ -33133,7 +15332,7 @@ function applyAssistantStreamDelta(accumulator, delta) { if (key === "__proto__" || key === "constructor" || key === "prototype") { throw new OpenAIError(`Assistant stream delta contains an unsafe property: ${key}`); } - if (!hasOwn2(accumulator, key)) { + if (!hasOwn(accumulator, key)) { if (externallyMutable) { markAssistantStreamValueExternallyMutable(deltaValue); } @@ -33156,7 +15355,7 @@ function applyAssistantStreamDelta(accumulator, delta) { accumulatedValue += deltaValue; } else if (typeof accumulatedValue === "number" && typeof deltaValue === "number") { accumulatedValue += deltaValue; - } else if (isObj2(accumulatedValue) && isObj2(deltaValue)) { + } else if (isObj(accumulatedValue) && isObj(deltaValue)) { accumulatedValue = applyAssistantStreamDelta(accumulatedValue, deltaValue); } else if (Array.isArray(accumulatedValue) && Array.isArray(deltaValue)) { applyAssistantStreamArrayDelta(accumulatedValue, deltaValue, applyAssistantStreamDelta); @@ -33169,7 +15368,7 @@ function applyAssistantStreamDelta(accumulator, delta) { return accumulator; } function assertSafeAssistantStreamDelta(value2) { - if (!isObj2(value2) && !Array.isArray(value2)) { + if (!isObj(value2) && !Array.isArray(value2)) { return; } for (const [key, nestedValue] of Object.entries(value2)) { @@ -33198,8 +15397,8 @@ function createAssistantStreamArrayDeltaCommit(accumulator, delta, kind, cacheAr var MAX_ASSISTANT_STREAM_ARRAY_GROWTH, MAX_EXTERNALLY_MUTABLE_ASSISTANT_STREAM_ARRAY_LENGTH, assistantStreamArrayStates, externallyMutableAssistantStreamValues; var init_assistant_stream_delta = __esm({ "node_modules/openai/internal/assistant-stream-delta.mjs"() { - init_error4(); - init_utils4(); + init_error2(); + init_utils2(); MAX_ASSISTANT_STREAM_ARRAY_GROWTH = 1024; MAX_EXTERNALLY_MUTABLE_ASSISTANT_STREAM_ARRAY_LENGTH = 65536; assistantStreamArrayStates = /* @__PURE__ */ new WeakMap(); @@ -33239,11 +15438,11 @@ function assertNever2(_x) { var _AssistantStream_instances, _AssistantStream_runStepSnapshots, _AssistantStream_runStepIDOwners, _AssistantStream_activeRunStepID, _AssistantStream_messageSnapshots, _AssistantStream_messageIDOwners, _AssistantStream_messageSnapshot, _AssistantStream_activeMessageID, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_validateRunStepEvent, _AssistantStream_reserveRunStepAlias, _AssistantStream_validateMessageEvent, _AssistantStream_reserveMessageAlias, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_emitExposed, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun, AssistantStream; var init_AssistantStream = __esm({ "node_modules/openai/lib/AssistantStream.mjs"() { - init_tslib2(); - init_streaming4(); - init_error4(); + init_tslib(); + init_streaming2(); + init_error2(); init_EventStream(); - init_utils4(); + init_utils2(); init_assistant_stream_delta(); AssistantStream = class _AssistantStream extends EventStream2 { constructor() { @@ -33282,18 +15481,18 @@ var init_AssistantStream = __esm({ async _fromReadableStream(readableStream, options) { this._listenForAbort(options?.signal); this._connected(); - const stream5 = Stream2.fromReadableStream(readableStream, this.controller); + const stream5 = Stream.fromReadableStream(readableStream, this.controller); for await (const event of stream5) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_addEvent).call(this, event); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_addEvent).call(this, event); } if (stream5.controller.signal?.aborted) { throw this._userAbortError(); } - return this._addRun(__classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_endRequest).call(this)); + return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_endRequest).call(this)); } /** Serializes assistant events into a readable stream for transfer to another runtime. */ toReadableStream() { - const stream5 = new Stream2(this[Symbol.asyncIterator].bind(this), this.controller); + const stream5 = new Stream(this[Symbol.asyncIterator].bind(this), this.controller); return stream5.toReadableStream(); } /** Submits tool outputs and starts streaming the continuation of an existing assistant run. */ @@ -33314,12 +15513,12 @@ var init_AssistantStream = __esm({ }); this._connected(); for await (const event of stream5) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_addEvent).call(this, event); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_addEvent).call(this, event); } if (stream5.controller.signal?.aborted) { throw this._userAbortError(); } - return this._addRun(__classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_endRequest).call(this)); + return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_endRequest).call(this)); } /** Creates an assistant thread and starts streaming its newly created run. */ static createThreadAssistantStream(params, thread, options) { @@ -33341,28 +15540,28 @@ var init_AssistantStream = __esm({ } /** Returns the most recent raw event, or `undefined` before any event arrives. */ currentEvent() { - markAssistantStreamValueExternallyMutable(__classPrivateFieldGet2(this, _AssistantStream_currentEvent, "f")); - return __classPrivateFieldGet2(this, _AssistantStream_currentEvent, "f"); + markAssistantStreamValueExternallyMutable(__classPrivateFieldGet(this, _AssistantStream_currentEvent, "f")); + return __classPrivateFieldGet(this, _AssistantStream_currentEvent, "f"); } /** Returns the latest run snapshot, or `undefined` before a run event arrives. */ currentRun() { - markAssistantStreamValueExternallyMutable(__classPrivateFieldGet2(this, _AssistantStream_currentRunSnapshot, "f")); - return __classPrivateFieldGet2(this, _AssistantStream_currentRunSnapshot, "f"); + markAssistantStreamValueExternallyMutable(__classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, "f")); + return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, "f"); } /** Returns the message currently being accumulated, or `undefined` before message creation. */ currentMessageSnapshot() { - markAssistantStreamValueExternallyMutable(__classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f")); - return __classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f"); + markAssistantStreamValueExternallyMutable(__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f")); + return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f"); } /** Returns the run step currently being accumulated, or `undefined` before a step begins. */ currentRunStepSnapshot() { - markAssistantStreamValueExternallyMutable(__classPrivateFieldGet2(this, _AssistantStream_currentRunStepSnapshot, "f")); - return __classPrivateFieldGet2(this, _AssistantStream_currentRunStepSnapshot, "f"); + markAssistantStreamValueExternallyMutable(__classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, "f")); + return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, "f"); } /** Waits for successful completion and returns the final snapshot of every observed run step. */ async finalRunSteps() { await this.done(); - return Object.values(__classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f")); + return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f")); } /** * Waits for successful completion and returns the final snapshot of every observed message. @@ -33370,15 +15569,15 @@ var init_AssistantStream = __esm({ */ async finalMessages() { await this.done(); - return Object.values(__classPrivateFieldGet2(this, _AssistantStream_messageSnapshots, "f")); + return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, "f")); } /** Waits for completion and returns the final run, or rejects if no terminal run was received. */ async finalRun() { await this.done(); - if (!__classPrivateFieldGet2(this, _AssistantStream_finalRun, "f")) { + if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, "f")) { throw new Error("Final run was not received."); } - return __classPrivateFieldGet2(this, _AssistantStream_finalRun, "f"); + return __classPrivateFieldGet(this, _AssistantStream_finalRun, "f"); } async _createThreadAssistantStream(thread, params, options) { this._listenForAbort(options?.signal); @@ -33386,12 +15585,12 @@ var init_AssistantStream = __esm({ const stream5 = await thread.createAndRun(body, { ...options, signal: this.controller.signal }); this._connected(); for await (const event of stream5) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_addEvent).call(this, event); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_addEvent).call(this, event); } if (stream5.controller.signal?.aborted) { throw this._userAbortError(); } - return this._addRun(__classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_endRequest).call(this)); + return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_endRequest).call(this)); } async _createAssistantStream(run2, threadId, params, options) { this._listenForAbort(options?.signal); @@ -33399,12 +15598,12 @@ var init_AssistantStream = __esm({ const stream5 = await run2.create(threadId, body, { ...options, signal: this.controller.signal }); this._connected(); for await (const event of stream5) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_addEvent).call(this, event); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_addEvent).call(this, event); } if (stream5.controller.signal?.aborted) { throw this._userAbortError(); } - return this._addRun(__classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_endRequest).call(this)); + return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_endRequest).call(this)); } /** * Applies an assistant delta to its mutable snapshot, concatenating text and @@ -33414,7 +15613,7 @@ var init_AssistantStream = __esm({ return accumulateAssistantStreamDelta(acc, delta); } _addRun(run2) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "run", run2); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "run", run2); return run2; } async _threadAssistantStream(params, thread, options) { @@ -33442,7 +15641,7 @@ var init_AssistantStream = __esm({ case "thread.message.delta": case "thread.message.completed": case "thread.message.incomplete": { - messageID = __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_validateMessageEvent).call(this, stableEvent); + messageID = __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_validateMessageEvent).call(this, stableEvent); messageData = stableEvent.data; break; } @@ -33453,21 +15652,21 @@ var init_AssistantStream = __esm({ case "thread.run.step.failed": case "thread.run.step.cancelled": case "thread.run.step.expired": { - runStepID = __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_validateRunStepEvent).call(this, stableEvent); + runStepID = __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_validateRunStepEvent).call(this, stableEvent); runStepData = stableEvent.data; break; } } - __classPrivateFieldSet2(this, _AssistantStream_currentEvent, exposedEvent, "f"); - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_handleEvent).call(this, exposedEvent); + __classPrivateFieldSet(this, _AssistantStream_currentEvent, exposedEvent, "f"); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_handleEvent).call(this, exposedEvent); if (messageID !== void 0 && messageData !== void 0) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_reserveMessageAlias).call(this, messageData, messageID); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_reserveMessageAlias).call(this, messageData, messageID); } if (runStepID !== void 0 && runStepData !== void 0) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_reserveRunStepAlias).call(this, runStepData, runStepID); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_reserveRunStepAlias).call(this, runStepData, runStepID); } - if (runStepID === void 0 && __classPrivateFieldGet2(this, _AssistantStream_activeRunStepID, "f") !== void 0 && __classPrivateFieldGet2(this, _AssistantStream_currentRunStepSnapshot, "f")) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_reserveRunStepAlias).call(this, __classPrivateFieldGet2(this, _AssistantStream_currentRunStepSnapshot, "f"), __classPrivateFieldGet2(this, _AssistantStream_activeRunStepID, "f")); + if (runStepID === void 0 && __classPrivateFieldGet(this, _AssistantStream_activeRunStepID, "f") !== void 0 && __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, "f")) { + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_reserveRunStepAlias).call(this, __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, "f"), __classPrivateFieldGet(this, _AssistantStream_activeRunStepID, "f")); } switch (stableEvent.event) { case "thread.created": { @@ -33483,7 +15682,7 @@ var init_AssistantStream = __esm({ case "thread.run.cancelling": case "thread.run.cancelled": case "thread.run.expired": { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_handleRun).call(this, stableEvent); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_handleRun).call(this, stableEvent); break; } case "thread.run.step.created": @@ -33496,15 +15695,15 @@ var init_AssistantStream = __esm({ if (runStepID === void 0) { throw new OpenAIError("Received assistant run-step event without a canonical run-step ID"); } - const activeRunStep = __classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f")[runStepID]; + const activeRunStep = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f")[runStepID]; if (activeRunStep) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_reserveRunStepAlias).call(this, activeRunStep, runStepID); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_reserveRunStepAlias).call(this, activeRunStep, runStepID); } - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_handleRunStep).call(this, stableEvent, runStepID); - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_reserveRunStepAlias).call(this, stableEvent.data, runStepID); - const retainedRunStep = __classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f")[runStepID]; + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_handleRunStep).call(this, stableEvent, runStepID); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_reserveRunStepAlias).call(this, stableEvent.data, runStepID); + const retainedRunStep = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f")[runStepID]; if (retainedRunStep) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_reserveRunStepAlias).call(this, retainedRunStep, runStepID); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_reserveRunStepAlias).call(this, retainedRunStep, runStepID); } break; } @@ -33513,21 +15712,21 @@ var init_AssistantStream = __esm({ case "thread.message.delta": case "thread.message.completed": case "thread.message.incomplete": { - if (messageID !== void 0 && __classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f")) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_reserveMessageAlias).call(this, __classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f"), messageID); + if (messageID !== void 0 && __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f")) { + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_reserveMessageAlias).call(this, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f"), messageID); } - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_handleMessage).call(this, stableEvent); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_handleMessage).call(this, stableEvent); if (messageID !== void 0) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_reserveMessageAlias).call(this, stableEvent.data, messageID); - const retainedMessage = __classPrivateFieldGet2(this, _AssistantStream_messageSnapshots, "f")[messageID]; + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_reserveMessageAlias).call(this, stableEvent.data, messageID); + const retainedMessage = __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, "f")[messageID]; if (retainedMessage) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_reserveMessageAlias).call(this, retainedMessage, messageID); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_reserveMessageAlias).call(this, retainedMessage, messageID); } } break; } case "error": { - throw new APIError2(void 0, stableEvent.data, void 0, void 0); + throw new APIError(void 0, stableEvent.data, void 0, void 0); } default: { assertNever2(stableEvent); @@ -33537,10 +15736,10 @@ var init_AssistantStream = __esm({ if (this.ended) { throw new OpenAIError(`stream has ended, this shouldn't happen`); } - if (!__classPrivateFieldGet2(this, _AssistantStream_finalRun, "f")) { + if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, "f")) { throw new Error("Final run has not been received"); } - return __classPrivateFieldGet2(this, _AssistantStream_finalRun, "f"); + return __classPrivateFieldGet(this, _AssistantStream_finalRun, "f"); }, _AssistantStream_validateRunStepEvent = function _AssistantStream_validateRunStepEvent2(event) { const descriptor = Object.getOwnPropertyDescriptor(event.data, "id"); const runStepID = descriptor && "value" in descriptor ? descriptor.value : void 0; @@ -33549,39 +15748,39 @@ var init_AssistantStream = __esm({ } if (event.event === "thread.run.step.delta") { const delta = event.data.delta; - if (delta && hasOwn2(delta, "id")) { + if (delta && hasOwn(delta, "id")) { throw new OpenAIError("Run-step deltas must not contain an id field"); } } if (event.event === "thread.run.step.created") { - if (__classPrivateFieldGet2(this, _AssistantStream_activeRunStepID, "f") !== void 0) { - throw new OpenAIError(`Received run-step creation for "${runStepID}" before the active run step "${__classPrivateFieldGet2(this, _AssistantStream_activeRunStepID, "f")}" reached a terminal state`); + if (__classPrivateFieldGet(this, _AssistantStream_activeRunStepID, "f") !== void 0) { + throw new OpenAIError(`Received run-step creation for "${runStepID}" before the active run step "${__classPrivateFieldGet(this, _AssistantStream_activeRunStepID, "f")}" reached a terminal state`); } - if (hasOwn2(__classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f"), runStepID) || __classPrivateFieldGet2(this, _AssistantStream_runStepIDOwners, "f").has(runStepID)) { + if (hasOwn(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f"), runStepID) || __classPrivateFieldGet(this, _AssistantStream_runStepIDOwners, "f").has(runStepID)) { throw new OpenAIError(`Received run-step creation for run step "${runStepID}", which has already been created`); } - __classPrivateFieldSet2(this, _AssistantStream_activeRunStepID, runStepID, "f"); - __classPrivateFieldGet2(this, _AssistantStream_runStepIDOwners, "f").set(runStepID, runStepID); + __classPrivateFieldSet(this, _AssistantStream_activeRunStepID, runStepID, "f"); + __classPrivateFieldGet(this, _AssistantStream_runStepIDOwners, "f").set(runStepID, runStepID); return runStepID; } - if (__classPrivateFieldGet2(this, _AssistantStream_activeRunStepID, "f") !== void 0) { - if (runStepID !== __classPrivateFieldGet2(this, _AssistantStream_activeRunStepID, "f")) { - throw new OpenAIError(`Received ${event.event} for run step "${runStepID}", which does not match the active run step "${__classPrivateFieldGet2(this, _AssistantStream_activeRunStepID, "f")}"`); + if (__classPrivateFieldGet(this, _AssistantStream_activeRunStepID, "f") !== void 0) { + if (runStepID !== __classPrivateFieldGet(this, _AssistantStream_activeRunStepID, "f")) { + throw new OpenAIError(`Received ${event.event} for run step "${runStepID}", which does not match the active run step "${__classPrivateFieldGet(this, _AssistantStream_activeRunStepID, "f")}"`); } return runStepID; } if (event.event === "thread.run.step.delta") { - if (!hasOwn2(__classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f"), runStepID)) { + if (!hasOwn(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f"), runStepID)) { throw new OpenAIError("Received a RunStepDelta before creation of a snapshot"); } throw new OpenAIError(`Received run-step delta for "${runStepID}" with no active run step`); } - if (hasOwn2(__classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f"), runStepID) || __classPrivateFieldGet2(this, _AssistantStream_runStepIDOwners, "f").has(runStepID)) { + if (hasOwn(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f"), runStepID) || __classPrivateFieldGet(this, _AssistantStream_runStepIDOwners, "f").has(runStepID)) { throw new OpenAIError(`Received run-step event for run step "${runStepID}", which has already been created`); } - __classPrivateFieldGet2(this, _AssistantStream_runStepIDOwners, "f").set(runStepID, runStepID); + __classPrivateFieldGet(this, _AssistantStream_runStepIDOwners, "f").set(runStepID, runStepID); if (event.event === "thread.run.step.in_progress") { - __classPrivateFieldSet2(this, _AssistantStream_activeRunStepID, runStepID, "f"); + __classPrivateFieldSet(this, _AssistantStream_activeRunStepID, runStepID, "f"); } return runStepID; }, _AssistantStream_reserveRunStepAlias = function _AssistantStream_reserveRunStepAlias2(data, canonicalID) { @@ -33590,11 +15789,11 @@ var init_AssistantStream = __esm({ if (typeof runStepID !== "string" || runStepID.length === 0) { throw new OpenAIError("Received assistant run-step event with an invalid run-step ID"); } - const owner = __classPrivateFieldGet2(this, _AssistantStream_runStepIDOwners, "f").get(runStepID); + const owner = __classPrivateFieldGet(this, _AssistantStream_runStepIDOwners, "f").get(runStepID); if (owner !== void 0 && owner !== canonicalID) { throw new OpenAIError(`Received run-step creation for run step "${runStepID}", which has already been created`); } - __classPrivateFieldGet2(this, _AssistantStream_runStepIDOwners, "f").set(runStepID, canonicalID); + __classPrivateFieldGet(this, _AssistantStream_runStepIDOwners, "f").set(runStepID, canonicalID); }, _AssistantStream_validateMessageEvent = function _AssistantStream_validateMessageEvent2(event) { const descriptor = Object.getOwnPropertyDescriptor(event.data, "id"); const messageID = descriptor && "value" in descriptor ? descriptor.value : void 0; @@ -33602,24 +15801,24 @@ var init_AssistantStream = __esm({ throw new OpenAIError("Received assistant message event with an invalid message ID"); } if (event.event === "thread.message.created") { - if (__classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f")) { - throw new OpenAIError(`Received message creation for "${messageID}" before the active message "${__classPrivateFieldGet2(this, _AssistantStream_activeMessageID, "f")}" reached a terminal state`); + if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f")) { + throw new OpenAIError(`Received message creation for "${messageID}" before the active message "${__classPrivateFieldGet(this, _AssistantStream_activeMessageID, "f")}" reached a terminal state`); } - if (hasOwn2(__classPrivateFieldGet2(this, _AssistantStream_messageSnapshots, "f"), messageID) || __classPrivateFieldGet2(this, _AssistantStream_messageIDOwners, "f").has(messageID)) { + if (hasOwn(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, "f"), messageID) || __classPrivateFieldGet(this, _AssistantStream_messageIDOwners, "f").has(messageID)) { throw new OpenAIError(`Received message creation for message "${messageID}", which has already been created`); } - __classPrivateFieldSet2(this, _AssistantStream_activeMessageID, messageID, "f"); - __classPrivateFieldGet2(this, _AssistantStream_messageIDOwners, "f").set(messageID, messageID); + __classPrivateFieldSet(this, _AssistantStream_activeMessageID, messageID, "f"); + __classPrivateFieldGet(this, _AssistantStream_messageIDOwners, "f").set(messageID, messageID); return messageID; } - if (!__classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f")) { + if (!__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f")) { if (event.event === "thread.message.delta") { throw new OpenAIError("Received a delta with no existing snapshot (there should be one from message creation)"); } throw new OpenAIError("Received thread message event with no existing snapshot"); } - if (messageID !== __classPrivateFieldGet2(this, _AssistantStream_activeMessageID, "f")) { - throw new OpenAIError(`Received ${event.event} for message "${messageID}", which does not match the active message "${__classPrivateFieldGet2(this, _AssistantStream_activeMessageID, "f")}"`); + if (messageID !== __classPrivateFieldGet(this, _AssistantStream_activeMessageID, "f")) { + throw new OpenAIError(`Received ${event.event} for message "${messageID}", which does not match the active message "${__classPrivateFieldGet(this, _AssistantStream_activeMessageID, "f")}"`); } return messageID; }, _AssistantStream_reserveMessageAlias = function _AssistantStream_reserveMessageAlias2(data, canonicalID) { @@ -33628,137 +15827,137 @@ var init_AssistantStream = __esm({ if (typeof messageID !== "string" || messageID.length === 0) { throw new OpenAIError("Received assistant message event with an invalid message ID"); } - const owner = __classPrivateFieldGet2(this, _AssistantStream_messageIDOwners, "f").get(messageID); + const owner = __classPrivateFieldGet(this, _AssistantStream_messageIDOwners, "f").get(messageID); if (owner !== void 0 && owner !== canonicalID) { throw new OpenAIError(`Received message creation for message "${messageID}", which has already been created`); } - __classPrivateFieldGet2(this, _AssistantStream_messageIDOwners, "f").set(messageID, canonicalID); + __classPrivateFieldGet(this, _AssistantStream_messageIDOwners, "f").set(messageID, canonicalID); }, _AssistantStream_handleMessage = function _AssistantStream_handleMessage2(event) { - const [accumulatedMessage, newContent] = __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f")); - __classPrivateFieldSet2(this, _AssistantStream_messageSnapshot, accumulatedMessage, "f"); - if (!__classPrivateFieldGet2(this, _AssistantStream_activeMessageID, "f")) { + const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f")); + __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, "f"); + if (!__classPrivateFieldGet(this, _AssistantStream_activeMessageID, "f")) { throw new OpenAIError("Received thread message event with no active message ID"); } - __classPrivateFieldGet2(this, _AssistantStream_messageSnapshots, "f")[__classPrivateFieldGet2(this, _AssistantStream_activeMessageID, "f")] = accumulatedMessage; + __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, "f")[__classPrivateFieldGet(this, _AssistantStream_activeMessageID, "f")] = accumulatedMessage; for (const content of newContent) { const snapshotContent = accumulatedMessage.content[content.index]; if (snapshotContent?.type === "text") { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "textCreated", snapshotContent.text); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "textCreated", snapshotContent.text); } } switch (event.event) { case "thread.message.created": { - __classPrivateFieldSet2(this, _AssistantStream_currentContentIndex, void 0, "f"); - __classPrivateFieldSet2(this, _AssistantStream_currentContent, void 0, "f"); - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "messageCreated", event.data); + __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, void 0, "f"); + __classPrivateFieldSet(this, _AssistantStream_currentContent, void 0, "f"); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "messageCreated", event.data); break; } case "thread.message.in_progress": { break; } case "thread.message.delta": { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "messageDelta", event.data.delta, accumulatedMessage); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "messageDelta", event.data.delta, accumulatedMessage); if (event.data.delta.content) { for (const content of event.data.delta.content) { if (content.type === "text" && content.text) { const textDelta = content.text; const snapshot = accumulatedMessage.content[content.index]; if (snapshot && snapshot.type === "text") { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "textDelta", textDelta, snapshot.text); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "textDelta", textDelta, snapshot.text); } else { throw new Error("The snapshot associated with this text delta is not text or missing"); } } - if (content.index !== __classPrivateFieldGet2(this, _AssistantStream_currentContentIndex, "f")) { - if (__classPrivateFieldGet2(this, _AssistantStream_currentContent, "f")) { - switch (__classPrivateFieldGet2(this, _AssistantStream_currentContent, "f").type) { + if (content.index !== __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, "f")) { + if (__classPrivateFieldGet(this, _AssistantStream_currentContent, "f")) { + switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, "f").type) { case "text": { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "textDone", __classPrivateFieldGet2(this, _AssistantStream_currentContent, "f").text, __classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f")); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "textDone", __classPrivateFieldGet(this, _AssistantStream_currentContent, "f").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f")); break; } case "image_file": { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "imageFileDone", __classPrivateFieldGet2(this, _AssistantStream_currentContent, "f").image_file, __classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f")); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "imageFileDone", __classPrivateFieldGet(this, _AssistantStream_currentContent, "f").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f")); break; } } } - __classPrivateFieldSet2(this, _AssistantStream_currentContentIndex, content.index, "f"); + __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, "f"); } - __classPrivateFieldSet2(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], "f"); + __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], "f"); } } break; } case "thread.message.completed": case "thread.message.incomplete": { - if (__classPrivateFieldGet2(this, _AssistantStream_currentContentIndex, "f") !== void 0) { - const currentContent = event.data.content[__classPrivateFieldGet2(this, _AssistantStream_currentContentIndex, "f")]; + if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, "f") !== void 0) { + const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, "f")]; if (currentContent) { switch (currentContent.type) { case "image_file": { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "imageFileDone", currentContent.image_file, __classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f")); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "imageFileDone", currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f")); break; } case "text": { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "textDone", currentContent.text, __classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f")); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "textDone", currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f")); break; } } } } - if (__classPrivateFieldGet2(this, _AssistantStream_messageSnapshot, "f")) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "messageDone", event.data); + if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, "f")) { + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "messageDone", event.data); } - __classPrivateFieldSet2(this, _AssistantStream_currentContentIndex, void 0, "f"); - __classPrivateFieldSet2(this, _AssistantStream_currentContent, void 0, "f"); - __classPrivateFieldSet2(this, _AssistantStream_messageSnapshot, void 0, "f"); - __classPrivateFieldSet2(this, _AssistantStream_activeMessageID, void 0, "f"); + __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, void 0, "f"); + __classPrivateFieldSet(this, _AssistantStream_currentContent, void 0, "f"); + __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, void 0, "f"); + __classPrivateFieldSet(this, _AssistantStream_activeMessageID, void 0, "f"); } } }, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep2(event, runStepID) { - const accumulatedRunStep = __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_accumulateRunStep).call(this, event, runStepID); - __classPrivateFieldSet2(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, "f"); + const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_accumulateRunStep).call(this, event, runStepID); + __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, "f"); switch (event.event) { case "thread.run.step.created": { - __classPrivateFieldSet2(this, _AssistantStream_currentToolCallIndex, void 0, "f"); - __classPrivateFieldSet2(this, _AssistantStream_currentToolCall, void 0, "f"); - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "runStepCreated", event.data); + __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, void 0, "f"); + __classPrivateFieldSet(this, _AssistantStream_currentToolCall, void 0, "f"); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "runStepCreated", event.data); break; } case "thread.run.step.delta": { const delta = event.data.delta; if (delta.step_details && delta.step_details.type === "tool_calls" && delta.step_details.tool_calls && accumulatedRunStep.step_details.type === "tool_calls") { for (const toolCall of delta.step_details.tool_calls) { - if (toolCall.index === __classPrivateFieldGet2(this, _AssistantStream_currentToolCallIndex, "f")) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "toolCallDelta", toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]); + if (toolCall.index === __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, "f")) { + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "toolCallDelta", toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]); } else { - if (__classPrivateFieldGet2(this, _AssistantStream_currentToolCall, "f")) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "toolCallDone", __classPrivateFieldGet2(this, _AssistantStream_currentToolCall, "f")); + if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, "f")) { + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "toolCallDone", __classPrivateFieldGet(this, _AssistantStream_currentToolCall, "f")); } - __classPrivateFieldSet2(this, _AssistantStream_currentToolCallIndex, toolCall.index, "f"); - __classPrivateFieldSet2(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], "f"); - if (__classPrivateFieldGet2(this, _AssistantStream_currentToolCall, "f")) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "toolCallCreated", __classPrivateFieldGet2(this, _AssistantStream_currentToolCall, "f")); + __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, "f"); + __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], "f"); + if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, "f")) { + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "toolCallCreated", __classPrivateFieldGet(this, _AssistantStream_currentToolCall, "f")); } } } } - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "runStepDelta", event.data.delta, accumulatedRunStep); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "runStepDelta", event.data.delta, accumulatedRunStep); break; } case "thread.run.step.completed": case "thread.run.step.failed": case "thread.run.step.cancelled": case "thread.run.step.expired": { - __classPrivateFieldSet2(this, _AssistantStream_currentRunStepSnapshot, void 0, "f"); - __classPrivateFieldSet2(this, _AssistantStream_activeRunStepID, void 0, "f"); + __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, void 0, "f"); + __classPrivateFieldSet(this, _AssistantStream_activeRunStepID, void 0, "f"); const details = event.data.step_details; - if (details.type === "tool_calls" && __classPrivateFieldGet2(this, _AssistantStream_currentToolCall, "f")) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "toolCallDone", __classPrivateFieldGet2(this, _AssistantStream_currentToolCall, "f")); + if (details.type === "tool_calls" && __classPrivateFieldGet(this, _AssistantStream_currentToolCall, "f")) { + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "toolCallDone", __classPrivateFieldGet(this, _AssistantStream_currentToolCall, "f")); } - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "runStepDone", event.data, accumulatedRunStep); - __classPrivateFieldSet2(this, _AssistantStream_currentToolCallIndex, void 0, "f"); - __classPrivateFieldSet2(this, _AssistantStream_currentToolCall, void 0, "f"); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "runStepDone", event.data, accumulatedRunStep); + __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, void 0, "f"); + __classPrivateFieldSet(this, _AssistantStream_currentToolCall, void 0, "f"); break; } case "thread.run.step.in_progress": { @@ -33773,39 +15972,39 @@ var init_AssistantStream = __esm({ } this._emit(event, ...args); }, _AssistantStream_handleEvent = function _AssistantStream_handleEvent2(event) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "event", event); + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "event", event); }, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep2(event, runStepID) { switch (event.event) { case "thread.run.step.created": { - __classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f")[runStepID] = event.data; + __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f")[runStepID] = event.data; return event.data; } case "thread.run.step.delta": { - const snapshot = __classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f")[runStepID]; + const snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f")[runStepID]; if (!snapshot) { throw new Error("Received a RunStepDelta before creation of a snapshot"); } const delta = event.data.delta; if (delta) { - if (hasOwn2(delta, "id")) { + if (hasOwn(delta, "id")) { throw new OpenAIError("Run-step deltas must not contain an id field"); } const accumulated = accumulateAssistantStreamDelta(snapshot, delta, true); - __classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f")[runStepID] = accumulated; + __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f")[runStepID] = accumulated; } - return __classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f")[runStepID]; + return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f")[runStepID]; } case "thread.run.step.completed": case "thread.run.step.failed": case "thread.run.step.cancelled": case "thread.run.step.expired": case "thread.run.step.in_progress": { - __classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f")[runStepID] = event.data; + __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f")[runStepID] = event.data; break; } } - if (__classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f")[runStepID]) { - return __classPrivateFieldGet2(this, _AssistantStream_runStepSnapshots, "f")[runStepID]; + if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f")[runStepID]) { + return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, "f")[runStepID]; } throw new Error("No snapshot available"); }, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage2(event, snapshot) { @@ -33824,9 +16023,9 @@ var init_AssistantStream = __esm({ const cacheArrays = !isAssistantStreamValueExternallyMutable(snapshot); const commitProjection = createAssistantStreamArrayDeltaCommit(snapshot.content, data.delta.content, "content", cacheArrays); for (const contentElement of data.delta.content) { - if (hasOwn2(snapshot.content, contentElement.index)) { + if (hasOwn(snapshot.content, contentElement.index)) { const currentContent = snapshot.content[contentElement.index]; - snapshot.content[contentElement.index] = __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_accumulateContent).call(this, contentElement, currentContent, cacheArrays); + snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_accumulateContent).call(this, contentElement, currentContent, cacheArrays); } else { defineAssistantStreamArrayEntry(snapshot.content, contentElement.index, contentElement); newContent.push(contentElement); @@ -33849,7 +16048,7 @@ var init_AssistantStream = __esm({ }, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent2(contentElement, currentContent, cacheArrays) { return accumulateAssistantStreamDelta(currentContent, contentElement, cacheArrays); }, _AssistantStream_handleRun = function _AssistantStream_handleRun2(event) { - __classPrivateFieldSet2(this, _AssistantStream_currentRunSnapshot, event.data, "f"); + __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, "f"); switch (event.event) { case "thread.run.created": { break; @@ -33866,12 +16065,12 @@ var init_AssistantStream = __esm({ case "thread.run.completed": case "thread.run.expired": case "thread.run.incomplete": { - __classPrivateFieldSet2(this, _AssistantStream_finalRun, event.data, "f"); - if (__classPrivateFieldGet2(this, _AssistantStream_currentToolCall, "f")) { - __classPrivateFieldGet2(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "toolCallDone", __classPrivateFieldGet2(this, _AssistantStream_currentToolCall, "f")); + __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, "f"); + if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, "f")) { + __classPrivateFieldGet(this, _AssistantStream_instances, "m", _AssistantStream_emitExposed).call(this, "toolCallDone", __classPrivateFieldGet(this, _AssistantStream_currentToolCall, "f")); } - __classPrivateFieldSet2(this, _AssistantStream_currentToolCallIndex, void 0, "f"); - __classPrivateFieldSet2(this, _AssistantStream_currentToolCall, void 0, "f"); + __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, void 0, "f"); + __classPrivateFieldSet(this, _AssistantStream_currentToolCall, void 0, "f"); break; } case "thread.run.cancelling": { @@ -33912,7 +16111,7 @@ function sleepUntilAborted(milliseconds, signal) { settled = true; cleanup(); try { - const error = new APIUserAbortError2(); + const error = new APIUserAbortError(); Object.defineProperty(error, "cause", { value: signal.reason, writable: true, @@ -33955,7 +16154,7 @@ function sleepUntilAborted(milliseconds, signal) { }); } async function pollWithResponse(retrieve, intermediateStatuses, terminalStatuses, options) { - const headers = buildHeaders2([ + const headers = buildHeaders([ options?.headers, { "X-Stainless-Poll-Helper": "true", @@ -33980,7 +16179,7 @@ async function pollWithResponse(retrieve, intermediateStatuses, terminalStatuses } } const signal = options && Object.prototype.propertyIsEnumerable.call(options, "signal") ? options.signal : void 0; - await (signal ? sleepUntilAborted(sleepInterval, signal) : sleep2(sleepInterval)); + await (signal ? sleepUntilAborted(sleepInterval, signal) : sleep(sleepInterval)); } else if (terminalStatuses.includes(status)) { return data; } @@ -33988,9 +16187,9 @@ async function pollWithResponse(retrieve, intermediateStatuses, terminalStatuses } var init_polling = __esm({ "node_modules/openai/lib/polling.mjs"() { - init_error3(); - init_headers3(); - init_sleep2(); + init_error(); + init_headers(); + init_sleep(); } }); @@ -34011,26 +16210,26 @@ var init_assistant_run_polling = __esm({ var Runs; var init_runs = __esm({ "node_modules/openai/resources/beta/threads/runs/runs.mjs"() { - init_resource2(); + init_resource(); init_steps(); init_steps(); - init_pagination2(); - init_headers3(); + init_pagination(); + init_headers(); init_AssistantStream(); init_assistant_run_polling(); - init_path2(); - Runs = class extends APIResource2 { + init_path(); + Runs = class extends APIResource { constructor() { super(...arguments); this.steps = new Steps(this._client); } create(threadID, params, options) { const { include, ...body } = params; - return this._client.post(path3`/threads/${threadID}/runs`, { + return this._client.post(path`/threads/${threadID}/runs`, { query: { include }, body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), stream: params.stream ?? false, __synthesizeEventData: true, __security: { bearerAuth: true } @@ -34043,9 +16242,9 @@ var init_runs = __esm({ */ retrieve(runID, params, options) { const { thread_id } = params; - return this._client.get(path3`/threads/${thread_id}/runs/${runID}`, { + return this._client.get(path`/threads/${thread_id}/runs/${runID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -34056,10 +16255,10 @@ var init_runs = __esm({ */ update(runID, params, options) { const { thread_id, ...body } = params; - return this._client.post(path3`/threads/${thread_id}/runs/${runID}`, { + return this._client.post(path`/threads/${thread_id}/runs/${runID}`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -34069,10 +16268,10 @@ var init_runs = __esm({ * @deprecated The Assistants API is deprecated in favor of the Responses API */ list(threadID, query = {}, options) { - return this._client.getAPIList(path3`/threads/${threadID}/runs`, CursorPage, { + return this._client.getAPIList(path`/threads/${threadID}/runs`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -34083,9 +16282,9 @@ var init_runs = __esm({ */ cancel(runID, params, options) { const { thread_id } = params; - return this._client.post(path3`/threads/${thread_id}/runs/${runID}/cancel`, { + return this._client.post(path`/threads/${thread_id}/runs/${runID}/cancel`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -34122,10 +16321,10 @@ var init_runs = __esm({ } submitToolOutputs(runID, params, options) { const { thread_id, ...body } = params; - return this._client.post(path3`/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, { + return this._client.post(path`/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), stream: params.stream ?? false, __synthesizeEventData: true, __security: { bearerAuth: true } @@ -34154,22 +16353,22 @@ var init_runs = __esm({ }); // node_modules/openai/resources/beta/threads/threads.mjs -var Threads3; -var init_threads3 = __esm({ +var Threads2; +var init_threads2 = __esm({ "node_modules/openai/resources/beta/threads/threads.mjs"() { - init_resource2(); - init_messages4(); - init_messages4(); + init_resource(); + init_messages2(); + init_messages2(); init_runs(); init_runs(); - init_headers3(); + init_headers(); init_AssistantStream(); - init_path2(); - Threads3 = class extends APIResource2 { + init_path(); + Threads2 = class extends APIResource { constructor() { super(...arguments); this.runs = new Runs(this._client); - this.messages = new Messages4(this._client); + this.messages = new Messages2(this._client); } /** * Create a thread. @@ -34180,7 +16379,7 @@ var init_threads3 = __esm({ return this._client.post("/threads", { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -34190,9 +16389,9 @@ var init_threads3 = __esm({ * @deprecated The Assistants API is deprecated in favor of the Responses API */ retrieve(threadID, options) { - return this._client.get(path3`/threads/${threadID}`, { + return this._client.get(path`/threads/${threadID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -34202,10 +16401,10 @@ var init_threads3 = __esm({ * @deprecated The Assistants API is deprecated in favor of the Responses API */ update(threadID, body, options) { - return this._client.post(path3`/threads/${threadID}`, { + return this._client.post(path`/threads/${threadID}`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -34215,9 +16414,9 @@ var init_threads3 = __esm({ * @deprecated The Assistants API is deprecated in favor of the Responses API */ delete(threadID, options) { - return this._client.delete(path3`/threads/${threadID}`, { + return this._client.delete(path`/threads/${threadID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -34225,7 +16424,7 @@ var init_threads3 = __esm({ return this._client.post("/threads/runs", { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), stream: body.stream ?? false, __synthesizeEventData: true, __security: { bearerAuth: true } @@ -34247,54 +16446,54 @@ var init_threads3 = __esm({ return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options); } }; - Threads3.Runs = Runs; - Threads3.Messages = Messages4; + Threads2.Runs = Runs; + Threads2.Messages = Messages2; } }); // node_modules/openai/resources/beta/beta.mjs -var Beta2; -var init_beta2 = __esm({ +var Beta; +var init_beta = __esm({ "node_modules/openai/resources/beta/beta.mjs"() { - init_resource2(); + init_resource(); init_assistants(); init_assistants(); init_realtime(); init_realtime(); - init_agents2(); - init_agents2(); + init_agents(); + init_agents(); init_chatkit(); init_chatkit(); init_responses(); init_responses(); - init_threads3(); - init_threads3(); - Beta2 = class extends APIResource2 { + init_threads2(); + init_threads2(); + Beta = class extends APIResource { constructor() { super(...arguments); this.realtime = new Realtime(this._client); - this.agents = new Agents2(this._client); + this.agents = new Agents(this._client); this.responses = new Responses(this._client); this.chatkit = new ChatKit(this._client); this.assistants = new Assistants(this._client); - this.threads = new Threads3(this._client); + this.threads = new Threads2(this._client); } }; - Beta2.Realtime = Realtime; - Beta2.Agents = Agents2; - Beta2.Responses = Responses; - Beta2.ChatKit = ChatKit; - Beta2.Assistants = Assistants; - Beta2.Threads = Threads3; + Beta.Realtime = Realtime; + Beta.Agents = Agents; + Beta.Responses = Responses; + Beta.ChatKit = ChatKit; + Beta.Assistants = Assistants; + Beta.Threads = Threads2; } }); // node_modules/openai/resources/completions.mjs -var Completions3; -var init_completions4 = __esm({ +var Completions2; +var init_completions3 = __esm({ "node_modules/openai/resources/completions.mjs"() { - init_resource2(); - Completions3 = class extends APIResource2 { + init_resource(); + Completions2 = class extends APIResource { create(body, options) { return this._client.post("/completions", { body, @@ -34311,18 +16510,18 @@ var init_completions4 = __esm({ var Content; var init_content = __esm({ "node_modules/openai/resources/containers/files/content.mjs"() { - init_resource2(); - init_headers3(); - init_path2(); - Content = class extends APIResource2 { + init_resource(); + init_headers(); + init_path(); + Content = class extends APIResource { /** * Retrieve Container File Content */ retrieve(fileID, params, options) { const { container_id } = params; - return this._client.get(path3`/containers/${container_id}/files/${fileID}/content`, { + return this._client.get(path`/containers/${container_id}/files/${fileID}/content`, { ...options, - headers: buildHeaders2([{ Accept: "application/binary" }, options?.headers]), + headers: buildHeaders([{ Accept: "application/binary" }, options?.headers]), __security: { bearerAuth: true }, __binaryResponse: true }); @@ -34332,17 +16531,17 @@ var init_content = __esm({ }); // node_modules/openai/resources/containers/files/files.mjs -var Files4; -var init_files4 = __esm({ +var Files2; +var init_files2 = __esm({ "node_modules/openai/resources/containers/files/files.mjs"() { - init_resource2(); + init_resource(); init_content(); init_content(); - init_pagination2(); - init_headers3(); - init_uploads3(); - init_path2(); - Files4 = class extends APIResource2 { + init_pagination(); + init_headers(); + init_uploads(); + init_path(); + Files2 = class extends APIResource { constructor() { super(...arguments); this.content = new Content(this._client); @@ -34354,14 +16553,14 @@ var init_files4 = __esm({ * a JSON request with a file ID. */ create(containerID, body, options) { - return this._client.post(path3`/containers/${containerID}/files`, maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); + return this._client.post(path`/containers/${containerID}/files`, maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); } /** * Retrieve Container File */ retrieve(fileID, params, options) { const { container_id } = params; - return this._client.get(path3`/containers/${container_id}/files/${fileID}`, { + return this._client.get(path`/containers/${container_id}/files/${fileID}`, { ...options, __security: { bearerAuth: true } }); @@ -34370,7 +16569,7 @@ var init_files4 = __esm({ * List Container files */ list(containerID, query = {}, options) { - return this._client.getAPIList(path3`/containers/${containerID}/files`, CursorPage, { + return this._client.getAPIList(path`/containers/${containerID}/files`, CursorPage, { query, ...options, __security: { bearerAuth: true } @@ -34381,14 +16580,14 @@ var init_files4 = __esm({ */ delete(fileID, params, options) { const { container_id } = params; - return this._client.delete(path3`/containers/${container_id}/files/${fileID}`, { + return this._client.delete(path`/containers/${container_id}/files/${fileID}`, { ...options, - headers: buildHeaders2([{ Accept: "*/*" }, options?.headers]), + headers: buildHeaders([{ Accept: "*/*" }, options?.headers]), __security: { bearerAuth: true } }); } }; - Files4.Content = Content; + Files2.Content = Content; } }); @@ -34396,16 +16595,16 @@ var init_files4 = __esm({ var Containers; var init_containers = __esm({ "node_modules/openai/resources/containers/containers.mjs"() { - init_resource2(); - init_files4(); - init_files4(); - init_pagination2(); - init_headers3(); - init_path2(); - Containers = class extends APIResource2 { + init_resource(); + init_files2(); + init_files2(); + init_pagination(); + init_headers(); + init_path(); + Containers = class extends APIResource { constructor() { super(...arguments); - this.files = new Files4(this._client); + this.files = new Files2(this._client); } /** * Create Container @@ -34417,7 +16616,7 @@ var init_containers = __esm({ * Retrieve Container */ retrieve(containerID, options) { - return this._client.get(path3`/containers/${containerID}`, { + return this._client.get(path`/containers/${containerID}`, { ...options, __security: { bearerAuth: true } }); @@ -34436,14 +16635,14 @@ var init_containers = __esm({ * Delete Container */ delete(containerID, options) { - return this._client.delete(path3`/containers/${containerID}`, { + return this._client.delete(path`/containers/${containerID}`, { ...options, - headers: buildHeaders2([{ Accept: "*/*" }, options?.headers]), + headers: buildHeaders([{ Accept: "*/*" }, options?.headers]), __security: { bearerAuth: true } }); } }; - Containers.Files = Files4; + Containers.Files = Files2; } }); @@ -34451,9 +16650,9 @@ var init_containers = __esm({ var ContentProvenanceChecks; var init_content_provenance_checks = __esm({ "node_modules/openai/resources/content-provenance-checks.mjs"() { - init_resource2(); - init_uploads3(); - ContentProvenanceChecks = class extends APIResource2 { + init_resource(); + init_uploads(); + ContentProvenanceChecks = class extends APIResource { /** * Check whether an image or audio file contains known OpenAI provenance signals. * [Learn more about content provenance](https://developers.openai.com/api/docs/guides/content-provenance). @@ -34466,7 +16665,7 @@ var init_content_provenance_checks = __esm({ * company's model, which the tool currently does not detect. */ create(body, options) { - return this._client.post("/content_provenance_checks", multipartFormRequestOptions2({ body, ...options, __security: { bearerAuth: true } }, this._client)); + return this._client.post("/content_provenance_checks", multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); } }; } @@ -34476,16 +16675,16 @@ var init_content_provenance_checks = __esm({ var Items4; var init_items4 = __esm({ "node_modules/openai/resources/conversations/items.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Items4 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Items4 = class extends APIResource { /** * Create items in a conversation with the given ID. */ create(conversationID, params, options) { const { include, ...body } = params; - return this._client.post(path3`/conversations/${conversationID}/items`, { + return this._client.post(path`/conversations/${conversationID}/items`, { query: { include }, body, ...options, @@ -34497,7 +16696,7 @@ var init_items4 = __esm({ */ retrieve(itemID, params, options) { const { conversation_id, ...query } = params; - return this._client.get(path3`/conversations/${conversation_id}/items/${itemID}`, { + return this._client.get(path`/conversations/${conversation_id}/items/${itemID}`, { query, ...options, __security: { bearerAuth: true } @@ -34507,14 +16706,14 @@ var init_items4 = __esm({ * List all items for a conversation with the given ID. */ list(conversationID, query = {}, options) { - return this._client.getAPIList(path3`/conversations/${conversationID}/items`, ConversationCursorPage, { query, ...options, __security: { bearerAuth: true } }); + return this._client.getAPIList(path`/conversations/${conversationID}/items`, ConversationCursorPage, { query, ...options, __security: { bearerAuth: true } }); } /** * Delete an item from a conversation with the given IDs. */ delete(itemID, params, options) { const { conversation_id } = params; - return this._client.delete(path3`/conversations/${conversation_id}/items/${itemID}`, { + return this._client.delete(path`/conversations/${conversation_id}/items/${itemID}`, { ...options, __security: { bearerAuth: true } }); @@ -34527,11 +16726,11 @@ var init_items4 = __esm({ var Conversations; var init_conversations = __esm({ "node_modules/openai/resources/conversations/conversations.mjs"() { - init_resource2(); + init_resource(); init_items4(); init_items4(); - init_path2(); - Conversations = class extends APIResource2 { + init_path(); + Conversations = class extends APIResource { constructor() { super(...arguments); this.items = new Items4(this._client); @@ -34546,7 +16745,7 @@ var init_conversations = __esm({ * Get a conversation */ retrieve(conversationID, options) { - return this._client.get(path3`/conversations/${conversationID}`, { + return this._client.get(path`/conversations/${conversationID}`, { ...options, __security: { bearerAuth: true } }); @@ -34555,7 +16754,7 @@ var init_conversations = __esm({ * Update a conversation */ update(conversationID, body, options) { - return this._client.post(path3`/conversations/${conversationID}`, { + return this._client.post(path`/conversations/${conversationID}`, { body, ...options, __security: { bearerAuth: true } @@ -34565,7 +16764,7 @@ var init_conversations = __esm({ * Delete a conversation. Items in the conversation will not be deleted. */ delete(conversationID, options) { - return this._client.delete(path3`/conversations/${conversationID}`, { + return this._client.delete(path`/conversations/${conversationID}`, { ...options, __security: { bearerAuth: true } }); @@ -34580,7 +16779,7 @@ function createEmbedding(client, body, options) { const hasUserProvidedEncodingFormat = !!body.encoding_format; const encodingFormat = hasUserProvidedEncodingFormat ? body.encoding_format : "base64"; if (hasUserProvidedEncodingFormat) { - loggerFor2(client).debug("embeddings/user defined encoding_format:", body.encoding_format); + loggerFor(client).debug("embeddings/user defined encoding_format:", body.encoding_format); } const optimizedBody = { ...body, encoding_format: encodingFormat }; const requestOptions = { @@ -34592,7 +16791,7 @@ function createEmbedding(client, body, options) { if (hasUserProvidedEncodingFormat) { return response; } - loggerFor2(client).debug("embeddings/decoding base64 embeddings from base64"); + loggerFor(client).debug("embeddings/decoding base64 embeddings from base64"); return response._thenUnwrap((data) => { const embeddings = data?.data; if (embeddings !== void 0) { @@ -34616,7 +16815,7 @@ function createEmbedding(client, body, options) { } var init_embeddings = __esm({ "node_modules/openai/lib/embeddings.mjs"() { - init_utils4(); + init_utils2(); } }); @@ -34624,9 +16823,9 @@ var init_embeddings = __esm({ var Embeddings; var init_embeddings2 = __esm({ "node_modules/openai/resources/embeddings.mjs"() { - init_resource2(); + init_resource(); init_embeddings(); - Embeddings = class extends APIResource2 { + Embeddings = class extends APIResource { create(body, options) { return createEmbedding(this._client, body, options); } @@ -34638,16 +16837,16 @@ var init_embeddings2 = __esm({ var OutputItems; var init_output_items = __esm({ "node_modules/openai/resources/evals/runs/output-items.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - OutputItems = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + OutputItems = class extends APIResource { /** * Get an evaluation run output item by ID. */ retrieve(outputItemID, params, options) { const { eval_id, run_id } = params; - return this._client.get(path3`/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, { + return this._client.get(path`/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, { ...options, __security: { bearerAuth: true } }); @@ -34657,7 +16856,7 @@ var init_output_items = __esm({ */ list(runID, params, options) { const { eval_id, ...query } = params; - return this._client.getAPIList(path3`/evals/${eval_id}/runs/${runID}/output_items`, CursorPage, { query, ...options, __security: { bearerAuth: true } }); + return this._client.getAPIList(path`/evals/${eval_id}/runs/${runID}/output_items`, CursorPage, { query, ...options, __security: { bearerAuth: true } }); } }; } @@ -34667,12 +16866,12 @@ var init_output_items = __esm({ var Runs2; var init_runs2 = __esm({ "node_modules/openai/resources/evals/runs/runs.mjs"() { - init_resource2(); + init_resource(); init_output_items(); init_output_items(); - init_pagination2(); - init_path2(); - Runs2 = class extends APIResource2 { + init_pagination(); + init_path(); + Runs2 = class extends APIResource { constructor() { super(...arguments); this.outputItems = new OutputItems(this._client); @@ -34683,7 +16882,7 @@ var init_runs2 = __esm({ * schema specified in the config of the evaluation. */ create(evalID, body, options) { - return this._client.post(path3`/evals/${evalID}/runs`, { + return this._client.post(path`/evals/${evalID}/runs`, { body, ...options, __security: { bearerAuth: true } @@ -34694,7 +16893,7 @@ var init_runs2 = __esm({ */ retrieve(runID, params, options) { const { eval_id } = params; - return this._client.get(path3`/evals/${eval_id}/runs/${runID}`, { + return this._client.get(path`/evals/${eval_id}/runs/${runID}`, { ...options, __security: { bearerAuth: true } }); @@ -34703,7 +16902,7 @@ var init_runs2 = __esm({ * Get a list of runs for an evaluation. */ list(evalID, query = {}, options) { - return this._client.getAPIList(path3`/evals/${evalID}/runs`, CursorPage, { + return this._client.getAPIList(path`/evals/${evalID}/runs`, CursorPage, { query, ...options, __security: { bearerAuth: true } @@ -34714,7 +16913,7 @@ var init_runs2 = __esm({ */ delete(runID, params, options) { const { eval_id } = params; - return this._client.delete(path3`/evals/${eval_id}/runs/${runID}`, { + return this._client.delete(path`/evals/${eval_id}/runs/${runID}`, { ...options, __security: { bearerAuth: true } }); @@ -34724,7 +16923,7 @@ var init_runs2 = __esm({ */ cancel(runID, params, options) { const { eval_id } = params; - return this._client.post(path3`/evals/${eval_id}/runs/${runID}`, { + return this._client.post(path`/evals/${eval_id}/runs/${runID}`, { ...options, __security: { bearerAuth: true } }); @@ -34738,12 +16937,12 @@ var init_runs2 = __esm({ var Evals; var init_evals = __esm({ "node_modules/openai/resources/evals/evals.mjs"() { - init_resource2(); + init_resource(); init_runs2(); init_runs2(); - init_pagination2(); - init_path2(); - Evals = class extends APIResource2 { + init_pagination(); + init_path(); + Evals = class extends APIResource { constructor() { super(...arguments); this.runs = new Runs2(this._client); @@ -34763,13 +16962,13 @@ var init_evals = __esm({ * Get an evaluation by ID. */ retrieve(evalID, options) { - return this._client.get(path3`/evals/${evalID}`, { ...options, __security: { bearerAuth: true } }); + return this._client.get(path`/evals/${evalID}`, { ...options, __security: { bearerAuth: true } }); } /** * Update certain properties of an evaluation. */ update(evalID, body, options) { - return this._client.post(path3`/evals/${evalID}`, { body, ...options, __security: { bearerAuth: true } }); + return this._client.post(path`/evals/${evalID}`, { body, ...options, __security: { bearerAuth: true } }); } /** * List evaluations for a project. @@ -34785,7 +16984,7 @@ var init_evals = __esm({ * Delete an evaluation. */ delete(evalID, options) { - return this._client.delete(path3`/evals/${evalID}`, { ...options, __security: { bearerAuth: true } }); + return this._client.delete(path`/evals/${evalID}`, { ...options, __security: { bearerAuth: true } }); } }; Evals.Runs = Runs2; @@ -34798,10 +16997,10 @@ async function waitForFileProcessing(resource, id, pollInterval, maxWait) { const start = performance.now(); let file2 = await resource.retrieve(id); while (!file2.status || !terminalStates.has(file2.status)) { - await sleep2(pollInterval); + await sleep(pollInterval); file2 = await resource.retrieve(id); if (performance.now() - start > maxWait) { - throw new APIConnectionTimeoutError2({ + throw new APIConnectionTimeoutError({ message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.` }); } @@ -34810,22 +17009,22 @@ async function waitForFileProcessing(resource, id, pollInterval, maxWait) { } var init_file_processing = __esm({ "node_modules/openai/lib/file-processing.mjs"() { - init_error4(); - init_sleep2(); + init_error2(); + init_sleep(); } }); // node_modules/openai/resources/files.mjs -var Files5; -var init_files5 = __esm({ +var Files3; +var init_files3 = __esm({ "node_modules/openai/resources/files.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_uploads3(); + init_resource(); + init_pagination(); + init_headers(); + init_uploads(); init_file_processing(); - init_path2(); - Files5 = class extends APIResource2 { + init_path(); + Files3 = class extends APIResource { /** * Upload a file that can be used across various endpoints. Individual files can be * up to 512 MB, and each project can store up to 2.5 TB of files in total. There @@ -34856,13 +17055,13 @@ var init_files5 = __esm({ * storage limits. */ create(body, options) { - return this._client.post("/files", multipartFormRequestOptions2({ body, ...options, __security: { bearerAuth: true } }, this._client)); + return this._client.post("/files", multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); } /** * Returns information about a specific file. */ retrieve(fileID, options) { - return this._client.get(path3`/files/${fileID}`, { ...options, __security: { bearerAuth: true } }); + return this._client.get(path`/files/${fileID}`, { ...options, __security: { bearerAuth: true } }); } /** * Returns a list of files. @@ -34878,15 +17077,15 @@ var init_files5 = __esm({ * Delete a file and remove it from all vector stores. */ delete(fileID, options) { - return this._client.delete(path3`/files/${fileID}`, { ...options, __security: { bearerAuth: true } }); + return this._client.delete(path`/files/${fileID}`, { ...options, __security: { bearerAuth: true } }); } /** * Returns a response containing the contents of the specified file. */ content(fileID, options) { - return this._client.get(path3`/files/${fileID}/content`, { + return this._client.get(path`/files/${fileID}/content`, { ...options, - headers: buildHeaders2([{ Accept: "application/binary" }, options?.headers]), + headers: buildHeaders([{ Accept: "application/binary" }, options?.headers]), __security: { bearerAuth: true }, __binaryResponse: true }); @@ -34905,8 +17104,8 @@ var init_files5 = __esm({ var Methods; var init_methods = __esm({ "node_modules/openai/resources/fine-tuning/methods.mjs"() { - init_resource2(); - Methods = class extends APIResource2 { + init_resource(); + Methods = class extends APIResource { }; } }); @@ -34915,8 +17114,8 @@ var init_methods = __esm({ var Graders; var init_graders = __esm({ "node_modules/openai/resources/fine-tuning/alpha/graders.mjs"() { - init_resource2(); - Graders = class extends APIResource2 { + init_resource(); + Graders = class extends APIResource { /** * Run a grader. * @@ -34973,10 +17172,10 @@ var init_graders = __esm({ var Alpha; var init_alpha = __esm({ "node_modules/openai/resources/fine-tuning/alpha/alpha.mjs"() { - init_resource2(); + init_resource(); init_graders(); init_graders(); - Alpha = class extends APIResource2 { + Alpha = class extends APIResource { constructor() { super(...arguments); this.graders = new Graders(this._client); @@ -34990,10 +17189,10 @@ var init_alpha = __esm({ var Permissions; var init_permissions = __esm({ "node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Permissions = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Permissions = class extends APIResource { /** * **NOTE:** Calling this endpoint requires an * [admin API key](https://developers.openai.com/api/reference/resources/admin/subresources/organization/subresources/admin_api_keys). @@ -35013,7 +17212,7 @@ var init_permissions = __esm({ * ``` */ create(fineTunedModelCheckpoint, body, options) { - return this._client.getAPIList(path3`/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, Page2, { body, method: "post", ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, Page, { body, method: "post", ...options, __security: { adminAPIKeyAuth: true } }); } /** * **NOTE:** This endpoint requires an @@ -35025,7 +17224,7 @@ var init_permissions = __esm({ * @deprecated Retrieve is deprecated. Please swap to the paginated list method instead. */ retrieve(fineTunedModelCheckpoint, query = {}, options) { - return this._client.get(path3`/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, { + return this._client.get(path`/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, { query, ...options, __security: { adminAPIKeyAuth: true } @@ -35049,7 +17248,7 @@ var init_permissions = __esm({ * ``` */ list(fineTunedModelCheckpoint, query = {}, options) { - return this._client.getAPIList(path3`/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.getAPIList(path`/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, ConversationCursorPage, { query, ...options, __security: { adminAPIKeyAuth: true } }); } /** * **NOTE:** This endpoint requires an @@ -35072,7 +17271,7 @@ var init_permissions = __esm({ */ delete(permissionID, params, options) { const { fine_tuned_model_checkpoint } = params; - return this._client.delete(path3`/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, { ...options, __security: { adminAPIKeyAuth: true } }); + return this._client.delete(path`/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, { ...options, __security: { adminAPIKeyAuth: true } }); } }; } @@ -35082,10 +17281,10 @@ var init_permissions = __esm({ var Checkpoints; var init_checkpoints = __esm({ "node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs"() { - init_resource2(); + init_resource(); init_permissions(); init_permissions(); - Checkpoints = class extends APIResource2 { + Checkpoints = class extends APIResource { constructor() { super(...arguments); this.permissions = new Permissions(this._client); @@ -35099,10 +17298,10 @@ var init_checkpoints = __esm({ var Checkpoints2; var init_checkpoints2 = __esm({ "node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Checkpoints2 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Checkpoints2 = class extends APIResource { /** * List checkpoints for a fine-tuning job. * @@ -35117,7 +17316,7 @@ var init_checkpoints2 = __esm({ * ``` */ list(fineTuningJobID, query = {}, options) { - return this._client.getAPIList(path3`/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, CursorPage, { query, ...options, __security: { bearerAuth: true } }); + return this._client.getAPIList(path`/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, CursorPage, { query, ...options, __security: { bearerAuth: true } }); } }; } @@ -35127,12 +17326,12 @@ var init_checkpoints2 = __esm({ var Jobs; var init_jobs = __esm({ "node_modules/openai/resources/fine-tuning/jobs/jobs.mjs"() { - init_resource2(); + init_resource(); init_checkpoints2(); init_checkpoints2(); - init_pagination2(); - init_path2(); - Jobs = class extends APIResource2 { + init_pagination(); + init_path(); + Jobs = class extends APIResource { constructor() { super(...arguments); this.checkpoints = new Checkpoints2(this._client); @@ -35170,7 +17369,7 @@ var init_jobs = __esm({ * ``` */ retrieve(fineTuningJobID, options) { - return this._client.get(path3`/fine_tuning/jobs/${fineTuningJobID}`, { + return this._client.get(path`/fine_tuning/jobs/${fineTuningJobID}`, { ...options, __security: { bearerAuth: true } }); @@ -35204,7 +17403,7 @@ var init_jobs = __esm({ * ``` */ cancel(fineTuningJobID, options) { - return this._client.post(path3`/fine_tuning/jobs/${fineTuningJobID}/cancel`, { + return this._client.post(path`/fine_tuning/jobs/${fineTuningJobID}/cancel`, { ...options, __security: { bearerAuth: true } }); @@ -35223,7 +17422,7 @@ var init_jobs = __esm({ * ``` */ listEvents(fineTuningJobID, query = {}, options) { - return this._client.getAPIList(path3`/fine_tuning/jobs/${fineTuningJobID}/events`, CursorPage, { query, ...options, __security: { bearerAuth: true } }); + return this._client.getAPIList(path`/fine_tuning/jobs/${fineTuningJobID}/events`, CursorPage, { query, ...options, __security: { bearerAuth: true } }); } /** * Pause a fine-tune job. @@ -35236,7 +17435,7 @@ var init_jobs = __esm({ * ``` */ pause(fineTuningJobID, options) { - return this._client.post(path3`/fine_tuning/jobs/${fineTuningJobID}/pause`, { + return this._client.post(path`/fine_tuning/jobs/${fineTuningJobID}/pause`, { ...options, __security: { bearerAuth: true } }); @@ -35252,7 +17451,7 @@ var init_jobs = __esm({ * ``` */ resume(fineTuningJobID, options) { - return this._client.post(path3`/fine_tuning/jobs/${fineTuningJobID}/resume`, { + return this._client.post(path`/fine_tuning/jobs/${fineTuningJobID}/resume`, { ...options, __security: { bearerAuth: true } }); @@ -35266,7 +17465,7 @@ var init_jobs = __esm({ var FineTuning; var init_fine_tuning = __esm({ "node_modules/openai/resources/fine-tuning/fine-tuning.mjs"() { - init_resource2(); + init_resource(); init_methods(); init_methods(); init_alpha(); @@ -35275,7 +17474,7 @@ var init_fine_tuning = __esm({ init_checkpoints(); init_jobs(); init_jobs(); - FineTuning = class extends APIResource2 { + FineTuning = class extends APIResource { constructor() { super(...arguments); this.methods = new Methods(this._client); @@ -35295,8 +17494,8 @@ var init_fine_tuning = __esm({ var GraderModels; var init_grader_models = __esm({ "node_modules/openai/resources/graders/grader-models.mjs"() { - init_resource2(); - GraderModels = class extends APIResource2 { + init_resource(); + GraderModels = class extends APIResource { }; } }); @@ -35305,10 +17504,10 @@ var init_grader_models = __esm({ var Graders2; var init_graders2 = __esm({ "node_modules/openai/resources/graders/graders.mjs"() { - init_resource2(); + init_resource(); init_grader_models(); init_grader_models(); - Graders2 = class extends APIResource2 { + Graders2 = class extends APIResource { constructor() { super(...arguments); this.graderModels = new GraderModels(this._client); @@ -35322,9 +17521,9 @@ var init_graders2 = __esm({ var Images; var init_images = __esm({ "node_modules/openai/resources/images.mjs"() { - init_resource2(); - init_uploads3(); - Images = class extends APIResource2 { + init_resource(); + init_uploads(); + Images = class extends APIResource { /** * Creates a variation of a given image. This endpoint only supports `dall-e-2`. * @@ -35336,10 +17535,10 @@ var init_images = __esm({ * ``` */ createVariation(body, options) { - return this._client.post("/images/variations", multipartFormRequestOptions2({ body, ...options, __security: { bearerAuth: true } }, this._client)); + return this._client.post("/images/variations", multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); } edit(body, options) { - return this._client.post("/images/edits", multipartFormRequestOptions2({ + return this._client.post("/images/edits", multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false, @@ -35360,13 +17559,13 @@ var init_images = __esm({ }); // node_modules/openai/resources/live/sessions.mjs -var Sessions5; -var init_sessions5 = __esm({ +var Sessions4; +var init_sessions4 = __esm({ "node_modules/openai/resources/live/sessions.mjs"() { - init_resource2(); - init_headers3(); - init_path2(); - Sessions5 = class extends APIResource2 { + init_resource(); + init_headers(); + init_path(); + Sessions4 = class extends APIResource { /** * Accept an incoming SIP call. Supply session with type live, the model, and * startup configuration. Before accepting calls, follow the @@ -35382,10 +17581,10 @@ var init_sessions5 = __esm({ * ``` */ accept(sessionID, body, options) { - return this._client.post(path3`/live/sessions/${sessionID}/accept`, { + return this._client.post(path`/live/sessions/${sessionID}/accept`, { body, ...options, - headers: buildHeaders2([{ Accept: "*/*" }, options?.headers]), + headers: buildHeaders([{ Accept: "*/*" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -35402,9 +17601,9 @@ var init_sessions5 = __esm({ * ``` */ downloadRecording(sessionID, options) { - return this._client.get(path3`/live/sessions/${sessionID}/content`, { + return this._client.get(path`/live/sessions/${sessionID}/content`, { ...options, - headers: buildHeaders2([{ Accept: "application/binary" }, options?.headers]), + headers: buildHeaders([{ Accept: "application/binary" }, options?.headers]), __security: { bearerAuth: true }, __binaryResponse: true }); @@ -35421,7 +17620,7 @@ var init_sessions5 = __esm({ * ``` */ fork(sessionID, body, options) { - return this._client.post(path3`/live/sessions/${sessionID}/fork`, { + return this._client.post(path`/live/sessions/${sessionID}/fork`, { body, ...options, __security: { bearerAuth: true } @@ -35436,9 +17635,9 @@ var init_sessions5 = __esm({ * ``` */ hangup(sessionID, options) { - return this._client.post(path3`/live/sessions/${sessionID}/hangup`, { + return this._client.post(path`/live/sessions/${sessionID}/hangup`, { ...options, - headers: buildHeaders2([{ Accept: "*/*" }, options?.headers]), + headers: buildHeaders([{ Accept: "*/*" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -35454,10 +17653,10 @@ var init_sessions5 = __esm({ * ``` */ refer(sessionID, body, options) { - return this._client.post(path3`/live/sessions/${sessionID}/refer`, { + return this._client.post(path`/live/sessions/${sessionID}/refer`, { body, ...options, - headers: buildHeaders2([{ Accept: "*/*" }, options?.headers]), + headers: buildHeaders([{ Accept: "*/*" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -35473,10 +17672,10 @@ var init_sessions5 = __esm({ * ``` */ reject(sessionID, body, options) { - return this._client.post(path3`/live/sessions/${sessionID}/reject`, { + return this._client.post(path`/live/sessions/${sessionID}/reject`, { body, ...options, - headers: buildHeaders2([{ Accept: "*/*" }, options?.headers]), + headers: buildHeaders([{ Accept: "*/*" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -35488,8 +17687,8 @@ var init_sessions5 = __esm({ var Forks; var init_forks = __esm({ "node_modules/openai/resources/live/forks/forks.mjs"() { - init_resource2(); - Forks = class extends APIResource2 { + init_resource(); + Forks = class extends APIResource { }; } }); @@ -35498,8 +17697,8 @@ var init_forks = __esm({ var Sideband; var init_sideband = __esm({ "node_modules/openai/resources/live/sideband/sideband.mjs"() { - init_resource2(); - Sideband = class extends APIResource2 { + init_resource(); + Sideband = class extends APIResource { }; } }); @@ -35508,19 +17707,19 @@ var init_sideband = __esm({ var Live; var init_live = __esm({ "node_modules/openai/resources/live/live.mjs"() { - init_resource2(); - init_sessions5(); - init_sessions5(); + init_resource(); + init_sessions4(); + init_sessions4(); init_forks(); init_forks(); init_sideband(); init_sideband(); - Live = class extends APIResource2 { + Live = class extends APIResource { constructor() { super(...arguments); this.sideband = new Sideband(this._client); this.forks = new Forks(this._client); - this.sessions = new Sessions5(this._client); + this.sessions = new Sessions4(this._client); } /** * Create a Live WebRTC session. Start with the @@ -35540,38 +17739,38 @@ var init_live = __esm({ }; Live.Sideband = Sideband; Live.Forks = Forks; - Live.Sessions = Sessions5; + Live.Sessions = Sessions4; } }); // node_modules/openai/resources/models.mjs -var Models3; -var init_models4 = __esm({ +var Models; +var init_models2 = __esm({ "node_modules/openai/resources/models.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - Models3 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + Models = class extends APIResource { /** * Retrieves a model instance, providing basic information about the model such as * the owner and permissioning. */ retrieve(model2, options) { - return this._client.get(path3`/models/${model2}`, { ...options, __security: { bearerAuth: true } }); + return this._client.get(path`/models/${model2}`, { ...options, __security: { bearerAuth: true } }); } /** * Lists the currently available models, and provides basic information about each * one such as the owner and availability. */ list(options) { - return this._client.getAPIList("/models", Page2, { ...options, __security: { bearerAuth: true } }); + return this._client.getAPIList("/models", Page, { ...options, __security: { bearerAuth: true } }); } /** * Delete a fine-tuned model. You must have the Owner role in your organization to * delete a model. */ delete(model2, options) { - return this._client.delete(path3`/models/${model2}`, { ...options, __security: { bearerAuth: true } }); + return this._client.delete(path`/models/${model2}`, { ...options, __security: { bearerAuth: true } }); } }; } @@ -35581,8 +17780,8 @@ var init_models4 = __esm({ var Moderations; var init_moderations = __esm({ "node_modules/openai/resources/moderations.mjs"() { - init_resource2(); - Moderations = class extends APIResource2 { + init_resource(); + Moderations = class extends APIResource { /** * Classifies if text and/or image inputs are potentially harmful. Learn more in * the @@ -35608,7 +17807,7 @@ async function encodedMultipartFormRequestOptions(options, client, encodings, ra return { ...options, body: value2, - headers: buildHeaders2([options.headers, { "content-type": encodings[rawBodyField].content_type }]) + headers: buildHeaders([options.headers, { "content-type": encodings[rawBodyField].content_type }]) }; } const encoded = []; @@ -35619,10 +17818,10 @@ async function encodedMultipartFormRequestOptions(options, client, encodings, ra const data = encoding.json ? JSON.stringify(value2) : value2; if (typeof data !== "string") throw new TypeError(`Multipart field ${name} must encode as a string`); - encoded.push([name, makeFile2([data], "", { type: encoding.content_type })]); + encoded.push([name, makeFile([data], "", { type: encoding.content_type })]); delete body[name]; } - const multipart = await multipartFormRequestOptions2({ ...options, body }, client); + const multipart = await multipartFormRequestOptions({ ...options, body }, client); const form = multipart.body; if (!(form instanceof FormData)) { await form.cancel(); @@ -35633,13 +17832,13 @@ async function encodedMultipartFormRequestOptions(options, client, encodings, ra return { ...options, body: form, - headers: buildHeaders2([options.headers, { "content-type": null }]) + headers: buildHeaders([options.headers, { "content-type": null }]) }; } var init_multipart_encoding = __esm({ "node_modules/openai/internal/multipart-encoding.mjs"() { - init_uploads3(); - init_headers3(); + init_uploads(); + init_headers(); } }); @@ -35647,11 +17846,11 @@ var init_multipart_encoding = __esm({ var Calls; var init_calls = __esm({ "node_modules/openai/resources/realtime/calls.mjs"() { - init_resource2(); - init_headers3(); - init_path2(); + init_resource(); + init_headers(); + init_path(); init_multipart_encoding(); - Calls = class extends APIResource2 { + Calls = class extends APIResource { /** * Create a new Realtime API call over WebRTC and receive the SDP answer needed to * complete the peer connection. @@ -35667,7 +17866,7 @@ var init_calls = __esm({ return this._client.post("/realtime/calls", encodedMultipartFormRequestOptions({ body, ...options, - headers: buildHeaders2([{ Accept: "application/sdp" }, options?.headers]), + headers: buildHeaders([{ Accept: "application/sdp" }, options?.headers]), __security: { bearerAuth: true }, __binaryResponse: true }, this._client, { @@ -35687,10 +17886,10 @@ var init_calls = __esm({ * ``` */ accept(callID, body, options) { - return this._client.post(path3`/realtime/calls/${callID}/accept`, { + return this._client.post(path`/realtime/calls/${callID}/accept`, { body, ...options, - headers: buildHeaders2([{ Accept: "*/*" }, options?.headers]), + headers: buildHeaders([{ Accept: "*/*" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -35703,9 +17902,9 @@ var init_calls = __esm({ * ``` */ hangup(callID, options) { - return this._client.post(path3`/realtime/calls/${callID}/hangup`, { + return this._client.post(path`/realtime/calls/${callID}/hangup`, { ...options, - headers: buildHeaders2([{ Accept: "*/*" }, options?.headers]), + headers: buildHeaders([{ Accept: "*/*" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -35720,10 +17919,10 @@ var init_calls = __esm({ * ``` */ refer(callID, body, options) { - return this._client.post(path3`/realtime/calls/${callID}/refer`, { + return this._client.post(path`/realtime/calls/${callID}/refer`, { body, ...options, - headers: buildHeaders2([{ Accept: "*/*" }, options?.headers]), + headers: buildHeaders([{ Accept: "*/*" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -35736,10 +17935,10 @@ var init_calls = __esm({ * ``` */ reject(callID, body = {}, options) { - return this._client.post(path3`/realtime/calls/${callID}/reject`, { + return this._client.post(path`/realtime/calls/${callID}/reject`, { body, ...options, - headers: buildHeaders2([{ Accept: "*/*" }, options?.headers]), + headers: buildHeaders([{ Accept: "*/*" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -35751,8 +17950,8 @@ var init_calls = __esm({ var ClientSecrets; var init_client_secrets = __esm({ "node_modules/openai/resources/realtime/client-secrets.mjs"() { - init_resource2(); - ClientSecrets = class extends APIResource2 { + init_resource(); + ClientSecrets = class extends APIResource { /** * Create a Realtime client secret with an associated session configuration. * @@ -35791,12 +17990,12 @@ var init_client_secrets = __esm({ var Realtime2; var init_realtime2 = __esm({ "node_modules/openai/resources/realtime/realtime.mjs"() { - init_resource2(); + init_resource(); init_calls(); init_calls(); init_client_secrets(); init_client_secrets(); - Realtime2 = class extends APIResource2 { + Realtime2 = class extends APIResource { constructor() { super(...arguments); this.clientSecrets = new ClientSecrets(this._client); @@ -35941,8 +18140,8 @@ function addOutputText(rsp) { } var init_ResponsesParser = __esm({ "node_modules/openai/lib/ResponsesParser.mjs"() { - init_error4(); - init_parser3(); + init_error2(); + init_parser(); } }); @@ -36130,7 +18329,7 @@ var init_canonical_output_text = __esm({ // node_modules/openai/internal/responses/response-accumulator.mjs function validateArrayIndex(collection, index, kind, allowAppend = false) { - if (!Array.isArray(collection) || !Number.isSafeInteger(index) || index < 0 || index > collection.length || (index === collection.length ? !allowAppend || index in collection : !hasOwn2(collection, index))) { + if (!Array.isArray(collection) || !Number.isSafeInteger(index) || index < 0 || index > collection.length || (index === collection.length ? !allowAppend || index in collection : !hasOwn(collection, index))) { throw new OpenAIError(`missing ${kind} at index ${index}`); } } @@ -36152,12 +18351,12 @@ function hasRoutedOutputCallIdentity(output) { return output.type === "function_call" || output.type === "custom_tool_call" || output.type === "shell_call" || output.type === "shell_call_output"; } function getOutputItemIdentityKeys(output, eventType) { - if (!hasOwn2(output, "type") || typeof output.type !== "string") { + if (!hasOwn(output, "type") || typeof output.type !== "string") { throw new OpenAIError(`expected an own output item type for ${eventType}`); } const optionalPlatformID = output.type === "function_call" || output.type === "custom_tool_call"; const identities = []; - if (hasOwn2(output, "id")) { + if (hasOwn(output, "id")) { if (typeof output.id !== "string" || output.id.length === 0) { throw new OpenAIError(`expected a non-empty output item id for ${eventType}`); } @@ -36166,7 +18365,7 @@ function getOutputItemIdentityKeys(output, eventType) { throw new OpenAIError(`expected a non-empty output item id for ${eventType}`); } if (hasRoutedOutputCallIdentity(output)) { - if (!hasOwn2(output, "call_id") || typeof output.call_id !== "string" || output.call_id.length === 0) { + if (!hasOwn(output, "call_id") || typeof output.call_id !== "string" || output.call_id.length === 0) { throw new OpenAIError(`expected a non-empty output item call_id for ${eventType}`); } identities.push(`call:${output.type}:${output.call_id}`); @@ -36229,11 +18428,11 @@ function validateCompletedOutputItemIdentity(event, snapshot) { const replacement = event.item; getOutputItemIdentityKeys(output, event.type); getOutputItemIdentityKeys(replacement, event.type); - if (!hasOwn2(replacement, "type") || output.type !== replacement.type) { + if (!hasOwn(replacement, "type") || output.type !== replacement.type) { throw new OpenAIError(`expected output item type '${output.type}', got '${replacement.type}'`); } - const outputID = hasOwn2(output, "id") ? output.id : void 0; - const replacementID = hasOwn2(replacement, "id") ? replacement.id : void 0; + const outputID = hasOwn(output, "id") ? output.id : void 0; + const replacementID = hasOwn(replacement, "id") ? replacement.id : void 0; if (outputID !== replacementID) { throw new OpenAIError(`expected output item id '${outputID}', got '${replacementID}'`); } @@ -36248,20 +18447,20 @@ function validateOutputItemIdentity(event, snapshot, rejectInvalidShellTargets) } if (rejectInvalidShellTargets && (event.type === "response.shell_call_command.added" || event.type === "response.shell_call_command.delta" || event.type === "response.shell_call_command.done")) { const output2 = getOutput(snapshot, event.output_index); - if (!hasOwn2(output2, "type") || output2.type !== "shell_call") { + if (!hasOwn(output2, "type") || output2.type !== "shell_call") { throw new OpenAIError(`expected output item type 'shell_call', got '${output2.type}'`); } return; } - if (event.type !== "response.content_part.added" && event.type !== "response.content_part.done" && !hasOwn2(expectedOutputItemTypes, event.type)) { + if (event.type !== "response.content_part.added" && event.type !== "response.content_part.done" && !hasOwn(expectedOutputItemTypes, event.type)) { return; } const itemEvent = event; - if (!hasOwn2(event, "item_id") || typeof itemEvent.item_id !== "string" || itemEvent.item_id.length === 0) { + if (!hasOwn(event, "item_id") || typeof itemEvent.item_id !== "string" || itemEvent.item_id.length === 0) { throw new OpenAIError(`expected a non-empty item_id for ${event.type}`); } const output = getOutput(snapshot, itemEvent.output_index); - const outputID = hasOwn2(output, "id") ? output.id : void 0; + const outputID = hasOwn(output, "id") ? output.id : void 0; if (outputID !== itemEvent.item_id) { throw new OpenAIError(`expected item_id '${outputID}', got '${itemEvent.item_id}'`); } @@ -36315,7 +18514,7 @@ function sanitizeResponseEvent(event) { return assertNever3(event); } const stableValues = /* @__PURE__ */ new Map([["type", type]]); - const itemScoped = type === "response.output_item.added" || type === "response.output_item.done" || type === "response.content_part.added" || type === "response.content_part.done" || type === "response.shell_call_command.added" || type === "response.shell_call_command.delta" || type === "response.shell_call_command.done" || hasOwn2(expectedOutputItemTypes, type); + const itemScoped = type === "response.output_item.added" || type === "response.output_item.done" || type === "response.content_part.added" || type === "response.content_part.done" || type === "response.shell_call_command.added" || type === "response.shell_call_command.delta" || type === "response.shell_call_command.done" || hasOwn(expectedOutputItemTypes, type); if (itemScoped) { try { for (const field of responseEventRoutingFields) { @@ -36908,8 +19107,8 @@ function accumulateResponseWithContext(event, snapshot, context, rejectInvalidSh var responseOutputIdentityIndexes, expectedOutputItemTypes, supportedResponseEventTypes, responseEventRoutingFields; var init_response_accumulator = __esm({ "node_modules/openai/internal/responses/response-accumulator.mjs"() { - init_error4(); - init_utils4(); + init_error2(); + init_utils2(); init_canonical_output_text(); responseOutputIdentityIndexes = /* @__PURE__ */ new WeakMap(); expectedOutputItemTypes = { @@ -37035,12 +19234,12 @@ function finalizeResponse(snapshot, params) { var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_accumulatorContext, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, ResponseStream; var init_ResponseStream = __esm({ "node_modules/openai/lib/responses/ResponseStream.mjs"() { - init_tslib2(); - init_error4(); + init_tslib(); + init_error2(); init_EventStream(); init_response_accumulator(); init_ResponsesParser(); - init_streaming4(); + init_streaming2(); ResponseStream = class _ResponseStream extends EventStream2 { /** Creates an unstarted stream, retaining request parameters for structured-output parsing. */ constructor(params) { @@ -37050,7 +19249,7 @@ var init_ResponseStream = __esm({ _ResponseStream_currentResponseSnapshot.set(this, void 0); _ResponseStream_finalResponse.set(this, void 0); _ResponseStream_accumulatorContext.set(this, createResponseContext()); - __classPrivateFieldSet2(this, _ResponseStream_params, params, "f"); + __classPrivateFieldSet(this, _ResponseStream_params, params, "f"); } /** Starts a new response stream or replays an existing response by its identifier. */ static createResponse(client, params, options) { @@ -37069,7 +19268,7 @@ var init_ResponseStream = __esm({ } async _createOrRetrieveResponse(client, params, options) { this._listenForAbort(options?.signal); - __classPrivateFieldGet2(this, _ResponseStream_instances, "m", _ResponseStream_beginRequest).call(this); + __classPrivateFieldGet(this, _ResponseStream_instances, "m", _ResponseStream_beginRequest).call(this); let stream5; let starting_after = null; if ("response_id" in params) { @@ -37080,33 +19279,33 @@ var init_ResponseStream = __esm({ } this._connected(); for await (const event of stream5) { - __classPrivateFieldGet2(this, _ResponseStream_instances, "m", _ResponseStream_addEvent).call(this, event, starting_after); + __classPrivateFieldGet(this, _ResponseStream_instances, "m", _ResponseStream_addEvent).call(this, event, starting_after); } if (stream5.controller.signal?.aborted) { throw this._userAbortError(); } - return __classPrivateFieldGet2(this, _ResponseStream_instances, "m", _ResponseStream_endRequest).call(this); + return __classPrivateFieldGet(this, _ResponseStream_instances, "m", _ResponseStream_endRequest).call(this); } async _fromReadableStream(readableStream, options) { this._listenForAbort(options?.signal); - __classPrivateFieldGet2(this, _ResponseStream_instances, "m", _ResponseStream_beginRequest).call(this); + __classPrivateFieldGet(this, _ResponseStream_instances, "m", _ResponseStream_beginRequest).call(this); this._connected(); - const stream5 = Stream2.fromReadableStream(readableStream, this.controller); + const stream5 = Stream.fromReadableStream(readableStream, this.controller); for await (const event of stream5) { - __classPrivateFieldGet2(this, _ResponseStream_instances, "m", _ResponseStream_addEvent).call(this, event, null); + __classPrivateFieldGet(this, _ResponseStream_instances, "m", _ResponseStream_addEvent).call(this, event, null); } if (stream5.controller.signal?.aborted) { throw this._userAbortError(); } - return __classPrivateFieldGet2(this, _ResponseStream_instances, "m", _ResponseStream_endRequest).call(this); + return __classPrivateFieldGet(this, _ResponseStream_instances, "m", _ResponseStream_endRequest).call(this); } /** Iterates over response events; stopping iteration early aborts the underlying request. */ [(_ResponseStream_params = /* @__PURE__ */ new WeakMap(), _ResponseStream_currentResponseSnapshot = /* @__PURE__ */ new WeakMap(), _ResponseStream_finalResponse = /* @__PURE__ */ new WeakMap(), _ResponseStream_accumulatorContext = /* @__PURE__ */ new WeakMap(), _ResponseStream_instances = /* @__PURE__ */ new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest2() { if (this.ended) { return; } - __classPrivateFieldSet2(this, _ResponseStream_currentResponseSnapshot, void 0, "f"); - __classPrivateFieldSet2(this, _ResponseStream_accumulatorContext, createResponseContext(), "f"); + __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, void 0, "f"); + __classPrivateFieldSet(this, _ResponseStream_accumulatorContext, createResponseContext(), "f"); }, _ResponseStream_addEvent = function _ResponseStream_addEvent2(event, starting_after) { if (this.ended) { return; @@ -37121,13 +19320,13 @@ var init_ResponseStream = __esm({ // oxlint-disable-next-line anti-slop/no-runtime-typeof -- An error event can contain malformed server data; validate its container before extracting error details. "error" in event && typeof event.error === "object" && event.error !== null ? event.error : event ); - throw new APIError2(void 0, error, event.message, void 0); + throw new APIError(void 0, error, event.message, void 0); } let dispatchEvent = event; - const response = accumulateResponseWithContext(event, __classPrivateFieldGet2(this, _ResponseStream_currentResponseSnapshot, "f"), __classPrivateFieldGet2(this, _ResponseStream_accumulatorContext, "f"), true, (sanitizedEvent) => { + const response = accumulateResponseWithContext(event, __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, "f"), __classPrivateFieldGet(this, _ResponseStream_accumulatorContext, "f"), true, (sanitizedEvent) => { dispatchEvent = sanitizedEvent; }); - __classPrivateFieldSet2(this, _ResponseStream_currentResponseSnapshot, response, "f"); + __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, response, "f"); maybeEmit("event", event); switch (dispatchEvent.type) { case "response.output_text.delta": { @@ -37179,14 +19378,14 @@ var init_ResponseStream = __esm({ if (this.ended) { throw new OpenAIError(`stream has ended, this shouldn't happen`); } - const snapshot = __classPrivateFieldGet2(this, _ResponseStream_currentResponseSnapshot, "f"); + const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, "f"); if (!snapshot) { throw new OpenAIError(`request ended without sending any events`); } - __classPrivateFieldSet2(this, _ResponseStream_currentResponseSnapshot, void 0, "f"); - __classPrivateFieldSet2(this, _ResponseStream_accumulatorContext, createResponseContext(), "f"); - const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet2(this, _ResponseStream_params, "f")); - __classPrivateFieldSet2(this, _ResponseStream_finalResponse, parsedResponse, "f"); + __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, void 0, "f"); + __classPrivateFieldSet(this, _ResponseStream_accumulatorContext, createResponseContext(), "f"); + const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, "f")); + __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, "f"); return parsedResponse; }, Symbol.asyncIterator)]() { return this._createIterator((push) => { @@ -37203,7 +19402,7 @@ var init_ResponseStream = __esm({ */ async finalResponse() { await this.done(); - const response = __classPrivateFieldGet2(this, _ResponseStream_finalResponse, "f"); + const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, "f"); if (!response) { throw new OpenAIError("stream ended without producing a Response"); } @@ -37217,10 +19416,10 @@ var init_ResponseStream = __esm({ var InputItems2; var init_input_items2 = __esm({ "node_modules/openai/resources/responses/input-items.mjs"() { - init_resource2(); - init_pagination2(); - init_path2(); - InputItems2 = class extends APIResource2 { + init_resource(); + init_pagination(); + init_path(); + InputItems2 = class extends APIResource { /** * Returns a list of input items for a given response. * @@ -37235,7 +19434,7 @@ var init_input_items2 = __esm({ * ``` */ list(responseID, query = {}, options) { - return this._client.getAPIList(path3`/responses/${responseID}/input_items`, CursorPage, { query, ...options, __security: { bearerAuth: true } }); + return this._client.getAPIList(path`/responses/${responseID}/input_items`, CursorPage, { query, ...options, __security: { bearerAuth: true } }); } }; } @@ -37245,8 +19444,8 @@ var init_input_items2 = __esm({ var InputTokens2; var init_input_tokens2 = __esm({ "node_modules/openai/resources/responses/input-tokens.mjs"() { - init_resource2(); - InputTokens2 = class extends APIResource2 { + init_resource(); + InputTokens2 = class extends APIResource { /** * Returns input token counts of the request. * @@ -37275,14 +19474,14 @@ var init_responses2 = __esm({ "node_modules/openai/resources/responses/responses.mjs"() { init_ResponsesParser(); init_ResponseStream(); - init_resource2(); + init_resource(); init_input_items2(); init_input_items2(); init_input_tokens2(); init_input_tokens2(); - init_headers3(); - init_path2(); - Responses2 = class extends APIResource2 { + init_headers(); + init_path(); + Responses2 = class extends APIResource { constructor() { super(...arguments); this.inputItems = new InputItems2(this._client); @@ -37302,7 +19501,7 @@ var init_responses2 = __esm({ }); } retrieve(responseID, query = {}, options) { - return this._client.get(path3`/responses/${responseID}`, { + return this._client.get(path`/responses/${responseID}`, { query, ...options, stream: query?.stream ?? false, @@ -37325,9 +19524,9 @@ var init_responses2 = __esm({ * ``` */ delete(responseID, options) { - return this._client.delete(path3`/responses/${responseID}`, { + return this._client.delete(path`/responses/${responseID}`, { ...options, - headers: buildHeaders2([{ Accept: "*/*" }, options?.headers]), + headers: buildHeaders([{ Accept: "*/*" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -37353,7 +19552,7 @@ var init_responses2 = __esm({ * ``` */ cancel(responseID, options) { - return this._client.post(path3`/responses/${responseID}/cancel`, { + return this._client.post(path`/responses/${responseID}/cancel`, { ...options, __security: { bearerAuth: true } }); @@ -37386,14 +19585,14 @@ var init_responses2 = __esm({ var Alerts; var init_alerts = __esm({ "node_modules/openai/resources/safety/alerts.mjs"() { - init_resource2(); - init_path2(); - Alerts = class extends APIResource2 { + init_resource(); + init_path(); + Alerts = class extends APIResource { /** * Get a safety alert belonging to the authenticated API project. */ retrieve(id, options) { - return this._client.get(path3`/safety/alerts/${id}`, { ...options, __security: { bearerAuth: true } }); + return this._client.get(path`/safety/alerts/${id}`, { ...options, __security: { bearerAuth: true } }); } }; } @@ -37403,10 +19602,10 @@ var init_alerts = __esm({ var Safety; var init_safety = __esm({ "node_modules/openai/resources/safety/safety.mjs"() { - init_resource2(); + init_resource(); init_alerts(); init_alerts(); - Safety = class extends APIResource2 { + Safety = class extends APIResource { constructor() { super(...arguments); this.alerts = new Alerts(this._client); @@ -37420,17 +19619,17 @@ var init_safety = __esm({ var Content2; var init_content2 = __esm({ "node_modules/openai/resources/skills/content.mjs"() { - init_resource2(); - init_headers3(); - init_path2(); - Content2 = class extends APIResource2 { + init_resource(); + init_headers(); + init_path(); + Content2 = class extends APIResource { /** * Download a skill zip bundle by its ID. */ retrieve(skillID, options) { - return this._client.get(path3`/skills/${skillID}/content`, { + return this._client.get(path`/skills/${skillID}/content`, { ...options, - headers: buildHeaders2([{ Accept: "application/binary" }, options?.headers]), + headers: buildHeaders([{ Accept: "application/binary" }, options?.headers]), __security: { bearerAuth: true }, __binaryResponse: true }); @@ -37443,18 +19642,18 @@ var init_content2 = __esm({ var Content3; var init_content3 = __esm({ "node_modules/openai/resources/skills/versions/content.mjs"() { - init_resource2(); - init_headers3(); - init_path2(); - Content3 = class extends APIResource2 { + init_resource(); + init_headers(); + init_path(); + Content3 = class extends APIResource { /** * Download a skill version zip bundle. */ retrieve(version, params, options) { const { skill_id } = params; - return this._client.get(path3`/skills/${skill_id}/versions/${version}/content`, { + return this._client.get(path`/skills/${skill_id}/versions/${version}/content`, { ...options, - headers: buildHeaders2([{ Accept: "application/binary" }, options?.headers]), + headers: buildHeaders([{ Accept: "application/binary" }, options?.headers]), __security: { bearerAuth: true }, __binaryResponse: true }); @@ -37464,16 +19663,16 @@ var init_content3 = __esm({ }); // node_modules/openai/resources/skills/versions/versions.mjs -var Versions4; -var init_versions4 = __esm({ +var Versions; +var init_versions = __esm({ "node_modules/openai/resources/skills/versions/versions.mjs"() { - init_resource2(); + init_resource(); init_content3(); init_content3(); - init_pagination2(); - init_uploads3(); - init_path2(); - Versions4 = class extends APIResource2 { + init_pagination(); + init_uploads(); + init_path(); + Versions = class extends APIResource { constructor() { super(...arguments); this.content = new Content3(this._client); @@ -37482,7 +19681,7 @@ var init_versions4 = __esm({ * Create a new immutable skill version. */ create(skillID, body = {}, options) { - return this._client.post(path3`/skills/${skillID}/versions`, maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client, { + return this._client.post(path`/skills/${skillID}/versions`, maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client, { stripFilenames: false })); } @@ -37491,7 +19690,7 @@ var init_versions4 = __esm({ */ retrieve(version, params, options) { const { skill_id } = params; - return this._client.get(path3`/skills/${skill_id}/versions/${version}`, { + return this._client.get(path`/skills/${skill_id}/versions/${version}`, { ...options, __security: { bearerAuth: true } }); @@ -37500,7 +19699,7 @@ var init_versions4 = __esm({ * List skill versions for a skill. */ list(skillID, query = {}, options) { - return this._client.getAPIList(path3`/skills/${skillID}/versions`, CursorPage, { + return this._client.getAPIList(path`/skills/${skillID}/versions`, CursorPage, { query, ...options, __security: { bearerAuth: true } @@ -37511,33 +19710,33 @@ var init_versions4 = __esm({ */ delete(version, params, options) { const { skill_id } = params; - return this._client.delete(path3`/skills/${skill_id}/versions/${version}`, { + return this._client.delete(path`/skills/${skill_id}/versions/${version}`, { ...options, __security: { bearerAuth: true } }); } }; - Versions4.Content = Content3; + Versions.Content = Content3; } }); // node_modules/openai/resources/skills/skills.mjs -var Skills3; -var init_skills3 = __esm({ +var Skills; +var init_skills = __esm({ "node_modules/openai/resources/skills/skills.mjs"() { - init_resource2(); + init_resource(); init_content2(); init_content2(); - init_versions4(); - init_versions4(); - init_pagination2(); - init_uploads3(); - init_path2(); - Skills3 = class extends APIResource2 { + init_versions(); + init_versions(); + init_pagination(); + init_uploads(); + init_path(); + Skills = class extends APIResource { constructor() { super(...arguments); this.content = new Content2(this._client); - this.versions = new Versions4(this._client); + this.versions = new Versions(this._client); } /** * Create a new skill. @@ -37551,13 +19750,13 @@ var init_skills3 = __esm({ * Get a skill by its ID. */ retrieve(skillID, options) { - return this._client.get(path3`/skills/${skillID}`, { ...options, __security: { bearerAuth: true } }); + return this._client.get(path`/skills/${skillID}`, { ...options, __security: { bearerAuth: true } }); } /** * Update the default version pointer for a skill. */ update(skillID, body, options) { - return this._client.post(path3`/skills/${skillID}`, { + return this._client.post(path`/skills/${skillID}`, { body, ...options, __security: { bearerAuth: true } @@ -37577,11 +19776,11 @@ var init_skills3 = __esm({ * Delete a skill by its ID. */ delete(skillID, options) { - return this._client.delete(path3`/skills/${skillID}`, { ...options, __security: { bearerAuth: true } }); + return this._client.delete(path`/skills/${skillID}`, { ...options, __security: { bearerAuth: true } }); } }; - Skills3.Content = Content2; - Skills3.Versions = Versions4; + Skills.Content = Content2; + Skills.Versions = Versions; } }); @@ -37589,10 +19788,10 @@ var init_skills3 = __esm({ var Parts; var init_parts = __esm({ "node_modules/openai/resources/uploads/parts.mjs"() { - init_resource2(); - init_uploads3(); - init_path2(); - Parts = class extends APIResource2 { + init_resource(); + init_uploads(); + init_path(); + Parts = class extends APIResource { /** * Adds a * [Part](https://developers.openai.com/api/reference/resources/uploads/subresources/parts) @@ -37608,7 +19807,7 @@ var init_parts = __esm({ * [complete the Upload](https://developers.openai.com/api/reference/resources/uploads/methods/complete). */ create(uploadID, body, options) { - return this._client.post(path3`/uploads/${uploadID}/parts`, multipartFormRequestOptions2({ body, ...options, __security: { bearerAuth: true } }, this._client)); + return this._client.post(path`/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); } }; } @@ -37616,13 +19815,13 @@ var init_parts = __esm({ // node_modules/openai/resources/uploads/uploads.mjs var Uploads; -var init_uploads5 = __esm({ +var init_uploads3 = __esm({ "node_modules/openai/resources/uploads/uploads.mjs"() { - init_resource2(); + init_resource(); init_parts(); init_parts(); - init_path2(); - Uploads = class extends APIResource2 { + init_path(); + Uploads = class extends APIResource { constructor() { super(...arguments); this.parts = new Parts(this._client); @@ -37659,7 +19858,7 @@ var init_uploads5 = __esm({ * Returns the Upload object with status `cancelled`. */ cancel(uploadID, options) { - return this._client.post(path3`/uploads/${uploadID}/cancel`, { + return this._client.post(path`/uploads/${uploadID}/cancel`, { ...options, __security: { bearerAuth: true } }); @@ -37682,7 +19881,7 @@ var init_uploads5 = __esm({ * object. */ complete(uploadID, body, options) { - return this._client.post(path3`/uploads/${uploadID}/complete`, { + return this._client.post(path`/uploads/${uploadID}/complete`, { body, ...options, __security: { bearerAuth: true } @@ -37767,21 +19966,21 @@ var init_vector_store_upload = __esm({ var FileBatches; var init_file_batches = __esm({ "node_modules/openai/resources/vector-stores/file-batches.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); + init_resource(); + init_pagination(); + init_headers(); init_vector_store_polling(); init_vector_store_upload(); - init_path2(); - FileBatches = class extends APIResource2 { + init_path(); + FileBatches = class extends APIResource { /** * Create a vector store file batch. */ create(vectorStoreID, body, options) { - return this._client.post(path3`/vector_stores/${vectorStoreID}/file_batches`, { + return this._client.post(path`/vector_stores/${vectorStoreID}/file_batches`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -37790,9 +19989,9 @@ var init_file_batches = __esm({ */ retrieve(batchID, params, options) { const { vector_store_id } = params; - return this._client.get(path3`/vector_stores/${vector_store_id}/file_batches/${batchID}`, { + return this._client.get(path`/vector_stores/${vector_store_id}/file_batches/${batchID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -37802,9 +20001,9 @@ var init_file_batches = __esm({ */ cancel(batchID, params, options) { const { vector_store_id } = params; - return this._client.post(path3`/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, { + return this._client.post(path`/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -37820,10 +20019,10 @@ var init_file_batches = __esm({ */ listFiles(batchID, params, options) { const { vector_store_id, ...query } = params; - return this._client.getAPIList(path3`/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, CursorPage, { + return this._client.getAPIList(path`/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -37849,25 +20048,25 @@ var init_file_batches = __esm({ }); // node_modules/openai/resources/vector-stores/files.mjs -var Files6; -var init_files6 = __esm({ +var Files4; +var init_files4 = __esm({ "node_modules/openai/resources/vector-stores/files.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); + init_resource(); + init_pagination(); + init_headers(); init_vector_store_polling(); - init_path2(); - Files6 = class extends APIResource2 { + init_path(); + Files4 = class extends APIResource { /** * Create a vector store file by attaching a * [File](https://developers.openai.com/api/reference/resources/files) to a * [vector store](https://developers.openai.com/api/reference/resources/vector_stores). */ create(vectorStoreID, body, options) { - return this._client.post(path3`/vector_stores/${vectorStoreID}/files`, { + return this._client.post(path`/vector_stores/${vectorStoreID}/files`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -37876,9 +20075,9 @@ var init_files6 = __esm({ */ retrieve(fileID, params, options) { const { vector_store_id } = params; - return this._client.get(path3`/vector_stores/${vector_store_id}/files/${fileID}`, { + return this._client.get(path`/vector_stores/${vector_store_id}/files/${fileID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -37887,10 +20086,10 @@ var init_files6 = __esm({ */ update(fileID, params, options) { const { vector_store_id, ...body } = params; - return this._client.post(path3`/vector_stores/${vector_store_id}/files/${fileID}`, { + return this._client.post(path`/vector_stores/${vector_store_id}/files/${fileID}`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -37898,10 +20097,10 @@ var init_files6 = __esm({ * Returns a list of vector store files. */ list(vectorStoreID, query = {}, options) { - return this._client.getAPIList(path3`/vector_stores/${vectorStoreID}/files`, CursorPage, { + return this._client.getAPIList(path`/vector_stores/${vectorStoreID}/files`, CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -37913,9 +20112,9 @@ var init_files6 = __esm({ */ delete(fileID, params, options) { const { vector_store_id } = params; - return this._client.delete(path3`/vector_stores/${vector_store_id}/files/${fileID}`, { + return this._client.delete(path`/vector_stores/${vector_store_id}/files/${fileID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -37957,9 +20156,9 @@ var init_files6 = __esm({ */ content(fileID, params, options) { const { vector_store_id } = params; - return this._client.getAPIList(path3`/vector_stores/${vector_store_id}/files/${fileID}/content`, Page2, { + return this._client.getAPIList(path`/vector_stores/${vector_store_id}/files/${fileID}/content`, Page, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -37971,18 +20170,18 @@ var init_files6 = __esm({ var VectorStores; var init_vector_stores = __esm({ "node_modules/openai/resources/vector-stores/vector-stores.mjs"() { - init_resource2(); + init_resource(); init_file_batches(); init_file_batches(); - init_files6(); - init_files6(); - init_pagination2(); - init_headers3(); - init_path2(); - VectorStores = class extends APIResource2 { + init_files4(); + init_files4(); + init_pagination(); + init_headers(); + init_path(); + VectorStores = class extends APIResource { constructor() { super(...arguments); - this.files = new Files6(this._client); + this.files = new Files4(this._client); this.fileBatches = new FileBatches(this._client); } /** @@ -37992,7 +20191,7 @@ var init_vector_stores = __esm({ return this._client.post("/vector_stores", { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -38000,9 +20199,9 @@ var init_vector_stores = __esm({ * Retrieves a vector store. */ retrieve(vectorStoreID, options) { - return this._client.get(path3`/vector_stores/${vectorStoreID}`, { + return this._client.get(path`/vector_stores/${vectorStoreID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -38010,10 +20209,10 @@ var init_vector_stores = __esm({ * Modifies a vector store. */ update(vectorStoreID, body, options) { - return this._client.post(path3`/vector_stores/${vectorStoreID}`, { + return this._client.post(path`/vector_stores/${vectorStoreID}`, { body, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -38024,7 +20223,7 @@ var init_vector_stores = __esm({ return this._client.getAPIList("/vector_stores", CursorPage, { query, ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -38032,9 +20231,9 @@ var init_vector_stores = __esm({ * Delete a vector store. */ delete(vectorStoreID, options) { - return this._client.delete(path3`/vector_stores/${vectorStoreID}`, { + return this._client.delete(path`/vector_stores/${vectorStoreID}`, { ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } @@ -38043,16 +20242,16 @@ var init_vector_stores = __esm({ * filter. */ search(vectorStoreID, body, options) { - return this._client.getAPIList(path3`/vector_stores/${vectorStoreID}/search`, Page2, { + return this._client.getAPIList(path`/vector_stores/${vectorStoreID}/search`, Page, { body, method: "post", ...options, - headers: buildHeaders2([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), + headers: buildHeaders([{ "OpenAI-Beta": "assistants=v2" }, options?.headers]), __security: { bearerAuth: true } }); } }; - VectorStores.Files = Files6; + VectorStores.Files = Files4; VectorStores.FileBatches = FileBatches; } }); @@ -38061,19 +20260,19 @@ var init_vector_stores = __esm({ var Videos; var init_videos = __esm({ "node_modules/openai/resources/videos.mjs"() { - init_resource2(); - init_pagination2(); - init_headers3(); - init_uploads3(); - init_path2(); - Videos = class extends APIResource2 { + init_resource(); + init_pagination(); + init_headers(); + init_uploads(); + init_path(); + Videos = class extends APIResource { /** * Create a new video generation job from a prompt and optional reference assets. * * @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026. */ create(body, options) { - return this._client.post("/videos", multipartFormRequestOptions2({ body, ...options, __security: { bearerAuth: true } }, this._client)); + return this._client.post("/videos", multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); } /** * Fetch the latest metadata for a generated video. @@ -38081,7 +20280,7 @@ var init_videos = __esm({ * @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026. */ retrieve(videoID, options) { - return this._client.get(path3`/videos/${videoID}`, { ...options, __security: { bearerAuth: true } }); + return this._client.get(path`/videos/${videoID}`, { ...options, __security: { bearerAuth: true } }); } /** * List recently generated videos for the current project. @@ -38101,7 +20300,7 @@ var init_videos = __esm({ * @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026. */ delete(videoID, options) { - return this._client.delete(path3`/videos/${videoID}`, { ...options, __security: { bearerAuth: true } }); + return this._client.delete(path`/videos/${videoID}`, { ...options, __security: { bearerAuth: true } }); } /** * Create a character from an uploaded video. @@ -38109,7 +20308,7 @@ var init_videos = __esm({ * @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026. */ createCharacter(body, options) { - return this._client.post("/videos/characters", multipartFormRequestOptions2({ body, ...options, __security: { bearerAuth: true } }, this._client)); + return this._client.post("/videos/characters", multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); } /** * Download the generated video bytes or a derived preview asset. @@ -38119,10 +20318,10 @@ var init_videos = __esm({ * @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026. */ downloadContent(videoID, query = {}, options) { - return this._client.get(path3`/videos/${videoID}/content`, { + return this._client.get(path`/videos/${videoID}/content`, { query, ...options, - headers: buildHeaders2([{ Accept: "application/binary" }, options?.headers]), + headers: buildHeaders([{ Accept: "application/binary" }, options?.headers]), __security: { bearerAuth: true }, __binaryResponse: true }); @@ -38134,7 +20333,7 @@ var init_videos = __esm({ * @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026. */ edit(body, options) { - return this._client.post("/videos/edits", multipartFormRequestOptions2({ body, ...options, __security: { bearerAuth: true } }, this._client)); + return this._client.post("/videos/edits", multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); } /** * Create an extension of a completed video. @@ -38142,7 +20341,7 @@ var init_videos = __esm({ * @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026. */ extend(body, options) { - return this._client.post("/videos/extensions", multipartFormRequestOptions2({ body, ...options, __security: { bearerAuth: true } }, this._client)); + return this._client.post("/videos/extensions", multipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); } /** * Fetch a character. @@ -38150,7 +20349,7 @@ var init_videos = __esm({ * @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026. */ getCharacter(characterID, options) { - return this._client.get(path3`/videos/characters/${characterID}`, { + return this._client.get(path`/videos/characters/${characterID}`, { ...options, __security: { bearerAuth: true } }); @@ -38161,7 +20360,7 @@ var init_videos = __esm({ * @deprecated The Sora API is scheduled to permanently shut down on September 24, 2026. */ remix(videoID, body, options) { - return this._client.post(path3`/videos/${videoID}/remix`, maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); + return this._client.post(path`/videos/${videoID}/remix`, maybeMultipartFormRequestOptions({ body, ...options, __security: { bearerAuth: true } }, this._client)); } }; } @@ -38185,7 +20384,7 @@ function* signatureCandidates(signatureHeader) { } function decodeSignature(signature) { try { - const signatureBytes = fromBase642(signature); + const signatureBytes = fromBase64(signature); return signatureBytes.byteLength === SHA256_SIGNATURE_LENGTH ? signatureBytes : void 0; } catch { return void 0; @@ -38234,9 +20433,9 @@ async function verifyWebhookSignature(payload, signatureHeader, timestamp2, webh if (useBoundedVerification && !firstSignature) { throw new InvalidWebhookSignatureError("The given webhook signature does not match the expected signature"); } - const decodedSecret = Uint8Array.from(secret.startsWith("whsec_") ? fromBase642(secret.slice("whsec_".length)) : encodeUTF82(secret)); + const decodedSecret = Uint8Array.from(secret.startsWith("whsec_") ? fromBase64(secret.slice("whsec_".length)) : encodeUTF8(secret)); const signedPayload = webhookId ? `${webhookId}.${timestamp2}.${payload}` : `${timestamp2}.${payload}`; - const signedPayloadBytes = Uint8Array.from(encodeUTF82(signedPayload)); + const signedPayloadBytes = Uint8Array.from(encodeUTF8(signedPayload)); const key = await crypto.subtle.importKey("raw", decodedSecret, { name: "HMAC", hash: "SHA-256" }, false, useBoundedVerification ? ["sign", "verify"] : ["verify"]); if (useBoundedVerification && firstSignature) { const expectedSignature = new Uint8Array(await crypto.subtle.sign("HMAC", key, signedPayloadBytes)); @@ -38251,7 +20450,7 @@ async function verifyWebhookSignature(payload, signatureHeader, timestamp2, webh } for (const signature of signatureCandidates(signatureHeader)) { try { - const signatureBytes = Uint8Array.from(fromBase642(signature)); + const signatureBytes = Uint8Array.from(fromBase64(signature)); const isValid = await crypto.subtle.verify("HMAC", key, signatureBytes, signedPayloadBytes); if (isValid) { return; @@ -38264,9 +20463,9 @@ async function verifyWebhookSignature(payload, signatureHeader, timestamp2, webh var MAX_DIRECT_WEBHOOK_VERIFICATIONS, SHA256_SIGNATURE_LENGTH; var init_webhook_signature = __esm({ "node_modules/openai/lib/webhook-signature.mjs"() { - init_error4(); - init_base642(); - init_bytes2(); + init_error2(); + init_base64(); + init_bytes(); MAX_DIRECT_WEBHOOK_VERIFICATIONS = 32; SHA256_SIGNATURE_LENGTH = 32; } @@ -38276,8 +20475,8 @@ var init_webhook_signature = __esm({ var EventTypes; var init_event_types = __esm({ "node_modules/openai/resources/webhooks/event-types.mjs"() { - init_resource2(); - EventTypes = class extends APIResource2 { + init_resource(); + EventTypes = class extends APIResource { /** * Returns webhook event types visible to the authenticated project. * @@ -38295,18 +20494,18 @@ var init_event_types = __esm({ }); // node_modules/openai/resources/webhooks/webhooks.mjs -var _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader, Webhooks2; -var init_webhooks2 = __esm({ +var _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader, Webhooks; +var init_webhooks = __esm({ "node_modules/openai/resources/webhooks/webhooks.mjs"() { - init_tslib2(); - init_resource2(); - init_headers3(); + init_tslib(); + init_resource(); + init_headers(); init_webhook_signature(); init_event_types(); init_event_types(); - init_pagination2(); - init_path2(); - Webhooks2 = class extends APIResource2 { + init_pagination(); + init_path(); + Webhooks = class extends APIResource { constructor() { super(...arguments); _Webhooks_instances.add(this); @@ -38339,7 +20538,7 @@ var init_webhooks2 = __esm({ * ``` */ retrieve(webhookEndpointID, options) { - return this._client.get(path3`/webhook_endpoints/${webhookEndpointID}`, { + return this._client.get(path`/webhook_endpoints/${webhookEndpointID}`, { ...options, __security: { bearerAuth: true } }); @@ -38353,7 +20552,7 @@ var init_webhooks2 = __esm({ * ``` */ update(webhookEndpointID, body = {}, options) { - return this._client.post(path3`/webhook_endpoints/${webhookEndpointID}`, { + return this._client.post(path`/webhook_endpoints/${webhookEndpointID}`, { body, ...options, __security: { bearerAuth: true } @@ -38388,7 +20587,7 @@ var init_webhooks2 = __esm({ * ``` */ delete(webhookEndpointID, options) { - return this._client.delete(path3`/webhook_endpoints/${webhookEndpointID}`, { + return this._client.delete(path`/webhook_endpoints/${webhookEndpointID}`, { ...options, __security: { bearerAuth: true } }); @@ -38403,7 +20602,7 @@ var init_webhooks2 = __esm({ * ``` */ rotateSecret(webhookEndpointID, body = {}, options) { - return this._client.post(path3`/webhook_endpoints/${webhookEndpointID}/rotate_secret`, { + return this._client.post(path`/webhook_endpoints/${webhookEndpointID}/rotate_secret`, { body, ...options, __security: { bearerAuth: true } @@ -38421,7 +20620,7 @@ var init_webhooks2 = __esm({ * ``` */ test(webhookEndpointID, body, options) { - return this._client.post(path3`/webhook_endpoints/${webhookEndpointID}/test`, { + return this._client.post(path`/webhook_endpoints/${webhookEndpointID}/test`, { body, ...options, __security: { bearerAuth: true } @@ -38448,11 +20647,11 @@ var init_webhooks2 = __esm({ if (typeof crypto === "undefined" || typeof crypto.subtle?.importKey !== "function" || typeof crypto.subtle.verify !== "function") { throw new Error("Webhook signature verification is only supported when the `crypto` global is defined"); } - __classPrivateFieldGet2(this, _Webhooks_instances, "m", _Webhooks_validateSecret).call(this, secret); - const headersObj = buildHeaders2([headers]).values; - const signatureHeader = __classPrivateFieldGet2(this, _Webhooks_instances, "m", _Webhooks_getRequiredHeader).call(this, headersObj, "webhook-signature"); - const timestamp2 = __classPrivateFieldGet2(this, _Webhooks_instances, "m", _Webhooks_getRequiredHeader).call(this, headersObj, "webhook-timestamp"); - const webhookId = __classPrivateFieldGet2(this, _Webhooks_instances, "m", _Webhooks_getRequiredHeader).call(this, headersObj, "webhook-id"); + __classPrivateFieldGet(this, _Webhooks_instances, "m", _Webhooks_validateSecret).call(this, secret); + const headersObj = buildHeaders([headers]).values; + const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, "m", _Webhooks_getRequiredHeader).call(this, headersObj, "webhook-signature"); + const timestamp2 = __classPrivateFieldGet(this, _Webhooks_instances, "m", _Webhooks_getRequiredHeader).call(this, headersObj, "webhook-timestamp"); + const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, "m", _Webhooks_getRequiredHeader).call(this, headersObj, "webhook-id"); if (webhookSignatureRequiresSigning(signatureHeader) && typeof crypto.subtle.sign !== "function") { throw new Error("Webhook signature verification is only supported when the `crypto` global is defined"); } @@ -38473,40 +20672,40 @@ var init_webhooks2 = __esm({ } return value2; }; - Webhooks2.EventTypes = EventTypes; + Webhooks.EventTypes = EventTypes; } }); // node_modules/openai/resources/index.mjs -var init_resources3 = __esm({ +var init_resources = __esm({ "node_modules/openai/resources/index.mjs"() { init_chat2(); - init_shared2(); + init_shared(); init_admin(); init_audio(); - init_batches3(); - init_beta2(); - init_completions4(); + init_batches(); + init_beta(); + init_completions3(); init_containers(); init_content_provenance_checks(); init_conversations(); init_embeddings2(); init_evals(); - init_files5(); + init_files3(); init_fine_tuning(); init_graders2(); init_images(); init_live(); - init_models4(); + init_models2(); init_moderations(); init_realtime2(); init_responses2(); init_safety(); - init_skills3(); - init_uploads5(); + init_skills(); + init_uploads3(); init_vector_stores(); init_videos(); - init_webhooks2(); + init_webhooks(); } }); @@ -38546,7 +20745,7 @@ var init_provider = __esm({ // node_modules/openai/client.mjs function isRunningInBrowserOrBrowserWorker() { - if (isRunningInBrowser2()) + if (isRunningInBrowser()) return true; const scope = globalThis; return typeof scope.WorkerGlobalScope === "function" && scope instanceof scope.WorkerGlobalScope && typeof scope.WorkerNavigator === "function" && scope.navigator instanceof scope.WorkerNavigator && typeof scope.navigator?.userAgent === "string" && scope.navigator.userAgent !== "Cloudflare-Workers" && scope.process?.versions?.node === void 0 && scope.Deno === void 0 && scope.Bun === void 0 && scope.EdgeRuntime === void 0 && scope.WebSocketPair === void 0; @@ -38588,46 +20787,46 @@ function isUndiciDispatcherVersionMismatchError(error) { } return false; } -var _OpenAI_instances, _a4, _OpenAI_encoder, _OpenAI_x509Authentication, _OpenAI_x509Credential, _OpenAI_x509Fetch, _OpenAI_explicitDataResidency, _OpenAI_responseAttempts, _OpenAI_baseURLOverridden, WORKLOAD_IDENTITY_API_KEY_PLACEHOLDER, inheritedDataResidencySelection, OpenAI, composedCallerSignals; -var init_client2 = __esm({ +var _OpenAI_instances, _a3, _OpenAI_encoder, _OpenAI_x509Authentication, _OpenAI_x509Credential, _OpenAI_x509Fetch, _OpenAI_explicitDataResidency, _OpenAI_responseAttempts, _OpenAI_baseURLOverridden, WORKLOAD_IDENTITY_API_KEY_PLACEHOLDER, inheritedDataResidencySelection, OpenAI, composedCallerSignals; +var init_client = __esm({ "node_modules/openai/client.mjs"() { - init_tslib2(); - init_uuid2(); - init_values2(); - init_sleep2(); - init_abort3(); - init_errors2(); - init_parse2(); - init_detect_platform2(); - init_shims2(); - init_request_options2(); - init_query2(); - init_version3(); + init_tslib(); + init_uuid(); + init_values(); + init_sleep(); + init_abort2(); + init_errors(); + init_parse(); + init_detect_platform(); + init_shims(); + init_request_options(); + init_query(); + init_version2(); init_data_residency(); - init_error3(); - init_pagination2(); + init_error(); + init_pagination(); init_workload_identity_auth(); init_x509_api_origin(); init_x509_workload_identity_auth(); init_x509_credential_options(); init_x509_transport_state(); - init_error3(); - init_uploads4(); - init_resources3(); - init_api_promise2(); + init_error(); + init_uploads2(); + init_resources(); + init_api_promise(); init_realtime_credentials(); - init_batches3(); - init_completions4(); + init_batches(); + init_completions3(); init_content_provenance_checks(); init_embeddings2(); - init_files5(); + init_files3(); init_images(); - init_models4(); + init_models2(); init_moderations(); init_videos(); init_admin(); init_audio(); - init_beta2(); + init_beta(); init_chat(); init_containers(); init_conversations(); @@ -38638,16 +20837,16 @@ var init_client2 = __esm({ init_realtime2(); init_responses2(); init_safety(); - init_skills3(); - init_uploads5(); + init_skills(); + init_uploads3(); init_vector_stores(); - init_webhooks2(); - init_detect_platform2(); - init_headers3(); + init_webhooks(); + init_detect_platform(); + init_headers(); init_provider(); - init_env2(); - init_log2(); - init_values2(); + init_env(); + init_log(); + init_values(); WORKLOAD_IDENTITY_API_KEY_PLACEHOLDER = "workload-identity-auth"; inheritedDataResidencySelection = /* @__PURE__ */ Symbol("inheritedDataResidencySelection"); OpenAI = class { @@ -38677,22 +20876,22 @@ var init_client2 = __esm({ _OpenAI_x509Fetch.set(this, void 0); _OpenAI_explicitDataResidency.set(this, false); _OpenAI_responseAttempts.set(this, /* @__PURE__ */ new WeakMap()); - this.completions = new Completions3(this); + this.completions = new Completions2(this); this.chat = new Chat(this); this.embeddings = new Embeddings(this); - this.files = new Files5(this); + this.files = new Files3(this); this.images = new Images(this); this.contentProvenanceChecks = new ContentProvenanceChecks(this); this.audio = new Audio(this); this.moderations = new Moderations(this); - this.models = new Models3(this); + this.models = new Models(this); this.fineTuning = new FineTuning(this); this.graders = new Graders2(this); this.vectorStores = new VectorStores(this); this.safety = new Safety(this); - this.webhooks = new Webhooks2(this); - this.beta = new Beta2(this); - this.batches = new Batches3(this); + this.webhooks = new Webhooks(this); + this.beta = new Beta(this); + this.batches = new Batches(this); this.uploads = new Uploads(this); this.admin = new Admin(this); this.responses = new Responses2(this); @@ -38701,13 +20900,13 @@ var init_client2 = __esm({ this.conversations = new Conversations(this); this.evals = new Evals(this); this.containers = new Containers(this); - this.skills = new Skills3(this); + this.skills = new Skills(this); this.videos = new Videos(this); const { credential, options: normalizedOptions } = normalizeX509CredentialOptions(clientOptions); clientOptions = normalizedOptions; const residencyBaseURL = resolveDataResidency(clientOptions); const provider2 = clientOptions.provider; - const { baseURL = provider2 ? null : readEnv2("OPENAI_BASE_URL"), dataResidency: _dataResidency, [inheritedDataResidencySelection]: inheritedResidencySelection = false, apiKey = provider2 ? null : readEnv2("OPENAI_API_KEY") ?? null, adminAPIKey = provider2 ? null : readEnv2("OPENAI_ADMIN_KEY") ?? null, organization = provider2 ? null : readEnv2("OPENAI_ORG_ID") ?? null, project = provider2 ? null : readEnv2("OPENAI_PROJECT_ID") ?? null, webhookSecret = readEnv2("OPENAI_WEBHOOK_SECRET") ?? null, workloadIdentity, x509Transport, credential: _credential, ...opts } = clientOptions; + const { baseURL = provider2 ? null : readEnv("OPENAI_BASE_URL"), dataResidency: _dataResidency, [inheritedDataResidencySelection]: inheritedResidencySelection = false, apiKey = provider2 ? null : readEnv("OPENAI_API_KEY") ?? null, adminAPIKey = provider2 ? null : readEnv("OPENAI_ADMIN_KEY") ?? null, organization = provider2 ? null : readEnv("OPENAI_ORG_ID") ?? null, project = provider2 ? null : readEnv("OPENAI_PROJECT_ID") ?? null, webhookSecret = readEnv("OPENAI_WEBHOOK_SECRET") ?? null, workloadIdentity, x509Transport, credential: _credential, ...opts } = clientOptions; if (provider2) { const conflictingOptions = ["apiKey", "adminAPIKey", "workloadIdentity", "x509Transport", "baseURL", "dataResidency"].filter((key) => (key === "workloadIdentity" ? workloadIdentity : clientOptions[key]) != null); if (conflictingOptions.length) { @@ -38742,7 +20941,7 @@ var init_client2 = __esm({ } assertX509APIOrigin(options.baseURL); assertX509RequestOptions(options.fetchOptions); - if (this.fetchWithAuth !== _a4.prototype.fetchWithAuth || this.fetchWithTimeout !== _a4.prototype.fetchWithTimeout) { + if (this.fetchWithAuth !== _a3.prototype.fetchWithAuth || this.fetchWithTimeout !== _a3.prototype.fetchWithTimeout) { throw new OpenAIError("X.509 workload identity does not support overridden fetch dispatch hooks."); } } @@ -38756,17 +20955,17 @@ var init_client2 = __esm({ throw new OpenAIError("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n"); } this.baseURL = options.baseURL; - __classPrivateFieldSet2(this, _OpenAI_explicitDataResidency, residencyBaseURL !== void 0 || inheritedResidencySelection, "f"); - this.timeout = options.timeout ?? _a4.DEFAULT_TIMEOUT; + __classPrivateFieldSet(this, _OpenAI_explicitDataResidency, residencyBaseURL !== void 0 || inheritedResidencySelection, "f"); + this.timeout = options.timeout ?? _a3.DEFAULT_TIMEOUT; this.logger = options.logger ?? console; const defaultLogLevel2 = "warn"; this.logLevel = defaultLogLevel2; - this.logLevel = parseLogLevel2(options.logLevel, "ClientOptions.logLevel", this) ?? parseLogLevel2(readEnv2("OPENAI_LOG"), "process.env['OPENAI_LOG']", this) ?? defaultLogLevel2; + this.logLevel = parseLogLevel(options.logLevel, "ClientOptions.logLevel", this) ?? parseLogLevel(readEnv("OPENAI_LOG"), "process.env['OPENAI_LOG']", this) ?? defaultLogLevel2; this.fetchOptions = options.fetchOptions; this.maxRetries = options.maxRetries ?? 2; - this.fetch = options.fetch ?? getDefaultFetch2(); - __classPrivateFieldSet2(this, _OpenAI_encoder, FallbackEncoder2, "f"); - const customHeadersEnv = provider2 || credential ? void 0 : readEnv2("OPENAI_CUSTOM_HEADERS"); + this.fetch = options.fetch ?? getDefaultFetch(); + __classPrivateFieldSet(this, _OpenAI_encoder, FallbackEncoder, "f"); + const customHeadersEnv = provider2 || credential ? void 0 : readEnv("OPENAI_CUSTOM_HEADERS"); if (customHeadersEnv) { const parsed = {}; for (const line of customHeadersEnv.split("\n")) { @@ -38775,17 +20974,17 @@ var init_client2 = __esm({ parsed[line.substring(0, colon).trim()] = line.substring(colon + 1).trim(); } } - options.defaultHeaders = buildHeaders2([parsed, options.defaultHeaders]); + options.defaultHeaders = buildHeaders([parsed, options.defaultHeaders]); } this._options = options; this._provider = providerRuntime; if (x509Identity) { const authentication = new X509WorkloadIdentityAuth(x509Identity, x509Transport, organization, project); this._workloadIdentityAuth = authentication; - __classPrivateFieldSet2(this, _OpenAI_x509Authentication, authentication, "f"); - __classPrivateFieldSet2(this, _OpenAI_x509Credential, credential, "f"); - __classPrivateFieldSet2(this, _OpenAI_x509Fetch, authentication.fetch(), "f"); - this.fetch = __classPrivateFieldGet2(this, _OpenAI_x509Fetch, "f"); + __classPrivateFieldSet(this, _OpenAI_x509Authentication, authentication, "f"); + __classPrivateFieldSet(this, _OpenAI_x509Credential, credential, "f"); + __classPrivateFieldSet(this, _OpenAI_x509Fetch, authentication.fetch(), "f"); + this.fetch = __classPrivateFieldGet(this, _OpenAI_x509Fetch, "f"); markApprovedX509Client2(this); } else if (identity.legacy) { this._workloadIdentityAuth = new WorkloadIdentityAuth(identity.legacy, this.fetch); @@ -38801,7 +21000,7 @@ var init_client2 = __esm({ */ withOptions(options) { const residencyBaseURL = resolveDataResidency(options); - const x509Authentication = __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f"); + const x509Authentication = __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f"); const inheritedOptions = { ...this._options, baseURL: this.baseURL, @@ -38809,7 +21008,7 @@ var init_client2 = __esm({ timeout: this.timeout, logger: this.logger, logLevel: this.logLevel, - fetch: __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f") ? void 0 : this.fetch, + fetch: __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f") ? void 0 : this.fetch, fetchOptions: this.fetchOptions, apiKey: this._options.apiKey, adminAPIKey: this.adminAPIKey, @@ -38819,7 +21018,7 @@ var init_client2 = __esm({ project: this.project, webhookSecret: this.webhookSecret }; - const { credential, provider: provider2 } = prepareX509ClientClone(inheritedOptions, options, __classPrivateFieldGet2(this, _OpenAI_x509Credential, "f"), x509Authentication !== void 0); + const { credential, provider: provider2 } = prepareX509ClientClone(inheritedOptions, options, __classPrivateFieldGet(this, _OpenAI_x509Credential, "f"), x509Authentication !== void 0); if (residencyBaseURL !== void 0) { delete inheritedOptions.baseURL; } @@ -38828,7 +21027,7 @@ var init_client2 = __esm({ ...options, credential, provider: provider2, - [inheritedDataResidencySelection]: __classPrivateFieldGet2(this, _OpenAI_explicitDataResidency, "f") && residencyBaseURL === void 0 && !hasOwn2(options, "baseURL") && options.credential === void 0 && !provider2 + [inheritedDataResidencySelection]: __classPrivateFieldGet(this, _OpenAI_explicitDataResidency, "f") && residencyBaseURL === void 0 && !hasOwn(options, "baseURL") && options.credential === void 0 && !provider2 }; const client = new this.constructor(clientOptions); if (provider2 && new URL(client.baseURL).origin !== new URL(this.baseURL).origin) { @@ -38839,14 +21038,14 @@ var init_client2 = __esm({ fetch: options.fetch }); client.fetchOptions = options.fetchOptions; - client.fetch = options.fetch ?? getDefaultFetch2(); + client.fetch = options.fetch ?? getDefaultFetch(); client.organization = options.organization ?? null; client.project = options.project ?? null; } - if (__classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f") && __classPrivateFieldGet2(client, _OpenAI_x509Authentication, "f") && this.baseURL === client.baseURL && __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f").matches(__classPrivateFieldGet2(client, _OpenAI_x509Authentication, "f"))) { - client._workloadIdentityAuth = __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f"); - __classPrivateFieldSet2(client, _OpenAI_x509Authentication, __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f"), "f"); - __classPrivateFieldSet2(client, _OpenAI_x509Fetch, __classPrivateFieldGet2(this, _OpenAI_x509Fetch, "f"), "f"); + if (__classPrivateFieldGet(this, _OpenAI_x509Authentication, "f") && __classPrivateFieldGet(client, _OpenAI_x509Authentication, "f") && this.baseURL === client.baseURL && __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f").matches(__classPrivateFieldGet(client, _OpenAI_x509Authentication, "f"))) { + client._workloadIdentityAuth = __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f"); + __classPrivateFieldSet(client, _OpenAI_x509Authentication, __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f"), "f"); + __classPrivateFieldSet(client, _OpenAI_x509Fetch, __classPrivateFieldGet(this, _OpenAI_x509Fetch, "f"), "f"); } return client; } @@ -38855,7 +21054,7 @@ var init_client2 = __esm({ } /** @internal Client request headers for each new WebSocket handshake. */ _buildWebSocketHeaders(authHeaders) { - return Object.fromEntries(buildHeaders2([ + return Object.fromEntries(buildHeaders([ { "User-Agent": this.getUserAgent(), "OpenAI-Organization": this.organization, @@ -38884,20 +21083,20 @@ var init_client2 = __esm({ bearerAuth: true, adminAPIKeyAuth: true }) { - const authentication = __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f") ?? this._workloadIdentityAuth; + const authentication = __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f") ?? this._workloadIdentityAuth; if (authentication instanceof X509WorkloadIdentityAuth && schemes.adminAPIKeyAuth && this.adminAPIKey !== null) { return await this.adminAPIKeyAuth(opts); } - return buildHeaders2([ + return buildHeaders([ schemes.bearerAuth ? await this.bearerAuth(opts) : null, schemes.adminAPIKeyAuth ? await this.adminAPIKeyAuth(opts) : null ]); } async bearerAuth(opts) { - const authentication = __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f") ?? this._workloadIdentityAuth; + const authentication = __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f") ?? this._workloadIdentityAuth; if (authentication) { if (authentication instanceof X509WorkloadIdentityAuth) { - if (authentication === this._workloadIdentityAuth && (this.fetchWithAuth !== _a4.prototype.fetchWithAuth || this.fetchWithTimeout !== _a4.prototype.fetchWithTimeout)) { + if (authentication === this._workloadIdentityAuth && (this.fetchWithAuth !== _a3.prototype.fetchWithAuth || this.fetchWithTimeout !== _a3.prototype.fetchWithTimeout)) { throw new OpenAIError("X.509 workload identity does not support overridden fetch dispatch hooks."); } const snapshots = authentication.headerSnapshots(); @@ -38912,32 +21111,32 @@ var init_client2 = __esm({ signal: authentication.effectiveSignal(), ...authentication.tenantSnapshot() }) : await authentication.getToken(); - return buildHeaders2([{ Authorization: `Bearer ${token}` }]); + return buildHeaders([{ Authorization: `Bearer ${token}` }]); } const { apiKey } = await resolveRealtimeAPIKey(this); if (apiKey == null) { return void 0; } - return buildHeaders2([{ Authorization: `Bearer ${apiKey}` }]); + return buildHeaders([{ Authorization: `Bearer ${apiKey}` }]); } async adminAPIKeyAuth(opts) { if (this.adminAPIKey == null) { return void 0; } - return buildHeaders2([{ Authorization: `Bearer ${this.adminAPIKey}` }]); + return buildHeaders([{ Authorization: `Bearer ${this.adminAPIKey}` }]); } stringifyQuery(query) { - return stringifyQuery2(query); + return stringifyQuery(query); } getUserAgent() { - return `${this.constructor.name}/JS ${VERSION2}`; + return `${this.constructor.name}/JS ${VERSION}`; } defaultIdempotencyKey() { - return `stainless-node-retry-${uuid42()}`; + return `stainless-node-retry-${uuid4()}`; } makeStatusError(status, error, message, headers) { const normalizedError = error && typeof error === "object" && error.error == null ? { error } : error; - return APIError2.generate(status, normalizedError, message, headers); + return APIError.generate(status, normalizedError, message, headers); } _hasApiKeyProvider() { return typeof this._options.apiKey === "function"; @@ -38980,11 +21179,11 @@ var init_client2 = __esm({ return true; } buildURL(path5, query, defaultBaseURL) { - const baseURL = !__classPrivateFieldGet2(this, _OpenAI_instances, "m", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL || this.baseURL; - const url = isAbsoluteURL2(path5) ? new URL(path5) : new URL(baseURL + (baseURL.endsWith("/") && path5.startsWith("/") ? path5.slice(1) : path5)); + const baseURL = !__classPrivateFieldGet(this, _OpenAI_instances, "m", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL || this.baseURL; + const url = isAbsoluteURL(path5) ? new URL(path5) : new URL(baseURL + (baseURL.endsWith("/") && path5.startsWith("/") ? path5.slice(1) : path5)); const defaultQuery = this.defaultQuery(); const pathQuery = Object.fromEntries(url.searchParams); - if (!isEmptyObj2(defaultQuery) || !isEmptyObj2(pathQuery)) { + if (!isEmptyObj(defaultQuery) || !isEmptyObj(pathQuery)) { query = { ...pathQuery, ...defaultQuery, ...query }; } if (typeof query === "object" && query && !Array.isArray(query)) { @@ -39029,13 +21228,13 @@ var init_client2 = __esm({ })); } request(options, remainingRetries = null) { - const authentication = __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f") ?? this._workloadIdentityAuth; + const authentication = __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f") ?? this._workloadIdentityAuth; const request2 = authentication instanceof X509WorkloadIdentityAuth ? Promise.resolve(options).then((resolved) => authentication.runRequest(() => this.makeRequest(resolved, remainingRetries, void 0), this)) : this.makeRequest(options, remainingRetries, void 0); return this.responsePromise(request2); } responsePromise(request2, parse2 = (client, props) => this.parseResponseWithTimeout(client, props)) { - const promise = new APIPromise2(this, request2, (client, props) => { - const resume = __classPrivateFieldGet2(this, _OpenAI_responseAttempts, "f").get(props.controller)?.continueRequest; + const promise = new APIPromise(this, request2, (client, props) => { + const resume = __classPrivateFieldGet(this, _OpenAI_responseAttempts, "f").get(props.controller)?.continueRequest; return resume ? resume(() => parse2(client, props)) : parse2(client, props); }); promise.withResponse = async () => { @@ -39048,21 +21247,21 @@ var init_client2 = __esm({ } async parseResponseWithTimeout(client, props) { if (props.options.stream || props.options.__binaryResponse || props.response.status === 204 || props.response.headers.get("content-length") === "0") { - return defaultParseResponse2(client, props); + return defaultParseResponse(client, props); } while (true) { - const attempt = __classPrivateFieldGet2(this, _OpenAI_responseAttempts, "f").get(props.controller); + const attempt = __classPrivateFieldGet(this, _OpenAI_responseAttempts, "f").get(props.controller); const timeout = attempt?.timeout ?? props.options.timeout ?? this.timeout; const x509Authentication = attempt?.authentication; const callerSignal = x509Authentication ? props.controller.signal : props.options.signal; - const abortError2 = () => x509Authentication && callerSignal ? this._makeUserAbortError(callerSignal) : new APIUserAbortError2(); + const abortError2 = () => x509Authentication && callerSignal ? this._makeUserAbortError(callerSignal) : new APIUserAbortError(); let remaining; try { remaining = x509Authentication?.remainingTimeout(props.options, timeout) ?? Math.max(0, props.startTime + timeout - Date.now()); } catch (error) { const cancellation = callerSignal?.aborted ? abortError2() : void 0; props.controller.abort(); - void CancelReadableStream2(props.response.body).catch(() => void 0); + void CancelReadableStream(props.response.body).catch(() => void 0); throw cancellation ?? error; } let timer; @@ -39076,7 +21275,7 @@ var init_client2 = __esm({ timer = setTimeout(() => { timedOut = true; props.controller.abort(); - reject2(new APIConnectionTimeoutError2()); + reject2(new APIConnectionTimeoutError()); }, remaining); if (callerSignal) { abortListener = () => { @@ -39086,7 +21285,7 @@ var init_client2 = __esm({ callerSignal.addEventListener("abort", abortListener, { once: true }); } }); - return await Promise.race([defaultParseResponse2(client, props), timeoutPromise]); + return await Promise.race([defaultParseResponse(client, props), timeoutPromise]); } catch (error) { if (callerSignal?.aborted && !timedOut) { throw abortError2(); @@ -39096,7 +21295,7 @@ var init_client2 = __esm({ throw new SyntaxError("X.509 workload identity API response contains invalid JSON."); } if (x509Authentication && !(error instanceof OpenAIError)) { - throw new APIConnectionError2({ + throw new APIConnectionError({ message: "X.509 workload identity API response body could not be read." }); } @@ -39104,7 +21303,7 @@ var init_client2 = __esm({ } const retriesRemaining = attempt?.retriesRemaining ?? 0; if (!retriesRemaining || attempt?.hasStreamingBody || props.options.__metadata?.["hasStreamingBody"] || globalThis.ReadableStream && props.options.body instanceof globalThis.ReadableStream || typeof props.options.body === "object" && props.options.body !== null && (Symbol.asyncIterator in props.options.body || Symbol.iterator in props.options.body && "next" in props.options.body && typeof props.options.body.next === "function")) { - throw new APIConnectionTimeoutError2(); + throw new APIConnectionTimeoutError(); } if (timer !== void 0) clearTimeout(timer); @@ -39134,7 +21333,7 @@ var init_client2 = __esm({ try { const remaining = authentication.remainingTimeout(options, timeout); const expiration = authentication.waitForRetry(remaining, deadline.signal).then(() => { - throw new APIConnectionTimeoutError2(); + throw new APIConnectionTimeoutError(); }); const body = await Promise.race([ response.text().catch(() => "X.509 workload identity API response body could not be read."), @@ -39145,10 +21344,10 @@ var init_client2 = __esm({ } return body; } catch (error) { - if (error instanceof APIConnectionTimeoutError2) { + if (error instanceof APIConnectionTimeoutError) { timedOut = !callerSignal.aborted; controller.abort(); - void CancelReadableStream2(response.body).catch(() => void 0); + void CancelReadableStream(response.body).catch(() => void 0); } if (callerSignal.aborted && !timedOut) { throw this._makeUserAbortError(callerSignal); @@ -39165,7 +21364,7 @@ var init_client2 = __esm({ if (retriesRemaining == null) { retriesRemaining = maxRetries; } - const x509Authentication = __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f"); + const x509Authentication = __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f"); x509Authentication?.beginRequestPreparation(); await this.prepareOptions(options); x509Authentication?.beginRequestPlanning(); @@ -39176,7 +21375,7 @@ var init_client2 = __esm({ }); built = { req: candidate.req, url: candidate.url, timeout: candidate.timeout }; if (x509Authentication) { - validatePositiveInteger2("timeout", built.timeout); + validatePositiveInteger("timeout", built.timeout); x509Authentication.authorizePlannedRequest(built.url, built.req, built.timeout); if (X509WorkloadIdentityAuth.isStreamingRequestBody(built.req.body)) { options.__metadata = { ...options.__metadata, hasStreamingBody: true }; @@ -39197,13 +21396,13 @@ var init_client2 = __esm({ const security2 = options.__security ?? { bearerAuth: true }; const authenticationHeaders = await this.authHeaders(options, security2); const suppliedHeaders = x509Authentication.headerSnapshots(); - const supplied2 = buildHeaders2([suppliedHeaders.defaultHeaders, suppliedHeaders.requestHeaders]); + const supplied2 = buildHeaders([suppliedHeaders.defaultHeaders, suppliedHeaders.requestHeaders]); for (const [name, value2] of authenticationHeaders?.values ?? []) { if (!supplied2.nulls.has(name) && !built.req.headers.has(name)) { built.req.headers.set(name, value2); } } - this.validateHeaders(buildHeaders2([supplied2, built.req.headers]), security2); + this.validateHeaders(buildHeaders([supplied2, built.req.headers]), security2); } } catch (error) { x509Authentication?.retireRequestBody(); @@ -39229,7 +21428,7 @@ var init_client2 = __esm({ const startTime = x509Authentication?.requestStartedAt(options) ?? Date.now(); if (this.logLevel === "debug") { const body = typeof req.body === "string" ? { type: "string", length: req.body.length } : req.body; - loggerFor2(this).debug(`[${requestLogID}] sending request`, formatRequestDetails2({ + loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({ retryOfRequestLogID, method: options.method, url, @@ -39242,21 +21441,21 @@ var init_client2 = __esm({ throw this._makeUserAbortError(callerSignal?.aborted ? callerSignal : req.signal); } const security = options.__security ?? { bearerAuth: true }; - const controller = x509Authentication || this.fetchWithTimeout === _a4.prototype.fetchWithTimeout ? createRequestController(req.signal ?? (x509Authentication ? callerSignal : void 0), x509Authentication ? callerSignal : void 0) : new AbortController(); + const controller = x509Authentication || this.fetchWithTimeout === _a3.prototype.fetchWithTimeout ? createRequestController(req.signal ?? (x509Authentication ? callerSignal : void 0), x509Authentication ? callerSignal : void 0) : new AbortController(); const remainingTimeout = x509Authentication?.remainingTimeout(options, timeout) ?? timeout; - const fetchWithAuth = x509Authentication ? _a4.prototype.fetchWithAuth : this.fetchWithAuth; + const fetchWithAuth = x509Authentication ? _a3.prototype.fetchWithAuth : this.fetchWithAuth; x509Authentication?.releaseRequestBody(req.body); - const response = await fetchWithAuth.call(this, url, req, remainingTimeout, controller, security).catch(castToError2); + const response = await fetchWithAuth.call(this, url, req, remainingTimeout, controller, security).catch(castToError); const headersTime = Date.now(); if (response instanceof globalThis.Error) { const retryMessage = `retrying, ${retriesRemaining} attempts remaining`; if (callerSignal?.aborted || req.signal?.aborted) { throw this._makeUserAbortError(callerSignal?.aborted ? callerSignal : req.signal); } - const isTimeout = isAbortError2(response) || /timed? ?out/i.test(String(response) + ("cause" in response ? String(response.cause) : "")); + const isTimeout = isAbortError(response) || /timed? ?out/i.test(String(response) + ("cause" in response ? String(response.cause) : "")); if (retriesRemaining && !hasStreamingBody && (!x509Authentication || isTransientX509ConnectionError2(response))) { - loggerFor2(this).info(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} - ${retryMessage}`); - loggerFor2(this).debug(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} (${retryMessage})`, formatRequestDetails2({ + loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} - ${retryMessage}`); + loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} (${retryMessage})`, formatRequestDetails({ retryOfRequestLogID, url, durationMs: headersTime - startTime, @@ -39265,8 +21464,8 @@ var init_client2 = __esm({ return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, void 0, req.signal); } const terminalMessage = hasStreamingBody ? "error; streaming body cannot be retried" : "error; no more retries left"; - loggerFor2(this).info(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} - ${terminalMessage}`); - loggerFor2(this).debug(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} (${terminalMessage})`, formatRequestDetails2({ + loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} - ${terminalMessage}`); + loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} (${terminalMessage})`, formatRequestDetails({ retryOfRequestLogID, url, durationMs: headersTime - startTime, @@ -39278,18 +21477,18 @@ var init_client2 = __esm({ if (isTimeout) { const transportCause = "cause" in response ? response.cause : void 0; const isHeadersTimeout = typeof transportCause === "object" && transportCause !== null && "code" in transportCause && transportCause.code === "UND_ERR_HEADERS_TIMEOUT"; - const timeoutError = isHeadersTimeout ? new APIConnectionTimeoutError2({ + const timeoutError = isHeadersTimeout ? new APIConnectionTimeoutError({ message: "Request timed out. Node.js fetch timed out waiting for response headers; configure a matching undici fetch and fetchOptions.dispatcher with an Agent whose headersTimeout is at least the SDK timeout." - }) : new APIConnectionTimeoutError2(); + }) : new APIConnectionTimeoutError(); if (x509Authentication) { - throw new APIConnectionTimeoutError2(); + throw new APIConnectionTimeoutError(); } throw Object.assign(timeoutError, { cause: response }); } if (x509Authentication) { - throw new APIConnectionError2({ message: "X.509 workload identity API connection failed." }); + throw new APIConnectionError({ message: "X.509 workload identity API connection failed." }); } - throw new APIConnectionError2({ + throw new APIConnectionError({ message: getConnectionErrorMessage(response), cause: response }); @@ -39303,9 +21502,9 @@ var init_client2 = __esm({ } if (response.status === 401 && (x509Authentication || this._workloadIdentityAuth) && security.bearerAuth && (!x509Authentication || x509Authentication.usedWorkloadToken(options)) && (!x509Authentication || retriesRemaining > 0) && !hasStreamingBody && !options.__metadata?.["workloadIdentityTokenRefreshed"]) { if (x509Authentication) { - void CancelReadableStream2(response.body).catch(() => void 0); + void CancelReadableStream(response.body).catch(() => void 0); } else { - await CancelReadableStream2(response.body); + await CancelReadableStream(response.body); this._workloadIdentityAuth?.invalidateToken(); } const replayOptions = { @@ -39321,12 +21520,12 @@ var init_client2 = __esm({ if (retriesRemaining && shouldRetry && !hasStreamingBody) { const retryMessage2 = `retrying, ${retriesRemaining} attempts remaining`; if (x509Authentication) { - void CancelReadableStream2(response.body).catch(() => void 0); + void CancelReadableStream(response.body).catch(() => void 0); } else { - await CancelReadableStream2(response.body); + await CancelReadableStream(response.body); } - loggerFor2(this).info(`${responseInfo} - ${retryMessage2}`); - loggerFor2(this).debug(`[${requestLogID}] response error (${retryMessage2})`, formatRequestDetails2({ + loggerFor(this).info(`${responseInfo} - ${retryMessage2}`); + loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage2})`, formatRequestDetails({ retryOfRequestLogID, url: response.url, status: response.status, @@ -39336,11 +21535,11 @@ var init_client2 = __esm({ return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers, req.signal); } const retryMessage = shouldRetry ? hasStreamingBody ? `error; streaming body cannot be retried` : `error; no more retries left` : `error; not retryable`; - loggerFor2(this).info(`${responseInfo} - ${retryMessage}`); - const errText = x509Authentication ? await this.readX509ResponseError(response, options, timeout, controller, x509Authentication) : await response.text().catch((err2) => castToError2(err2).message); - const errJSON = safeJSON2(errText); + loggerFor(this).info(`${responseInfo} - ${retryMessage}`); + const errText = x509Authentication ? await this.readX509ResponseError(response, options, timeout, controller, x509Authentication) : await response.text().catch((err2) => castToError(err2).message); + const errJSON = safeJSON(errText); const errMessage = errJSON ? void 0 : errText; - loggerFor2(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails2({ + loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({ retryOfRequestLogID, url: response.url, status: response.status, @@ -39351,8 +21550,8 @@ var init_client2 = __esm({ const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers); throw err; } - loggerFor2(this).info(responseInfo); - loggerFor2(this).debug(`[${requestLogID}] response start`, formatRequestDetails2({ + loggerFor(this).info(responseInfo); + loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({ retryOfRequestLogID, url: response.url, status: response.status, @@ -39361,7 +21560,7 @@ var init_client2 = __esm({ })); const continueRequest = x509Authentication?.continuation(); x509Authentication?.releaseRequestCredentials(); - __classPrivateFieldGet2(this, _OpenAI_responseAttempts, "f").set(controller, { + __classPrivateFieldGet(this, _OpenAI_responseAttempts, "f").set(controller, { timeout, retriesRemaining, hasStreamingBody, @@ -39383,9 +21582,9 @@ var init_client2 = __esm({ return this.requestAPIList(Page3, opts && "then" in opts ? opts.then((opts2) => ({ method: "get", path: path5, ...opts2 })) : { method: "get", path: path5, ...opts }); } requestAPIList(Page3, options) { - const authentication = __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f") ?? this._workloadIdentityAuth; + const authentication = __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f") ?? this._workloadIdentityAuth; const request2 = authentication instanceof X509WorkloadIdentityAuth ? Promise.resolve(options).then((resolved) => authentication.runRequest(() => this.makeRequest(resolved, null, void 0), this)) : this.makeRequest(options, null, void 0); - const page2 = new PagePromise2(this, request2, Page3); + const page2 = new PagePromise(this, request2, Page3); const guarded = this.responsePromise(request2, async (client, props) => { const body = await this.parseResponseWithTimeout(client, props); return new Page3(client, props.response, body, props.options); @@ -39401,7 +21600,7 @@ var init_client2 = __esm({ bearerAuth: true, adminAPIKeyAuth: true }) { - if (this._workloadIdentityAuth && !__classPrivateFieldGet2(this, _OpenAI_x509Fetch, "f") && schemes.bearerAuth) { + if (this._workloadIdentityAuth && !__classPrivateFieldGet(this, _OpenAI_x509Fetch, "f") && schemes.bearerAuth) { const headers = init.headers; const authHeader = headers.get("Authorization"); if (authHeader === `Bearer ${WORKLOAD_IDENTITY_API_KEY_PLACEHOLDER}`) { @@ -39409,7 +21608,7 @@ var init_client2 = __esm({ headers.set("Authorization", `Bearer ${token}`); } } - const fetchWithTimeout = __classPrivateFieldGet2(this, _OpenAI_x509Fetch, "f") ? _a4.prototype.fetchWithTimeout : this.fetchWithTimeout; + const fetchWithTimeout = __classPrivateFieldGet(this, _OpenAI_x509Fetch, "f") ? _a3.prototype.fetchWithTimeout : this.fetchWithTimeout; const response = await fetchWithTimeout.call(this, url, init, timeout, controller); return response; } @@ -39430,7 +21629,7 @@ var init_client2 = __esm({ fetchOptions.method = method.toUpperCase(); } try { - const response = await (__classPrivateFieldGet2(this, _OpenAI_x509Fetch, "f") ?? this.fetch).call(void 0, url, fetchOptions); + const response = await (__classPrivateFieldGet(this, _OpenAI_x509Fetch, "f") ?? this.fetch).call(void 0, url, fetchOptions); if (cleanup) { retainRequestAbortCallback(response.body ?? response, abort, controller.signal); } @@ -39480,11 +21679,11 @@ var init_client2 = __esm({ const maxRetries = options.maxRetries ?? this.maxRetries; timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries); } - const x509Authentication = __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f"); + const x509Authentication = __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f"); if (x509Authentication) { const remaining = x509Authentication.remainingTimeout(options, x509Authentication.requestSnapshot().timeout); if (timeoutMillis >= remaining) { - throw new APIConnectionTimeoutError2(); + throw new APIConnectionTimeoutError(); } } if (x509Authentication) { @@ -39492,7 +21691,7 @@ var init_client2 = __esm({ } else { const retrySignals = requestSignal === options.signal ? [requestSignal] : [requestSignal, options.signal]; try { - await sleep2(timeoutMillis, ...retrySignals); + await sleep(timeoutMillis, ...retrySignals); } catch (error) { const abortedSignal = retrySignals.find((signal) => signal?.aborted); if (abortedSignal) { @@ -39518,16 +21717,16 @@ var init_client2 = __esm({ * can call `this.authHeaders()` to resolve headers with request-local credentials. */ async buildRequest(inputOptions, { retryCount = 0 } = {}) { - if (__classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f") && !__classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f").inRequest(this)) { - const authentication = __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f"); + if (__classPrivateFieldGet(this, _OpenAI_x509Authentication, "f") && !__classPrivateFieldGet(this, _OpenAI_x509Authentication, "f").inRequest(this)) { + const authentication = __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f"); return await authentication.runRequest(async () => { - const built = await _a4.prototype.buildRequest.call(this, inputOptions, { retryCount }); + const built = await _a3.prototype.buildRequest.call(this, inputOptions, { retryCount }); authentication.releaseRequestBody(built.req.body); return built; }, this); } const options = { ...inputOptions }; - const x509Authentication = __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f"); + const x509Authentication = __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f"); const x509Tenant = x509Authentication?.snapshotTenant(this.organization, this.project); const x509Headers = x509Authentication?.snapshotHeaders(this._options.defaultHeaders, options.headers); if (x509Headers) { @@ -39540,7 +21739,7 @@ var init_client2 = __esm({ x509Authentication?.snapshotAPIURL(url); const explicitTimeout = "timeout" in options; if (explicitTimeout) - validatePositiveInteger2("timeout", options.timeout); + validatePositiveInteger("timeout", options.timeout); options.timeout = options.timeout ?? this.timeout; if (x509Authentication && x509RequestFetchOptions) { x509Authentication.snapshotRequest(options.signal, options.timeout, x509RequestFetchOptions); @@ -39593,25 +21792,25 @@ var init_client2 = __esm({ } const helperMethod = options.__metadata?.["helperMethod"]; const timeout = x509Headers ? x509Timeout : options.timeout; - const headers = buildHeaders2([ + const headers = buildHeaders([ idempotencyHeaders, { Accept: "application/json", ...!isRunningInBrowserOrBrowserWorker() ? { "User-Agent": this.getUserAgent() } : void 0, "X-Stainless-Retry-Count": String(retryCount), ...timeout ? { "X-Stainless-Timeout": String(Math.trunc(timeout / 1e3)) } : {}, - ...getPlatformHeaders2(), + ...getPlatformHeaders(), ...typeof helperMethod === "string" ? { "X-Stainless-Helper-Method": helperMethod } : {}, "OpenAI-Organization": x509Tenant ? x509Tenant.organization : this.organization, "OpenAI-Project": x509Tenant ? x509Tenant.project : this.project }, // X.509 owns streaming uploads before authentication so it can retire them on failure. - __classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f") && !__classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f").isPlanningRequest() ? await this.authHeaders(options, options.__security ?? { bearerAuth: true }) : authenticationHeaders, + __classPrivateFieldGet(this, _OpenAI_x509Authentication, "f") && !__classPrivateFieldGet(this, _OpenAI_x509Authentication, "f").isPlanningRequest() ? await this.authHeaders(options, options.__security ?? { bearerAuth: true }) : authenticationHeaders, x509Headers?.defaultHeaders ?? this._options.defaultHeaders, bodyHeaders, x509Headers?.requestHeaders ?? options.headers ]); - if (!this._provider && !__classPrivateFieldGet2(this, _OpenAI_x509Authentication, "f")?.isPlanningRequest()) { + if (!this._provider && !__classPrivateFieldGet(this, _OpenAI_x509Authentication, "f")?.isPlanningRequest()) { this.validateHeaders(headers, options.__security ?? { bearerAuth: true }); } return headers.values; @@ -39620,7 +21819,7 @@ var init_client2 = __esm({ return () => controller.abort(); } _makeUserAbortError(signal) { - const error = new APIUserAbortError2(); + const error = new APIUserAbortError(); Object.defineProperty(error, "cause", { value: signal.reason, writable: true, configurable: true }); return error; } @@ -39628,11 +21827,11 @@ var init_client2 = __esm({ const { body, headers: rawHeaders } = options; if (!body) { if (body === void 0 && "body" in options) { - return { ...__classPrivateFieldGet2(this, _OpenAI_encoder, "f").call(this, { body, headers: buildHeaders2([rawHeaders]) }), isStreamingBody: false }; + return { ...__classPrivateFieldGet(this, _OpenAI_encoder, "f").call(this, { body, headers: buildHeaders([rawHeaders]) }), isStreamingBody: false }; } return { bodyHeaders: void 0, body: void 0, isStreamingBody: false }; } - const headers = buildHeaders2([rawHeaders]); + const headers = buildHeaders([rawHeaders]); const isReadableStream2 = typeof globalThis.ReadableStream !== "undefined" && body instanceof globalThis.ReadableStream; const isRetryableBody = !isReadableStream2 && (typeof body === "string" || body instanceof ArrayBuffer || ArrayBuffer.isView(body) || typeof globalThis.Blob !== "undefined" && body instanceof globalThis.Blob || body instanceof URLSearchParams || body instanceof FormData); if ( @@ -39648,7 +21847,7 @@ var init_client2 = __esm({ } else if (typeof body === "object" && (Symbol.asyncIterator in body || Symbol.iterator in body && "next" in body && typeof body.next === "function")) { return { bodyHeaders: void 0, - body: ReadableStreamFrom2(body), + body: ReadableStreamFrom(body), isStreamingBody: true }; } else if (typeof body === "object" && headers.values.get("content-type") === "application/x-www-form-urlencoded") { @@ -39658,47 +21857,47 @@ var init_client2 = __esm({ isStreamingBody: false }; } else { - return { ...__classPrivateFieldGet2(this, _OpenAI_encoder, "f").call(this, { body, headers }), isStreamingBody: false }; + return { ...__classPrivateFieldGet(this, _OpenAI_encoder, "f").call(this, { body, headers }), isStreamingBody: false }; } } }; - _a4 = OpenAI, _OpenAI_encoder = /* @__PURE__ */ new WeakMap(), _OpenAI_x509Authentication = /* @__PURE__ */ new WeakMap(), _OpenAI_x509Credential = /* @__PURE__ */ new WeakMap(), _OpenAI_x509Fetch = /* @__PURE__ */ new WeakMap(), _OpenAI_explicitDataResidency = /* @__PURE__ */ new WeakMap(), _OpenAI_responseAttempts = /* @__PURE__ */ new WeakMap(), _OpenAI_instances = /* @__PURE__ */ new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden2() { - return __classPrivateFieldGet2(this, _OpenAI_explicitDataResidency, "f") || this._provider !== void 0 || this.baseURL !== "https://api.openai.com/v1"; + _a3 = OpenAI, _OpenAI_encoder = /* @__PURE__ */ new WeakMap(), _OpenAI_x509Authentication = /* @__PURE__ */ new WeakMap(), _OpenAI_x509Credential = /* @__PURE__ */ new WeakMap(), _OpenAI_x509Fetch = /* @__PURE__ */ new WeakMap(), _OpenAI_explicitDataResidency = /* @__PURE__ */ new WeakMap(), _OpenAI_responseAttempts = /* @__PURE__ */ new WeakMap(), _OpenAI_instances = /* @__PURE__ */ new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden2() { + return __classPrivateFieldGet(this, _OpenAI_explicitDataResidency, "f") || this._provider !== void 0 || this.baseURL !== "https://api.openai.com/v1"; }; - OpenAI.OpenAI = _a4; + OpenAI.OpenAI = _a3; OpenAI.DEFAULT_TIMEOUT = 6e5; OpenAI.OpenAIError = OpenAIError; - OpenAI.APIError = APIError2; - OpenAI.APIConnectionError = APIConnectionError2; - OpenAI.APIConnectionTimeoutError = APIConnectionTimeoutError2; - OpenAI.APIUserAbortError = APIUserAbortError2; - OpenAI.NotFoundError = NotFoundError2; - OpenAI.ConflictError = ConflictError2; - OpenAI.RateLimitError = RateLimitError2; - OpenAI.BadRequestError = BadRequestError2; - OpenAI.AuthenticationError = AuthenticationError2; - OpenAI.InternalServerError = InternalServerError2; - OpenAI.PermissionDeniedError = PermissionDeniedError2; - OpenAI.UnprocessableEntityError = UnprocessableEntityError2; + OpenAI.APIError = APIError; + OpenAI.APIConnectionError = APIConnectionError; + OpenAI.APIConnectionTimeoutError = APIConnectionTimeoutError; + OpenAI.APIUserAbortError = APIUserAbortError; + OpenAI.NotFoundError = NotFoundError; + OpenAI.ConflictError = ConflictError; + OpenAI.RateLimitError = RateLimitError; + OpenAI.BadRequestError = BadRequestError; + OpenAI.AuthenticationError = AuthenticationError; + OpenAI.InternalServerError = InternalServerError; + OpenAI.PermissionDeniedError = PermissionDeniedError; + OpenAI.UnprocessableEntityError = UnprocessableEntityError; OpenAI.InvalidWebhookSignatureError = InvalidWebhookSignatureError; - OpenAI.toFile = toFile2; + OpenAI.toFile = toFile; OpenAI.toStreamingFile = toStreamingFile; - OpenAI.Completions = Completions3; + OpenAI.Completions = Completions2; OpenAI.Chat = Chat; OpenAI.Embeddings = Embeddings; - OpenAI.Files = Files5; + OpenAI.Files = Files3; OpenAI.Images = Images; OpenAI.ContentProvenanceChecks = ContentProvenanceChecks; OpenAI.Audio = Audio; OpenAI.Moderations = Moderations; - OpenAI.Models = Models3; + OpenAI.Models = Models; OpenAI.FineTuning = FineTuning; OpenAI.Graders = Graders2; OpenAI.VectorStores = VectorStores; OpenAI.Safety = Safety; - OpenAI.Webhooks = Webhooks2; - OpenAI.Beta = Beta2; - OpenAI.Batches = Batches3; + OpenAI.Webhooks = Webhooks; + OpenAI.Beta = Beta; + OpenAI.Batches = Batches; OpenAI.Uploads = Uploads; OpenAI.Admin = Admin; OpenAI.Responses = Responses2; @@ -39707,12 +21906,12 @@ var init_client2 = __esm({ OpenAI.Conversations = Conversations; OpenAI.Evals = Evals; OpenAI.Containers = Containers; - OpenAI.Skills = Skills3; + OpenAI.Skills = Skills; OpenAI.Videos = Videos; OpenAI.ConversationCursorPage = ConversationCursorPage; OpenAI.CursorPage = CursorPage; OpenAI.NextCursorPage = NextCursorPage; - OpenAI.Page = Page2; + OpenAI.Page = Page; OpenAI.TokenPage = TokenPage; composedCallerSignals = /* @__PURE__ */ new WeakMap(); } @@ -39721,11 +21920,11 @@ var init_client2 = __esm({ // node_modules/openai/azure.mjs var init_azure = __esm({ "node_modules/openai/azure.mjs"() { - init_headers3(); - init_error4(); - init_utils4(); - init_path2(); - init_client2(); + init_headers(); + init_error2(); + init_utils2(); + init_path(); + init_client(); init_data_residency(); } }); @@ -39734,38 +21933,38 @@ var init_azure = __esm({ var brand_privateBedrockClient; var init_bedrock = __esm({ "node_modules/openai/internal/bedrock.mjs"() { - init_error4(); - init_utils4(); + init_error2(); + init_utils2(); brand_privateBedrockClient = /* @__PURE__ */ Symbol.for("openai.privateBedrockClient"); } }); // node_modules/openai/bedrock.mjs -var _a5; +var _a4; var init_bedrock2 = __esm({ "node_modules/openai/bedrock.mjs"() { - init_error4(); - init_client2(); + init_error2(); + init_client(); init_realtime_credentials(); init_data_residency(); init_bedrock(); - init_headers3(); - init_utils4(); + init_headers(); + init_utils2(); init_ResponsesParser(); - init_resources3(); - _a5 = brand_privateBedrockClient; + init_resources(); + _a4 = brand_privateBedrockClient; } }); // node_modules/openai/index.mjs var init_openai = __esm({ "node_modules/openai/index.mjs"() { - init_client2(); - init_uploads4(); - init_api_promise2(); - init_client2(); - init_pagination2(); - init_error3(); + init_client(); + init_uploads2(); + init_api_promise(); + init_client(); + init_pagination(); + init_error(); init_azure(); init_bedrock2(); } @@ -39774,7 +21973,7 @@ var init_openai = __esm({ // node_modules/@earendil-works/pi-ai/dist/utils/error-body.js function normalizeProviderError(error) { if (!(error instanceof Error)) { - return { message: safeJsonStringify2(error), messageCarriesBody: false }; + return { message: safeJsonStringify(error), messageCarriesBody: false }; } const sdkError = error; const status = extractStatus(sdkError); @@ -39811,14 +22010,14 @@ function pickBodyText(error) { if (typeof error.body === "string") return error.body; if (isPlainNonEmptyObject(error.error)) - return safeJsonStringify2(error.error); + return safeJsonStringify(error.error); const responseBody = error.$response?.body; if (typeof responseBody === "string") return responseBody; if (isReadableStreamLike(responseBody)) return void 0; if (isPlainNonEmptyObject(responseBody)) - return safeJsonStringify2(responseBody); + return safeJsonStringify(responseBody); return void 0; } function isReadableStreamLike(value2) { @@ -39843,7 +22042,7 @@ function truncateErrorText(text, maxChars) { return text; return `${ownedSlice(text, 0, maxChars)}... [truncated ${text.length - maxChars} chars]`; } -function safeJsonStringify2(value2) { +function safeJsonStringify(value2) { try { const serialized = JSON.stringify(value2); return serialized === void 0 ? String(value2) : serialized; @@ -39859,6 +22058,1261 @@ var init_error_body = __esm({ } }); +// node_modules/@earendil-works/pi-ai/dist/utils/hash.js +function shortHash(str2) { + let h1 = 3735928559; + let h2 = 1103547991; + for (let i = 0; i < str2.length; i++) { + const ch = str2.charCodeAt(i); + h1 = Math.imul(h1 ^ ch, 2654435761); + h2 = Math.imul(h2 ^ ch, 1597334677); + } + h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507) ^ Math.imul(h2 ^ h2 >>> 13, 3266489909); + h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507) ^ Math.imul(h1 ^ h1 >>> 13, 3266489909); + return (h2 >>> 0).toString(36) + (h1 >>> 0).toString(36); +} +var init_hash = __esm({ + "node_modules/@earendil-works/pi-ai/dist/utils/hash.js"() { + } +}); + +// node_modules/@earendil-works/pi-ai/dist/utils/headers.js +function headersToRecord(headers) { + const result = {}; + for (const [key, value2] of headers.entries()) { + result[key] = value2; + } + return result; +} +var init_headers2 = __esm({ + "node_modules/@earendil-works/pi-ai/dist/utils/headers.js"() { + } +}); + +// node_modules/@earendil-works/pi-ai/dist/utils/openrouter-cost.js +function isValidCost(value2) { + return typeof value2 === "number" && Number.isFinite(value2) && value2 >= 0; +} +function isOpenRouterModel(model2) { + return model2.provider === "openrouter" || model2.baseUrl.includes("openrouter.ai"); +} +function applyOpenRouterReportedCost(usage, reported) { + if (!isValidCost(reported.cost)) + return; + if (reported.is_byok === false) { + usage.cost.total = reported.cost; + usage.cost.totalFromProvider = true; + return; + } + if (reported.is_byok === true) { + const details = reported.cost_details; + if (!details) + return; + let upstreamCost = details.upstream_inference_cost; + if (upstreamCost === null) { + if (!isValidCost(details.upstream_inference_prompt_cost) || !isValidCost(details.upstream_inference_completions_cost)) { + return; + } + upstreamCost = details.upstream_inference_prompt_cost + details.upstream_inference_completions_cost; + } + if (!isValidCost(upstreamCost)) + return; + usage.cost.total = reported.cost + upstreamCost; + usage.cost.totalFromProvider = true; + } +} +var init_openrouter_cost = __esm({ + "node_modules/@earendil-works/pi-ai/dist/utils/openrouter-cost.js"() { + } +}); + +// node_modules/@earendil-works/pi-ai/dist/utils/provider-env.js +function getBunSandboxEnvValue(name) { + if (typeof process === "undefined" || !process.versions?.bun || Object.keys(process.env).length > 0) { + return void 0; + } + if (procEnvCache === null) { + procEnvCache = /* @__PURE__ */ new Map(); + try { + const { readFileSync } = __require("node:fs"); + const data = readFileSync("/proc/self/environ", "utf-8"); + for (const entry2 of data.split("\0")) { + const idx = entry2.indexOf("="); + if (idx > 0) { + procEnvCache.set(entry2.slice(0, idx), entry2.slice(idx + 1)); + } + } + } catch { + } + } + return procEnvCache.get(name); +} +function getProviderEnvValue(name, env) { + return env?.[name] || (typeof process !== "undefined" ? process.env[name] : void 0) || getBunSandboxEnvValue(name) || void 0; +} +var procEnvCache; +var init_provider_env = __esm({ + "node_modules/@earendil-works/pi-ai/dist/utils/provider-env.js"() { + procEnvCache = null; + } +}); + +// node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js +function isProviderError(error) { + if (!(error instanceof Error) || !("status" in error) || !("headers" in error)) + return false; + return (error.status === void 0 || typeof error.status === "number") && (error.headers === void 0 || error.headers instanceof Headers); +} +function isRetryableProviderError(error) { + const shouldRetry = error.headers?.get("x-should-retry"); + if (shouldRetry === "true") + return true; + if (shouldRetry === "false") + return false; + if (error.status === void 0) + return true; + return error.status === 408 || error.status === 409 || error.status === 429 || typeof error.status === "number" && error.status >= 500; +} +function validateServerRetryDelayMs(delayMs, maxRetryDelayMs, providerErrorMessage) { + const maxDelayMs = maxRetryDelayMs ?? DEFAULT_MAX_RETRY_DELAY_MS; + if (maxDelayMs > 0 && delayMs > maxDelayMs) { + throw new Error(`Server requested ${Math.ceil(delayMs / 1e3)}s retry delay (max: ${Math.ceil(maxDelayMs / 1e3)}s). ${providerErrorMessage}`); + } + return delayMs; +} +function getRetryDelayMs(error, retryIndex, maxRetryDelayMs) { + const retryAfterMs = error.headers?.get("retry-after-ms"); + if (retryAfterMs) { + const value2 = Number.parseFloat(retryAfterMs); + if (Number.isFinite(value2)) + return validateServerRetryDelayMs(value2, maxRetryDelayMs, error.message); + } + const retryAfter = error.headers?.get("retry-after"); + if (retryAfter) { + const seconds = Number.parseFloat(retryAfter); + const delayMs = Number.isNaN(seconds) ? Date.parse(retryAfter) - Date.now() : seconds * 1e3; + if (Number.isFinite(delayMs)) + return validateServerRetryDelayMs(delayMs, maxRetryDelayMs, error.message); + } + const exponentialDelay = Math.min(0.5 * 2 ** retryIndex, 8) * 1e3; + return exponentialDelay * (1 - Math.random() * 0.25); +} +function createAbortError() { + const error = new Error("Request aborted"); + error.name = "AbortError"; + return error; +} +function abortableSleep(ms, signal) { + return new Promise((resolve2, reject2) => { + if (signal?.aborted) { + reject2(createAbortError()); + return; + } + const onAbort = () => { + clearTimeout(timeout); + reject2(createAbortError()); + }; + const timeout = setTimeout(() => { + signal?.removeEventListener("abort", onAbort); + resolve2(); + }, Math.max(0, ms)); + signal?.addEventListener("abort", onAbort, { once: true }); + }); +} +async function retryProviderRequest(request2, options = {}) { + const maxRetries = options.maxRetries ?? 0; + let retriesRemaining = maxRetries; + for (; ; ) { + try { + return await request2(); + } catch (error) { + if (options.signal?.aborted) + throw createAbortError(); + if (retriesRemaining <= 0 || !isProviderError(error) || !isRetryableProviderError(error)) + throw error; + if (error.status !== void 0 && options.noRetryStatuses?.includes(error.status)) + throw error; + const retryIndex = maxRetries - retriesRemaining; + retriesRemaining--; + await abortableSleep(getRetryDelayMs(error, retryIndex, options.maxRetryDelayMs), options.signal); + } + } +} +var DEFAULT_MAX_RETRY_DELAY_MS; +var init_provider_retry = __esm({ + "node_modules/@earendil-works/pi-ai/dist/utils/provider-retry.js"() { + DEFAULT_MAX_RETRY_DELAY_MS = 6e4; + } +}); + +// node_modules/@earendil-works/pi-ai/dist/utils/sanitize-unicode.js +function sanitizeSurrogates(text) { + return text.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(? { + const length = jsonString.length; + let index = 0; + const markPartialJSON = (msg) => { + throw new PartialJSON2(`${msg} at position ${index}`); + }; + const throwMalformedError = (msg) => { + throw new MalformedJSON2(`${msg} at position ${index}`); + }; + const parseAny = () => { + skipBlank(); + if (index >= length) + markPartialJSON("Unexpected end of input"); + if (jsonString[index] === '"') + return parseStr(); + if (jsonString[index] === "{") + return parseObj(); + if (jsonString[index] === "[") + return parseArr(); + if (jsonString.substring(index, index + 4) === "null" || options_1.Allow.NULL & allow && length - index < 4 && "null".startsWith(jsonString.substring(index))) { + index += 4; + return null; + } + if (jsonString.substring(index, index + 4) === "true" || options_1.Allow.BOOL & allow && length - index < 4 && "true".startsWith(jsonString.substring(index))) { + index += 4; + return true; + } + if (jsonString.substring(index, index + 5) === "false" || options_1.Allow.BOOL & allow && length - index < 5 && "false".startsWith(jsonString.substring(index))) { + index += 5; + return false; + } + if (jsonString.substring(index, index + 8) === "Infinity" || options_1.Allow.INFINITY & allow && length - index < 8 && "Infinity".startsWith(jsonString.substring(index))) { + index += 8; + return Infinity; + } + if (jsonString.substring(index, index + 9) === "-Infinity" || options_1.Allow._INFINITY & allow && 1 < length - index && length - index < 9 && "-Infinity".startsWith(jsonString.substring(index))) { + index += 9; + return -Infinity; + } + if (jsonString.substring(index, index + 3) === "NaN" || options_1.Allow.NAN & allow && length - index < 3 && "NaN".startsWith(jsonString.substring(index))) { + index += 3; + return NaN; + } + return parseNum(); + }; + const parseStr = () => { + const start = index; + let escape2 = false; + index++; + while (index < length && (jsonString[index] !== '"' || escape2 && jsonString[index - 1] === "\\")) { + escape2 = jsonString[index] === "\\" ? !escape2 : false; + index++; + } + if (jsonString.charAt(index) == '"') { + try { + return JSON.parse(jsonString.substring(start, ++index - Number(escape2))); + } catch (e) { + throwMalformedError(String(e)); + } + } else if (options_1.Allow.STR & allow) { + try { + return JSON.parse(jsonString.substring(start, index - Number(escape2)) + '"'); + } catch (e) { + return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf("\\")) + '"'); + } + } + markPartialJSON("Unterminated string literal"); + }; + const parseObj = () => { + index++; + skipBlank(); + const obj2 = {}; + try { + while (jsonString[index] !== "}") { + skipBlank(); + if (index >= length && options_1.Allow.OBJ & allow) + return obj2; + const key = parseStr(); + skipBlank(); + index++; + try { + const value2 = parseAny(); + obj2[key] = value2; + } catch (e) { + if (options_1.Allow.OBJ & allow) + return obj2; + else + throw e; + } + skipBlank(); + if (jsonString[index] === ",") + index++; + } + } catch (e) { + if (options_1.Allow.OBJ & allow) + return obj2; + else + markPartialJSON("Expected '}' at end of object"); + } + index++; + return obj2; + }; + const parseArr = () => { + index++; + const arr2 = []; + try { + while (jsonString[index] !== "]") { + arr2.push(parseAny()); + skipBlank(); + if (jsonString[index] === ",") { + index++; + } + } + } catch (e) { + if (options_1.Allow.ARR & allow) { + return arr2; + } + markPartialJSON("Expected ']' at end of array"); + } + index++; + return arr2; + }; + const parseNum = () => { + if (index === 0) { + if (jsonString === "-") + throwMalformedError("Not sure what '-' is"); + try { + return JSON.parse(jsonString); + } catch (e) { + if (options_1.Allow.NUM & allow) + try { + return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf("e"))); + } catch (e2) { + } + throwMalformedError(String(e)); + } + } + const start = index; + if (jsonString[index] === "-") + index++; + while (jsonString[index] && ",]}".indexOf(jsonString[index]) === -1) + index++; + if (index == length && !(options_1.Allow.NUM & allow)) + markPartialJSON("Unterminated number literal"); + try { + return JSON.parse(jsonString.substring(start, index)); + } catch (e) { + if (jsonString.substring(start, index) === "-") + markPartialJSON("Not sure what '-' is"); + try { + return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf("e"))); + } catch (e2) { + throwMalformedError(String(e2)); + } + } + }; + const skipBlank = () => { + while (index < length && " \n\r ".includes(jsonString[index])) { + index++; + } + }; + return parseAny(); + }; + var parse2 = parseJSON2; + exports.parse = parse2; + } +}); + +// node_modules/@earendil-works/pi-ai/dist/utils/json-parse.js +function isControlCharacter(char) { + const codePoint = char.codePointAt(0); + return codePoint !== void 0 && codePoint >= 0 && codePoint <= 31; +} +function escapeControlCharacter(char) { + switch (char) { + case "\b": + return "\\b"; + case "\f": + return "\\f"; + case "\n": + return "\\n"; + case "\r": + return "\\r"; + case " ": + return "\\t"; + default: + return `\\u${char.codePointAt(0)?.toString(16).padStart(4, "0") ?? "0000"}`; + } +} +function repairJson(json) { + let repaired = ""; + let inString = false; + for (let index = 0; index < json.length; index++) { + const char = json[index]; + if (!inString) { + repaired += char; + if (char === '"') { + inString = true; + } + continue; + } + if (char === '"') { + repaired += char; + inString = false; + continue; + } + if (char === "\\") { + const nextChar = json[index + 1]; + if (nextChar === void 0) { + repaired += "\\\\"; + continue; + } + if (nextChar === "u") { + const unicodeDigits = json.slice(index + 2, index + 6); + if (/^[0-9a-fA-F]{4}$/.test(unicodeDigits)) { + repaired += `\\u${unicodeDigits}`; + index += 5; + continue; + } + } + if (VALID_JSON_ESCAPES.has(nextChar)) { + repaired += `\\${nextChar}`; + index += 1; + continue; + } + repaired += "\\\\"; + continue; + } + repaired += isControlCharacter(char) ? escapeControlCharacter(char) : char; + } + return repaired; +} +function parseJsonWithRepair(json) { + try { + return JSON.parse(json); + } catch (error) { + const repairedJson = repairJson(json); + if (repairedJson !== json) { + return JSON.parse(repairedJson); + } + throw error; + } +} +function parseToolCallArguments(json) { + if (!json?.trim()) + return { arguments: {} }; + try { + const parsed = parseJsonWithRepair(json); + if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) { + throw new Error("Tool arguments must be a JSON object"); + } + return { arguments: parsed }; + } catch (error) { + return { + arguments: {}, + argumentsError: `${error instanceof Error ? error.message : String(error)} + +Received arguments: +${json}` + }; + } +} +var import_partial_json, VALID_JSON_ESCAPES; +var init_json_parse = __esm({ + "node_modules/@earendil-works/pi-ai/dist/utils/json-parse.js"() { + import_partial_json = __toESM(require_dist(), 1); + VALID_JSON_ESCAPES = /* @__PURE__ */ new Set(['"', "\\", "/", "b", "f", "n", "r", "t"]); + } +}); + +// node_modules/@earendil-works/pi-ai/dist/utils/streaming-json.js +function isDelimiter(char) { + return char === " " || char === " " || char === "\n" || char === "\r" || char === "," || char === ":" || char === "{" || char === "}" || char === "[" || char === "]" || char === '"'; +} +function isHexDigit(char) { + return char >= "0" && char <= "9" || char >= "a" && char <= "f" || char >= "A" && char <= "F"; +} +function scalarValue(token) { + for (const [literal, value2] of LITERALS) + if (token === literal) + return value2; + return NUMBER.test(token) ? Number(token) : void 0; +} +function pendingScalarValue(token) { + for (const [literal, value2] of LITERALS) + if (literal.startsWith(token)) + return value2; + if (NUMBER.test(token)) + return Number(token); + const mantissa = NUMBER_WITHOUT_EXPONENT_DIGITS.exec(token); + return mantissa === null ? void 0 : Number(mantissa[1]); +} +function setSlot(container, slot, value2) { + if (slot.kind === "element") + container[slot.index] = value2; + else if (slot.kind === "member") + setMember(container, slot.key, value2); +} +function setMember(members, key, value2) { + if (key === "__proto__") { + Object.defineProperty(members, key, { value: value2, writable: true, enumerable: true, configurable: true }); + } else { + members[key] = value2; + } +} +var MAX_REPORTED_DEPTH, ROOT_SLOT, CREDIT_PER_APPEND, CREDIT_PER_CHARACTER, MAX_PENDING_SCALAR_LENGTH, NUMBER, NUMBER_WITHOUT_EXPONENT_DIGITS, LITERALS, QUOTE, BACKSLASH, StreamingJsonParser, ToolCallArgumentsStream, SIMPLE_ESCAPES; +var init_streaming_json = __esm({ + "node_modules/@earendil-works/pi-ai/dist/utils/streaming-json.js"() { + init_json_parse(); + MAX_REPORTED_DEPTH = 32; + ROOT_SLOT = { kind: "root" }; + CREDIT_PER_APPEND = 256; + CREDIT_PER_CHARACTER = 8; + MAX_PENDING_SCALAR_LENGTH = 64; + NUMBER = /^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?$/; + NUMBER_WITHOUT_EXPONENT_DIGITS = /^(-?(?:0|[1-9]\d*)(?:\.\d+)?)[eE][+-]?$/; + LITERALS = [ + ["true", true], + ["false", false], + ["null", null] + ]; + QUOTE = 34; + BACKSLASH = 92; + StreamingJsonParser = class { + #root = void 0; + #done = false; + #stack = []; + #string = void 0; + #scalar = ""; + #scalarSlot = void 0; + /** Sum of `size + 1` over the open path: what a fresh snapshot copies. */ + #pathCost = 0; + #credit = 0; + #dirty = false; + #snapshot = void 0; + /** Changes of the piece being read. */ + #changes = []; + /** + * Read the next piece of text; returns the changes it made, in order. Costs time linear in `text.length`. + */ + append(text) { + this.#credit += CREDIT_PER_APPEND + CREDIT_PER_CHARACTER * text.length; + this.#changes = []; + if (this.#string !== void 0) + this.#string.change = void 0; + let index = 0; + while (index < text.length && !this.#done) { + const open = this.#string; + if (open !== void 0) + index = this.#readString(open, text, index); + else if (this.#scalar !== "") + index = this.#readScalar(text, index); + else + this.#structural(text[index++]); + } + return this.#changes; + } + /** + * The value of the text read so far: `undefined` before a value starts, otherwise a plain JSON value that never + * changes afterwards. Returns the previous snapshot while the text read since did not change the value, or while a + * fresh copy of the open path is not yet paid for (see the module comment). + */ + snapshot() { + if (!this.#dirty) + return this.#snapshot; + const pending = this.#pendingScalar(); + const cost = this.#pathCost + (pending === void 0 ? 0 : 1); + if (cost > this.#credit) + return this.#snapshot; + this.#credit -= cost; + this.#dirty = false; + this.#snapshot = this.#copyOpenPath(pending); + return this.#snapshot; + } + /** Read string characters from `start` until the string ends or the text does; returns the next index. */ + #readString(open, text, start) { + let runStart = start; + for (let index = start; index < text.length; index++) { + const code = text.charCodeAt(index); + if (open.escape !== "") { + if (this.#continueEscape(open, text[index])) { + runStart = index + 1; + continue; + } + runStart = index; + } + if (code === QUOTE) { + if (index > runStart) + this.#appendString(open, text.slice(runStart, index)); + this.#endString(open); + return index + 1; + } + if (code === BACKSLASH) { + if (index > runStart) + this.#appendString(open, text.slice(runStart, index)); + open.escape = "\\"; + runStart = index + 1; + } + } + if (text.length > runStart) + this.#appendString(open, text.slice(runStart)); + return text.length; + } + /** Read number or literal characters from `start` up to the next delimiter; returns the delimiter's index. */ + #readScalar(text, start) { + let end = start; + while (end < text.length && !isDelimiter(text[end])) + end++; + if (end > start) { + this.#scalar += text.slice(start, end); + if (this.#scalarSlot !== void 0) + this.#dirty = true; + } + if (end < text.length) + this.#endScalar(); + return end; + } + /** Handle one character outside strings. */ + #structural(char) { + switch (char) { + case " ": + case " ": + case "\n": + case "\r": + return; + case '"': + this.#startString(); + return; + case "{": + case "[": + this.#openContainer(char === "{" ? {} : []); + return; + case "}": + case "]": + this.#closeContainer(); + return; + case ":": { + const frame = this.#stack.at(-1); + if (frame !== void 0 && !Array.isArray(frame.container) && frame.phase === "colon") + frame.phase = "value"; + return; + } + case ",": { + const frame = this.#stack.at(-1); + if (frame !== void 0) + frame.phase = Array.isArray(frame.container) ? "value" : "key"; + return; + } + default: + this.#scalar = char; + this.#scalarSlot = this.#valueSlot(); + if (this.#scalarSlot !== void 0) + this.#dirty = true; + } + } + /** Where a value starting now goes, or `undefined` when this position takes no value. */ + #valueSlot() { + const frame = this.#stack.at(-1); + if (frame === void 0) + return this.#root === void 0 ? ROOT_SLOT : void 0; + if (Array.isArray(frame.container)) + return { kind: "element", index: frame.container.length }; + if ((frame.phase === "value" || frame.phase === "colon") && frame.key !== void 0) { + return { kind: "member", key: frame.key }; + } + return void 0; + } + #startString() { + const frame = this.#stack.at(-1); + if (frame !== void 0 && !Array.isArray(frame.container) && (frame.phase === "key" || frame.phase === "comma")) { + this.#string = { target: "key", slot: void 0, text: "", escape: "", path: void 0, change: void 0 }; + return; + } + const slot = this.#valueSlot(); + const path5 = this.#reportedPath(slot); + this.#string = { target: "value", slot, text: "", escape: "", path: path5, change: void 0 }; + this.#place(slot, ""); + if (path5 !== void 0) + this.#string.change = this.#report({ kind: "set", path: path5, value: "" }); + } + /** The path of a value at `slot` in the innermost open container, when its changes are reported. */ + #reportedPath(slot) { + if (slot === void 0) + return void 0; + if (slot.kind === "root") + return []; + const frame = this.#stack.at(-1); + if (!frame.reportsInside) + return void 0; + return [...frame.path, slot.kind === "member" ? slot.key : slot.index]; + } + #report(change) { + this.#changes.push(change); + return change; + } + /** Continue an escape with `char`; returns false when `char` is not part of it and must be read normally. */ + #continueEscape(open, char) { + if (open.escape === "\\") { + const decoded = SIMPLE_ESCAPES[char]; + if (decoded !== void 0) { + open.escape = ""; + this.#appendString(open, decoded); + return true; + } + if (char === "u") { + open.escape = "\\u"; + return true; + } + open.escape = ""; + this.#appendString(open, "\\"); + return false; + } + if (isHexDigit(char)) { + open.escape += char; + if (open.escape.length < 6) + return true; + const decoded = String.fromCharCode(Number.parseInt(open.escape.slice(2), 16)); + open.escape = ""; + this.#appendString(open, decoded); + return true; + } + const literal = open.escape; + open.escape = ""; + this.#appendString(open, literal); + return false; + } + #appendString(open, text) { + open.text += text; + if (open.target !== "value") + return; + this.#place(open.slot, open.text); + if (open.path === void 0) + return; + const change = open.change; + if (change !== void 0 && this.#changes.at(-1) === change) { + if (change.kind === "set") + change.value = change.value + text; + else + change.text += text; + return; + } + open.change = this.#report({ kind: "append", path: open.path, text }); + } + #endString(open) { + this.#string = void 0; + const frame = this.#stack.at(-1); + if (open.target === "key") { + if (frame === void 0) + return; + frame.key = open.text; + frame.phase = "colon"; + return; + } + this.#valueEnded(frame); + } + #endScalar() { + const token = this.#scalar; + const slot = this.#scalarSlot; + this.#scalar = ""; + this.#scalarSlot = void 0; + const value2 = scalarValue(token); + if (value2 !== void 0) { + this.#place(slot, value2); + const path5 = this.#reportedPath(slot); + if (path5 !== void 0) + this.#report({ kind: "set", path: path5, value: value2 }); + } + this.#valueEnded(this.#stack.at(-1)); + } + /** The value of the unterminated scalar at the end of the text, if it shows. */ + #pendingScalar() { + const slot = this.#scalarSlot; + const token = this.#scalar; + if (slot === void 0 || token === "" || token.length > MAX_PENDING_SCALAR_LENGTH) + return void 0; + const value2 = pendingScalarValue(token); + return value2 === void 0 ? void 0 : { slot, value: value2 }; + } + #openContainer(container) { + const slot = this.#valueSlot(); + const path5 = this.#reportedPath(slot); + this.#place(slot, container); + this.#stack.push({ + container, + slot, + path: path5, + reportsInside: path5 !== void 0 && path5.length < MAX_REPORTED_DEPTH, + size: 0, + key: void 0, + phase: Array.isArray(container) ? "value" : "key" + }); + this.#pathCost += 1; + this.#dirty = true; + if (path5 !== void 0) + this.#report({ kind: "set", path: path5, value: Array.isArray(container) ? [] : {} }); + } + #closeContainer() { + const frame = this.#stack.pop(); + if (frame === void 0) + return; + this.#pathCost -= frame.size + 1; + this.#dirty = true; + if (frame.path !== void 0 && !frame.reportsInside) { + this.#report({ kind: "set", path: frame.path, value: frame.container }); + } + this.#valueEnded(this.#stack.at(-1)); + } + /** A value in `frame`, or the root value when there is no frame, has ended. */ + #valueEnded(frame) { + if (frame === void 0) { + if (this.#root !== void 0) + this.#done = true; + return; + } + frame.phase = "comma"; + } + /** Set the value at `slot` in the open path; nothing for a value in an invalid position. */ + #place(slot, value2) { + if (slot === void 0) + return; + this.#dirty = true; + if (slot.kind === "root") { + this.#root = value2; + return; + } + const frame = this.#stack.at(-1); + if (slot.kind === "element") { + const elements = frame.container; + if (slot.index === elements.length) { + frame.size++; + this.#pathCost++; + } + elements[slot.index] = value2; + return; + } + const members = frame.container; + if (!Object.hasOwn(members, slot.key)) { + frame.size++; + this.#pathCost++; + } + setMember(members, slot.key, value2); + } + /** A fresh snapshot: copies of the open containers, innermost first, each holding the copy of its open child. */ + #copyOpenPath(pending) { + if (this.#stack.length === 0) + return pending?.slot.kind === "root" ? pending.value : this.#root; + let child; + let childSlot; + for (let depth = this.#stack.length - 1; depth >= 0; depth--) { + const frame = this.#stack[depth]; + const copy2 = Array.isArray(frame.container) ? frame.container.slice() : { ...frame.container }; + if (depth === this.#stack.length - 1 && pending !== void 0) + setSlot(copy2, pending.slot, pending.value); + if (child !== void 0 && childSlot !== void 0) + setSlot(copy2, childSlot, child); + child = copy2; + childSlot = frame.slot; + } + return childSlot?.kind === "root" ? child : this.#root; + } + }; + ToolCallArgumentsStream = class { + #text = ""; + #parser = new StreamingJsonParser(); + #snapshot = void 0; + #arguments = {}; + /** The raw argument text received so far. */ + get text() { + return this.#text; + } + /** Append a piece of argument text; returns the partial arguments, a new object whenever they changed. */ + append(delta) { + this.#text += delta; + this.#parser.append(delta); + return this.#partial(); + } + /** + * Take the provider's complete argument text. When it continues the text so far, returns the missing piece as + * `delta`; otherwise starts over with `text`. Either way returns the partial arguments of `text`. + */ + replace(text) { + if (text.startsWith(this.#text)) { + const delta = text.slice(this.#text.length); + return { delta, arguments: delta === "" ? this.#partial() : this.append(delta) }; + } + this.#text = ""; + this.#parser = new StreamingJsonParser(); + return { delta: void 0, arguments: this.append(text) }; + } + /** The final arguments: one full parse of the complete text, which reports malformed arguments. */ + finish() { + return parseToolCallArguments(this.#text); + } + #partial() { + const snapshot = this.#parser.snapshot(); + if (snapshot === this.#snapshot) + return this.#arguments; + this.#snapshot = snapshot; + this.#arguments = typeof snapshot === "object" && snapshot !== null && !Array.isArray(snapshot) ? snapshot : {}; + return this.#arguments; + } + }; + SIMPLE_ESCAPES = { + '"': '"', + "\\": "\\", + "/": "/", + b: "\b", + f: "\f", + n: "\n", + r: "\r", + t: " " + }; + } +}); + +// node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js +function isJsonSchemaObject(value2) { + return typeof value2 === "object" && value2 !== null && !Array.isArray(value2); +} +function isStructuredSchema(schema4) { + if (!isJsonSchemaObject(schema4)) + return false; + const types = typeof schema4.type === "string" ? [schema4.type] : Array.isArray(schema4.type) ? schema4.type : []; + return types.includes("object") || types.includes("array") || schema4.properties !== void 0 || schema4.items !== void 0; +} +function schemaAllowsNull(schema4) { + if (!isJsonSchemaObject(schema4)) + return false; + if (schema4.type === "null" || Array.isArray(schema4.type) && schema4.type.includes("null")) + return true; + if (schema4.const === null || Array.isArray(schema4.enum) && schema4.enum.includes(null)) + return true; + return Array.isArray(schema4.anyOf) && schema4.anyOf.some((variant) => schemaAllowsNull(variant)); +} +function makeJsonSchemaNodeStrict(schema4, isUnsupportedKeyword) { + if (!isJsonSchemaObject(schema4)) { + throw new UnsupportedStrictJsonSchemaError("boolean schemas are unsupported"); + } + for (const key of UNSUPPORTED_STRICT_SCHEMA_KEYS) { + if (schema4[key] !== void 0) { + throw new UnsupportedStrictJsonSchemaError(`${key} schemas are unsupported`); + } + } + if (isUnsupportedKeyword) { + for (const [key, value2] of Object.entries(schema4)) { + if (isUnsupportedKeyword(key, value2)) { + throw new UnsupportedStrictJsonSchemaError(`${key}: ${JSON.stringify(value2)} is unsupported`); + } + } + } + if (schema4.anyOf !== void 0) { + if (!Array.isArray(schema4.anyOf) || schema4.anyOf.length === 0) { + throw new UnsupportedStrictJsonSchemaError("anyOf must contain at least one schema"); + } + for (const variant of schema4.anyOf) { + if (isStructuredSchema(variant)) { + throw new UnsupportedStrictJsonSchemaError("object and array unions are unsupported"); + } + makeJsonSchemaNodeStrict(variant, isUnsupportedKeyword); + } + } + if (schema4.items !== void 0) { + if (Array.isArray(schema4.items)) { + throw new UnsupportedStrictJsonSchemaError("tuple schemas are unsupported"); + } + makeJsonSchemaNodeStrict(schema4.items, isUnsupportedKeyword); + } + const isObjectSchema = schema4.type === "object"; + if (schema4.properties !== void 0 && !isObjectSchema) { + throw new UnsupportedStrictJsonSchemaError("properties require type object"); + } + if (!isObjectSchema) + return; + if (schema4.additionalProperties !== void 0 && schema4.additionalProperties !== false) { + throw new UnsupportedStrictJsonSchemaError("schema-valued or true additionalProperties is unsupported"); + } + if (schema4.properties !== void 0 && !isJsonSchemaObject(schema4.properties)) { + throw new UnsupportedStrictJsonSchemaError("object properties must be a schema map"); + } + if (schema4.required !== void 0 && (!Array.isArray(schema4.required) || schema4.required.some((key) => typeof key !== "string"))) { + throw new UnsupportedStrictJsonSchemaError("object required must be a string array"); + } + const properties = schema4.properties ?? {}; + const propertyNames = Object.keys(properties); + const required = new Set(Array.isArray(schema4.required) ? schema4.required : []); + if ([...required].some((key) => !propertyNames.includes(key))) { + throw new UnsupportedStrictJsonSchemaError("required contains an unknown property"); + } + for (const [key, property] of Object.entries(properties)) { + makeJsonSchemaNodeStrict(property, isUnsupportedKeyword); + if (!required.has(key) && !schemaAllowsNull(property)) { + properties[key] = { anyOf: [property, { type: "null" }] }; + } + } + schema4.required = propertyNames; + schema4.additionalProperties = false; +} +function makeStrictJsonSchema(schema4, isUnsupportedKeyword) { + const cloned = structuredClone(schema4); + if (!isJsonSchemaObject(cloned)) { + throw new UnsupportedStrictJsonSchemaError("root schema must have type object"); + } + makeJsonSchemaNodeStrict(cloned, isUnsupportedKeyword); + if (cloned.type !== "object") { + throw new UnsupportedStrictJsonSchemaError("root schema must have type object"); + } + return cloned; +} +function prefersJsonSchemaStrictSampling(tool) { + const config2 = tool.constrainedSampling; + return !!config2 && config2.type === "json_schema" && config2.strict === "prefer"; +} +function isStrictToolLimitErrorMessage(message) { + return STRICT_TOOL_LIMIT_ERROR_MESSAGES.some((limitMessage) => message.includes(limitMessage)); +} +function getJsonSchemaToolParameters(tool, strict) { + return strict === true ? makeStrictJsonSchema(tool.parameters) : tool.parameters; +} +function getGrammarToolInput(toolName2, arguments_, inputProperty) { + const input = arguments_[inputProperty]; + if (typeof input !== "string") { + throw new Error(`Grammar tool call "${toolName2}" requires argument "${inputProperty}" to be a string.`); + } + return input; +} +function appendGrammarToolInputJsonDelta(buffer, inputProperty, inputDelta) { + if (buffer.closed) { + throw new Error(`grammar tool input for property "${inputProperty}" changed after it was closed`); + } + if (inputDelta.length === 0) + return void 0; + buffer.input += inputDelta; + return grammarToolInputJsonStart(buffer, inputProperty) + JSON.stringify(inputDelta).slice(1, -1); +} +function closeGrammarToolInputJson(buffer, inputProperty, finalInput) { + if (buffer.closed) { + if (finalInput === void 0 || finalInput === buffer.input) + return void 0; + throw new Error(`grammar tool input for property "${inputProperty}" changed after it was closed`); + } + if (finalInput !== void 0 && !finalInput.startsWith(buffer.input)) { + throw new Error(`grammar tool input for property "${inputProperty}" changed non-monotonically`); + } + const rest = finalInput === void 0 ? "" : finalInput.slice(buffer.input.length); + if (finalInput !== void 0) + buffer.input = finalInput; + buffer.closed = true; + return `${grammarToolInputJsonStart(buffer, inputProperty)}${JSON.stringify(rest).slice(1, -1)}"}`; +} +function grammarToolInputJsonStart(buffer, inputProperty) { + if (buffer.started) + return ""; + buffer.started = true; + return `{${JSON.stringify(inputProperty)}:"`; +} +function inferGrammarInputProperty(tool) { + const schema4 = tool.parameters; + if (schema4.type !== "object") { + throw new Error("grammar constrained sampling requires an object parameter schema"); + } + if (!Array.isArray(schema4.required) || schema4.required.length !== 1 || typeof schema4.required[0] !== "string") { + throw new Error("grammar constrained sampling requires exactly one required string property"); + } + const inputProperty = schema4.required[0]; + if (!schema4.properties?.[inputProperty]) { + throw new Error(`grammar constrained sampling requires a properties entry for ${inputProperty}`); + } + if (schema4.properties[inputProperty]?.type !== "string") { + throw new Error(`grammar constrained sampling property ${inputProperty} must have type string`); + } + return inputProperty; +} +function resolveJsonSchemaStrictSampling(tool, supportsStrictMode, isUnsupportedKeyword) { + const config2 = tool.constrainedSampling; + if (!config2 || config2.type !== "json_schema") + return void 0; + if (supportsStrictMode) { + try { + makeStrictJsonSchema(tool.parameters, isUnsupportedKeyword); + return true; + } catch (error) { + if (!(error instanceof UnsupportedStrictJsonSchemaError)) + throw error; + if (config2.strict !== "require") + return void 0; + throw new Error(`Tool "${tool.name}" requires JSON-schema constrained sampling, but ${error.message}.`); + } + } + if (config2.strict === "require") { + throw new Error(`Tool "${tool.name}" requires JSON-schema constrained sampling, but strict tools are unsupported.`); + } + return void 0; +} +function resolveGrammarConstrainedSampling(tool, supportsOpenAIGrammarTools) { + const config2 = tool.constrainedSampling; + if (!config2 || config2.type !== "grammar") { + return void 0; + } + if (!supportsOpenAIGrammarTools) { + return void 0; + } + const larkDefinition = config2.variants.openai_lark; + const regexDefinition = config2.variants.openai_regex; + const hasLarkDefinition = typeof larkDefinition === "string" && larkDefinition.trim().length > 0; + const hasRegexDefinition = typeof regexDefinition === "string" && regexDefinition.trim().length > 0; + if (!hasLarkDefinition && !hasRegexDefinition) { + throw new Error(`Tool "${tool.name}" cannot use grammar constrained sampling: no supported grammar variant was provided.`); + } + try { + return { + format: hasLarkDefinition ? "lark" : "regex", + definition: hasLarkDefinition ? larkDefinition : regexDefinition, + inputProperty: inferGrammarInputProperty(tool) + }; + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + throw new Error(`Tool "${tool.name}" cannot use grammar constrained sampling: ${message}.`); + } +} +function createGrammarToolInputProperties(tools, supportsOpenAIGrammarTools) { + const properties = /* @__PURE__ */ new Map(); + for (const tool of tools ?? []) { + const grammar = resolveGrammarConstrainedSampling(tool, supportsOpenAIGrammarTools); + if (grammar) { + properties.set(tool.name, grammar.inputProperty); + } + } + return properties; +} +var UnsupportedStrictJsonSchemaError, UNSUPPORTED_STRICT_SCHEMA_KEYS, STRICT_TOOL_LIMIT_ERROR_MESSAGES; +var init_constrained_sampling = __esm({ + "node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js"() { + UnsupportedStrictJsonSchemaError = class extends Error { + }; + UNSUPPORTED_STRICT_SCHEMA_KEYS = [ + "$ref", + "$defs", + "definitions", + "allOf", + "oneOf", + "patternProperties", + "dependentSchemas", + "dependencies", + "unevaluatedProperties", + "propertyNames", + "contains", + "prefixItems", + "not", + "if", + "then", + "else" + ]; + STRICT_TOOL_LIMIT_ERROR_MESSAGES = [ + "The compiled grammar is too large", + "Too many strict tools (", + "Schemas contains too many parameters with union types (" + ]; + } +}); + +// node_modules/@earendil-works/pi-ai/dist/api/github-copilot-headers.js +function inferCopilotInitiator(messages) { + const last = messages[messages.length - 1]; + return last && last.role !== "user" ? "agent" : "user"; +} +function hasCopilotVisionInput(messages) { + return messages.some((msg) => { + if (msg.role === "user" && Array.isArray(msg.content)) { + return msg.content.some((c) => c.type === "image"); + } + if (msg.role === "toolResult" && Array.isArray(msg.content)) { + return msg.content.some((c) => c.type === "image"); + } + return false; + }); +} +function buildCopilotDynamicHeaders(params) { + const headers = { + "X-Initiator": inferCopilotInitiator(params.messages), + "Openai-Intent": "conversation-edits" + }; + if (params.hasImages) { + headers["Copilot-Vision-Request"] = "true"; + } + return headers; +} +var init_github_copilot_headers = __esm({ + "node_modules/@earendil-works/pi-ai/dist/api/github-copilot-headers.js"() { + } +}); + // node_modules/@earendil-works/pi-ai/dist/api/openai-prompt-cache.js function clampOpenAIPromptCacheKey(key) { if (key === void 0) @@ -39875,21 +23329,17715 @@ var init_openai_prompt_cache = __esm({ } }); -// node_modules/@earendil-works/pi-ai/dist/utils/hash.js -function shortHash(str2) { - let h1 = 3735928559; - let h2 = 1103547991; - for (let i = 0; i < str2.length; i++) { - const ch = str2.charCodeAt(i); - h1 = Math.imul(h1 ^ ch, 2654435761); - h2 = Math.imul(h2 ^ ch, 1597334677); - } - h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507) ^ Math.imul(h2 ^ h2 >>> 13, 3266489909); - h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507) ^ Math.imul(h1 ^ h1 >>> 13, 3266489909); - return (h2 >>> 0).toString(36) + (h1 >>> 0).toString(36); +// node_modules/@earendil-works/pi-ai/dist/utils/estimate.js +function calculateContextTokens(usage) { + return usage.totalTokens || usage.input + usage.output + usage.cacheRead + usage.cacheWrite; } -var init_hash = __esm({ - "node_modules/@earendil-works/pi-ai/dist/utils/hash.js"() { +function safeJsonStringify2(value2) { + try { + return JSON.stringify(value2) ?? "undefined"; + } catch { + return "[unserializable]"; + } +} +function estimateTextAndImageContentChars(content) { + if (typeof content === "string") + return content.length; + let chars = 0; + for (const block of content) + chars += block.type === "text" ? block.text.length : ESTIMATED_IMAGE_CHARS; + return chars; +} +function estimateTextTokens(text) { + return Math.ceil(text.length / CHARS_PER_TOKEN); +} +function estimateTextAndImageContentTokens(content) { + return Math.ceil(estimateTextAndImageContentChars(content) / CHARS_PER_TOKEN); +} +function estimateMessageTokens(message) { + let chars = 0; + if (message.role === "system") { + return estimateTextTokens(getSystemMessageText(message)) + estimateToolsTokens(message.toolsAdded) + estimateToolsTokens(message.toolsRemoved); + } + if (message.role === "user") + return estimateTextAndImageContentTokens(message.content); + if (message.role === "toolResult") + return estimateTextAndImageContentTokens(message.content); + for (const block of message.content) { + if (block.type === "text") { + chars += block.text.length; + } else if (block.type === "thinking") { + chars += block.thinking.length; + } else { + chars += block.name.length + safeJsonStringify2(block.arguments).length; + } + } + return Math.ceil(chars / CHARS_PER_TOKEN); +} +function getLastAssistantUsageInfo(messages) { + let latestPrefixTimestamp = Number.NEGATIVE_INFINITY; + let usageInfo; + for (let i = 0; i < messages.length; i++) { + const message = messages[i]; + if (message.role === "assistant") { + const assistant = message; + const usageAppliesToPrefix = assistant.timestamp >= latestPrefixTimestamp; + if (usageAppliesToPrefix && assistant.stopReason !== "aborted" && assistant.stopReason !== "error" && calculateContextTokens(assistant.usage) > 0) { + usageInfo = { usage: assistant.usage, index: i }; + } + } + latestPrefixTimestamp = Math.max(latestPrefixTimestamp, message.timestamp); + } + return usageInfo; +} +function estimateContextTokens(context) { + const messages = "messages" in context ? context.messages : context; + const usageInfo = getLastAssistantUsageInfo(messages); + if (usageInfo) { + const usageTokens = calculateContextTokens(usageInfo.usage); + let trailingTokens = 0; + for (let i = usageInfo.index + 1; i < messages.length; i++) { + trailingTokens += estimateMessageTokens(messages[i]); + } + return { tokens: usageTokens + trailingTokens, usageTokens, trailingTokens, lastUsageIndex: usageInfo.index }; + } + let tokens = 0; + for (const message of messages) + tokens += estimateMessageTokens(message); + return { tokens, usageTokens: 0, trailingTokens: tokens, lastUsageIndex: null }; +} +function estimateToolsTokens(tools) { + if (!tools || tools.length === 0) + return 0; + return estimateTextTokens(safeJsonStringify2(tools)); +} +var CHARS_PER_TOKEN, ESTIMATED_IMAGE_CHARS; +var init_estimate = __esm({ + "node_modules/@earendil-works/pi-ai/dist/utils/estimate.js"() { + init_text(); + CHARS_PER_TOKEN = 3.5; + ESTIMATED_IMAGE_CHARS = 4800; + } +}); + +// node_modules/@earendil-works/pi-ai/dist/api/simple-options.js +function clampMaxTokensToContext(model2, context, maxTokens) { + if (model2.contextWindow <= 0) + return Math.max(MIN_MAX_TOKENS, maxTokens); + const available = model2.contextWindow - estimateContextTokens(context).tokens - CONTEXT_SAFETY_TOKENS; + return Math.min(maxTokens, Math.max(MIN_MAX_TOKENS, available)); +} +function resolveSamplingParams(model2, thinkingLevel, requestParams) { + const effectiveThinkingLevel = clampThinkingLevel(model2, thinkingLevel); + const thinkingLevelParams = model2.samplingParamsByThinkingLevel?.[effectiveThinkingLevel]; + return model2.samplingParams || thinkingLevelParams || requestParams ? { ...model2.samplingParams, ...thinkingLevelParams, ...requestParams } : void 0; +} +function buildBaseOptions(model2, context, options, apiKey) { + const samplingParams = resolveSamplingParams(model2, options?.reasoning ?? "off", options?.samplingParams); + return { + temperature: options?.temperature, + samplingParams, + maxTokens: clampMaxTokensToContext(model2, context, options?.maxTokens ?? model2.maxTokens), + signal: options?.signal, + telemetry: options?.telemetry, + apiKey: apiKey || options?.apiKey, + fetch: options?.fetch, + transport: options?.transport, + cacheRetention: options?.cacheRetention, + sessionId: options?.sessionId, + headers: options?.headers, + identity: options?.identity, + onPayload: options?.onPayload, + onResponse: options?.onResponse, + onProviderStreamEvent: options?.onProviderStreamEvent, + timeoutMs: options?.timeoutMs, + websocketConnectTimeoutMs: options?.websocketConnectTimeoutMs, + maxRetries: options?.maxRetries, + maxRetryDelayMs: options?.maxRetryDelayMs, + metadata: options?.metadata, + env: options?.env + }; +} +function clampReasoning(effort) { + return effort === "xhigh" || effort === "max" ? "high" : effort; +} +function thinkingBudgetForLevel(reasoningLevel, customBudgets) { + const budgets = { ...DEFAULT_THINKING_BUDGETS, ...customBudgets }; + const level = clampReasoning(reasoningLevel); + return budgets[level]; +} +function clampThinkingBudgetToAnswerRoom(thinkingBudget, ceiling) { + return Math.min(thinkingBudget, Math.max(0, ceiling - MIN_ANSWER_TOKENS)); +} +function adjustMaxTokensForThinking(baseMaxTokens, modelMaxTokens, reasoningLevel, customBudgets) { + let thinkingBudget = thinkingBudgetForLevel(reasoningLevel, customBudgets); + const maxTokens = baseMaxTokens === void 0 ? modelMaxTokens : Math.min(baseMaxTokens + thinkingBudget, modelMaxTokens); + if (maxTokens <= thinkingBudget) { + thinkingBudget = clampThinkingBudgetToAnswerRoom(thinkingBudget, maxTokens); + } + return { maxTokens, thinkingBudget }; +} +var CONTEXT_SAFETY_TOKENS, MIN_MAX_TOKENS, MIN_ANSWER_TOKENS, DEFAULT_THINKING_BUDGETS; +var init_simple_options = __esm({ + "node_modules/@earendil-works/pi-ai/dist/api/simple-options.js"() { + init_models(); + init_estimate(); + CONTEXT_SAFETY_TOKENS = 4096; + MIN_MAX_TOKENS = 1; + MIN_ANSWER_TOKENS = 1024; + DEFAULT_THINKING_BUDGETS = { + minimal: 1024, + low: 2048, + medium: 8192, + high: 16384 + }; + } +}); + +// node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js +function splitErrorToolResultImages(msg) { + if (!msg.isError) + return void 0; + const images = msg.content.filter((block) => block.type === "image"); + if (images.length === 0) + return void 0; + return { + content: replaceImagesWithPlaceholder(msg.content, ERROR_TOOL_IMAGE_PLACEHOLDER), + caption: `Images from the error result of tool call ${msg.toolCallId} (${msg.toolName}):`, + images + }; +} +function replaceImagesWithPlaceholder(content, placeholder) { + const result = []; + let previousWasPlaceholder = false; + for (const block of content) { + if (block.type === "image") { + if (!previousWasPlaceholder) { + result.push({ type: "text", text: placeholder }); + } + previousWasPlaceholder = true; + continue; + } + result.push(block); + previousWasPlaceholder = block.text === placeholder; + } + return result; +} +function downgradeUnsupportedImages(messages, model2) { + if (model2.input.includes("image")) { + return messages; + } + return messages.map((msg) => { + if (msg.role === "user" && Array.isArray(msg.content)) { + return { + ...msg, + content: replaceImagesWithPlaceholder(msg.content, NON_VISION_USER_IMAGE_PLACEHOLDER) + }; + } + if (msg.role === "toolResult") { + return { + ...msg, + content: replaceImagesWithPlaceholder(msg.content, NON_VISION_TOOL_IMAGE_PLACEHOLDER) + }; + } + return msg; + }); +} +function transformMessages(messages, model2, normalizeToolCallId2) { + const toolCallIdMap = /* @__PURE__ */ new Map(); + const normalizedMessages = messages.map((msg) => msg.content == null ? { ...msg, content: [] } : msg); + const imageAwareMessages = downgradeUnsupportedImages(normalizedMessages, model2); + const transformed = imageAwareMessages.map((msg) => { + if (msg.role === "system" || msg.role === "user") { + return msg; + } + if (msg.role === "toolResult") { + const normalizedId = toolCallIdMap.get(msg.toolCallId); + if (normalizedId && normalizedId !== msg.toolCallId) { + return { ...msg, toolCallId: normalizedId }; + } + return msg; + } + if (msg.role === "assistant") { + const assistantMsg = msg; + const isSameModel = assistantMsg.provider === model2.provider && assistantMsg.api === model2.api && assistantMsg.model === model2.id; + const transformedContent = assistantMsg.content.flatMap((block) => { + if (block.type === "thinking") { + if (!isSameModel) + return []; + if (block.redacted || block.thinkingSignature) + return block; + if (!block.thinking || block.thinking.trim() === "") + return []; + return block; + } + if (block.type === "text") { + if (isSameModel) + return block; + return { + type: "text", + text: block.text + }; + } + if (block.type === "toolCall") { + const toolCall = block; + let normalizedToolCall = toolCall; + if (!isSameModel && toolCall.thoughtSignature) { + normalizedToolCall = { ...toolCall }; + delete normalizedToolCall.thoughtSignature; + } + if (!isSameModel && normalizeToolCallId2) { + const normalizedId = normalizeToolCallId2(toolCall.id, model2, assistantMsg); + if (normalizedId !== toolCall.id) { + toolCallIdMap.set(toolCall.id, normalizedId); + normalizedToolCall = { ...normalizedToolCall, id: normalizedId }; + } + } + return normalizedToolCall; + } + return block; + }); + return { + ...assistantMsg, + content: transformedContent + }; + } + return msg; + }); + const result = []; + let pendingToolCalls = []; + let existingToolResultIds = /* @__PURE__ */ new Set(); + const heldSystemMessages = []; + const closePendingToolCalls = () => { + if (pendingToolCalls.length > 0) { + for (const tc of pendingToolCalls) { + if (!existingToolResultIds.has(tc.id)) { + result.push({ + role: "toolResult", + toolCallId: tc.id, + toolName: tc.name, + content: [{ type: "text", text: "No result provided" }], + isError: true, + timestamp: Date.now() + }); + } + } + pendingToolCalls = []; + existingToolResultIds = /* @__PURE__ */ new Set(); + } + result.push(...heldSystemMessages); + heldSystemMessages.length = 0; + }; + for (let i = 0; i < transformed.length; i++) { + const msg = transformed[i]; + if (msg.role === "assistant") { + closePendingToolCalls(); + const assistantMsg = msg; + if (assistantMsg.stopReason === "error" || assistantMsg.stopReason === "aborted") { + continue; + } + const toolCalls = assistantMsg.content.filter((b) => b.type === "toolCall"); + if (toolCalls.length > 0) { + pendingToolCalls = toolCalls; + existingToolResultIds = /* @__PURE__ */ new Set(); + } + result.push(msg); + } else if (msg.role === "toolResult") { + existingToolResultIds.add(msg.toolCallId); + result.push(msg); + } else if (msg.role === "system") { + if (pendingToolCalls.length > 0) { + heldSystemMessages.push(msg); + } else { + result.push(msg); + } + } else if (msg.role === "user") { + closePendingToolCalls(); + result.push(msg); + } else { + result.push(msg); + } + } + closePendingToolCalls(); + return result; +} +var NON_VISION_USER_IMAGE_PLACEHOLDER, NON_VISION_TOOL_IMAGE_PLACEHOLDER, ERROR_TOOL_IMAGE_PLACEHOLDER; +var init_transform_messages = __esm({ + "node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js"() { + NON_VISION_USER_IMAGE_PLACEHOLDER = "(image omitted: model does not support images)"; + NON_VISION_TOOL_IMAGE_PLACEHOLDER = "(tool image omitted: model does not support images)"; + ERROR_TOOL_IMAGE_PLACEHOLDER = "(image attached after the tool results)"; + } +}); + +// node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +var openai_completions_exports = {}; +__export(openai_completions_exports, { + convertMessages: () => convertMessages, + stream: () => stream, + streamSimple: () => streamSimple +}); +function hasHeader(headers, name) { + if (!headers) + return false; + const expected = name.toLowerCase(); + for (const [key, value2] of Object.entries(headers)) { + if (key.toLowerCase() === expected && value2 !== null && value2.trim().length > 0) + return true; + } + return false; +} +function getClientApiKey(provider2, apiKey, headers) { + if (apiKey) + return apiKey; + if (hasHeader(headers, "authorization") || hasHeader(headers, "cf-aig-authorization")) + return "unused"; + throw new Error(`No API key for provider: ${provider2}`); +} +function hasToolHistory(messages) { + for (const msg of messages) { + if (msg.role === "toolResult") { + return true; + } + if (msg.role === "assistant") { + if (msg.content.some((block) => block.type === "toolCall")) { + return true; + } + } + } + return false; +} +function isTextContentBlock(block) { + return block.type === "text"; +} +function isThinkingContentBlock(block) { + return block.type === "thinking"; +} +function isToolCallBlock(block) { + return block.type === "toolCall"; +} +function isImageContentBlock(block) { + return block.type === "image"; +} +function isReasoningDetailObject(detail) { + return typeof detail === "object" && detail !== null && !Array.isArray(detail); +} +function hasValidCommonReasoningDetailFields(candidate) { + return (candidate.id === void 0 || candidate.id === null || typeof candidate.id === "string") && (candidate.format === void 0 || typeof candidate.format === "string") && (candidate.index === void 0 || typeof candidate.index === "number"); +} +function isOpenAIReasoningDetail(detail) { + if (!isReasoningDetailObject(detail) || !hasValidCommonReasoningDetailFields(detail)) { + return false; + } + switch (detail.type) { + case "reasoning.summary": + return typeof detail.summary === "string"; + case "reasoning.encrypted": + return typeof detail.data === "string"; + case "reasoning.text": + return typeof detail.text === "string" && (detail.signature === void 0 || detail.signature === null || typeof detail.signature === "string"); + default: + return false; + } +} +function parseOpenAIReasoningDetails(signature) { + if (!signature) + return void 0; + try { + const parsed = JSON.parse(signature); + return Array.isArray(parsed) && parsed.length > 0 && parsed.every(isOpenAIReasoningDetail) ? parsed : void 0; + } catch { + return void 0; + } +} +function parseLegacyEncryptedReasoningDetail(signature) { + if (!signature) + return void 0; + try { + const parsed = JSON.parse(signature); + return isOpenAIReasoningDetail(parsed) && parsed.type === "reasoning.encrypted" && typeof parsed.id === "string" && parsed.id.length > 0 && parsed.data.length > 0 ? parsed : void 0; + } catch { + return void 0; + } +} +function fillMissingCommonReasoningDetailFields(target, source) { + target.id ??= source.id; + target.format ||= source.format; + target.index ??= source.index; +} +function appendOpenAIReasoningDetail(details, detail) { + const lastDetail = details[details.length - 1]; + if (detail.type === "reasoning.text" && lastDetail?.type === "reasoning.text") { + lastDetail.text += detail.text; + lastDetail.signature ||= detail.signature; + fillMissingCommonReasoningDetailFields(lastDetail, detail); + return; + } + if (detail.type === "reasoning.summary" && lastDetail?.type === "reasoning.summary") { + lastDetail.summary += detail.summary; + fillMissingCommonReasoningDetailFields(lastDetail, detail); + return; + } + details.push({ ...detail }); +} +function isOpenAICompletionsReasoningField(field) { + return OPENAI_COMPLETIONS_REASONING_FIELDS.includes(field); +} +function resolveCacheRetention(cacheRetention, env) { + if (cacheRetention) { + return cacheRetention; + } + if (getProviderEnvValue("PI_CACHE_RETENTION", env) === "long") { + return "long"; + } + return "short"; +} +function createClient(model2, context, apiKey, optionsHeaders, identity, fetch2, sessionId, compat = getCompat(model2)) { + const headers = { ...getIdentityHeaders(model2, identity), ...model2.headers }; + if (model2.provider === "github-copilot") { + const hasImages = hasCopilotVisionInput(context.messages); + const copilotHeaders = buildCopilotDynamicHeaders({ + messages: context.messages, + hasImages + }); + Object.assign(headers, copilotHeaders); + } + if (sessionId && compat.sendSessionAffinityHeaders) { + if (compat.sessionAffinityFormat === "openrouter") { + headers["x-session-id"] = sessionId; + } else { + if (compat.sessionAffinityFormat === "openai") { + headers.session_id = sessionId; + } + headers["x-client-request-id"] = sessionId; + headers["x-session-affinity"] = sessionId; + } + } + if (optionsHeaders) { + Object.assign(headers, optionsHeaders); + } + return new OpenAI({ + apiKey, + baseURL: model2.baseUrl, + dangerouslyAllowBrowser: true, + fetch: fetch2, + defaultHeaders: headers + }); +} +function buildParams(model2, context, options, compat = getCompat(model2), cacheRetention = resolveCacheRetention(options?.cacheRetention, options?.env), grammarToolInputProperties = createGrammarToolInputProperties(getDeclaredTools(context.messages), compat.supportsOpenAIGrammarTools)) { + const transcriptTools = resolveTranscriptTools(context.messages, compat.supportsMidConvoSystemMessages === true && compat.supportsMidConvoToolAdditions === true ? "additions" : "none"); + const messages = convertMessages(model2, context, compat, { + grammarToolInputProperties + }); + const cacheControl = getCompatCacheControl(compat, cacheRetention); + const params = { + model: model2.id, + messages, + stream: true, + prompt_cache_key: model2.baseUrl.includes("api.openai.com") && cacheRetention !== "none" || cacheRetention === "long" && compat.supportsLongCacheRetention ? clampOpenAIPromptCacheKey(options?.sessionId) : void 0, + prompt_cache_retention: cacheRetention === "long" && compat.supportsLongCacheRetention ? "24h" : void 0 + }; + if (compat.supportsUsageInStreaming !== false) { + params.stream_options = { include_usage: true }; + } + if (compat.supportsStore) { + params.store = false; + } + if (options?.maxTokens) { + if (compat.maxTokensField === "max_tokens") { + params.max_tokens = options.maxTokens; + } else { + params.max_completion_tokens = options.maxTokens; + } + } + if (options?.temperature !== void 0) { + params.temperature = options.temperature; + } + if (transcriptTools.requestTools.length > 0) { + params.tools = convertTools(transcriptTools.requestTools, compat); + if (compat.zaiToolStream) { + params.tool_stream = true; + } + } else if (hasToolHistory(context.messages)) { + params.tools = []; + } + if (cacheControl) { + applyAnthropicCacheControl(messages, params.tools, cacheControl); + } + if (options?.toolChoice) { + params.tool_choice = options.toolChoice; + } + if (compat.vllmPriority !== void 0) { + params.priority = compat.vllmPriority; + } + const thinkingTokenBudgetField = resolveThinkingTokenBudgetField(compat); + const thinkingBudget = resolveClampedThinkingBudget(model2, options, params); + if (compat.thinkingFormat === "zai" && model2.reasoning) { + const zaiParams = params; + zaiParams.thinking = options?.reasoningEffort ? { type: "enabled", clear_thinking: false } : { type: "disabled" }; + if (options?.reasoningEffort && compat.supportsReasoningEffort) { + const mappedEffort = model2.thinkingLevelMap?.[options.reasoningEffort]; + const effort = mappedEffort === void 0 ? options.reasoningEffort : mappedEffort; + if (typeof effort === "string") { + zaiParams.reasoning_effort = effort; + } + } + } else if (compat.thinkingFormat === "qwen" && model2.reasoning) { + params.enable_thinking = !!options?.reasoningEffort; + if (options?.reasoningEffort && compat.supportsReasoningEffort) { + const effort = model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort; + if (typeof effort === "string") { + params.reasoning_effort = effort; + } + } + } else if (compat.thinkingFormat === "qwen-chat-template" && model2.reasoning) { + params.chat_template_kwargs = { + enable_thinking: !!options?.reasoningEffort, + preserve_thinking: true + }; + } else if (compat.thinkingFormat === "chat-template" && model2.reasoning) { + const chatTemplateKwargs = buildChatTemplateValues(model2, options, compat.chatTemplateKwargs, thinkingBudget); + if (chatTemplateKwargs) { + params.chat_template_kwargs = chatTemplateKwargs; + } + } else if (compat.thinkingFormat === "baseten" && model2.reasoning) { + const basetenParams = params; + const chatTemplateArgs = buildChatTemplateValues(model2, options, compat.chatTemplateArgs, thinkingBudget); + if (chatTemplateArgs) { + basetenParams.chat_template_args = chatTemplateArgs; + } + if (compat.supportsReasoningEffort) { + const requestedEffort = options?.reasoningEffort; + const mappedEffort = requestedEffort ? model2.thinkingLevelMap?.[requestedEffort] : model2.thinkingLevelMap?.off; + const effort = mappedEffort === void 0 ? requestedEffort : mappedEffort; + if (typeof effort === "string") { + basetenParams.reasoning_effort = effort; + } + } + } else if (compat.thinkingFormat === "deepseek" && model2.reasoning) { + if (options?.reasoningEffort) { + params.thinking = { type: "enabled" }; + } else if (model2.thinkingLevelMap?.off !== null) { + params.thinking = { type: "disabled" }; + } + if (options?.reasoningEffort && compat.supportsReasoningEffort) { + params.reasoning_effort = model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort; + } + } else if (compat.thinkingFormat === "openrouter" && model2.reasoning) { + const openRouterParams = params; + if (options?.reasoningEffort) { + openRouterParams.reasoning = { + effort: model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort + }; + } else if (model2.thinkingLevelMap?.off !== null) { + openRouterParams.reasoning = { effort: model2.thinkingLevelMap?.off ?? "none" }; + } + } else if (compat.thinkingFormat === "ant-ling" && model2.reasoning && options?.reasoningEffort) { + const effort = model2.thinkingLevelMap?.[options.reasoningEffort]; + if (typeof effort === "string") { + params.reasoning = { effort }; + } + } else if (compat.thinkingFormat === "together" && model2.reasoning) { + const togetherParams = params; + togetherParams.reasoning = { enabled: !!options?.reasoningEffort }; + if (options?.reasoningEffort && compat.supportsReasoningEffort) { + togetherParams.reasoning_effort = model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort; + } + } else if (compat.thinkingFormat === "string-thinking" && model2.reasoning) { + const stringThinkingParams = params; + if (options?.reasoningEffort) { + stringThinkingParams.thinking = model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort; + } else if (model2.thinkingLevelMap?.off !== null) { + stringThinkingParams.thinking = model2.thinkingLevelMap?.off ?? "none"; + } + } else if (options?.reasoningEffort && model2.reasoning && compat.supportsReasoningEffort) { + params.reasoning_effort = model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort; + } else if (!options?.reasoningEffort && model2.reasoning && compat.supportsReasoningEffort) { + const offValue = model2.thinkingLevelMap?.off; + if (typeof offValue === "string") { + params.reasoning_effort = offValue; + } + } + if (thinkingTokenBudgetField && thinkingBudget !== void 0) { + Object.assign(params, { [thinkingTokenBudgetField]: thinkingBudget }); + } + if (model2.compat?.openRouterRouting) { + params.provider = model2.compat.openRouterRouting; + } + if (model2.compat?.vercelGatewayRouting) { + const routing = model2.compat.vercelGatewayRouting; + if (routing.only || routing.order) { + const gatewayOptions = {}; + if (routing.only) + gatewayOptions.only = routing.only; + if (routing.order) + gatewayOptions.order = routing.order; + params.providerOptions = { gateway: gatewayOptions }; + } + } + const samplingParams = resolveSamplingParams(model2, options?.reasoningEffort ?? "off", options?.samplingParams); + if (samplingParams) { + Object.assign(params, samplingParams); + } + return params; +} +function resolveThinkingTokenBudgetField(compat) { + if (compat.thinkingTokenBudgetField) + return compat.thinkingTokenBudgetField; + if (compat.supportsThinkingTokenBudget) + return "thinking_token_budget"; + return void 0; +} +function resolveClampedThinkingBudget(model2, options, params) { + if (!options?.reasoningEffort || !model2.reasoning) + return void 0; + const ceiling = params.max_tokens ?? params.max_completion_tokens ?? model2.maxTokens; + const budget = clampThinkingBudgetToAnswerRoom(thinkingBudgetForLevel(options.reasoningEffort, options.thinkingBudgets), ceiling); + return budget > 0 ? budget : void 0; +} +function buildChatTemplateValues(model2, options, values, thinkingBudget) { + const resolvedValues = {}; + for (const [key, value2] of Object.entries(values)) { + const resolved = resolveChatTemplateKwargValue(model2, options, value2, thinkingBudget); + if (resolved !== void 0) { + resolvedValues[key] = resolved; + } + } + return Object.keys(resolvedValues).length > 0 ? resolvedValues : void 0; +} +function resolveChatTemplateKwargValue(model2, options, value2, thinkingBudget) { + if (typeof value2 !== "object" || value2 === null) { + return value2; + } + const reasoningEffort = options?.reasoningEffort; + if (!reasoningEffort && value2.omitWhenOff) { + return void 0; + } + if (value2.$var === "thinking.enabled") { + return !!reasoningEffort; + } + if (value2.$var === "thinking.budget") { + return thinkingBudget; + } + const mappedValue = reasoningEffort ? model2.thinkingLevelMap?.[reasoningEffort] : model2.thinkingLevelMap?.off; + return mappedValue === void 0 ? reasoningEffort : typeof mappedValue === "string" ? mappedValue : void 0; +} +function getCompatCacheControl(compat, cacheRetention) { + if (compat.cacheControlFormat !== "anthropic" || cacheRetention === "none") { + return void 0; + } + const ttl = cacheRetention === "long" && compat.supportsLongCacheRetention ? "1h" : void 0; + return { type: "ephemeral", ...ttl ? { ttl } : {} }; +} +function applyAnthropicCacheControl(messages, tools, cacheControl) { + addCacheControlToSystemPrompt(messages, cacheControl); + addCacheControlToLastTool(tools, cacheControl); + addCacheControlToLastConversationMessage(messages, cacheControl); +} +function addCacheControlToSystemPrompt(messages, cacheControl) { + for (const message of messages) { + if (message.role === "system" || message.role === "developer") { + addCacheControlToInstructionMessage(message, cacheControl); + return; + } + } +} +function addCacheControlToLastConversationMessage(messages, cacheControl) { + for (let i = messages.length - 1; i >= 0; i--) { + const message = messages[i]; + if (message.role === "user" || message.role === "assistant" || message.role === "tool") { + if (addCacheControlToMessage(message, cacheControl)) { + return; + } + } + } +} +function addCacheControlToLastTool(tools, cacheControl) { + if (!tools || tools.length === 0) { + return; + } + const lastTool = tools[tools.length - 1]; + lastTool.cache_control = cacheControl; +} +function addCacheControlToInstructionMessage(message, cacheControl) { + return addCacheControlToTextContent(message, cacheControl); +} +function addCacheControlToMessage(message, cacheControl) { + if (message.role === "user" || message.role === "assistant" || message.role === "tool") { + return addCacheControlToTextContent(message, cacheControl); + } + return false; +} +function addCacheControlToTextContent(message, cacheControl) { + const content = message.content; + if (typeof content === "string") { + if (content.length === 0) { + return false; + } + message.content = [ + { + type: "text", + text: content, + cache_control: cacheControl + } + ]; + return true; + } + if (!Array.isArray(content)) { + return false; + } + for (let i = content.length - 1; i >= 0; i--) { + const part = content[i]; + if (part?.type === "text") { + const textPart = part; + textPart.cache_control = cacheControl; + return true; + } + } + return false; +} +function convertMessages(model2, context, compat, options) { + const normalizedContext = resolveTranscript(context, compat.supportsMidConvoSystemMessages); + const params = []; + const normalizeToolCallId2 = (id) => { + if (id.includes("|")) { + const separatorIndex = id.indexOf("|"); + const callId = id.slice(0, separatorIndex).replace(/[^a-zA-Z0-9_-]/g, "_"); + const itemId = id.slice(separatorIndex + 1).replace(/[^a-zA-Z0-9_-]/g, "_"); + const combinedId = itemId.length > 0 ? `${callId}_${itemId}` : callId; + if (combinedId.length <= 40) { + return combinedId; + } + const hash = shortHash(id).slice(0, 8); + const prefix = callId.slice(0, Math.max(1, 40 - hash.length - 1)); + return `${prefix}_${hash}`; + } + if (model2.provider === "openai") + return id.length > 40 ? id.slice(0, 40) : id; + return id; + }; + const transformedMessages = transformMessages(normalizedContext.messages, model2, (id) => normalizeToolCallId2(id)); + const transcriptTools = resolveTranscriptTools(normalizedContext.messages, compat.supportsMidConvoSystemMessages === true && compat.supportsMidConvoToolAdditions === true ? "additions" : "none"); + const instructionRole = model2.reasoning && compat.supportsDeveloperRole ? "developer" : "system"; + let lastRole = null; + let systemIndex = 0; + for (let i = 0; i < transformedMessages.length; i++) { + const msg = transformedMessages[i]; + if (compat.requiresAssistantAfterToolResult && lastRole === "toolResult" && msg.role === "user") { + params.push({ + role: "assistant", + content: "I have processed the tool results." + }); + } + if (msg.role === "system") { + const addedTools = systemIndex++ >= transcriptTools.foldedSystemMessages ? msg.toolsAdded ?? [] : []; + if (addedTools.length > 0) { + const kimiToolMessage = { + role: "system", + tools: convertTools(addedTools, compat) + }; + params.push(kimiToolMessage); + } + const text = i === 0 ? getSystemMessageText(msg) : renderSystemMessageUpdate(msg); + if (text.length > 0) { + params.push({ role: instructionRole, content: sanitizeSurrogates(text) }); + } + } else if (msg.role === "user") { + if (typeof msg.content === "string") { + params.push({ + role: "user", + content: sanitizeSurrogates(msg.content) + }); + } else { + const content = msg.content.filter((item) => item.type !== "text" || item.text.length > 0).map((item) => { + if (item.type === "text") { + return { + type: "text", + text: sanitizeSurrogates(item.text) + }; + } else { + return { + type: "image_url", + image_url: { + url: `data:${item.mimeType};base64,${item.data}` + } + }; + } + }); + if (content.length === 0) + continue; + params.push({ + role: "user", + content + }); + } + } else if (msg.role === "assistant") { + const assistantMsg = { + role: "assistant", + content: compat.requiresAssistantAfterToolResult ? "" : null + }; + const assistantTextParts = msg.content.filter(isTextContentBlock).filter((block) => block.text.trim().length > 0).map((block) => ({ + type: "text", + text: sanitizeSurrogates(block.text) + })); + const assistantText = assistantTextParts.map((part) => part.text).join(""); + const thinkingBlocks = msg.content.filter(isThinkingContentBlock); + const toolCalls = msg.content.filter(isToolCallBlock); + const signedReasoningDetails = thinkingBlocks.map((block) => parseOpenAIReasoningDetails(block.thinkingSignature)).find((details) => details !== void 0); + const legacyReasoningDetails = toolCalls.map((toolCall) => parseLegacyEncryptedReasoningDetail(toolCall.thoughtSignature)).filter((detail) => detail !== void 0); + const preservedReasoningDetails = signedReasoningDetails ?? (legacyReasoningDetails.length > 0 ? legacyReasoningDetails : void 0); + const nonEmptyThinkingBlocks = thinkingBlocks.filter((block) => block.thinking.trim().length > 0); + if (nonEmptyThinkingBlocks.length > 0) { + if (compat.requiresThinkingAsText) { + const thinkingText = nonEmptyThinkingBlocks.map((block) => sanitizeSurrogates(block.thinking)).join("\n\n"); + assistantMsg.content = [{ type: "text", text: thinkingText }, ...assistantTextParts]; + } else { + if (assistantText.length > 0) { + assistantMsg.content = assistantText; + } + if (!preservedReasoningDetails) { + let signature = nonEmptyThinkingBlocks[0].thinkingSignature; + if (model2.provider === "opencode-go" && signature === "reasoning") { + signature = "reasoning_content"; + } + if (signature && isOpenAICompletionsReasoningField(signature)) { + assistantMsg[signature] = nonEmptyThinkingBlocks.map((block) => block.thinking).join("\n"); + } + } + } + } else if (assistantText.length > 0) { + assistantMsg.content = assistantText; + } + if (toolCalls.length > 0) { + assistantMsg.tool_calls = toolCalls.map((tc) => { + const customInputProperty = options?.grammarToolInputProperties?.get(tc.name); + if (customInputProperty !== void 0) { + return { + id: tc.id, + type: "custom", + custom: { + name: tc.name, + input: sanitizeSurrogates(getGrammarToolInput(tc.name, tc.arguments, customInputProperty)) + } + }; + } + return { + id: tc.id, + type: "function", + function: { + name: tc.name, + arguments: JSON.stringify(tc.arguments) + } + }; + }); + } + if (preservedReasoningDetails) { + assistantMsg.reasoning_details = preservedReasoningDetails; + } + if (compat.requiresReasoningContentOnAssistantMessages && model2.reasoning && assistantMsg.reasoning_content === void 0) { + assistantMsg.reasoning_content = ""; + } + const content = assistantMsg.content; + const hasContent = content !== null && content !== void 0 && (typeof content === "string" ? content.length > 0 : content.length > 0); + if (!hasContent && !assistantMsg.tool_calls) { + continue; + } + params.push(assistantMsg); + } else if (msg.role === "toolResult") { + const imageBlocks = []; + let j = i; + for (; j < transformedMessages.length && transformedMessages[j].role === "toolResult"; j++) { + const toolMsg = transformedMessages[j]; + const textResult = toolMsg.content.filter(isTextContentBlock).map((block) => block.text).join("\n"); + const hasImages = toolMsg.content.some((c) => c.type === "image"); + const hasText = textResult.trim().length > 0; + const toolResultText = hasText ? textResult : hasImages ? "(see attached image)" : "(no tool output)"; + const toolResultMsg = { + role: "tool", + content: sanitizeSurrogates(toolResultText), + tool_call_id: toolMsg.toolCallId + }; + if (compat.requiresToolResultName && toolMsg.toolName) { + toolResultMsg.name = toolMsg.toolName; + } + params.push(toolResultMsg); + if (hasImages && model2.input.includes("image")) { + for (const block of toolMsg.content) { + if (isImageContentBlock(block)) { + imageBlocks.push({ + type: "image_url", + image_url: { + url: `data:${block.mimeType};base64,${block.data}` + } + }); + } + } + } + } + i = j - 1; + if (imageBlocks.length > 0) { + if (compat.requiresAssistantAfterToolResult) { + params.push({ + role: "assistant", + content: "I have processed the tool results." + }); + } + params.push({ + role: "user", + content: [ + { + type: "text", + text: "Attached image(s) from tool result:" + }, + ...imageBlocks + ] + }); + lastRole = "user"; + } else { + lastRole = "toolResult"; + } + continue; + } + lastRole = msg.role; + } + return params; +} +function convertTools(tools, compat) { + return tools.map((tool) => { + const grammar = resolveGrammarConstrainedSampling(tool, compat.supportsOpenAIGrammarTools); + if (grammar) { + return { + type: "custom", + custom: { + name: tool.name, + description: tool.description, + format: { + type: "grammar", + grammar: { + syntax: grammar.format, + definition: grammar.definition + } + } + } + }; + } + const strict = resolveJsonSchemaStrictSampling(tool, compat.supportsStrictMode !== false); + return { + type: "function", + function: { + name: tool.name, + description: tool.description, + parameters: getJsonSchemaToolParameters(tool, strict), + // Only include strict if provider supports it. Some reject unknown fields. + ...compat.supportsStrictMode !== false && { strict: strict ?? false } + } + }; + }); +} +function parseChunkUsage(rawUsage, model2) { + const promptTokens = rawUsage.prompt_tokens || 0; + const cacheReadTokens = rawUsage.prompt_tokens_details?.cached_tokens ?? rawUsage.prompt_cache_hit_tokens ?? rawUsage.cached_tokens ?? 0; + const cacheWriteTokens = rawUsage.prompt_tokens_details?.cache_write_tokens || 0; + const input = Math.max(0, promptTokens - cacheReadTokens - cacheWriteTokens); + const outputTokens = rawUsage.completion_tokens || 0; + const usage = { + input, + output: outputTokens, + cacheRead: cacheReadTokens, + cacheWrite: cacheWriteTokens, + reasoning: rawUsage.completion_tokens_details?.reasoning_tokens || 0, + totalTokens: input + outputTokens + cacheReadTokens + cacheWriteTokens, + cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 } + }; + calculateCost(model2, usage); + if (isOpenRouterModel(model2)) { + applyOpenRouterReportedCost(usage, rawUsage); + } + return usage; +} +function mapStopReason(reason) { + if (reason === null) + return { stopReason: "stop" }; + switch (reason) { + case "stop": + case "end": + return { stopReason: "stop" }; + case "length": + return { stopReason: "length" }; + case "function_call": + case "tool_calls": + return { stopReason: "toolUse" }; + case "content_filter": + return { stopReason: "error", errorMessage: "Provider finish_reason: content_filter" }; + case "network_error": + return { stopReason: "error", errorMessage: "Provider finish_reason: network_error" }; + default: + return { + stopReason: "error", + errorMessage: `Provider finish_reason: ${reason}` + }; + } +} +function detectCompat(model2) { + const provider2 = model2.provider; + const baseUrl = model2.baseUrl; + const isZai = provider2 === "zai" || provider2 === "zai-coding-cn" || baseUrl.includes("api.z.ai") || baseUrl.includes("open.bigmodel.cn"); + const isTogether = provider2 === "together" || baseUrl.includes("api.together.ai") || baseUrl.includes("api.together.xyz"); + const isMoonshot = provider2 === "moonshotai" || provider2 === "moonshotai-cn" || baseUrl.includes("api.moonshot."); + const isOpenRouter2 = provider2 === "openrouter" || baseUrl.includes("openrouter.ai"); + const isCloudflareWorkersAI = provider2 === "cloudflare-workers-ai" || baseUrl.includes("api.cloudflare.com"); + const isCloudflareAiGateway = provider2 === "cloudflare-ai-gateway" || baseUrl.includes("gateway.ai.cloudflare.com"); + const isNvidia = provider2 === "nvidia" || baseUrl.includes("integrate.api.nvidia.com"); + const isAntLing = provider2 === "ant-ling" || baseUrl.includes("api.ant-ling.com"); + const isCerebras = provider2 === "cerebras" || baseUrl.includes("cerebras.ai"); + const isDeepSeek = provider2 === "deepseek" || baseUrl.toLowerCase().includes("deepseek.com"); + const isNonStandard = isNvidia || isCerebras || provider2 === "xai" || baseUrl.includes("api.x.ai") || isTogether || baseUrl.includes("chutes.ai") || isDeepSeek || isZai || isMoonshot || provider2 === "opencode" || baseUrl.includes("opencode.ai") || isCloudflareWorkersAI || isCloudflareAiGateway || isAntLing; + const useMaxTokens = baseUrl.includes("chutes.ai") || isDeepSeek || isMoonshot || isCloudflareAiGateway || isTogether || isNvidia || isAntLing || isZai; + const isGrok = provider2 === "xai" || baseUrl.includes("api.x.ai"); + const isOpenRouterDeveloperRoleModel = isOpenRouter2 && (model2.id.startsWith("anthropic/") || model2.id.startsWith("openai/")); + const cacheControlFormat = provider2 === "openrouter" && model2.id.startsWith("anthropic/") ? "anthropic" : void 0; + return { + supportsStore: !isNonStandard, + supportsDeveloperRole: isOpenRouterDeveloperRoleModel || !isNonStandard && !isOpenRouter2, + supportsReasoningEffort: !isGrok && !isZai && !isMoonshot && !isTogether && !isCloudflareAiGateway && !isNvidia && !isAntLing, + supportsUsageInStreaming: true, + supportsFinishReason: true, + maxTokensField: useMaxTokens ? "max_tokens" : "max_completion_tokens", + requiresToolResultName: false, + requiresAssistantAfterToolResult: false, + requiresThinkingAsText: false, + requiresReasoningContentOnAssistantMessages: isDeepSeek, + thinkingFormat: isDeepSeek ? "deepseek" : isZai ? "zai" : isTogether ? "together" : isAntLing ? "ant-ling" : isOpenRouter2 ? "openrouter" : "openai", + openRouterRouting: {}, + vercelGatewayRouting: {}, + chatTemplateKwargs: {}, + chatTemplateArgs: {}, + zaiToolStream: false, + supportsThinkingTokenBudget: false, + thinkingTokenBudgetField: void 0, + // OpenAI compatibility alone does not imply strict JSON-schema tool support. + supportsStrictMode: false, + supportsOpenAIGrammarTools: false, + supportsMidConvoSystemMessages: false, + supportsMidConvoToolAdditions: false, + cacheControlFormat, + sendSessionAffinityHeaders: isOpenRouter2, + sessionAffinityFormat: isOpenRouter2 ? "openrouter" : "openai", + supportsLongCacheRetention: !(isTogether || isCloudflareWorkersAI || isCloudflareAiGateway || isNvidia || isAntLing) + }; +} +function getCompat(model2) { + const detected = detectCompat(model2); + if (!model2.compat) + return detected; + return { + supportsStore: model2.compat.supportsStore ?? detected.supportsStore, + supportsDeveloperRole: model2.compat.supportsDeveloperRole ?? detected.supportsDeveloperRole, + supportsReasoningEffort: model2.compat.supportsReasoningEffort ?? detected.supportsReasoningEffort, + supportsUsageInStreaming: model2.compat.supportsUsageInStreaming ?? detected.supportsUsageInStreaming, + supportsFinishReason: model2.compat.supportsFinishReason ?? detected.supportsFinishReason, + maxTokensField: model2.compat.maxTokensField ?? detected.maxTokensField, + requiresToolResultName: model2.compat.requiresToolResultName ?? detected.requiresToolResultName, + requiresAssistantAfterToolResult: model2.compat.requiresAssistantAfterToolResult ?? detected.requiresAssistantAfterToolResult, + requiresThinkingAsText: model2.compat.requiresThinkingAsText ?? detected.requiresThinkingAsText, + requiresReasoningContentOnAssistantMessages: model2.compat.requiresReasoningContentOnAssistantMessages ?? detected.requiresReasoningContentOnAssistantMessages, + thinkingFormat: model2.compat.thinkingFormat ?? detected.thinkingFormat, + openRouterRouting: model2.compat.openRouterRouting ?? {}, + vercelGatewayRouting: model2.compat.vercelGatewayRouting ?? detected.vercelGatewayRouting, + chatTemplateKwargs: model2.compat.chatTemplateKwargs ?? detected.chatTemplateKwargs, + chatTemplateArgs: model2.compat.chatTemplateArgs ?? detected.chatTemplateArgs, + zaiToolStream: model2.compat.zaiToolStream ?? detected.zaiToolStream, + supportsThinkingTokenBudget: model2.compat.supportsThinkingTokenBudget ?? detected.supportsThinkingTokenBudget, + thinkingTokenBudgetField: model2.compat.thinkingTokenBudgetField ?? detected.thinkingTokenBudgetField, + supportsStrictMode: model2.compat.supportsStrictMode ?? detected.supportsStrictMode, + supportsOpenAIGrammarTools: model2.compat.supportsOpenAIGrammarTools ?? detected.supportsOpenAIGrammarTools, + supportsMidConvoSystemMessages: model2.compat.supportsMidConvoSystemMessages ?? detected.supportsMidConvoSystemMessages, + supportsMidConvoToolAdditions: model2.compat.supportsMidConvoToolAdditions ?? detected.supportsMidConvoToolAdditions, + cacheControlFormat: model2.compat.cacheControlFormat ?? detected.cacheControlFormat, + sendSessionAffinityHeaders: model2.compat.sendSessionAffinityHeaders ?? detected.sendSessionAffinityHeaders, + sessionAffinityFormat: model2.compat.sessionAffinityFormat ?? detected.sessionAffinityFormat, + supportsLongCacheRetention: model2.compat.supportsLongCacheRetention ?? detected.supportsLongCacheRetention, + vllmPriority: model2.compat.vllmPriority + }; +} +var OPENAI_COMPLETIONS_REASONING_FIELDS, stream, streamSimple; +var init_openai_completions = __esm({ + "node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js"() { + init_openai(); + init_models(); + init_error_body(); + init_event_stream(); + init_hash(); + init_headers2(); + init_identity(); + init_openrouter_cost(); + init_provider_env(); + init_provider_retry(); + init_sanitize_unicode(); + init_streaming_json(); + init_text(); + init_transcript(); + init_constrained_sampling(); + init_github_copilot_headers(); + init_openai_prompt_cache(); + init_simple_options(); + init_transform_messages(); + OPENAI_COMPLETIONS_REASONING_FIELDS = ["reasoning", "reasoning_content", "reasoning_text"]; + stream = (model2, context, options) => { + const stream5 = new AssistantMessageEventStream(); + const normalizedContext = resolveTranscript(context, getCompat(model2).supportsMidConvoSystemMessages); + (async () => { + const output = { + role: "assistant", + content: [], + api: model2.api, + provider: model2.provider, + model: model2.id, + usage: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + totalTokens: 0, + cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 } + }, + stopReason: "pending", + timestamp: Date.now() + }; + let streamedReasoningDetails; + const applyStreamedReasoningDetails = (block) => { + if (streamedReasoningDetails !== void 0) { + block.thinkingSignature = JSON.stringify(streamedReasoningDetails); + } + }; + try { + const apiKey = getClientApiKey(model2.provider, options?.apiKey, options?.headers); + const compat = getCompat(model2); + const grammarToolInputProperties = createGrammarToolInputProperties(getDeclaredTools(normalizedContext.messages), compat.supportsOpenAIGrammarTools); + const cacheRetention = resolveCacheRetention(options?.cacheRetention, options?.env); + const cacheSessionId = cacheRetention === "none" ? void 0 : options?.sessionId; + const client = createClient(model2, normalizedContext, apiKey, options?.headers, options?.identity, options?.fetch, cacheSessionId, compat); + let params = buildParams(model2, normalizedContext, options, compat, cacheRetention, grammarToolInputProperties); + const nextParams = await options?.onPayload?.(params, model2); + if (nextParams !== void 0) { + params = nextParams; + } + const requestOptions = { + ...options?.signal ? { signal: options.signal } : {}, + ...options?.timeoutMs !== void 0 ? { timeout: options.timeoutMs } : {}, + maxRetries: 0 + }; + const { data: openaiStream, response } = await retryProviderRequest(() => client.chat.completions.create(params, requestOptions).withResponse(), { + maxRetries: options?.maxRetries, + maxRetryDelayMs: options?.maxRetryDelayMs, + signal: options?.signal + }); + await options?.onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model2); + stream5.push({ type: "start", partial: output }); + let textBlock = null; + let thinkingBlock = null; + let hasFinishReason = false; + const toolCallBlocksByIndex = /* @__PURE__ */ new Map(); + const toolCallBlocksById = /* @__PURE__ */ new Map(); + const toolCallStates = /* @__PURE__ */ new Map(); + const blocks = output.content; + const getContentIndex = (block) => blocks.indexOf(block); + const customInput2 = (property) => ({ + kind: "custom", + property, + buffer: { input: "", started: false, closed: false } + }); + const finishBlock = (block) => { + const contentIndex = getContentIndex(block); + if (contentIndex === -1) { + return; + } + if (block.type === "text") { + stream5.push({ + type: "text_end", + contentIndex, + content: block.text, + partial: output + }); + } else if (block.type === "thinking") { + applyStreamedReasoningDetails(block); + stream5.push({ + type: "thinking_end", + contentIndex, + content: block.thinking, + partial: output + }); + } else if (block.type === "toolCall") { + const input = toolCallStates.get(block).input; + toolCallStates.delete(block); + if (input.kind === "custom") { + const delta = closeGrammarToolInputJson(input.buffer, input.property, void 0); + if (delta !== void 0) { + stream5.push({ + type: "toolcall_delta", + contentIndex, + delta, + partial: output + }); + } + } else { + Object.assign(block, input.arguments.finish()); + } + stream5.push({ + type: "toolcall_end", + contentIndex, + toolCall: block, + partial: output + }); + } + }; + const ensureTextBlock = () => { + if (!textBlock) { + textBlock = { type: "text", text: "" }; + blocks.push(textBlock); + stream5.push({ type: "text_start", contentIndex: getContentIndex(textBlock), partial: output }); + } + return textBlock; + }; + const ensureThinkingBlock = (thinkingSignature) => { + if (!thinkingBlock) { + thinkingBlock = { + type: "thinking", + thinking: "", + thinkingSignature + }; + blocks.push(thinkingBlock); + stream5.push({ type: "thinking_start", contentIndex: getContentIndex(thinkingBlock), partial: output }); + } + return thinkingBlock; + }; + const ensureToolCallBlock = (toolCall) => { + const streamIndex = typeof toolCall.index === "number" ? toolCall.index : void 0; + const name = toolCall.function?.name ?? toolCall.custom?.name ?? ""; + let block = streamIndex !== void 0 ? toolCallBlocksByIndex.get(streamIndex) : void 0; + if (!block && toolCall.id) { + block = toolCallBlocksById.get(toolCall.id); + } + if (!block) { + const customInputProperty = toolCall.custom && !toolCall.function ? grammarToolInputProperties.get(name) ?? "input" : void 0; + block = { + type: "toolCall", + id: toolCall.id || "", + name, + arguments: customInputProperty !== void 0 ? { [customInputProperty]: "" } : {} + }; + toolCallStates.set(block, { + streamIndex, + input: customInputProperty !== void 0 ? customInput2(customInputProperty) : { kind: "json", arguments: new ToolCallArgumentsStream() } + }); + if (streamIndex !== void 0) { + toolCallBlocksByIndex.set(streamIndex, block); + } + if (toolCall.id) { + toolCallBlocksById.set(toolCall.id, block); + } + blocks.push(block); + stream5.push({ + type: "toolcall_start", + contentIndex: getContentIndex(block), + partial: output + }); + } + const state2 = toolCallStates.get(block); + if (streamIndex !== void 0 && state2.streamIndex === void 0) { + state2.streamIndex = streamIndex; + toolCallBlocksByIndex.set(streamIndex, block); + } + if (toolCall.id) { + toolCallBlocksById.set(toolCall.id, block); + } + if (!block.name && name) { + block.name = name; + } + if (toolCall.custom && !toolCall.function && state2.input.kind !== "custom") { + const customInputProperty = grammarToolInputProperties.get(block.name) ?? "input"; + block.arguments = { [customInputProperty]: "" }; + state2.input = customInput2(customInputProperty); + } + return { block, state: state2 }; + }; + for await (const chunk of openaiStream) { + await options?.onProviderStreamEvent?.(chunk, model2); + if (!chunk || typeof chunk !== "object") + continue; + output.responseId ||= chunk.id; + if (typeof chunk.model === "string" && chunk.model.length > 0 && chunk.model !== model2.id) { + output.responseModel ||= chunk.model; + } + if (chunk.usage) { + output.usage = parseChunkUsage(chunk.usage, model2); + } + const choice = Array.isArray(chunk.choices) ? chunk.choices[0] : void 0; + if (!choice) + continue; + if (!chunk.usage && choice.usage) { + output.usage = parseChunkUsage(choice.usage, model2); + } + if (choice.finish_reason) { + output.rawStopReason = choice.finish_reason; + const finishReasonResult = mapStopReason(choice.finish_reason); + output.stopReason = finishReasonResult.stopReason; + if (finishReasonResult.errorMessage) { + output.errorMessage = finishReasonResult.errorMessage; + } + hasFinishReason = true; + } + if (choice.delta) { + const reasoningFields = ["reasoning_content", "reasoning", "reasoning_text"]; + const deltaFields = choice.delta; + let foundReasoningField = null; + for (const field of reasoningFields) { + const value2 = deltaFields[field]; + if (typeof value2 === "string" && value2.length > 0) { + foundReasoningField = field; + break; + } + } + if (foundReasoningField) { + const delta = deltaFields[foundReasoningField]; + if (typeof delta === "string" && delta.length > 0) { + const thinkingSignature = model2.provider === "opencode-go" && foundReasoningField === "reasoning" ? "reasoning_content" : foundReasoningField; + const block = ensureThinkingBlock(thinkingSignature); + block.thinking += delta; + stream5.push({ + type: "thinking_delta", + contentIndex: getContentIndex(block), + delta, + partial: output + }); + } + } + const reasoningDetails = choice.delta.reasoning_details; + if (Array.isArray(reasoningDetails)) { + for (const detail of reasoningDetails) { + if (!isOpenAIReasoningDetail(detail)) + continue; + ensureThinkingBlock(""); + streamedReasoningDetails ??= []; + appendOpenAIReasoningDetail(streamedReasoningDetails, detail); + } + } + if (choice.delta.content !== null && choice.delta.content !== void 0 && choice.delta.content.length > 0) { + const block = ensureTextBlock(); + block.text += choice.delta.content; + stream5.push({ + type: "text_delta", + contentIndex: getContentIndex(block), + delta: choice.delta.content, + partial: output + }); + } + if (choice?.delta?.tool_calls) { + for (const toolCall of choice.delta.tool_calls) { + const { block, state: state2 } = ensureToolCallBlock(toolCall); + if (!block.id && toolCall.id) { + block.id = toolCall.id; + toolCallBlocksById.set(toolCall.id, block); + } + const name = toolCall.function?.name ?? toolCall.custom?.name; + if (!block.name && name) { + block.name = name; + } + let delta = ""; + const input = state2.input; + if (toolCall.function?.arguments && input.kind === "json") { + delta = toolCall.function.arguments; + block.arguments = input.arguments.append(delta); + } else if (toolCall.custom?.input && input.kind === "custom") { + delta = appendGrammarToolInputJsonDelta(input.buffer, input.property, toolCall.custom.input) ?? ""; + block.arguments = { [input.property]: input.buffer.input }; + } + stream5.push({ + type: "toolcall_delta", + contentIndex: getContentIndex(block), + delta, + partial: output + }); + } + } + } + } + for (const block of blocks) { + finishBlock(block); + } + if (options?.signal?.aborted) { + throw new Error("Request was aborted"); + } + if (output.stopReason === "aborted") { + throw new Error("Request was aborted"); + } + if (!hasFinishReason && !compat.supportsFinishReason) { + output.stopReason = output.content.some((block) => block.type === "toolCall") ? "toolUse" : "stop"; + } + if (output.stopReason === "error") { + throw new Error(output.errorMessage || "Provider returned an error stop reason"); + } + if (compat.supportsFinishReason && !hasFinishReason || output.stopReason === "pending") { + throw new Error("Stream ended without finish_reason"); + } + stream5.push({ type: "done", reason: output.stopReason, message: output }); + stream5.end(); + } catch (error) { + for (const block of output.content) { + if (block.type === "thinking") { + applyStreamedReasoningDetails(block); + } + } + output.stopReason = options?.signal?.aborted ? "aborted" : "error"; + output.errorMessage = formatProviderError(normalizeProviderError(error)); + const rawMetadata = error?.error?.metadata?.raw; + if (rawMetadata && !output.errorMessage.includes(String(rawMetadata))) { + output.errorMessage += ` +${rawMetadata}`; + } + stream5.push({ type: "error", reason: output.stopReason, error: output }); + stream5.end(); + } + })(); + return stream5; + }; + streamSimple = (model2, context, options) => { + getClientApiKey(model2.provider, options?.apiKey, options?.headers); + const base = { + ...buildBaseOptions(model2, context, options, options?.apiKey), + toolChoice: options?.toolChoice + }; + const clampedReasoning = options?.reasoning ? clampThinkingLevel(model2, options.reasoning) : void 0; + const reasoningEffort = clampedReasoning === "off" ? void 0 : clampedReasoning; + return stream(model2, context, { + ...base, + reasoningEffort, + thinkingBudgets: options?.thinkingBudgets + }); + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/tslib.mjs +function __classPrivateFieldSet2(receiver, state2, value2, kind, f) { + if (kind === "m") + throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) + throw new TypeError("Private accessor was defined without a setter"); + if (typeof state2 === "function" ? receiver !== state2 || !f : !state2.has(receiver)) + throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return kind === "a" ? f.call(receiver, value2) : f ? f.value = value2 : state2.set(receiver, value2), value2; +} +function __classPrivateFieldGet2(receiver, state2, kind, f) { + if (kind === "a" && !f) + throw new TypeError("Private accessor was defined without a getter"); + if (typeof state2 === "function" ? receiver !== state2 || !f : !state2.has(receiver)) + throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state2.get(receiver); +} +var init_tslib2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/tslib.mjs"() { + } +}); + +// node_modules/@anthropic-ai/sdk/internal/errors.mjs +function isAbortError2(err) { + return typeof err === "object" && err !== null && // Spec-compliant fetch implementations + ("name" in err && err.name === "AbortError" || // Expo fetch + "message" in err && String(err.message).includes("FetchRequestCanceledException")); +} +var castToError2; +var init_errors2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/errors.mjs"() { + castToError2 = (err) => { + if (err instanceof Error) + return err; + if (typeof err === "object" && err !== null) { + try { + const tag = Object.prototype.toString.call(err); + if (tag === "[object Error]" || tag === "[object DOMException]") { + const error = new Error(err.message, err.cause ? { cause: err.cause } : {}); + if (err.stack) + error.stack = err.stack; + if (err.cause && !error.cause) + error.cause = err.cause; + if (err.name) + error.name = err.name; + return error; + } + } catch { + } + try { + return new Error(JSON.stringify(err)); + } catch { + } + } + return new Error(err); + }; + } +}); + +// node_modules/@anthropic-ai/sdk/core/error.mjs +var AnthropicError, APIError2, APIUserAbortError2, APIConnectionError2, APIConnectionTimeoutError2, RetryableError, BadRequestError2, AuthenticationError2, PermissionDeniedError2, NotFoundError2, ConflictError2, UnprocessableEntityError2, RateLimitError2, InternalServerError2; +var init_error3 = __esm({ + "node_modules/@anthropic-ai/sdk/core/error.mjs"() { + init_errors2(); + AnthropicError = /* @__PURE__ */ (() => { + class AnthropicError2 extends Error { + } + return AnthropicError2; + })(); + APIError2 = class _APIError extends AnthropicError { + constructor(status, error, message, headers, type) { + super(`${_APIError.makeMessage(status, error, message)}`); + this.status = status; + this.headers = headers; + this.requestID = headers?.get("request-id"); + this.workspaceID = headers?.get("anthropic-workspace-id"); + this.error = error; + this.type = type ?? null; + } + static makeMessage(status, error, message) { + const msg = error?.message ? typeof error.message === "string" ? error.message : JSON.stringify(error.message) : error ? JSON.stringify(error) : message; + if (status && msg) { + return `${status} ${msg}`; + } + if (status) { + return `${status} status code (no body)`; + } + if (msg) { + return msg; + } + return "(no status code or body)"; + } + static generate(status, errorResponse, message, headers) { + if (!status || !headers) { + return new APIConnectionError2({ message, cause: castToError2(errorResponse) }); + } + const error = errorResponse; + const type = error?.["error"]?.["type"]; + if (status === 400) { + return new BadRequestError2(status, error, message, headers, type); + } + if (status === 401) { + return new AuthenticationError2(status, error, message, headers, type); + } + if (status === 403) { + return new PermissionDeniedError2(status, error, message, headers, type); + } + if (status === 404) { + return new NotFoundError2(status, error, message, headers, type); + } + if (status === 409) { + return new ConflictError2(status, error, message, headers, type); + } + if (status === 422) { + return new UnprocessableEntityError2(status, error, message, headers, type); + } + if (status === 429) { + return new RateLimitError2(status, error, message, headers, type); + } + if (status >= 500) { + return new InternalServerError2(status, error, message, headers, type); + } + return new _APIError(status, error, message, headers, type); + } + }; + APIUserAbortError2 = class extends APIError2 { + constructor({ message } = {}) { + super(void 0, void 0, message || "Request was aborted.", void 0); + } + }; + APIConnectionError2 = class extends APIError2 { + constructor({ message, cause }) { + super(void 0, void 0, message || "Connection error.", void 0); + if (cause) + this.cause = cause; + } + }; + APIConnectionTimeoutError2 = class extends APIConnectionError2 { + constructor({ message } = {}) { + super({ message: message ?? "Request timed out." }); + } + }; + RetryableError = class extends AnthropicError { + constructor(message, { cause } = {}) { + super(message ?? "Retryable error."); + if (cause !== void 0) + this.cause = cause; + } + }; + BadRequestError2 = class extends APIError2 { + }; + AuthenticationError2 = class extends APIError2 { + }; + PermissionDeniedError2 = class extends APIError2 { + }; + NotFoundError2 = class extends APIError2 { + }; + ConflictError2 = class extends APIError2 { + }; + UnprocessableEntityError2 = class extends APIError2 { + }; + RateLimitError2 = class extends APIError2 { + }; + InternalServerError2 = class extends APIError2 { + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/values.mjs +function maybeObj2(x) { + if (typeof x !== "object") { + return {}; + } + return x ?? {}; +} +function isEmptyObj2(obj2) { + if (!obj2) + return true; + for (const _k in obj2) + return false; + return true; +} +function hasOwn2(obj2, key) { + return Object.prototype.hasOwnProperty.call(obj2, key); +} +function isObj2(obj2) { + return obj2 != null && typeof obj2 === "object" && !Array.isArray(obj2); +} +function checkNever(_value) { +} +var startsWithSchemeRegexp2, isAbsoluteURL2, isArray2, isReadonlyArray2, validatePositiveInteger2, safeJSON2; +var init_values2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/values.mjs"() { + init_error3(); + startsWithSchemeRegexp2 = /^[a-z][a-z0-9+.-]*:/i; + isAbsoluteURL2 = (url) => { + return startsWithSchemeRegexp2.test(url); + }; + isArray2 = (val) => (isArray2 = Array.isArray, isArray2(val)); + isReadonlyArray2 = isArray2; + validatePositiveInteger2 = (name, n) => { + if (typeof n !== "number" || !Number.isInteger(n)) { + throw new AnthropicError(`${name} must be an integer`); + } + if (n < 0) { + throw new AnthropicError(`${name} must be a positive integer`); + } + return n; + }; + safeJSON2 = (text) => { + try { + return JSON.parse(text); + } catch (err) { + return void 0; + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/sleep.mjs +var sleep2; +var init_sleep2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/sleep.mjs"() { + sleep2 = (ms, signal) => new Promise((resolve2) => { + if (signal?.aborted) + return resolve2(); + const onAbort = () => { + clearTimeout(timer); + resolve2(); + }; + const timer = setTimeout(() => { + signal?.removeEventListener("abort", onAbort); + resolve2(); + }, ms); + signal?.addEventListener("abort", onAbort, { once: true }); + }); + } +}); + +// node_modules/@anthropic-ai/sdk/version.mjs +var VERSION2; +var init_version3 = __esm({ + "node_modules/@anthropic-ai/sdk/version.mjs"() { + VERSION2 = "0.129.0"; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/detect-platform.mjs +function getDetectedPlatform2() { + if (typeof Deno !== "undefined" && Deno.build != null) { + return "deno"; + } + if (typeof EdgeRuntime !== "undefined") { + return "edge"; + } + if (Object.prototype.toString.call(typeof globalThis.process !== "undefined" ? globalThis.process : 0) === "[object process]") { + return "node"; + } + return "unknown"; +} +function getBrowserInfo2() { + if (typeof navigator === "undefined" || !navigator) { + return null; + } + const browserPatterns = [ + { key: "edge", pattern: /Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: "ie", pattern: /MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: "ie", pattern: /Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: "chrome", pattern: /Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: "firefox", pattern: /Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ }, + { key: "safari", pattern: /(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/ } + ]; + for (const { key, pattern } of browserPatterns) { + const match = pattern.exec(navigator.userAgent); + if (match) { + const major = match[1] || 0; + const minor = match[2] || 0; + const patch = match[3] || 0; + return { browser: key, version: `${major}.${minor}.${patch}` }; + } + } + return null; +} +var isRunningInBrowser2, getPlatformProperties2, normalizeArch2, normalizePlatform2, _platformHeaders2, getPlatformHeaders2; +var init_detect_platform2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/detect-platform.mjs"() { + init_version3(); + isRunningInBrowser2 = () => { + return ( + // @ts-ignore + typeof window !== "undefined" && // @ts-ignore + typeof window.document !== "undefined" && // @ts-ignore + typeof navigator !== "undefined" + ); + }; + getPlatformProperties2 = () => { + const detectedPlatform = getDetectedPlatform2(); + if (detectedPlatform === "deno") { + return { + "X-Stainless-Lang": "js", + "X-Stainless-Package-Version": VERSION2, + "X-Stainless-OS": normalizePlatform2(Deno.build.os), + "X-Stainless-Arch": normalizeArch2(Deno.build.arch), + "X-Stainless-Runtime": "deno", + "X-Stainless-Runtime-Version": typeof Deno.version === "string" ? Deno.version : Deno.version?.deno ?? "unknown" + }; + } + if (typeof EdgeRuntime !== "undefined") { + return { + "X-Stainless-Lang": "js", + "X-Stainless-Package-Version": VERSION2, + "X-Stainless-OS": "Unknown", + "X-Stainless-Arch": `other:${EdgeRuntime}`, + "X-Stainless-Runtime": "edge", + "X-Stainless-Runtime-Version": globalThis.process?.version ?? "unknown" + }; + } + if (detectedPlatform === "node") { + return { + "X-Stainless-Lang": "js", + "X-Stainless-Package-Version": VERSION2, + "X-Stainless-OS": normalizePlatform2(globalThis.process.platform ?? "unknown"), + "X-Stainless-Arch": normalizeArch2(globalThis.process.arch ?? "unknown"), + "X-Stainless-Runtime": "node", + "X-Stainless-Runtime-Version": globalThis.process.version ?? "unknown" + }; + } + const browserInfo = getBrowserInfo2(); + if (browserInfo) { + return { + "X-Stainless-Lang": "js", + "X-Stainless-Package-Version": VERSION2, + "X-Stainless-OS": "Unknown", + "X-Stainless-Arch": "unknown", + "X-Stainless-Runtime": `browser:${browserInfo.browser}`, + "X-Stainless-Runtime-Version": browserInfo.version + }; + } + return { + "X-Stainless-Lang": "js", + "X-Stainless-Package-Version": VERSION2, + "X-Stainless-OS": "Unknown", + "X-Stainless-Arch": "unknown", + "X-Stainless-Runtime": "unknown", + "X-Stainless-Runtime-Version": "unknown" + }; + }; + normalizeArch2 = (arch) => { + if (arch === "x32") + return "x32"; + if (arch === "x86_64" || arch === "x64") + return "x64"; + if (arch === "arm") + return "arm"; + if (arch === "aarch64" || arch === "arm64") + return "arm64"; + if (arch) + return `other:${arch}`; + return "unknown"; + }; + normalizePlatform2 = (platform) => { + platform = platform.toLowerCase(); + if (platform.includes("ios")) + return "iOS"; + if (platform === "android") + return "Android"; + if (platform === "darwin") + return "MacOS"; + if (platform === "win32") + return "Windows"; + if (platform === "freebsd") + return "FreeBSD"; + if (platform === "openbsd") + return "OpenBSD"; + if (platform === "linux") + return "Linux"; + if (platform) + return `Other:${platform}`; + return "Unknown"; + }; + getPlatformHeaders2 = () => { + return _platformHeaders2 ?? (_platformHeaders2 = getPlatformProperties2()); + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/request-signal.mjs +function makeCleanup(signal, listener) { + return () => signal.removeEventListener("abort", listener); +} +function registerRequestSignalCleanup(controller, signal, listener) { + cleanups.set(controller, makeCleanup(signal, listener)); +} +function armAbandonmentBackstop(body, controller) { + if (cleanups.has(controller)) + registry?.register(body, controller, controller); +} +function releaseRequestSignal(controller) { + const cleanup = cleanups.get(controller); + if (cleanup) { + cleanups.delete(controller); + registry?.unregister(controller); + cleanup(); + } +} +var cleanups, registry; +var init_request_signal = __esm({ + "node_modules/@anthropic-ai/sdk/internal/request-signal.mjs"() { + cleanups = /* @__PURE__ */ new WeakMap(); + registry = typeof globalThis.FinalizationRegistry === "function" ? new globalThis.FinalizationRegistry((controller) => releaseRequestSignal(controller)) : null; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/shims.mjs +function getDefaultFetch2() { + if (typeof fetch !== "undefined") { + return fetch; + } + throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`"); +} +function makeReadableStream2(...args) { + const ReadableStream2 = globalThis.ReadableStream; + if (typeof ReadableStream2 === "undefined") { + throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`"); + } + return new ReadableStream2(...args); +} +function ReadableStreamFrom2(iterable) { + let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator](); + return makeReadableStream2({ + start() { + }, + async pull(controller) { + const { done, value: value2 } = await iter.next(); + if (done) { + controller.close(); + } else { + controller.enqueue(value2); + } + }, + async cancel() { + await iter.return?.(); + } + }); +} +function ReadableStreamToAsyncIterable2(stream5) { + if (stream5[Symbol.asyncIterator]) + return stream5; + const reader = stream5.getReader(); + return { + async next() { + try { + const result = await reader.read(); + if (result?.done) + reader.releaseLock(); + return result; + } catch (e) { + reader.releaseLock(); + throw e; + } + }, + async return() { + const cancelPromise = reader.cancel(); + reader.releaseLock(); + await cancelPromise; + return { done: true, value: void 0 }; + }, + [Symbol.asyncIterator]() { + return this; + } + }; +} +async function CancelReadableStream2(stream5) { + if (stream5 === null || typeof stream5 !== "object") + return; + if (stream5[Symbol.asyncIterator]) { + await stream5[Symbol.asyncIterator]().return?.(); + return; + } + const reader = stream5.getReader(); + const cancelPromise = reader.cancel(); + reader.releaseLock(); + await cancelPromise; +} +var init_shims2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/shims.mjs"() { + } +}); + +// node_modules/@anthropic-ai/sdk/internal/request-options.mjs +var FallbackEncoder2; +var init_request_options2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/request-options.mjs"() { + FallbackEncoder2 = ({ headers, body }) => { + return { + bodyHeaders: { + "content-type": "application/json" + }, + body: JSON.stringify(body) + }; + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/qs/formats.mjs +var default_format2, default_formatter2, formatters2, RFC17382; +var init_formats2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/qs/formats.mjs"() { + default_format2 = "RFC3986"; + default_formatter2 = (v) => String(v); + formatters2 = { + RFC1738: (v) => String(v).replace(/%20/g, "+"), + RFC3986: default_formatter2 + }; + RFC17382 = "RFC1738"; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/qs/utils.mjs +function is_buffer2(obj2) { + if (!obj2 || typeof obj2 !== "object") { + return false; + } + return !!(obj2.constructor && obj2.constructor.isBuffer && obj2.constructor.isBuffer(obj2)); +} +function maybe_map2(val, fn) { + if (isArray2(val)) { + const mapped = []; + for (let i = 0; i < val.length; i += 1) { + mapped.push(fn(val[i])); + } + return mapped; + } + return fn(val); +} +var has2, hex_table2, limit2, encode2; +var init_utils3 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/qs/utils.mjs"() { + init_formats2(); + init_values2(); + has2 = (obj2, key) => (has2 = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty), has2(obj2, key)); + hex_table2 = /* @__PURE__ */ (() => { + const array = []; + for (let i = 0; i < 256; ++i) { + array.push("%" + ((i < 16 ? "0" : "") + i.toString(16)).toUpperCase()); + } + return array; + })(); + limit2 = 1024; + encode2 = (str2, _defaultEncoder, charset, _kind, format) => { + if (str2.length === 0) { + return str2; + } + let string2 = str2; + if (typeof str2 === "symbol") { + string2 = Symbol.prototype.toString.call(str2); + } else if (typeof str2 !== "string") { + string2 = String(str2); + } + if (charset === "iso-8859-1") { + return escape(string2).replace(/%u[0-9a-f]{4}/gi, function($0) { + return "%26%23" + parseInt($0.slice(2), 16) + "%3B"; + }); + } + let out = ""; + for (let j = 0; j < string2.length; j += limit2) { + const segment = string2.length >= limit2 ? string2.slice(j, j + limit2) : string2; + const arr2 = []; + for (let i = 0; i < segment.length; ++i) { + let c = segment.charCodeAt(i); + if (c === 45 || // - + c === 46 || // . + c === 95 || // _ + c === 126 || // ~ + c >= 48 && c <= 57 || // 0-9 + c >= 65 && c <= 90 || // a-z + c >= 97 && c <= 122 || // A-Z + format === RFC17382 && (c === 40 || c === 41)) { + arr2[arr2.length] = segment.charAt(i); + continue; + } + if (c < 128) { + arr2[arr2.length] = hex_table2[c]; + continue; + } + if (c < 2048) { + arr2[arr2.length] = hex_table2[192 | c >> 6] + hex_table2[128 | c & 63]; + continue; + } + if (c < 55296 || c >= 57344) { + arr2[arr2.length] = hex_table2[224 | c >> 12] + hex_table2[128 | c >> 6 & 63] + hex_table2[128 | c & 63]; + continue; + } + i += 1; + c = 65536 + ((c & 1023) << 10 | segment.charCodeAt(i) & 1023); + arr2[arr2.length] = hex_table2[240 | c >> 18] + hex_table2[128 | c >> 12 & 63] + hex_table2[128 | c >> 6 & 63] + hex_table2[128 | c & 63]; + } + out += arr2.join(""); + } + return out; + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/qs/stringify.mjs +function is_non_nullish_primitive2(v) { + return typeof v === "string" || typeof v === "number" || typeof v === "boolean" || typeof v === "symbol" || typeof v === "bigint"; +} +function inner_stringify2(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder4, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) { + let obj2 = object; + let tmp_sc = sideChannel; + let step = 0; + let find_flag = false; + while ((tmp_sc = tmp_sc.get(sentinel2)) !== void 0 && !find_flag) { + const pos = tmp_sc.get(object); + step += 1; + if (typeof pos !== "undefined") { + if (pos === step) { + throw new RangeError("Cyclic object value"); + } else { + find_flag = true; + } + } + if (typeof tmp_sc.get(sentinel2) === "undefined") { + step = 0; + } + } + if (typeof filter === "function") { + obj2 = filter(prefix, obj2); + } else if (obj2 instanceof Date) { + obj2 = serializeDate?.(obj2); + } else if (generateArrayPrefix === "comma" && isArray2(obj2)) { + obj2 = maybe_map2(obj2, function(value2) { + if (value2 instanceof Date) { + return serializeDate?.(value2); + } + return value2; + }); + } + if (obj2 === null) { + if (strictNullHandling) { + return encoder4 && !encodeValuesOnly ? ( + // @ts-expect-error + encoder4(prefix, defaults2.encoder, charset, "key", format) + ) : prefix; + } + obj2 = ""; + } + if (is_non_nullish_primitive2(obj2) || is_buffer2(obj2)) { + if (encoder4) { + const key_value = encodeValuesOnly ? prefix : encoder4(prefix, defaults2.encoder, charset, "key", format); + return [ + formatter?.(key_value) + "=" + // @ts-expect-error + formatter?.(encoder4(obj2, defaults2.encoder, charset, "value", format)) + ]; + } + return [formatter?.(prefix) + "=" + formatter?.(String(obj2))]; + } + const values = []; + if (typeof obj2 === "undefined") { + return values; + } + let obj_keys; + if (generateArrayPrefix === "comma" && isArray2(obj2)) { + if (encodeValuesOnly && encoder4) { + obj2 = maybe_map2(obj2, encoder4); + } + obj_keys = [{ value: obj2.length > 0 ? obj2.join(",") || null : void 0 }]; + } else if (isArray2(filter)) { + obj_keys = filter; + } else { + const keys = Object.keys(obj2); + obj_keys = sort ? keys.sort(sort) : keys; + } + const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\./g, "%2E") : String(prefix); + const adjusted_prefix = commaRoundTrip && isArray2(obj2) && obj2.length === 1 ? encoded_prefix + "[]" : encoded_prefix; + if (allowEmptyArrays && isArray2(obj2) && obj2.length === 0) { + return adjusted_prefix + "[]"; + } + for (let j = 0; j < obj_keys.length; ++j) { + const key = obj_keys[j]; + const value2 = ( + // @ts-ignore + typeof key === "object" && typeof key.value !== "undefined" ? key.value : obj2[key] + ); + if (skipNulls && value2 === null) { + continue; + } + const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\./g, "%2E") : key; + const key_prefix = isArray2(obj2) ? typeof generateArrayPrefix === "function" ? generateArrayPrefix(adjusted_prefix, encoded_key) : adjusted_prefix : adjusted_prefix + (allowDots ? "." + encoded_key : "[" + encoded_key + "]"); + sideChannel.set(object, step); + const valueSideChannel = /* @__PURE__ */ new WeakMap(); + valueSideChannel.set(sentinel2, sideChannel); + push_to_array3(values, inner_stringify2( + value2, + key_prefix, + generateArrayPrefix, + commaRoundTrip, + allowEmptyArrays, + strictNullHandling, + skipNulls, + encodeDotInKeys, + // @ts-ignore + generateArrayPrefix === "comma" && encodeValuesOnly && isArray2(obj2) ? null : encoder4, + filter, + sort, + allowDots, + serializeDate, + format, + formatter, + encodeValuesOnly, + charset, + valueSideChannel + )); + } + return values; +} +function normalize_stringify_options2(opts = defaults2) { + if (typeof opts.allowEmptyArrays !== "undefined" && typeof opts.allowEmptyArrays !== "boolean") { + throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided"); + } + if (typeof opts.encodeDotInKeys !== "undefined" && typeof opts.encodeDotInKeys !== "boolean") { + throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided"); + } + if (opts.encoder !== null && typeof opts.encoder !== "undefined" && typeof opts.encoder !== "function") { + throw new TypeError("Encoder has to be a function."); + } + const charset = opts.charset || defaults2.charset; + if (typeof opts.charset !== "undefined" && opts.charset !== "utf-8" && opts.charset !== "iso-8859-1") { + throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined"); + } + let format = default_format2; + if (typeof opts.format !== "undefined") { + if (!has2(formatters2, opts.format)) { + throw new TypeError("Unknown format option provided."); + } + format = opts.format; + } + const formatter = formatters2[format]; + let filter = defaults2.filter; + if (typeof opts.filter === "function" || isArray2(opts.filter)) { + filter = opts.filter; + } + let arrayFormat; + if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators2) { + arrayFormat = opts.arrayFormat; + } else if ("indices" in opts) { + arrayFormat = opts.indices ? "indices" : "repeat"; + } else { + arrayFormat = defaults2.arrayFormat; + } + if ("commaRoundTrip" in opts && typeof opts.commaRoundTrip !== "boolean") { + throw new TypeError("`commaRoundTrip` must be a boolean, or absent"); + } + const allowDots = typeof opts.allowDots === "undefined" ? !!opts.encodeDotInKeys === true ? true : defaults2.allowDots : !!opts.allowDots; + return { + addQueryPrefix: typeof opts.addQueryPrefix === "boolean" ? opts.addQueryPrefix : defaults2.addQueryPrefix, + // @ts-ignore + allowDots, + allowEmptyArrays: typeof opts.allowEmptyArrays === "boolean" ? !!opts.allowEmptyArrays : defaults2.allowEmptyArrays, + arrayFormat, + charset, + charsetSentinel: typeof opts.charsetSentinel === "boolean" ? opts.charsetSentinel : defaults2.charsetSentinel, + commaRoundTrip: !!opts.commaRoundTrip, + delimiter: typeof opts.delimiter === "undefined" ? defaults2.delimiter : opts.delimiter, + encode: typeof opts.encode === "boolean" ? opts.encode : defaults2.encode, + encodeDotInKeys: typeof opts.encodeDotInKeys === "boolean" ? opts.encodeDotInKeys : defaults2.encodeDotInKeys, + encoder: typeof opts.encoder === "function" ? opts.encoder : defaults2.encoder, + encodeValuesOnly: typeof opts.encodeValuesOnly === "boolean" ? opts.encodeValuesOnly : defaults2.encodeValuesOnly, + filter, + format, + formatter, + serializeDate: typeof opts.serializeDate === "function" ? opts.serializeDate : defaults2.serializeDate, + skipNulls: typeof opts.skipNulls === "boolean" ? opts.skipNulls : defaults2.skipNulls, + // @ts-ignore + sort: typeof opts.sort === "function" ? opts.sort : null, + strictNullHandling: typeof opts.strictNullHandling === "boolean" ? opts.strictNullHandling : defaults2.strictNullHandling + }; +} +function stringify2(object, opts = {}) { + let obj2 = object; + const options = normalize_stringify_options2(opts); + let obj_keys; + let filter; + if (typeof options.filter === "function") { + filter = options.filter; + obj2 = filter("", obj2); + } else if (isArray2(options.filter)) { + filter = options.filter; + obj_keys = filter; + } + const keys = []; + if (typeof obj2 !== "object" || obj2 === null) { + return ""; + } + const generateArrayPrefix = array_prefix_generators2[options.arrayFormat]; + const commaRoundTrip = generateArrayPrefix === "comma" && options.commaRoundTrip; + if (!obj_keys) { + obj_keys = Object.keys(obj2); + } + if (options.sort) { + obj_keys.sort(options.sort); + } + const sideChannel = /* @__PURE__ */ new WeakMap(); + for (let i = 0; i < obj_keys.length; ++i) { + const key = obj_keys[i]; + if (options.skipNulls && obj2[key] === null) { + continue; + } + push_to_array3(keys, inner_stringify2( + obj2[key], + key, + // @ts-expect-error + generateArrayPrefix, + commaRoundTrip, + options.allowEmptyArrays, + options.strictNullHandling, + options.skipNulls, + options.encodeDotInKeys, + options.encode ? options.encoder : null, + options.filter, + options.sort, + options.allowDots, + options.serializeDate, + options.format, + options.formatter, + options.encodeValuesOnly, + options.charset, + sideChannel + )); + } + const joined = keys.join(options.delimiter); + let prefix = options.addQueryPrefix === true ? "?" : ""; + if (options.charsetSentinel) { + if (options.charset === "iso-8859-1") { + prefix += "utf8=%26%2310003%3B&"; + } else { + prefix += "utf8=%E2%9C%93&"; + } + } + return joined.length > 0 ? prefix + joined : ""; +} +var array_prefix_generators2, push_to_array3, toISOString2, defaults2, sentinel2; +var init_stringify2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/qs/stringify.mjs"() { + init_utils3(); + init_formats2(); + init_values2(); + array_prefix_generators2 = { + brackets(prefix) { + return String(prefix) + "[]"; + }, + comma: "comma", + indices(prefix, key) { + return String(prefix) + "[" + key + "]"; + }, + repeat(prefix) { + return String(prefix); + } + }; + push_to_array3 = function(arr2, value_or_array) { + Array.prototype.push.apply(arr2, isArray2(value_or_array) ? value_or_array : [value_or_array]); + }; + defaults2 = { + addQueryPrefix: false, + allowDots: false, + allowEmptyArrays: false, + arrayFormat: "indices", + charset: "utf-8", + charsetSentinel: false, + delimiter: "&", + encode: true, + encodeDotInKeys: false, + encoder: encode2, + encodeValuesOnly: false, + format: default_format2, + formatter: default_formatter2, + /** @deprecated */ + indices: false, + serializeDate(date) { + return (toISOString2 ?? (toISOString2 = Function.prototype.call.bind(Date.prototype.toISOString)))(date); + }, + skipNulls: false, + strictNullHandling: false + }; + sentinel2 = {}; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/query.mjs +function stringifyQuery2(query) { + return stringify2(query, { arrayFormat: "brackets" }); +} +var init_query2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/query.mjs"() { + init_stringify2(); + } +}); + +// node_modules/@anthropic-ai/sdk/internal/node.browser.mjs +var node_browser_exports = {}; +__export(node_browser_exports, { + child_process: () => child_process, + crypto: () => crypto2, + fs: () => fs, + os: () => os, + path: () => path2, + stream: () => stream2, + util: () => util +}); +function unavailable(module) { + return new Proxy({}, { + get(_target, property) { + if (typeof property === "symbol") + return void 0; + throw new AnthropicError(`\`${module}.${property}\` is not available in this environment; it needs a Node.js-compatible runtime`); + } + }); +} +var child_process, crypto2, fs, os, path2, stream2, util; +var init_node_browser = __esm({ + "node_modules/@anthropic-ai/sdk/internal/node.browser.mjs"() { + init_error3(); + child_process = /* @__PURE__ */ unavailable("child_process"); + crypto2 = /* @__PURE__ */ unavailable("crypto"); + fs = /* @__PURE__ */ unavailable("fs"); + os = /* @__PURE__ */ unavailable("os"); + path2 = /* @__PURE__ */ unavailable("path"); + stream2 = /* @__PURE__ */ unavailable("stream"); + util = /* @__PURE__ */ unavailable("util"); + } +}); + +// node_modules/@anthropic-ai/sdk/lib/credentials/types.mjs +function requireSecureTokenEndpoint(baseURL) { + if (!baseURL) + return; + let u; + try { + u = new URL(baseURL); + } catch (err) { + throw new WorkloadIdentityError(`Invalid token endpoint base URL "${baseURL}": ${err}`); + } + if (u.protocol === "https:") + return; + const host = u.hostname.toLowerCase().replace(/^\[|\]$/g, ""); + if (u.protocol === "http:" && (host === "localhost" || host === "127.0.0.1" || host === "::1")) { + return; + } + throw new WorkloadIdentityError(`Refusing to send credential over non-https token endpoint "${baseURL}"`); +} +async function parseTokenResponse(resp, requestId) { + const text = await readLimitedText(resp); + let data; + try { + data = JSON.parse(text); + } catch { + throw new WorkloadIdentityError(`Token endpoint returned non-JSON response (status ${resp.status})`, resp.status, redactSensitive(text), requestId); + } + if (!data.access_token) { + throw new WorkloadIdentityError(`Token endpoint response missing access_token: ${JSON.stringify(redactSensitive(data))}`, resp.status, redactSensitive(data), requestId); + } + if (data.token_type && data.token_type.toLowerCase() !== "bearer") { + throw new WorkloadIdentityError(`Token endpoint response: unsupported token_type "${data.token_type}" (want Bearer)`, resp.status, redactSensitive(data), requestId); + } + return data; +} +function redactSensitive(body) { + if (body == null) + return body; + if (typeof body === "string") { + let parsed; + try { + parsed = JSON.parse(body); + } catch { + if (body.length <= MAX_ERROR_BODY_CHARS) + return body; + return body.slice(0, MAX_ERROR_BODY_CHARS) + `... <${body.length - MAX_ERROR_BODY_CHARS} more chars>`; + } + return JSON.stringify(redactSensitive(parsed)); + } + if (typeof body === "object" && !Array.isArray(body)) { + const out = {}; + for (const [k, v] of Object.entries(body)) { + if (SAFE_ERROR_KEYS.has(k)) + out[k] = v; + } + return out; + } + return null; +} +async function checkCredentialsFileSafety(path5, onWarn = (m) => console.warn(`anthropic-sdk: ${m}`)) { + if (typeof process === "undefined" || process.platform === "win32") + return; + const { fs: fs3 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); + let resolved = path5; + let st; + try { + resolved = await fs3.promises.realpath(path5); + st = await fs3.promises.stat(resolved); + } catch { + return; + } + const mode = st.mode & 511; + if (mode & 18) { + throw new WorkloadIdentityError(`Credentials file at ${resolved} is group/world-writable (mode 0o${mode.toString(8)}); this allows other local users to plant tokens. Run \`chmod 600 ${resolved}\`.`); + } + if (mode & 36) { + throw new WorkloadIdentityError(`Credentials file at ${resolved} is group/world-readable (mode 0o${mode.toString(8)}); run \`chmod 600 ${resolved}\` before retrying.`); + } + if (typeof process.getuid === "function" && st.uid !== process.getuid()) { + onWarn(`credentials file at ${resolved} is owned by uid ${st.uid} (current process uid ${process.getuid()}); verify this is intentional.`); + } +} +async function writeCredentialsFileAtomic(targetPath, data) { + const { fs: fs3, path: path5 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); + const dir = path5.dirname(targetPath); + await fs3.promises.mkdir(dir, { recursive: true, mode: 448 }); + const tmpPath = `${targetPath}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`; + try { + const fh = await fs3.promises.open(tmpPath, "w", 384); + try { + await fh.writeFile(JSON.stringify(data, null, 2)); + await fh.sync(); + } finally { + await fh.close(); + } + await fs3.promises.rename(tmpPath, targetPath); + } catch (err) { + await fs3.promises.unlink(tmpPath).catch(() => { + }); + throw err; + } + try { + const dirFh = await fs3.promises.open(dir, "r"); + try { + await dirFh.sync(); + } finally { + await dirFh.close(); + } + } catch { + } +} +async function readLimitedText(resp) { + if (!resp.body) { + return ""; + } + const reader = resp.body.getReader(); + const chunks = []; + let received = 0; + for (; ; ) { + const { done, value: value2 } = await reader.read(); + if (done) + break; + if (received + value2.length > MAX_TOKEN_RESPONSE_BYTES) { + const remaining = MAX_TOKEN_RESPONSE_BYTES - received; + if (remaining > 0) + chunks.push(value2.subarray(0, remaining)); + await reader.cancel(); + break; + } + chunks.push(value2); + received += value2.length; + } + let merged; + if (chunks.length === 1) { + merged = chunks[0]; + } else { + merged = new Uint8Array(chunks.reduce((n, c) => n + c.length, 0)); + let offset = 0; + for (const c of chunks) { + merged.set(c, offset); + offset += c.length; + } + } + return new TextDecoder("utf-8").decode(merged); +} +var GRANT_TYPE_JWT_BEARER, GRANT_TYPE_REFRESH_TOKEN, TOKEN_ENDPOINT, OAUTH_API_BETA_HEADER, FEDERATION_BETA_HEADER, ADVISORY_REFRESH_THRESHOLD_IN_SECONDS, MANDATORY_REFRESH_THRESHOLD_IN_SECONDS, ADVISORY_REFRESH_BACKOFF_IN_SECONDS, MAX_TOKEN_RESPONSE_BYTES, MAX_ERROR_BODY_CHARS, SAFE_ERROR_KEYS, WorkloadIdentityError; +var init_types = __esm({ + "node_modules/@anthropic-ai/sdk/lib/credentials/types.mjs"() { + init_error3(); + GRANT_TYPE_JWT_BEARER = "urn:ietf:params:oauth:grant-type:jwt-bearer"; + GRANT_TYPE_REFRESH_TOKEN = "refresh_token"; + TOKEN_ENDPOINT = "/v1/oauth/token"; + OAUTH_API_BETA_HEADER = "oauth-2025-04-20"; + FEDERATION_BETA_HEADER = "oidc-federation-2026-04-01"; + ADVISORY_REFRESH_THRESHOLD_IN_SECONDS = 120; + MANDATORY_REFRESH_THRESHOLD_IN_SECONDS = 30; + ADVISORY_REFRESH_BACKOFF_IN_SECONDS = 5; + MAX_TOKEN_RESPONSE_BYTES = 1 << 20; + MAX_ERROR_BODY_CHARS = 2e3; + SAFE_ERROR_KEYS = /* @__PURE__ */ new Set(["error", "error_description", "error_uri"]); + WorkloadIdentityError = class extends AnthropicError { + constructor(message, statusCode = null, body = null, requestId = null) { + super(message); + this.statusCode = statusCode; + this.body = body; + this.requestId = requestId; + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/time.mjs +function nowAsSeconds() { + return Math.floor(Date.now() / 1e3); +} +var init_time = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/time.mjs"() { + } +}); + +// node_modules/@anthropic-ai/sdk/lib/credentials/token-cache.mjs +var TokenCache; +var init_token_cache = __esm({ + "node_modules/@anthropic-ai/sdk/lib/credentials/token-cache.mjs"() { + init_types(); + init_time(); + TokenCache = class { + constructor(provider2, onAdvisoryRefreshError) { + this.cached = null; + this.pendingRefresh = null; + this.nextForce = false; + this.lastAdvisoryError = 0; + this.provider = provider2; + this.onAdvisoryRefreshError = onAdvisoryRefreshError; + } + async getToken() { + const force = this.nextForce; + this.nextForce = false; + const cached = this.cached; + if (force || cached == null) { + const token2 = await this.refresh(force); + return token2.token; + } + if (cached.expiresAt == null) { + return cached.token; + } + const remaining = cached.expiresAt - nowAsSeconds(); + if (remaining > ADVISORY_REFRESH_THRESHOLD_IN_SECONDS) { + return cached.token; + } + if (remaining > MANDATORY_REFRESH_THRESHOLD_IN_SECONDS) { + this.backgroundRefresh(); + return cached.token; + } + const token = await this.refresh(); + return token.token; + } + /** + * Clears the cached token and marks the next {@link getToken} as a forced + * refresh, so the underlying provider bypasses any on-disk freshness check. + * Called after a 401 — the server has just told us the token is bad even + * if its `expires_at` still looks fresh. + */ + invalidate() { + this.cached = null; + this.nextForce = true; + } + /** + * Mandatory refresh. Joins any in-flight refresh unless forced — a forced + * refresh must not coalesce into a non-forced one that may re-serve the + * same stale disk token. + */ + refresh(force = false) { + if (this.pendingRefresh && !force) { + return this.pendingRefresh; + } + return this.doRefresh(force); + } + /** + * Advisory background refresh. Shares the same in-flight promise as + * mandatory refreshes for deduplication, but swallows errors so the + * stale cached token keeps being served. Backs off for + * {@link ADVISORY_REFRESH_BACKOFF_IN_SECONDS} after a failure so an + * outage during the advisory window doesn't hammer the token endpoint. + */ + backgroundRefresh() { + if (this.pendingRefresh) { + return; + } + if (nowAsSeconds() - this.lastAdvisoryError < ADVISORY_REFRESH_BACKOFF_IN_SECONDS) { + return; + } + this.doRefresh().catch((err) => { + this.lastAdvisoryError = nowAsSeconds(); + this.onAdvisoryRefreshError?.(err); + }); + } + /** + * Core refresh. Sets {@link pendingRefresh} so concurrent callers + * (both advisory and mandatory) coalesce into a single provider call. + */ + doRefresh(force = false) { + this.pendingRefresh = this.provider(force ? { forceRefresh: true } : void 0).then((token) => { + this.cached = token; + this.pendingRefresh = null; + return token; + }, (err) => { + this.pendingRefresh = null; + throw err; + }); + return this.pendingRefresh; + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/env.mjs +var readEnv2; +var init_env2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/env.mjs"() { + readEnv2 = (env) => { + if (typeof globalThis.process !== "undefined") { + return globalThis.process.env?.[env]?.trim() || void 0; + } + if (typeof globalThis.Deno !== "undefined") { + return globalThis.Deno.env?.get?.(env)?.trim() || void 0; + } + return void 0; + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/bytes.mjs +function concatBytes(buffers) { + let length = 0; + for (const buffer of buffers) { + length += buffer.length; + } + const output = new Uint8Array(length); + let index = 0; + for (const buffer of buffers) { + output.set(buffer, index); + index += buffer.length; + } + return output; +} +function encodeUTF82(str2) { + let encoder4; + return (encodeUTF8_2 ?? (encoder4 = new globalThis.TextEncoder(), encodeUTF8_2 = encoder4.encode.bind(encoder4)))(str2); +} +function decodeUTF82(bytes2) { + let decoder3; + return (decodeUTF8_2 ?? (decoder3 = new globalThis.TextDecoder(), decodeUTF8_2 = decoder3.decode.bind(decoder3)))(bytes2); +} +var encodeUTF8_2, decodeUTF8_2; +var init_bytes2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/bytes.mjs"() { + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/base64.mjs +var fromBase642; +var init_base642 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/base64.mjs"() { + init_error3(); + fromBase642 = (str2) => { + if (typeof globalThis.Buffer !== "undefined") { + const buf = globalThis.Buffer.from(str2, "base64"); + return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength); + } + if (typeof atob !== "undefined") { + const bstr = atob(str2); + const buf = new Uint8Array(bstr.length); + for (let i = 0; i < bstr.length; i++) { + buf[i] = bstr.charCodeAt(i); + } + return buf; + } + throw new AnthropicError("Cannot decode base64 string; Expected `Buffer` or `atob` to be defined"); + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/log.mjs +function noop2() { +} +function makeLogFn2(fnLevel, logger, logLevel) { + if (!logger || levelNumbers2[fnLevel] > levelNumbers2[logLevel]) { + return noop2; + } else { + return logger[fnLevel].bind(logger); + } +} +function filterLogger(logger, logLevel) { + const cachedLogger = cachedLoggers2.get(logger); + if (cachedLogger && cachedLogger[0] === logLevel) { + return cachedLogger[1]; + } + const levelLogger = { + error: makeLogFn2("error", logger, logLevel), + warn: makeLogFn2("warn", logger, logLevel), + info: makeLogFn2("info", logger, logLevel), + debug: makeLogFn2("debug", logger, logLevel) + }; + cachedLoggers2.set(logger, [logLevel, levelLogger]); + return levelLogger; +} +function loggerFor2(client) { + const logger = client.logger; + const logLevel = client.logLevel ?? "off"; + if (!logger) { + return noopLogger2; + } + return filterLogger(logger, logLevel); +} +function defaultLogger() { + const envLevel = readEnv2("ANTHROPIC_LOG"); + if (!cachedDefaultLogger || envLevel !== lastEnvLevel) { + lastEnvLevel = envLevel; + cachedDefaultLogger = filterLogger(console, parseLogLevel2(envLevel, "process.env['ANTHROPIC_LOG']", filterLogger(console, defaultLogLevel)) ?? defaultLogLevel); + } + return cachedDefaultLogger; +} +function debugLogRequestDetails(logger, message, details) { + if (logger.debug === noop2) { + return; + } + logger.debug(message, formatRequestDetails2(details)); +} +var defaultLogLevel, levelNumbers2, parseLogLevel2, noopLogger2, cachedLoggers2, lastEnvLevel, cachedDefaultLogger, formatRequestDetails2; +var init_log2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/log.mjs"() { + init_values2(); + init_env2(); + defaultLogLevel = "warn"; + levelNumbers2 = { + off: 0, + error: 200, + warn: 300, + info: 400, + debug: 500 + }; + parseLogLevel2 = (maybeLevel, sourceName, logger) => { + if (!maybeLevel) { + return void 0; + } + if (hasOwn2(levelNumbers2, maybeLevel)) { + return maybeLevel; + } + logger.warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers2))}`); + return void 0; + }; + noopLogger2 = { + error: noop2, + warn: noop2, + info: noop2, + debug: noop2 + }; + cachedLoggers2 = /* @__PURE__ */ new WeakMap(); + formatRequestDetails2 = (details) => { + if (details.options) { + details.options = { ...details.options }; + delete details.options["headers"]; + } + if (details.headers) { + details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value2]) => [ + name, + name.toLowerCase() === "authorization" || name.toLowerCase() === "api-key" || name.toLowerCase() === "x-api-key" || name.toLowerCase() === "cookie" || name.toLowerCase() === "set-cookie" ? "***" : value2 + ])); + } + if ("retryOfRequestLogID" in details) { + if (details.retryOfRequestLogID) { + details.retryOf = details.retryOfRequestLogID; + } + delete details.retryOfRequestLogID; + } + return details; + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/uuid.mjs +var uuid42; +var init_uuid2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/uuid.mjs"() { + uuid42 = function() { + const { crypto: crypto3 } = globalThis; + if (crypto3?.randomUUID) { + uuid42 = crypto3.randomUUID.bind(crypto3); + return crypto3.randomUUID(); + } + const u8 = new Uint8Array(1); + const randomByte = crypto3 ? () => crypto3.getRandomValues(u8)[0] : () => Math.random() * 255 & 255; + return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, (c) => (+c ^ randomByte() & 15 >> +c / 4).toString(16)); + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils.mjs +var init_utils4 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils.mjs"() { + init_values2(); + init_base642(); + init_env2(); + init_log2(); + init_uuid2(); + init_sleep2(); + init_query2(); + } +}); + +// node_modules/@anthropic-ai/sdk/core/credentials.mjs +function validateProfileName(name) { + if (!name) { + throw new Error("profile name is empty"); + } + if (name === "." || name === "..") { + throw new Error(`profile name "${name}" is not allowed`); + } + if (name.includes("/") || name.includes("\\")) { + throw new Error(`profile name "${name}" must not contain path separators`); + } + if (!PROFILE_NAME_PATTERN.test(name)) { + throw new Error(`profile name "${name}" contains disallowed characters (allowed: letters, digits, '_', '.', '-')`); + } +} +var CREDENTIALS_FILE_VERSION, PROFILE_NAME_PATTERN, loadConfigWithSource, getCredentialsPath, getRootConfigPath, supportsLocalConfigFiles, getActiveProfileName; +var init_credentials2 = __esm({ + "node_modules/@anthropic-ai/sdk/core/credentials.mjs"() { + init_detect_platform2(); + init_utils4(); + CREDENTIALS_FILE_VERSION = "1.0"; + PROFILE_NAME_PATTERN = /^[A-Za-z0-9_.-]+$/; + loadConfigWithSource = async (profile) => { + var _a6, _b; + const rootConfigPath = await getRootConfigPath(); + if (rootConfigPath === null) { + return null; + } + const profileName = profile ?? await getActiveProfileName(); + if (profileName === null) { + return null; + } + validateProfileName(profileName); + const { fs: fs3, path: path5 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); + const configPath = path5.join(rootConfigPath, "configs", `${profileName}.json`); + let configRaw; + try { + configRaw = await fs3.promises.readFile(configPath, "utf-8"); + } catch (err) { + if (err?.code !== "ENOENT") { + throw new Error(`failed to read config file ${configPath}: ${err}`); + } + configRaw = null; + } + if (configRaw === null) { + const organizationId = readEnv2("ANTHROPIC_ORGANIZATION_ID"); + const identityTokenFile = readEnv2("ANTHROPIC_IDENTITY_TOKEN_FILE"); + const federationRuleId = readEnv2("ANTHROPIC_FEDERATION_RULE_ID"); + if (federationRuleId && organizationId) { + return { + fromFile: false, + config: { + organization_id: organizationId, + // A defaulted-but-empty CI variable (`ANTHROPIC_WORKSPACE_ID=""`) is + // treated as unset — readEnv coerces empty to undefined, and the body + // builder's truthy check skips it — so `"workspace_id": ""` never goes + // on the wire. + workspace_id: readEnv2("ANTHROPIC_WORKSPACE_ID"), + base_url: readEnv2("ANTHROPIC_BASE_URL"), + authentication: { + type: "oidc_federation", + federation_rule_id: federationRuleId, + service_account_id: readEnv2("ANTHROPIC_SERVICE_ACCOUNT_ID"), + identity_token: identityTokenFile ? { source: "file", path: identityTokenFile } : void 0, + scope: readEnv2("ANTHROPIC_SCOPE") + } + } + }; + } + return null; + } + let config2; + try { + config2 = JSON.parse(configRaw); + } catch (err) { + throw new Error(`failed to parse config file ${configPath}: ${err}`); + } + if (!config2.authentication) { + throw new Error(`config file ${configPath} is missing "authentication"`); + } + const authType = config2.authentication.type; + if (authType !== "oidc_federation" && authType !== "user_oauth") { + throw new Error(`authentication.type "${authType}" is not a known authentication type`); + } + config2.organization_id ?? (config2.organization_id = readEnv2("ANTHROPIC_ORGANIZATION_ID")); + config2.workspace_id ?? (config2.workspace_id = readEnv2("ANTHROPIC_WORKSPACE_ID")); + config2.base_url ?? (config2.base_url = readEnv2("ANTHROPIC_BASE_URL")); + (_a6 = config2.authentication).scope ?? (_a6.scope = readEnv2("ANTHROPIC_SCOPE")); + if (config2.authentication.type === "oidc_federation") { + if (!config2.authentication.identity_token) { + const identityTokenFile = readEnv2("ANTHROPIC_IDENTITY_TOKEN_FILE"); + if (identityTokenFile) { + config2.authentication.identity_token = { + source: "file", + path: identityTokenFile + }; + } + } + if (!config2.authentication.federation_rule_id) { + config2.authentication.federation_rule_id = readEnv2("ANTHROPIC_FEDERATION_RULE_ID") ?? ""; + } + (_b = config2.authentication).service_account_id ?? (_b.service_account_id = readEnv2("ANTHROPIC_SERVICE_ACCOUNT_ID")); + } + return { config: config2, fromFile: true }; + }; + getCredentialsPath = async (config2, profile) => { + if (config2?.authentication.credentials_path) { + return config2.authentication.credentials_path; + } + const rootConfigPath = await getRootConfigPath(); + if (!rootConfigPath) { + return null; + } + const profileName = profile ?? await getActiveProfileName(); + if (!profileName) { + return null; + } + validateProfileName(profileName); + const { path: path5 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); + return path5.join(rootConfigPath, "credentials", `${profileName}.json`); + }; + getRootConfigPath = async () => { + if (!supportsLocalConfigFiles()) { + return null; + } + const { path: path5 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); + const configDir = readEnv2("ANTHROPIC_CONFIG_DIR"); + if (configDir) { + return configDir; + } + const os2 = getPlatformHeaders2()["X-Stainless-OS"]; + if (os2 === "Windows") { + const appData = readEnv2("APPDATA"); + if (appData) { + return path5.join(appData, "Anthropic"); + } + const userProfile = readEnv2("USERPROFILE"); + if (userProfile) { + return path5.join(userProfile, "AppData", "Roaming", "Anthropic"); + } + return null; + } + const xdgConfigHome = readEnv2("XDG_CONFIG_HOME"); + if (xdgConfigHome) { + return path5.join(xdgConfigHome, "anthropic"); + } + const home = readEnv2("HOME"); + if (home) { + return path5.join(home, ".config", "anthropic"); + } + return null; + }; + supportsLocalConfigFiles = () => { + const runtime = getPlatformHeaders2()["X-Stainless-Runtime"]; + return runtime === "node" || runtime === "deno"; + }; + getActiveProfileName = async () => { + const rootConfigPath = await getRootConfigPath(); + if (!rootConfigPath) { + return null; + } + const profileName = readEnv2("ANTHROPIC_PROFILE"); + if (profileName) { + return profileName; + } + const { fs: fs3, path: path5 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); + const filePath = path5.join(rootConfigPath, "active_config"); + try { + return (await fs3.promises.readFile(filePath, "utf-8")).trim() || "default"; + } catch (err) { + if (err?.code !== "ENOENT") { + throw new Error(`failed to read ${filePath}: ${err}`); + } + return "default"; + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/lib/credentials/identity-token.mjs +function identityTokenFromFile(path5) { + if (!path5) { + throw new AnthropicError("Identity token file path is empty"); + } + return async () => { + const { fs: fs3 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); + let content; + try { + content = await fs3.promises.readFile(path5, "utf-8"); + } catch (err) { + throw new AnthropicError(`Failed to read identity token file at ${path5}: ${err}`); + } + const token = content.trim(); + if (!token) { + throw new AnthropicError(`Identity token file at ${path5} is empty`); + } + return token; + }; +} +function identityTokenFromValue(token) { + if (!token) { + throw new AnthropicError("Identity token value is empty"); + } + return () => token; +} +var init_identity_token = __esm({ + "node_modules/@anthropic-ai/sdk/lib/credentials/identity-token.mjs"() { + init_error3(); + } +}); + +// node_modules/@anthropic-ai/sdk/lib/credentials/oidc-federation.mjs +function oidcFederationProvider(config2) { + return async () => { + requireSecureTokenEndpoint(config2.baseURL); + const jwt = await config2.identityTokenProvider(); + if (jwt.length > 16 * 1024) { + throw new WorkloadIdentityError(`Identity token is ${Math.ceil(jwt.length / 1024)} KiB, exceeds the 16 KiB assertion limit`); + } + const body = { + grant_type: GRANT_TYPE_JWT_BEARER, + assertion: jwt, + federation_rule_id: config2.federationRuleId, + organization_id: config2.organizationId + }; + if (config2.serviceAccountId) { + body["service_account_id"] = config2.serviceAccountId; + } + if (config2.workspaceId) { + body["workspace_id"] = config2.workspaceId; + } + const url = `${config2.baseURL}${TOKEN_ENDPOINT}`; + let resp; + try { + resp = await config2.fetch(url, { + method: "POST", + headers: { + "Content-Type": "application/json", + "anthropic-beta": `${OAUTH_API_BETA_HEADER},${FEDERATION_BETA_HEADER}`, + "User-Agent": config2.userAgent || `anthropic-sdk-typescript/${VERSION2} oidcFederationProvider` + }, + body: JSON.stringify(body) + }); + } catch (err) { + throw new WorkloadIdentityError(`Failed to reach token endpoint ${url}: ${err}`); + } + const requestId = resp.headers.get("Request-Id"); + if (!resp.ok) { + const text = await resp.text().catch(() => ""); + const redacted = redactSensitive(text); + let hint = ""; + if (resp.status === 401) { + const hintMiddle = config2.workspaceId ? "" : "If your federation rule is scoped to multiple workspaces, set the ANTHROPIC_WORKSPACE_ID environment variable, the 'workspace_id' config key, or the `workspaceId` option. "; + hint = ` Ensure your federation rule matches your identity token. ${hintMiddle}View your authentication events in the Workload identity page of Claude Console for more details.`; + } + throw new WorkloadIdentityError(`Token exchange failed with status ${resp.status}${requestId ? ` (request-id ${requestId})` : ""}: ${redacted}${hint}`, resp.status, redacted, requestId); + } + const data = await parseTokenResponse(resp, requestId); + const expiresIn = Number(data.expires_in); + if (!Number.isFinite(expiresIn)) { + throw new WorkloadIdentityError(`Token endpoint response missing required fields: ${JSON.stringify(redactSensitive(data))}`, resp.status, redactSensitive(data), requestId); + } + return { + token: data.access_token, + expiresAt: nowAsSeconds() + expiresIn + }; + }; +} +var init_oidc_federation = __esm({ + "node_modules/@anthropic-ai/sdk/lib/credentials/oidc-federation.mjs"() { + init_types(); + init_time(); + init_version3(); + } +}); + +// node_modules/@anthropic-ai/sdk/lib/credentials/user-oauth.mjs +function userOAuthProvider(config2) { + return async (opts) => { + const { fs: fs3 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); + await checkCredentialsFileSafety(config2.credentialsPath, config2.onSafetyWarning); + let raw; + try { + raw = await fs3.promises.readFile(config2.credentialsPath, "utf-8"); + } catch (err) { + throw new WorkloadIdentityError(`Credentials file not found at ${config2.credentialsPath}: ${err}`); + } + let creds; + try { + creds = JSON.parse(raw); + } catch (err) { + throw new WorkloadIdentityError(`Credentials file at ${config2.credentialsPath} is not valid JSON: ${err}`); + } + const accessToken = creds.access_token; + if (!accessToken) { + throw new WorkloadIdentityError(`Credentials file at ${config2.credentialsPath} must include 'access_token'`); + } + const expiresAt = creds.expires_at; + if (!opts?.forceRefresh && (expiresAt == null || nowAsSeconds() < expiresAt - MANDATORY_REFRESH_THRESHOLD_IN_SECONDS)) { + return { token: accessToken, expiresAt: expiresAt ?? null }; + } + const refreshToken = creds.refresh_token; + if (!config2.clientId || !refreshToken) { + throw new WorkloadIdentityError(`Access token at ${config2.credentialsPath} has expired and no refresh is available (client_id ${config2.clientId ? "set" : "empty"}, refresh_token ${refreshToken ? "set" : "empty"})`); + } + requireSecureTokenEndpoint(config2.baseURL); + const body = { + grant_type: GRANT_TYPE_REFRESH_TOKEN, + refresh_token: refreshToken, + client_id: config2.clientId + }; + const url = `${config2.baseURL}${TOKEN_ENDPOINT}`; + let resp; + try { + resp = await config2.fetch(url, { + method: "POST", + headers: { + "Content-Type": "application/json", + "anthropic-beta": OAUTH_API_BETA_HEADER, + "User-Agent": config2.userAgent || `anthropic-sdk-typescript/${VERSION2} userOAuthProvider` + }, + body: JSON.stringify(body) + }); + } catch (err) { + throw new WorkloadIdentityError(`User OAuth refresh failed to reach token endpoint: ${err}`); + } + const requestId = resp.headers.get("Request-Id"); + if (!resp.ok) { + const text = await resp.text().catch(() => ""); + throw new WorkloadIdentityError(`User OAuth refresh failed (HTTP ${resp.status}): ${redactSensitive(text)}`, resp.status, redactSensitive(text), requestId); + } + const data = await parseTokenResponse(resp, requestId); + const expiresIn = Number(data.expires_in); + if (!Number.isFinite(expiresIn)) { + throw new WorkloadIdentityError(`User OAuth refresh response missing or invalid expires_in: ${JSON.stringify(redactSensitive(data))}`, resp.status, redactSensitive(data), requestId); + } + const newExpiresAt = nowAsSeconds() + expiresIn; + const newRefreshToken = data.refresh_token || refreshToken; + await writeCredentialsFileAtomic(config2.credentialsPath, { + ...creds, + version: CREDENTIALS_FILE_VERSION, + type: "oauth_token", + access_token: data.access_token, + expires_at: newExpiresAt, + refresh_token: newRefreshToken + }); + return { token: data.access_token, expiresAt: newExpiresAt }; + }; +} +var init_user_oauth = __esm({ + "node_modules/@anthropic-ai/sdk/lib/credentials/user-oauth.mjs"() { + init_credentials2(); + init_types(); + init_time(); + init_version3(); + } +}); + +// node_modules/@anthropic-ai/sdk/lib/credentials/credential-chain.mjs +function resolveCredentialsFromConfig(config2, options) { + const credentialsPath = config2.authentication.credentials_path ?? null; + const effectiveBaseURL = (config2.base_url || options.baseURL).replace(/\/+$/, ""); + const provider2 = buildProvider(config2, credentialsPath, effectiveBaseURL, options); + const extraHeaders = {}; + if (config2.workspace_id && config2.authentication.type === "user_oauth") { + extraHeaders["anthropic-workspace-id"] = config2.workspace_id; + } + return { provider: provider2, extraHeaders, baseURL: config2.base_url || void 0 }; +} +async function defaultCredentials(options, profile) { + const loaded = await loadConfigWithSource(profile); + if (!loaded) { + return null; + } + const { config: config2, fromFile } = loaded; + const withPath = config2.authentication.credentials_path || !fromFile ? config2 : { + ...config2, + authentication: { + ...config2.authentication, + credentials_path: await getCredentialsPath(config2, profile) ?? void 0 + } + }; + return resolveCredentialsFromConfig(withPath, options); +} +function buildProvider(config2, credentialsPath, baseURL, options) { + switch (config2.authentication.type) { + case "oidc_federation": { + const auth = config2.authentication; + const identityProvider = resolveIdentityTokenProvider(auth); + if (!identityProvider) { + throw new WorkloadIdentityError("oidc_federation config requires an identity token (set authentication.identity_token, ANTHROPIC_IDENTITY_TOKEN_FILE, or ANTHROPIC_IDENTITY_TOKEN)"); + } + if (!auth.federation_rule_id) { + throw new WorkloadIdentityError("oidc_federation config requires 'federation_rule_id'. Set it in authentication.federation_rule_id in your profile, or via ANTHROPIC_FEDERATION_RULE_ID (profile takes precedence)."); + } + if (!config2.organization_id) { + throw new WorkloadIdentityError("oidc_federation config requires organization_id (set ANTHROPIC_ORGANIZATION_ID or config.organization_id)"); + } + const exchange = oidcFederationProvider({ + identityTokenProvider: identityProvider, + federationRuleId: auth.federation_rule_id, + organizationId: config2.organization_id, + serviceAccountId: auth.service_account_id, + workspaceId: config2.workspace_id, + baseURL, + fetch: options.fetch, + userAgent: options.userAgent + }); + if (credentialsPath) { + return cachedExchangeProvider(exchange, credentialsPath, options.onCacheWriteError, options.onSafetyWarning); + } + return exchange; + } + case "user_oauth": { + if (!credentialsPath) { + throw new WorkloadIdentityError("user_oauth config requires authentication.credentials_path (or load via a profile so it defaults to /credentials/.json)"); + } + return userOAuthProvider({ + credentialsPath, + clientId: config2.authentication.client_id, + baseURL, + fetch: options.fetch, + userAgent: options.userAgent, + onSafetyWarning: options.onSafetyWarning + }); + } + default: { + const t = config2.authentication.type; + throw new WorkloadIdentityError(`authentication.type "${t}" is not a known authentication type`); + } + } +} +function resolveIdentityTokenProvider(auth) { + if (auth.identity_token) { + const source = auth.identity_token.source; + if (source !== "file") { + throw new WorkloadIdentityError(`identity_token.source "${source}" is not supported by this SDK version (only "file")`); + } + if (!auth.identity_token.path) { + throw new WorkloadIdentityError(`identity_token.source "file" requires a non-empty path`); + } + return identityTokenFromFile(auth.identity_token.path); + } + const tokenFile = readEnv2("ANTHROPIC_IDENTITY_TOKEN_FILE"); + if (tokenFile) { + return identityTokenFromFile(tokenFile); + } + const tokenValue = readEnv2("ANTHROPIC_IDENTITY_TOKEN"); + if (tokenValue) { + return identityTokenFromValue(tokenValue); + } + return null; +} +function cachedExchangeProvider(exchange, credentialsPath, onCacheWriteError, onSafetyWarning) { + return async (opts) => { + const { fs: fs3 } = await Promise.resolve().then(() => (init_node_browser(), node_browser_exports)); + await checkCredentialsFileSafety(credentialsPath, onSafetyWarning); + let existing; + try { + const raw = await fs3.promises.readFile(credentialsPath, "utf-8"); + existing = JSON.parse(raw); + const token = existing?.["access_token"]; + if (token && !opts?.forceRefresh) { + const expiresAt = existing?.["expires_at"]; + if (expiresAt == null || nowAsSeconds() < expiresAt - MANDATORY_REFRESH_THRESHOLD_IN_SECONDS) { + return { token, expiresAt: expiresAt ?? null }; + } + } + } catch (err) { + const code = err?.code; + if (code !== "ENOENT" && !(err instanceof SyntaxError)) { + onCacheWriteError?.(err); + } + } + const result = await exchange(opts); + try { + await writeCredentialsFileAtomic(credentialsPath, { + ...existing ?? {}, + version: CREDENTIALS_FILE_VERSION, + type: "oauth_token", + access_token: result.token, + expires_at: result.expiresAt + }); + } catch (err) { + onCacheWriteError?.(err); + } + return result; + }; +} +var init_credential_chain = __esm({ + "node_modules/@anthropic-ai/sdk/lib/credentials/credential-chain.mjs"() { + init_env2(); + init_credentials2(); + init_types(); + init_time(); + init_identity_token(); + init_oidc_federation(); + init_user_oauth(); + } +}); + +// node_modules/@anthropic-ai/sdk/internal/decoders/line.mjs +function findNewlineIndex2(buffer, startIndex) { + const newline = 10; + const carriage = 13; + for (let i = startIndex ?? 0; i < buffer.length; i++) { + if (buffer[i] === newline) { + return { preceding: i, index: i + 1, carriage: false }; + } + if (buffer[i] === carriage) { + return { preceding: i, index: i + 1, carriage: true }; + } + } + return null; +} +var _LineDecoder_buffer2, _LineDecoder_carriageReturnIndex, LineDecoder2; +var init_line2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/decoders/line.mjs"() { + init_tslib2(); + init_bytes2(); + LineDecoder2 = /* @__PURE__ */ (() => { + class LineDecoder3 { + constructor() { + _LineDecoder_buffer2.set(this, void 0); + _LineDecoder_carriageReturnIndex.set(this, void 0); + __classPrivateFieldSet2(this, _LineDecoder_buffer2, new Uint8Array(), "f"); + __classPrivateFieldSet2(this, _LineDecoder_carriageReturnIndex, null, "f"); + } + decode(chunk) { + if (chunk == null) { + return []; + } + const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk) : typeof chunk === "string" ? encodeUTF82(chunk) : chunk; + __classPrivateFieldSet2(this, _LineDecoder_buffer2, concatBytes([__classPrivateFieldGet2(this, _LineDecoder_buffer2, "f"), binaryChunk]), "f"); + const lines2 = []; + let patternIndex; + while ((patternIndex = findNewlineIndex2(__classPrivateFieldGet2(this, _LineDecoder_buffer2, "f"), __classPrivateFieldGet2(this, _LineDecoder_carriageReturnIndex, "f"))) != null) { + if (patternIndex.carriage && __classPrivateFieldGet2(this, _LineDecoder_carriageReturnIndex, "f") == null) { + __classPrivateFieldSet2(this, _LineDecoder_carriageReturnIndex, patternIndex.index, "f"); + continue; + } + if (__classPrivateFieldGet2(this, _LineDecoder_carriageReturnIndex, "f") != null && (patternIndex.index !== __classPrivateFieldGet2(this, _LineDecoder_carriageReturnIndex, "f") + 1 || patternIndex.carriage)) { + lines2.push(decodeUTF82(__classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").subarray(0, __classPrivateFieldGet2(this, _LineDecoder_carriageReturnIndex, "f") - 1))); + __classPrivateFieldSet2(this, _LineDecoder_buffer2, __classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").subarray(__classPrivateFieldGet2(this, _LineDecoder_carriageReturnIndex, "f")), "f"); + __classPrivateFieldSet2(this, _LineDecoder_carriageReturnIndex, null, "f"); + continue; + } + const endIndex = __classPrivateFieldGet2(this, _LineDecoder_carriageReturnIndex, "f") !== null ? patternIndex.preceding - 1 : patternIndex.preceding; + const line = decodeUTF82(__classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").subarray(0, endIndex)); + lines2.push(line); + __classPrivateFieldSet2(this, _LineDecoder_buffer2, __classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").subarray(patternIndex.index), "f"); + __classPrivateFieldSet2(this, _LineDecoder_carriageReturnIndex, null, "f"); + } + return lines2; + } + flush() { + if (!__classPrivateFieldGet2(this, _LineDecoder_buffer2, "f").length) { + return []; + } + return this.decode("\n"); + } + } + _LineDecoder_buffer2 = /* @__PURE__ */ new WeakMap(), _LineDecoder_carriageReturnIndex = /* @__PURE__ */ new WeakMap(); + LineDecoder3.NEWLINE_CHARS = /* @__PURE__ */ new Set(["\n", "\r"]); + LineDecoder3.NEWLINE_REGEXP = /\r\n|[\n\r]/g; + return LineDecoder3; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/core/streaming.mjs +async function* _iterSSEMessages2(response, controller) { + if (!response.body) { + controller.abort(); + if (typeof globalThis.navigator !== "undefined" && globalThis.navigator.product === "ReactNative") { + throw new AnthropicError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`); + } + throw new AnthropicError(`Attempted to iterate over a response with no body`); + } + const sseDecoder = new SSEDecoder2(); + const lineDecoder = new LineDecoder2(); + const iter = ReadableStreamToAsyncIterable2(response.body); + for await (const chunk of iter) { + for (const line of lineDecoder.decode(chunk)) { + const sse = sseDecoder.decode(line); + if (sse) + yield sse; + } + } + for (const line of lineDecoder.flush()) { + const sse = sseDecoder.decode(line); + if (sse) + yield sse; + } +} +function partition2(str2, delimiter) { + const index = str2.indexOf(delimiter); + if (index !== -1) { + return [str2.substring(0, index), delimiter, str2.substring(index + delimiter.length)]; + } + return [str2, "", ""]; +} +var _Stream_client2, Stream2, SSEDecoder2; +var init_streaming3 = __esm({ + "node_modules/@anthropic-ai/sdk/core/streaming.mjs"() { + init_tslib2(); + init_error3(); + init_shims2(); + init_line2(); + init_shims2(); + init_errors2(); + init_values2(); + init_bytes2(); + init_log2(); + init_error3(); + init_request_signal(); + Stream2 = /* @__PURE__ */ (() => { + class Stream3 { + constructor(iterator, controller, client) { + this.iterator = iterator; + _Stream_client2.set(this, void 0); + this.controller = controller; + __classPrivateFieldSet2(this, _Stream_client2, client, "f"); + } + /** + * Iterate the raw Server-Sent Events from `response` — `{event, data, raw}` + * objects, before any JSON parsing or event-name filtering. + * + * This reads `response.body` directly (not a clone), so the response is + * consumed. Use this in middleware that fully replaces the stream body; for + * read-only observation of parsed events, use `ctx.parse()` instead. + */ + static rawEvents(response, controller = new AbortController()) { + return _iterSSEMessages2(response, controller); + } + static fromSSEResponse(response, controller, client) { + let consumed = false; + const logger = client ? loggerFor2(client) : console; + async function* iterator() { + if (consumed) { + throw new AnthropicError("Cannot iterate over a consumed stream, use `.tee()` to split the stream."); + } + consumed = true; + let done = false; + try { + for await (const sse of _iterSSEMessages2(response, controller)) { + if (sse.event === "completion") { + try { + yield JSON.parse(sse.data); + } catch (e) { + logger.error(`Could not parse message into JSON:`, sse.data); + logger.error(`From chunk:`, sse.raw); + throw e; + } + } + if (sse.event === "message_start" || sse.event === "message_delta" || sse.event === "message_stop" || sse.event === "content_block_start" || sse.event === "content_block_delta" || sse.event === "content_block_stop" || sse.event === "message" || sse.event === "user.message" || sse.event === "user.interrupt" || sse.event === "user.tool_confirmation" || sse.event === "user.custom_tool_result" || sse.event === "user.tool_result" || sse.event === "agent.message" || sse.event === "agent.thinking" || sse.event === "agent.tool_use" || sse.event === "agent.tool_result" || sse.event === "agent.mcp_tool_use" || sse.event === "agent.mcp_tool_result" || sse.event === "agent.custom_tool_use" || sse.event === "agent.thread_context_compacted" || sse.event === "session.status_running" || sse.event === "session.status_idle" || sse.event === "session.status_rescheduled" || sse.event === "session.status_terminated" || sse.event === "session.error" || sse.event === "session.deleted" || sse.event === "session.updated" || sse.event === "span.model_request_start" || sse.event === "span.model_request_end" || sse.event === "span.outcome_evaluation_start" || sse.event === "span.outcome_evaluation_ongoing" || sse.event === "span.outcome_evaluation_end" || sse.event === "user.define_outcome" || sse.event === "agent.thread_message_received" || sse.event === "agent.thread_message_sent" || sse.event === "agent.session_thread_message_received" || sse.event === "agent.session_thread_message_sent" || sse.event === "session.thread_created" || sse.event === "session.thread_status_created" || sse.event === "session.thread_status_running" || sse.event === "session.thread_status_idle" || sse.event === "session.thread_status_rescheduled" || sse.event === "session.thread_status_terminated" || sse.event === "event_start" || sse.event === "event_delta" || sse.event === "system.message") { + try { + yield JSON.parse(sse.data); + } catch (e) { + logger.error(`Could not parse message into JSON:`, sse.data); + logger.error(`From chunk:`, sse.raw); + throw e; + } + } + if (sse.event === "ping") { + continue; + } + if (sse.event === "error") { + const body = safeJSON2(sse.data) ?? sse.data; + const type = body?.error?.type; + throw new APIError2(void 0, body, void 0, response.headers, type); + } + } + done = true; + } catch (e) { + if (isAbortError2(e)) + return; + throw e; + } finally { + if (!done) + controller.abort(); + releaseRequestSignal(controller); + } + } + return new Stream3(iterator, controller, client); + } + /** + * Generates a Stream from a newline-separated ReadableStream + * where each item is a JSON value. + */ + static fromReadableStream(readableStream, controller, client) { + let consumed = false; + async function* iterLines() { + const lineDecoder = new LineDecoder2(); + const iter = ReadableStreamToAsyncIterable2(readableStream); + for await (const chunk of iter) { + for (const line of lineDecoder.decode(chunk)) { + yield line; + } + } + for (const line of lineDecoder.flush()) { + yield line; + } + } + async function* iterator() { + if (consumed) { + throw new AnthropicError("Cannot iterate over a consumed stream, use `.tee()` to split the stream."); + } + consumed = true; + let done = false; + try { + for await (const line of iterLines()) { + if (done) + continue; + if (line) + yield JSON.parse(line); + } + done = true; + } catch (e) { + if (isAbortError2(e)) + return; + throw e; + } finally { + if (!done) + controller.abort(); + releaseRequestSignal(controller); + } + } + return new Stream3(iterator, controller, client); + } + [(_Stream_client2 = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() { + return this.iterator(); + } + /** + * Splits the stream into two streams which can be + * independently read from at different speeds. + */ + tee() { + const left = []; + const right = []; + const iterator = this.iterator(); + const teeIterator = (queue) => { + return { + next: () => { + if (queue.length === 0) { + const result = iterator.next(); + left.push(result); + right.push(result); + } + return queue.shift(); + } + }; + }; + return [ + new Stream3(() => teeIterator(left), this.controller, __classPrivateFieldGet2(this, _Stream_client2, "f")), + new Stream3(() => teeIterator(right), this.controller, __classPrivateFieldGet2(this, _Stream_client2, "f")) + ]; + } + /** + * Converts this stream to a newline-separated ReadableStream of + * JSON stringified values in the stream + * which can be turned back into a Stream with `Stream.fromReadableStream()`. + */ + toReadableStream() { + const self = this; + let iter; + return makeReadableStream2({ + async start() { + iter = self[Symbol.asyncIterator](); + }, + async pull(ctrl) { + try { + const { value: value2, done } = await iter.next(); + if (done) + return ctrl.close(); + const bytes2 = encodeUTF82(JSON.stringify(value2) + "\n"); + ctrl.enqueue(bytes2); + } catch (err) { + ctrl.error(err); + } + }, + async cancel() { + await iter.return?.(); + } + }); + } + } + return Stream3; + })(); + SSEDecoder2 = class { + constructor() { + this.event = null; + this.data = []; + this.chunks = []; + } + decode(line) { + if (line.endsWith("\r")) { + line = line.substring(0, line.length - 1); + } + if (!line) { + if (!this.event && !this.data.length) + return null; + const sse = { + event: this.event, + data: this.data.join("\n"), + raw: this.chunks + }; + this.event = null; + this.data = []; + this.chunks = []; + return sse; + } + this.chunks.push(line); + if (line.startsWith(":")) { + return null; + } + let [fieldname, _, value2] = partition2(line, ":"); + if (value2.startsWith(" ")) { + value2 = value2.substring(1); + } + if (fieldname === "event") { + this.event = value2; + } else if (fieldname === "data") { + this.data.push(value2); + } + return null; + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/parse.mjs +async function defaultParseResponse2(client, props) { + const { response, requestLogID, retryOfRequestLogID, startTime } = props; + const body = await (async () => { + if (props.options.stream) { + loggerFor2(client).debug("response", response.status, response.url, response.headers, response.body); + return Stream2.fromSSEResponse(response, props.controller, client); + } + if (response.status === 204) { + return null; + } + if (props.options.__binaryResponse) { + return response; + } + const contentType = response.headers.get("content-type"); + const mediaType = contentType?.split(";")[0]?.trim(); + const isJSON = mediaType?.includes("application/json") || mediaType?.endsWith("+json"); + if (isJSON) { + const contentLength = response.headers.get("content-length"); + if (contentLength === "0") { + return void 0; + } + const json = await response.json(); + return addResponseIDs(json, response); + } + const text = await response.text(); + return text; + })().finally(() => { + if (!props.options.stream && !props.options.__binaryResponse) { + releaseRequestSignal(props.controller); + } + }); + debugLogRequestDetails(loggerFor2(client), `[${requestLogID}] response parsed`, { + retryOfRequestLogID, + url: response.url, + status: response.status, + body, + durationMs: Date.now() - startTime + }); + return body; +} +function addResponseIDs(value2, response) { + if (!value2 || typeof value2 !== "object" || Array.isArray(value2)) { + return value2; + } + return Object.defineProperties(value2, { + _request_id: { value: response.headers.get("request-id"), enumerable: false }, + _workspace_id: { value: response.headers.get("anthropic-workspace-id"), enumerable: false } + }); +} +var init_parse2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/parse.mjs"() { + init_streaming3(); + init_log2(); + init_request_signal(); + } +}); + +// node_modules/@anthropic-ai/sdk/core/middleware.mjs +function isFetchOriginError(err) { + return typeof err === "object" && err !== null && fetchOriginErrors.has(err); +} +function isRetryableError(err) { + const seen = /* @__PURE__ */ new Set(); + while (typeof err === "object" && err !== null && !seen.has(err)) { + seen.add(err); + if (isFetchOriginError(err) || isAbortError2(err) || err instanceof APIConnectionError2 || err instanceof RetryableError) { + return true; + } + err = err.cause; + } + return false; +} +function wrapFetchWithMiddleware(fetchFn, middleware, options, client) { + return async (url, init = {}) => { + if (middleware.length === 0) { + return fetchFn.call(void 0, url, init); + } + const headers = init.headers instanceof Headers ? init.headers : new Headers(init.headers); + const response = await applyMiddleware(fetchFn, middleware, options, client)({ + ...init, + headers, + url: typeof url === "string" ? url : url instanceof URL ? url.href : url.url + }); + if (response.bodyUsed || response.body?.locked) { + throw new AnthropicError("middleware consumed the response body; use response.clone() to inspect it, or return new Response(body, response) to consume and replace it"); + } + return response; + }; +} +function createMiddlewareContext(options, client) { + const cache = /* @__PURE__ */ new WeakMap(); + return { + options, + // Resolved per chain, so changes to the client's `logLevel`/`logger` + // apply to subsequent requests. + logger: client ? loggerFor2(client) : defaultLogger(), + parse(response) { + if (options?.stream && response.ok) { + return parseMiddlewareResponse(response, options, client); + } + let parsed = cache.get(response); + if (!parsed) { + parsed = parseMiddlewareResponse(response, options, client); + cache.set(response, parsed); + } + return parsed; + } + }; +} +async function parseMiddlewareResponse(response, options, client) { + if (response.bodyUsed || response.body?.locked) { + throw new AnthropicError("cannot ctx.parse() a response whose body was already consumed; call ctx.parse() instead of reading the body, or read via response.clone()"); + } + if (options?.stream && response.ok) { + return Stream2.fromSSEResponse(response.clone(), new AbortController(), client); + } + if (response.status === 204) { + return null; + } + if (options?.__binaryResponse) { + return response; + } + const contentType = response.headers.get("content-type"); + const mediaType = contentType?.split(";")[0]?.trim(); + const isJSON = mediaType?.includes("application/json") || mediaType?.endsWith("+json"); + if (isJSON) { + if (response.headers.get("content-length") === "0") { + return void 0; + } + return addResponseIDs(await response.clone().json(), response); + } + return await response.clone().text(); +} +function applyMiddleware(fetchFn, middleware, options, client) { + let next = async ({ url, ...init }) => { + try { + return await fetchFn.call(void 0, url, init); + } catch (err) { + const error = castToError2(err); + fetchOriginErrors.add(error); + throw error; + } + }; + const ctx = createMiddlewareContext(options, client); + for (let i = middleware.length - 1; i >= 0; i--) { + const mw = middleware[i]; + const nextInner = next; + next = async (request2) => mw(request2, nextInner, ctx); + } + return next; +} +var fetchOriginErrors; +var init_middleware = __esm({ + "node_modules/@anthropic-ai/sdk/core/middleware.mjs"() { + init_errors2(); + init_parse2(); + init_log2(); + init_error3(); + init_streaming3(); + fetchOriginErrors = /* @__PURE__ */ new WeakSet(); + } +}); + +// node_modules/@anthropic-ai/sdk/core/api-promise.mjs +var _APIPromise_client2, APIPromise2; +var init_api_promise2 = __esm({ + "node_modules/@anthropic-ai/sdk/core/api-promise.mjs"() { + init_tslib2(); + init_parse2(); + APIPromise2 = /* @__PURE__ */ (() => { + class APIPromise3 extends Promise { + constructor(client, responsePromise, parseResponse2 = defaultParseResponse2) { + super((resolve2) => { + resolve2(null); + }); + this.responsePromise = responsePromise; + this.parseResponse = parseResponse2; + _APIPromise_client2.set(this, void 0); + __classPrivateFieldSet2(this, _APIPromise_client2, client, "f"); + } + _thenUnwrap(transform) { + return new APIPromise3(__classPrivateFieldGet2(this, _APIPromise_client2, "f"), this.responsePromise, async (client, props) => addResponseIDs(transform(await this.parseResponse(client, props), props), props.response)); + } + /** + * Gets the raw `Response` instance instead of parsing the response + * data. + * + * If you want to parse the response body but still get the `Response` + * instance, you can use {@link withResponse()}. + * + * 👋 Getting the wrong TypeScript type for `Response`? + * Try setting `"moduleResolution": "NodeNext"` or add `"lib": ["DOM"]` + * to your `tsconfig.json`. + */ + asResponse() { + return this.responsePromise.then((p) => p.response); + } + /** + * Gets the parsed response data, the raw `Response` instance and the ID of the request, + * returned via the `request-id` header which is useful for debugging requests and resporting + * issues to Anthropic. + * + * If you just want to get the raw `Response` instance without parsing it, + * you can use {@link asResponse()}. + * + * 👋 Getting the wrong TypeScript type for `Response`? + * Try setting `"moduleResolution": "NodeNext"` or add `"lib": ["DOM"]` + * to your `tsconfig.json`. + */ + async withResponse() { + const [data, response] = await Promise.all([this.parse(), this.asResponse()]); + return { + data, + response, + request_id: response.headers.get("request-id"), + workspace_id: response.headers.get("anthropic-workspace-id") + }; + } + parse() { + if (!this.parsedPromise) { + this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet2(this, _APIPromise_client2, "f"), data)); + } + return this.parsedPromise; + } + then(onfulfilled, onrejected) { + return this.parse().then(onfulfilled, onrejected); + } + catch(onrejected) { + return this.parse().catch(onrejected); + } + finally(onfinally) { + return this.parse().finally(onfinally); + } + } + _APIPromise_client2 = /* @__PURE__ */ new WeakMap(); + return APIPromise3; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/core/pagination.mjs +var _AbstractPage_client2, AbstractPage2, PagePromise2, Page2, PageCursor, BidirectionalPageCursor; +var init_pagination2 = __esm({ + "node_modules/@anthropic-ai/sdk/core/pagination.mjs"() { + init_tslib2(); + init_error3(); + init_parse2(); + init_api_promise2(); + init_values2(); + AbstractPage2 = /* @__PURE__ */ (() => { + class AbstractPage3 { + constructor(client, response, body, options) { + _AbstractPage_client2.set(this, void 0); + __classPrivateFieldSet2(this, _AbstractPage_client2, client, "f"); + this.options = options; + this.response = response; + this.body = body; + } + hasNextPage() { + const items = this.getPaginatedItems(); + if (!items.length) + return false; + return this.nextPageRequestOptions() != null; + } + async getNextPage() { + const nextOptions = this.nextPageRequestOptions(); + if (!nextOptions) { + throw new AnthropicError("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`."); + } + return await __classPrivateFieldGet2(this, _AbstractPage_client2, "f").requestAPIList(this.constructor, nextOptions); + } + async *iterPages() { + let page2 = this; + yield page2; + while (page2.hasNextPage()) { + page2 = await page2.getNextPage(); + yield page2; + } + } + async *[(_AbstractPage_client2 = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() { + for await (const page2 of this.iterPages()) { + for (const item of page2.getPaginatedItems()) { + yield item; + } + } + } + } + return AbstractPage3; + })(); + PagePromise2 = /* @__PURE__ */ (() => { + class PagePromise3 extends APIPromise2 { + constructor(client, request2, Page3) { + super(client, request2, async (client2, props) => new Page3(client2, props.response, await defaultParseResponse2(client2, props), props.options)); + } + /** + * Allow auto-paginating iteration on an unawaited list call, eg: + * + * for await (const item of client.items.list()) { + * console.log(item) + * } + */ + async *[Symbol.asyncIterator]() { + const page2 = await this; + for await (const item of page2) { + yield item; + } + } + } + return PagePromise3; + })(); + Page2 = class extends AbstractPage2 { + constructor(client, response, body, options) { + super(client, response, body, options); + this.data = body.data || []; + this.has_more = body.has_more || false; + this.first_id = body.first_id || null; + this.last_id = body.last_id || null; + } + getPaginatedItems() { + return this.data ?? []; + } + hasNextPage() { + if (this.has_more === false) { + return false; + } + return super.hasNextPage(); + } + nextPageRequestOptions() { + if (this.options.query?.["before_id"]) { + const first_id = this.first_id; + if (!first_id) { + return null; + } + return { + ...this.options, + query: { + ...maybeObj2(this.options.query), + before_id: first_id + } + }; + } + const cursor = this.last_id; + if (!cursor) { + return null; + } + return { + ...this.options, + query: { + ...maybeObj2(this.options.query), + after_id: cursor + } + }; + } + }; + PageCursor = class extends AbstractPage2 { + constructor(client, response, body, options) { + super(client, response, body, options); + this.data = body.data || []; + this.next_page = body.next_page || null; + } + getPaginatedItems() { + return this.data ?? []; + } + nextPageRequestOptions() { + const cursor = this.next_page; + if (!cursor) { + return null; + } + return { + ...this.options, + query: { + ...maybeObj2(this.options.query), + page: cursor + } + }; + } + }; + BidirectionalPageCursor = class extends AbstractPage2 { + constructor(client, response, body, options) { + super(client, response, body, options); + this.data = body.data || []; + this.next_page = body.next_page || null; + this.prev_page = body.prev_page || null; + } + getPaginatedItems() { + return this.data ?? []; + } + nextPageRequestOptions() { + const cursor = this.next_page; + if (!cursor) { + return null; + } + return { + ...this.options, + query: { + ...maybeObj2(this.options.query), + page: cursor + } + }; + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/uploads.mjs +function makeFile2(fileBits, fileName, options) { + checkFileSupport2(); + return new File(fileBits, fileName ?? "", options); +} +function getName2(value2, stripPath) { + const val = typeof value2 === "object" && value2 !== null && ("name" in value2 && value2.name && String(value2.name) || "url" in value2 && value2.url && String(value2.url) || "filename" in value2 && value2.filename && String(value2.filename) || "path" in value2 && value2.path && String(value2.path)) || ""; + return stripPath ? val.split(/[\\/]/).pop() || void 0 : val; +} +function supportsFormData2(fetchObject) { + const fetch2 = typeof fetchObject === "function" ? fetchObject : fetchObject.fetch; + const cached = supportsFormDataMap2.get(fetch2); + if (cached) + return cached; + const promise = (async () => { + try { + const FetchResponse = "Response" in fetch2 ? fetch2.Response : (await fetch2("data:,")).constructor; + const data = new FormData(); + if (data.toString() === await new FetchResponse(data).text()) { + return false; + } + return true; + } catch { + return true; + } + })(); + supportsFormDataMap2.set(fetch2, promise); + return promise; +} +var checkFileSupport2, isAsyncIterable2, multipartFormRequestOptions2, supportsFormDataMap2, createForm2, addFormValue2; +var init_uploads4 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/uploads.mjs"() { + init_shims2(); + checkFileSupport2 = () => { + if (typeof File === "undefined") { + const { process: process2 } = globalThis; + const isOldNode = typeof process2?.versions?.node === "string" && parseInt(process2.versions.node.split(".")) < 20; + throw new Error("`File` is not defined as a global, which is required for file uploads." + (isOldNode ? " Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`." : "")); + } + }; + isAsyncIterable2 = (value2) => value2 != null && typeof value2 === "object" && typeof value2[Symbol.asyncIterator] === "function"; + multipartFormRequestOptions2 = async (opts, fetch2, stripFilenames = true) => { + return { ...opts, body: await createForm2(opts.body, fetch2, stripFilenames) }; + }; + supportsFormDataMap2 = /* @__PURE__ */ new WeakMap(); + createForm2 = async (body, fetch2, stripFilenames = true) => { + if (!await supportsFormData2(fetch2)) { + throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class."); + } + const form = new FormData(); + await Promise.all(Object.entries(body || {}).map(([key, value2]) => addFormValue2(form, key, value2, stripFilenames))); + return form; + }; + addFormValue2 = async (form, key, value2, stripFilenames) => { + if (value2 === void 0) + return; + if (value2 == null) { + throw new TypeError(`Received null for "${key}"; to pass null in FormData, you must use the string 'null'`); + } + if (typeof value2 === "string" || typeof value2 === "number" || typeof value2 === "boolean") { + form.append(key, String(value2)); + } else if (value2 instanceof Response) { + let options = {}; + const contentType = value2.headers.get("Content-Type"); + if (contentType) { + options = { type: contentType }; + } + form.append(key, makeFile2([await value2.blob()], getName2(value2, stripFilenames), options)); + } else if (isAsyncIterable2(value2)) { + form.append(key, makeFile2([await new Response(ReadableStreamFrom2(value2)).blob()], getName2(value2, stripFilenames))); + } else if (value2 instanceof Blob) { + const isFile = typeof File !== "undefined" && value2 instanceof File; + const name = isFile ? value2.name : getName2(value2, stripFilenames); + form.append(key, makeFile2([value2], name, { type: value2.type })); + } else if (Array.isArray(value2)) { + await Promise.all(value2.map((entry2) => addFormValue2(form, key + "[]", entry2, stripFilenames))); + } else if (typeof value2.then === "function") { + throw new TypeError(`Received a Promise for "${key}"; await it first, e.g. \`await toFile(...)\``); + } else if (value2 instanceof ArrayBuffer || ArrayBuffer.isView(value2)) { + throw new TypeError(`Received ${value2.constructor.name} for "${key}"; to upload raw bytes, wrap them with \`await toFile(bytes, 'filename')\``); + } else if (typeof value2 === "object") { + await Promise.all(Object.entries(value2).map(([name, prop]) => addFormValue2(form, `${key}[${name}]`, prop, stripFilenames))); + } else { + throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value2} instead`); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/to-file.mjs +async function toFile2(value2, name, options) { + checkFileSupport2(); + value2 = await value2; + name || (name = value2 instanceof File ? value2.name : getName2(value2, true)); + if (isFileLike2(value2)) { + if (value2 instanceof File && name == null && options == null) { + return value2; + } + return makeFile2([await value2.arrayBuffer()], name ?? value2.name, { + type: value2.type, + lastModified: value2.lastModified, + ...options + }); + } + if (isResponseLike2(value2)) { + const blob = await value2.blob(); + name || (name = new URL(value2.url).pathname.split(/[\\/]/).pop()); + return makeFile2(await getBytes2(blob), name, options); + } + const parts = await getBytes2(value2); + if (!options?.type) { + const type = parts.find((part) => typeof part === "object" && "type" in part && part.type); + if (typeof type === "string") { + options = { ...options, type }; + } + } + return makeFile2(parts, name, options); +} +async function getBytes2(value2) { + let parts = []; + if (typeof value2 === "string" || ArrayBuffer.isView(value2) || // includes Uint8Array, Buffer, etc. + value2 instanceof ArrayBuffer) { + parts.push(value2); + } else if (isBlobLike2(value2)) { + parts.push(value2 instanceof Blob ? value2 : await value2.arrayBuffer()); + } else if (isAsyncIterable2(value2)) { + for await (const chunk of value2) { + parts.push(...await getBytes2(chunk)); + } + } else { + const constructor = value2?.constructor?.name; + throw new Error(`Unexpected data type: ${typeof value2}${constructor ? `; constructor: ${constructor}` : ""}${propsForError2(value2)}`); + } + return parts; +} +function propsForError2(value2) { + if (typeof value2 !== "object" || value2 === null) + return ""; + const props = Object.getOwnPropertyNames(value2); + return `; props: [${props.map((p) => `"${p}"`).join(", ")}]`; +} +var isBlobLike2, isFileLike2, isResponseLike2; +var init_to_file2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/to-file.mjs"() { + init_uploads4(); + init_uploads4(); + isBlobLike2 = (value2) => value2 != null && typeof value2 === "object" && typeof value2.size === "number" && typeof value2.type === "string" && typeof value2.text === "function" && typeof value2.slice === "function" && typeof value2.arrayBuffer === "function"; + isFileLike2 = (value2) => value2 != null && typeof value2 === "object" && typeof value2.name === "string" && typeof value2.lastModified === "number" && isBlobLike2(value2); + isResponseLike2 = (value2) => value2 != null && typeof value2 === "object" && typeof value2.url === "string" && typeof value2.blob === "function"; + } +}); + +// node_modules/@anthropic-ai/sdk/core/uploads.mjs +var init_uploads5 = __esm({ + "node_modules/@anthropic-ai/sdk/core/uploads.mjs"() { + init_to_file2(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/shared.mjs +var init_shared2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/shared.mjs"() { + } +}); + +// node_modules/@anthropic-ai/sdk/core/resource.mjs +var APIResource2; +var init_resource2 = __esm({ + "node_modules/@anthropic-ai/sdk/core/resource.mjs"() { + APIResource2 = class { + constructor(client) { + this._client = client; + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/headers.mjs +function* iterateHeaders2(headers) { + if (!headers) + return; + if (brand_privateNullableHeaders2 in headers) { + const { values, nulls } = headers; + yield* values.entries(); + for (const name of nulls) { + yield [name, null]; + } + return; + } + let shouldClear = false; + let iter; + if (headers instanceof Headers) { + iter = headers.entries(); + } else if (isReadonlyArray2(headers)) { + iter = headers; + } else { + shouldClear = true; + iter = Object.entries(headers ?? {}); + } + for (let row of iter) { + const name = row[0]; + if (typeof name !== "string") + throw new TypeError("expected header name to be a string"); + const values = isReadonlyArray2(row[1]) ? row[1] : [row[1]]; + let didClear = false; + for (const value2 of values) { + if (value2 === void 0) + continue; + if (shouldClear && !didClear) { + didClear = true; + yield [name, clearSentinel]; + } + yield [name, value2]; + } + } +} +var brand_privateNullableHeaders2, clearSentinel, APPEND_HEADERS, appendHeaderValue, buildHeaders2; +var init_headers3 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/headers.mjs"() { + init_values2(); + brand_privateNullableHeaders2 = /* @__PURE__ */ Symbol.for("brand.privateNullableHeaders"); + clearSentinel = /* @__PURE__ */ Symbol("clear"); + APPEND_HEADERS = /* @__PURE__ */ new Set(["x-stainless-helper"]); + appendHeaderValue = (existing, addition) => { + const tokens = existing ? existing.split(",").map((t) => t.trim()).filter(Boolean) : []; + for (const tok of addition.split(",").map((t) => t.trim())) { + if (tok && !tokens.includes(tok)) + tokens.push(tok); + } + return tokens.join(", "); + }; + buildHeaders2 = (newHeaders) => { + const targetHeaders = new Headers(); + const nullHeaders = /* @__PURE__ */ new Set(); + for (const headers of newHeaders) { + const seenHeaders = /* @__PURE__ */ new Set(); + for (const [name, value2] of iterateHeaders2(headers)) { + const lowerName = name.toLowerCase(); + if (APPEND_HEADERS.has(lowerName)) { + if (value2 === clearSentinel) + continue; + if (value2 === null) { + targetHeaders.delete(name); + nullHeaders.add(lowerName); + } else { + targetHeaders.set(name, appendHeaderValue(targetHeaders.get(name), value2)); + nullHeaders.delete(lowerName); + } + continue; + } + if (value2 === clearSentinel || !seenHeaders.has(lowerName)) { + targetHeaders.delete(name); + seenHeaders.add(lowerName); + if (value2 === clearSentinel) + continue; + } + if (value2 === null) { + targetHeaders.delete(name); + nullHeaders.add(lowerName); + } else { + targetHeaders.append(name, value2); + nullHeaders.delete(lowerName); + } + } + } + return { [brand_privateNullableHeaders2]: true, values: targetHeaders, nulls: nullHeaders }; + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/path.mjs +function encodeURIPath2(str2) { + return str2.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g, encodeURIComponent); +} +var EMPTY2, createPathTagFunction2, path3; +var init_path2 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/path.mjs"() { + init_error3(); + EMPTY2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null)); + createPathTagFunction2 = (pathEncoder = encodeURIPath2) => function path5(statics, ...params) { + if (statics.length === 1) + return statics[0]; + let postPath = false; + const invalidSegments = []; + const path6 = statics.reduce((previousValue, currentValue, index) => { + if (/[?#]/.test(currentValue)) { + postPath = true; + } + const value2 = params[index]; + let encoded = (postPath ? encodeURIComponent : pathEncoder)("" + value2); + if (index !== params.length && (value2 == null || typeof value2 === "object" && // handle values from other realms + value2.toString === Object.getPrototypeOf(Object.getPrototypeOf(value2.hasOwnProperty ?? EMPTY2) ?? EMPTY2)?.toString)) { + encoded = value2 + ""; + invalidSegments.push({ + start: previousValue.length + currentValue.length, + length: encoded.length, + error: `Value of type ${Object.prototype.toString.call(value2).slice(8, -1)} is not a valid path parameter` + }); + } + return previousValue + currentValue + (index === params.length ? "" : encoded); + }, ""); + const pathOnly = path6.split(/[?#]/, 1)[0]; + const invalidSegmentPattern = /(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi; + let match; + while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) { + invalidSegments.push({ + start: match.index, + length: match[0].length, + error: `Value "${match[0]}" can't be safely passed as a path parameter` + }); + } + invalidSegments.sort((a, b) => a.start - b.start); + if (invalidSegments.length > 0) { + let lastEnd = 0; + const underline = invalidSegments.reduce((acc, segment) => { + const spaces = " ".repeat(segment.start - lastEnd); + const arrows = "^".repeat(segment.length); + lastEnd = segment.start + segment.length; + return acc + spaces + arrows; + }, ""); + throw new AnthropicError(`Path parameters result in path with invalid segments: +${invalidSegments.map((e) => e.error).join("\n")} +${path6} +${underline}`); + } + return path6; + }; + path3 = /* @__PURE__ */ createPathTagFunction2(encodeURIPath2); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/deployment-runs.mjs +var DeploymentRuns; +var init_deployment_runs = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/deployment-runs.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + DeploymentRuns = class extends APIResource2 { + /** + * Get Deployment Run + * + * @example + * ```ts + * const betaManagedAgentsDeploymentRun = + * await client.beta.deploymentRuns.retrieve( + * 'deployment_run_id', + * ); + * ``` + */ + retrieve(deploymentRunID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/deployment_runs/${deploymentRunID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List Deployment Runs + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsDeploymentRun of client.beta.deploymentRuns.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/deployment_runs?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/deployments.mjs +var Deployments; +var init_deployments = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/deployments.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Deployments = class extends APIResource2 { + /** + * Create Deployment + * + * @example + * ```ts + * const betaManagedAgentsDeployment = + * await client.beta.deployments.create({ + * agent: 'string', + * environment_id: 'x', + * initial_events: [ + * { + * content: [ + * { + * text: 'Where is my order #1234?', + * type: 'text', + * }, + * ], + * type: 'user.message', + * }, + * ], + * name: 'x', + * }); + * ``` + */ + create(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/deployments?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Get Deployment + * + * @example + * ```ts + * const betaManagedAgentsDeployment = + * await client.beta.deployments.retrieve( + * 'depl_011CZkZcDH3vPqd7xnEfwTai', + * ); + * ``` + */ + retrieve(deploymentID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/deployments/${deploymentID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Update Deployment + * + * @example + * ```ts + * const betaManagedAgentsDeployment = + * await client.beta.deployments.update( + * 'depl_011CZkZcDH3vPqd7xnEfwTai', + * ); + * ``` + */ + update(deploymentID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/deployments/${deploymentID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List Deployments + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsDeployment of client.beta.deployments.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/deployments?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Archive Deployment + * + * @example + * ```ts + * const betaManagedAgentsDeployment = + * await client.beta.deployments.archive( + * 'depl_011CZkZcDH3vPqd7xnEfwTai', + * ); + * ``` + */ + archive(deploymentID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/deployments/${deploymentID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Pause Deployment + * + * @example + * ```ts + * const betaManagedAgentsDeployment = + * await client.beta.deployments.pause( + * 'depl_011CZkZcDH3vPqd7xnEfwTai', + * ); + * ``` + */ + pause(deploymentID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/deployments/${deploymentID}/pause?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Run Deployment Now + * + * @example + * ```ts + * const betaManagedAgentsDeploymentRun = + * await client.beta.deployments.run( + * 'depl_011CZkZcDH3vPqd7xnEfwTai', + * ); + * ``` + */ + run(deploymentID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/deployments/${deploymentID}/run?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Unpause Deployment + * + * @example + * ```ts + * const betaManagedAgentsDeployment = + * await client.beta.deployments.unpause( + * 'depl_011CZkZcDH3vPqd7xnEfwTai', + * ); + * ``` + */ + unpause(deploymentID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/deployments/${deploymentID}/unpause?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/dreams.mjs +var Dreams; +var init_dreams = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/dreams.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Dreams = class extends APIResource2 { + /** + * Start an asynchronous job that uses past sessions to produce a reorganized + * version of a memory store and get back the dream to poll for the result. + * + * By default the dream writes its result to a new memory store and doesn't change + * the input memory store. The response has `status` set to `pending` and an empty + * `outputs` array. Poll the dream until `status` is `completed`, `failed`, or + * `canceled`. + * + * See the + * [Dreams guide](https://platform.claude.com/docs/en/managed-agents/dreams#create-a-dream) + * to learn more about creating dreams. + * + * @example + * ```ts + * const betaDream = await client.beta.dreams.create({ + * inputs: [{ memory_store_id: 'x', type: 'memory_store' }], + * model: 'string', + * }); + * ``` + */ + create(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/dreams?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "dreaming-2026-04-21"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Get a dream by ID to check its status, output memory store, and token usage. + * + * Archived dreams are returned too. + * + * See the + * [Dreams guide](https://platform.claude.com/docs/en/managed-agents/dreams#track-progress) + * for how to poll a dream and what each status means. + * + * @example + * ```ts + * const betaDream = await client.beta.dreams.retrieve( + * 'dream_id', + * ); + * ``` + */ + retrieve(dreamID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/dreams/${dreamID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "dreaming-2026-04-21"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List the dreams in the workspace, newest first. + * + * Archived dreams are left out unless `include_archived` is `true`. + * + * See the + * [Dreams guide](https://platform.claude.com/docs/en/managed-agents/dreams#list-dreams) + * for how to page through dreams. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaDream of client.beta.dreams.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/dreams?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "dreaming-2026-04-21"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Hide a `completed`, `failed`, or `canceled` dream from the default list of + * dreams. + * + * Archiving a `pending` or `running` dream returns a 400 error, so cancel it + * first. Archiving an archived dream returns it unchanged. An archived dream can + * still be fetched by ID. Archiving can't be undone. + * + * See the + * [Dreams guide](https://platform.claude.com/docs/en/managed-agents/dreams#archive-a-dream) + * to learn more about archiving dreams. + * + * @example + * ```ts + * const betaDream = await client.beta.dreams.archive( + * 'dream_id', + * ); + * ``` + */ + archive(dreamID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/dreams/${dreamID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "dreaming-2026-04-21"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Stop a `pending` or `running` dream. + * + * The response shows `status` as `canceled`, unless the dream reached `completed` + * or `failed` first. `usage` can keep changing after the response. Canceling a + * `canceled` dream returns it unchanged. Canceling a `completed` or `failed` dream + * returns a 400 error. + * + * See the + * [Dreams guide](https://platform.claude.com/docs/en/managed-agents/dreams#cancel-a-dream) + * to learn more about canceling dreams. + * + * @example + * ```ts + * const betaDream = await client.beta.dreams.cancel( + * 'dream_id', + * ); + * ``` + */ + cancel(dreamID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/dreams/${dreamID}/cancel?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "dreaming-2026-04-21"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/stainless-helper-header.mjs +function helperHeader(value2) { + return { [STAINLESS_HELPER_HEADER]: value2 }; +} +function wasCreatedByStainlessHelper(value2) { + return typeof value2 === "object" && value2 !== null && SDK_HELPER_SYMBOL in value2; +} +function collectStainlessHelpers(tools, messages) { + const helpers = /* @__PURE__ */ new Set(); + if (tools) { + for (const tool of tools) { + if (wasCreatedByStainlessHelper(tool)) { + helpers.add(tool[SDK_HELPER_SYMBOL]); + } + } + } + if (messages) { + for (const message of messages) { + if (wasCreatedByStainlessHelper(message)) { + helpers.add(message[SDK_HELPER_SYMBOL]); + } + const content = message.content; + if (Array.isArray(content)) { + for (const block of content) { + if (wasCreatedByStainlessHelper(block)) { + helpers.add(block[SDK_HELPER_SYMBOL]); + } + const definition = block?.tool?.definition; + if (wasCreatedByStainlessHelper(definition)) { + helpers.add(definition[SDK_HELPER_SYMBOL]); + } + } + } + } + } + return Array.from(helpers); +} +function stainlessHelperHeader(tools, messages) { + const helpers = collectStainlessHelpers(tools, messages); + if (helpers.length === 0) + return {}; + return { [STAINLESS_HELPER_HEADER]: helpers.join(", ") }; +} +function stainlessHelperHeaderFromFile(file2) { + if (wasCreatedByStainlessHelper(file2)) { + return { [STAINLESS_HELPER_HEADER]: file2[SDK_HELPER_SYMBOL] }; + } + return {}; +} +var STAINLESS_HELPER_HEADER, STAINLESS_HELPER_METHOD_HEADER, SDK_HELPER_SYMBOL; +var init_stainless_helper_header = __esm({ + "node_modules/@anthropic-ai/sdk/internal/stainless-helper-header.mjs"() { + STAINLESS_HELPER_HEADER = "x-stainless-helper"; + STAINLESS_HELPER_METHOD_HEADER = "x-stainless-helper-method"; + SDK_HELPER_SYMBOL = /* @__PURE__ */ Symbol("anthropic.sdk.stainlessHelper"); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/files.mjs +var Files5; +var init_files5 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/files.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_stainless_helper_header(); + init_uploads4(); + init_path2(); + Files5 = class extends APIResource2 { + /** + * List Files + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaFileMetadata of client.beta.files.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/files?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Delete File + * + * @example + * ```ts + * const betaDeletedFile = await client.beta.files.delete( + * 'file_id', + * ); + * ``` + */ + delete(fileID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.delete(path3`/v1/files/${fileID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Download File + * + * @example + * ```ts + * const response = await client.beta.files.download( + * 'file_id', + * ); + * + * const content = await response.blob(); + * console.log(content); + * ``` + */ + download(fileID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/files/${fileID}/content?beta=true`, { + ...options, + headers: buildHeaders2([ + { + Accept: "application/binary", + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]), + __binaryResponse: true + }); + } + /** + * Get File Metadata + * + * @example + * ```ts + * const betaFileMetadata = + * await client.beta.files.retrieveMetadata('file_id'); + * ``` + */ + retrieveMetadata(fileID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/files/${fileID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Upload File + * + * @example + * ```ts + * const betaFileMetadata = await client.beta.files.upload({ + * file: fs.createReadStream('path/to/file'), + * }); + * ``` + */ + upload(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/files?beta=true", multipartFormRequestOptions2({ + body, + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + stainlessHelperHeaderFromFile(body.file), + options?.headers + ]) + }, this._client)); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/models.mjs +var Models2; +var init_models3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/models.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Models2 = class extends APIResource2 { + /** + * Get a specific model. + * + * The Models API response can be used to determine information about a specific + * model or resolve a model alias to a model ID. + * + * @example + * ```ts + * const betaModelInfo = await client.beta.models.retrieve( + * 'model_id', + * ); + * ``` + */ + retrieve(modelID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/models/${modelID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List available models. + * + * The Models API response can be used to determine which models are available for + * use in the API. More recently released models are listed first. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaModelInfo of client.beta.models.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/models?beta=true", Page2, { + query, + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/user-profiles.mjs +var UserProfiles; +var init_user_profiles = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/user-profiles.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + UserProfiles = class extends APIResource2 { + /** + * Create User Profile + * + * @example + * ```ts + * const betaUserProfile = + * await client.beta.userProfiles.create(); + * ``` + */ + create(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/user_profiles?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "user-profiles-2026-08-18"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Get User Profile + * + * @example + * ```ts + * const betaUserProfile = + * await client.beta.userProfiles.retrieve( + * 'uprof_011CZkZCu8hGbp5mYRQgUmz9', + * ); + * ``` + */ + retrieve(userProfileID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/user_profiles/${userProfileID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "user-profiles-2026-08-18"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Update User Profile + * + * @example + * ```ts + * const betaUserProfile = + * await client.beta.userProfiles.update( + * 'uprof_011CZkZCu8hGbp5mYRQgUmz9', + * ); + * ``` + */ + update(userProfileID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/user_profiles/${userProfileID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "user-profiles-2026-08-18"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List User Profiles + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaUserProfile of client.beta.userProfiles.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/user_profiles?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "user-profiles-2026-08-18"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Create Enrollment URL + * + * @example + * ```ts + * const betaUserProfileEnrollmentURL = + * await client.beta.userProfiles.createEnrollmentURL( + * 'uprof_011CZkZCu8hGbp5mYRQgUmz9', + * ); + * ``` + */ + createEnrollmentURL(userProfileID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/user_profiles/${userProfileID}/enrollment_url?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "user-profiles-2026-08-18"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@stablelib/base64/lib/base64.js +var require_base64 = __commonJS({ + "node_modules/@stablelib/base64/lib/base64.js"(exports) { + "use strict"; + var __extends = exports && exports.__extends || /* @__PURE__ */ (function() { + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { + d2.__proto__ = b2; + } || function(d2, b2) { + for (var p in b2) if (b2.hasOwnProperty(p)) d2[p] = b2[p]; + }; + return extendStatics(d, b); + }; + return function(d, b) { + extendStatics(d, b); + function __() { + this.constructor = d; + } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(exports, "__esModule", { value: true }); + var INVALID_BYTE = 256; + var Coder = ( + /** @class */ + (function() { + function Coder2(_paddingCharacter) { + if (_paddingCharacter === void 0) { + _paddingCharacter = "="; + } + this._paddingCharacter = _paddingCharacter; + } + Coder2.prototype.encodedLength = function(length) { + if (!this._paddingCharacter) { + return (length * 8 + 5) / 6 | 0; + } + return (length + 2) / 3 * 4 | 0; + }; + Coder2.prototype.encode = function(data) { + var out = ""; + var i = 0; + for (; i < data.length - 2; i += 3) { + var c = data[i] << 16 | data[i + 1] << 8 | data[i + 2]; + out += this._encodeByte(c >>> 3 * 6 & 63); + out += this._encodeByte(c >>> 2 * 6 & 63); + out += this._encodeByte(c >>> 1 * 6 & 63); + out += this._encodeByte(c >>> 0 * 6 & 63); + } + var left = data.length - i; + if (left > 0) { + var c = data[i] << 16 | (left === 2 ? data[i + 1] << 8 : 0); + out += this._encodeByte(c >>> 3 * 6 & 63); + out += this._encodeByte(c >>> 2 * 6 & 63); + if (left === 2) { + out += this._encodeByte(c >>> 1 * 6 & 63); + } else { + out += this._paddingCharacter || ""; + } + out += this._paddingCharacter || ""; + } + return out; + }; + Coder2.prototype.maxDecodedLength = function(length) { + if (!this._paddingCharacter) { + return (length * 6 + 7) / 8 | 0; + } + return length / 4 * 3 | 0; + }; + Coder2.prototype.decodedLength = function(s) { + return this.maxDecodedLength(s.length - this._getPaddingLength(s)); + }; + Coder2.prototype.decode = function(s) { + if (s.length === 0) { + return new Uint8Array(0); + } + var paddingLength = this._getPaddingLength(s); + var length = s.length - paddingLength; + var out = new Uint8Array(this.maxDecodedLength(length)); + var op2 = 0; + var i = 0; + var haveBad = 0; + var v0 = 0, v1 = 0, v2 = 0, v3 = 0; + for (; i < length - 4; i += 4) { + v0 = this._decodeChar(s.charCodeAt(i + 0)); + v1 = this._decodeChar(s.charCodeAt(i + 1)); + v2 = this._decodeChar(s.charCodeAt(i + 2)); + v3 = this._decodeChar(s.charCodeAt(i + 3)); + out[op2++] = v0 << 2 | v1 >>> 4; + out[op2++] = v1 << 4 | v2 >>> 2; + out[op2++] = v2 << 6 | v3; + haveBad |= v0 & INVALID_BYTE; + haveBad |= v1 & INVALID_BYTE; + haveBad |= v2 & INVALID_BYTE; + haveBad |= v3 & INVALID_BYTE; + } + if (i < length - 1) { + v0 = this._decodeChar(s.charCodeAt(i)); + v1 = this._decodeChar(s.charCodeAt(i + 1)); + out[op2++] = v0 << 2 | v1 >>> 4; + haveBad |= v0 & INVALID_BYTE; + haveBad |= v1 & INVALID_BYTE; + } + if (i < length - 2) { + v2 = this._decodeChar(s.charCodeAt(i + 2)); + out[op2++] = v1 << 4 | v2 >>> 2; + haveBad |= v2 & INVALID_BYTE; + } + if (i < length - 3) { + v3 = this._decodeChar(s.charCodeAt(i + 3)); + out[op2++] = v2 << 6 | v3; + haveBad |= v3 & INVALID_BYTE; + } + if (haveBad !== 0) { + throw new Error("Base64Coder: incorrect characters for decoding"); + } + return out; + }; + Coder2.prototype._encodeByte = function(b) { + var result = b; + result += 65; + result += 25 - b >>> 8 & 0 - 65 - 26 + 97; + result += 51 - b >>> 8 & 26 - 97 - 52 + 48; + result += 61 - b >>> 8 & 52 - 48 - 62 + 43; + result += 62 - b >>> 8 & 62 - 43 - 63 + 47; + return String.fromCharCode(result); + }; + Coder2.prototype._decodeChar = function(c) { + var result = INVALID_BYTE; + result += (42 - c & c - 44) >>> 8 & -INVALID_BYTE + c - 43 + 62; + result += (46 - c & c - 48) >>> 8 & -INVALID_BYTE + c - 47 + 63; + result += (47 - c & c - 58) >>> 8 & -INVALID_BYTE + c - 48 + 52; + result += (64 - c & c - 91) >>> 8 & -INVALID_BYTE + c - 65 + 0; + result += (96 - c & c - 123) >>> 8 & -INVALID_BYTE + c - 97 + 26; + return result; + }; + Coder2.prototype._getPaddingLength = function(s) { + var paddingLength = 0; + if (this._paddingCharacter) { + for (var i = s.length - 1; i >= 0; i--) { + if (s[i] !== this._paddingCharacter) { + break; + } + paddingLength++; + } + if (s.length < 4 || paddingLength > 2) { + throw new Error("Base64Coder: incorrect padding"); + } + } + return paddingLength; + }; + return Coder2; + })() + ); + exports.Coder = Coder; + var stdCoder = new Coder(); + function encode3(data) { + return stdCoder.encode(data); + } + exports.encode = encode3; + function decode(s) { + return stdCoder.decode(s); + } + exports.decode = decode; + var URLSafeCoder = ( + /** @class */ + (function(_super) { + __extends(URLSafeCoder2, _super); + function URLSafeCoder2() { + return _super !== null && _super.apply(this, arguments) || this; + } + URLSafeCoder2.prototype._encodeByte = function(b) { + var result = b; + result += 65; + result += 25 - b >>> 8 & 0 - 65 - 26 + 97; + result += 51 - b >>> 8 & 26 - 97 - 52 + 48; + result += 61 - b >>> 8 & 52 - 48 - 62 + 45; + result += 62 - b >>> 8 & 62 - 45 - 63 + 95; + return String.fromCharCode(result); + }; + URLSafeCoder2.prototype._decodeChar = function(c) { + var result = INVALID_BYTE; + result += (44 - c & c - 46) >>> 8 & -INVALID_BYTE + c - 45 + 62; + result += (94 - c & c - 96) >>> 8 & -INVALID_BYTE + c - 95 + 63; + result += (47 - c & c - 58) >>> 8 & -INVALID_BYTE + c - 48 + 52; + result += (64 - c & c - 91) >>> 8 & -INVALID_BYTE + c - 65 + 0; + result += (96 - c & c - 123) >>> 8 & -INVALID_BYTE + c - 97 + 26; + return result; + }; + return URLSafeCoder2; + })(Coder) + ); + exports.URLSafeCoder = URLSafeCoder; + var urlSafeCoder = new URLSafeCoder(); + function encodeURLSafe(data) { + return urlSafeCoder.encode(data); + } + exports.encodeURLSafe = encodeURLSafe; + function decodeURLSafe(s) { + return urlSafeCoder.decode(s); + } + exports.decodeURLSafe = decodeURLSafe; + exports.encodedLength = function(length) { + return stdCoder.encodedLength(length); + }; + exports.maxDecodedLength = function(length) { + return stdCoder.maxDecodedLength(length); + }; + exports.decodedLength = function(s) { + return stdCoder.decodedLength(s); + }; + } +}); + +// node_modules/fast-sha256/sha256.js +var require_sha256 = __commonJS({ + "node_modules/fast-sha256/sha256.js"(exports, module) { + (function(root2, factory) { + var exports2 = {}; + factory(exports2); + var sha256 = exports2["default"]; + for (var k in exports2) { + sha256[k] = exports2[k]; + } + if (typeof module === "object" && typeof module.exports === "object") { + module.exports = sha256; + } else if (typeof define === "function" && define.amd) { + define(function() { + return sha256; + }); + } else { + root2.sha256 = sha256; + } + })(exports, function(exports2) { + "use strict"; + exports2.__esModule = true; + exports2.digestLength = 32; + exports2.blockSize = 64; + var K = new Uint32Array([ + 1116352408, + 1899447441, + 3049323471, + 3921009573, + 961987163, + 1508970993, + 2453635748, + 2870763221, + 3624381080, + 310598401, + 607225278, + 1426881987, + 1925078388, + 2162078206, + 2614888103, + 3248222580, + 3835390401, + 4022224774, + 264347078, + 604807628, + 770255983, + 1249150122, + 1555081692, + 1996064986, + 2554220882, + 2821834349, + 2952996808, + 3210313671, + 3336571891, + 3584528711, + 113926993, + 338241895, + 666307205, + 773529912, + 1294757372, + 1396182291, + 1695183700, + 1986661051, + 2177026350, + 2456956037, + 2730485921, + 2820302411, + 3259730800, + 3345764771, + 3516065817, + 3600352804, + 4094571909, + 275423344, + 430227734, + 506948616, + 659060556, + 883997877, + 958139571, + 1322822218, + 1537002063, + 1747873779, + 1955562222, + 2024104815, + 2227730452, + 2361852424, + 2428436474, + 2756734187, + 3204031479, + 3329325298 + ]); + function hashBlocks(w, v, p, pos, len) { + var a, b, c, d, e, f, g, h, u, i, j, t1, t2; + while (len >= 64) { + a = v[0]; + b = v[1]; + c = v[2]; + d = v[3]; + e = v[4]; + f = v[5]; + g = v[6]; + h = v[7]; + for (i = 0; i < 16; i++) { + j = pos + i * 4; + w[i] = (p[j] & 255) << 24 | (p[j + 1] & 255) << 16 | (p[j + 2] & 255) << 8 | p[j + 3] & 255; + } + for (i = 16; i < 64; i++) { + u = w[i - 2]; + t1 = (u >>> 17 | u << 32 - 17) ^ (u >>> 19 | u << 32 - 19) ^ u >>> 10; + u = w[i - 15]; + t2 = (u >>> 7 | u << 32 - 7) ^ (u >>> 18 | u << 32 - 18) ^ u >>> 3; + w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0); + } + for (i = 0; i < 64; i++) { + t1 = (((e >>> 6 | e << 32 - 6) ^ (e >>> 11 | e << 32 - 11) ^ (e >>> 25 | e << 32 - 25)) + (e & f ^ ~e & g) | 0) + (h + (K[i] + w[i] | 0) | 0) | 0; + t2 = ((a >>> 2 | a << 32 - 2) ^ (a >>> 13 | a << 32 - 13) ^ (a >>> 22 | a << 32 - 22)) + (a & b ^ a & c ^ b & c) | 0; + h = g; + g = f; + f = e; + e = d + t1 | 0; + d = c; + c = b; + b = a; + a = t1 + t2 | 0; + } + v[0] += a; + v[1] += b; + v[2] += c; + v[3] += d; + v[4] += e; + v[5] += f; + v[6] += g; + v[7] += h; + pos += 64; + len -= 64; + } + return pos; + } + var Hash = ( + /** @class */ + (function() { + function Hash2() { + this.digestLength = exports2.digestLength; + this.blockSize = exports2.blockSize; + this.state = new Int32Array(8); + this.temp = new Int32Array(64); + this.buffer = new Uint8Array(128); + this.bufferLength = 0; + this.bytesHashed = 0; + this.finished = false; + this.reset(); + } + Hash2.prototype.reset = function() { + this.state[0] = 1779033703; + this.state[1] = 3144134277; + this.state[2] = 1013904242; + this.state[3] = 2773480762; + this.state[4] = 1359893119; + this.state[5] = 2600822924; + this.state[6] = 528734635; + this.state[7] = 1541459225; + this.bufferLength = 0; + this.bytesHashed = 0; + this.finished = false; + return this; + }; + Hash2.prototype.clean = function() { + for (var i = 0; i < this.buffer.length; i++) { + this.buffer[i] = 0; + } + for (var i = 0; i < this.temp.length; i++) { + this.temp[i] = 0; + } + this.reset(); + }; + Hash2.prototype.update = function(data, dataLength) { + if (dataLength === void 0) { + dataLength = data.length; + } + if (this.finished) { + throw new Error("SHA256: can't update because hash was finished."); + } + var dataPos = 0; + this.bytesHashed += dataLength; + if (this.bufferLength > 0) { + while (this.bufferLength < 64 && dataLength > 0) { + this.buffer[this.bufferLength++] = data[dataPos++]; + dataLength--; + } + if (this.bufferLength === 64) { + hashBlocks(this.temp, this.state, this.buffer, 0, 64); + this.bufferLength = 0; + } + } + if (dataLength >= 64) { + dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength); + dataLength %= 64; + } + while (dataLength > 0) { + this.buffer[this.bufferLength++] = data[dataPos++]; + dataLength--; + } + return this; + }; + Hash2.prototype.finish = function(out) { + if (!this.finished) { + var bytesHashed = this.bytesHashed; + var left = this.bufferLength; + var bitLenHi = bytesHashed / 536870912 | 0; + var bitLenLo = bytesHashed << 3; + var padLength = bytesHashed % 64 < 56 ? 64 : 128; + this.buffer[left] = 128; + for (var i = left + 1; i < padLength - 8; i++) { + this.buffer[i] = 0; + } + this.buffer[padLength - 8] = bitLenHi >>> 24 & 255; + this.buffer[padLength - 7] = bitLenHi >>> 16 & 255; + this.buffer[padLength - 6] = bitLenHi >>> 8 & 255; + this.buffer[padLength - 5] = bitLenHi >>> 0 & 255; + this.buffer[padLength - 4] = bitLenLo >>> 24 & 255; + this.buffer[padLength - 3] = bitLenLo >>> 16 & 255; + this.buffer[padLength - 2] = bitLenLo >>> 8 & 255; + this.buffer[padLength - 1] = bitLenLo >>> 0 & 255; + hashBlocks(this.temp, this.state, this.buffer, 0, padLength); + this.finished = true; + } + for (var i = 0; i < 8; i++) { + out[i * 4 + 0] = this.state[i] >>> 24 & 255; + out[i * 4 + 1] = this.state[i] >>> 16 & 255; + out[i * 4 + 2] = this.state[i] >>> 8 & 255; + out[i * 4 + 3] = this.state[i] >>> 0 & 255; + } + return this; + }; + Hash2.prototype.digest = function() { + var out = new Uint8Array(this.digestLength); + this.finish(out); + return out; + }; + Hash2.prototype._saveState = function(out) { + for (var i = 0; i < this.state.length; i++) { + out[i] = this.state[i]; + } + }; + Hash2.prototype._restoreState = function(from, bytesHashed) { + for (var i = 0; i < this.state.length; i++) { + this.state[i] = from[i]; + } + this.bytesHashed = bytesHashed; + this.finished = false; + this.bufferLength = 0; + }; + return Hash2; + })() + ); + exports2.Hash = Hash; + var HMAC = ( + /** @class */ + (function() { + function HMAC2(key) { + this.inner = new Hash(); + this.outer = new Hash(); + this.blockSize = this.inner.blockSize; + this.digestLength = this.inner.digestLength; + var pad = new Uint8Array(this.blockSize); + if (key.length > this.blockSize) { + new Hash().update(key).finish(pad).clean(); + } else { + for (var i = 0; i < key.length; i++) { + pad[i] = key[i]; + } + } + for (var i = 0; i < pad.length; i++) { + pad[i] ^= 54; + } + this.inner.update(pad); + for (var i = 0; i < pad.length; i++) { + pad[i] ^= 54 ^ 92; + } + this.outer.update(pad); + this.istate = new Uint32Array(8); + this.ostate = new Uint32Array(8); + this.inner._saveState(this.istate); + this.outer._saveState(this.ostate); + for (var i = 0; i < pad.length; i++) { + pad[i] = 0; + } + } + HMAC2.prototype.reset = function() { + this.inner._restoreState(this.istate, this.inner.blockSize); + this.outer._restoreState(this.ostate, this.outer.blockSize); + return this; + }; + HMAC2.prototype.clean = function() { + for (var i = 0; i < this.istate.length; i++) { + this.ostate[i] = this.istate[i] = 0; + } + this.inner.clean(); + this.outer.clean(); + }; + HMAC2.prototype.update = function(data) { + this.inner.update(data); + return this; + }; + HMAC2.prototype.finish = function(out) { + if (this.outer.finished) { + this.outer.finish(out); + } else { + this.inner.finish(out); + this.outer.update(out, this.digestLength).finish(out); + } + return this; + }; + HMAC2.prototype.digest = function() { + var out = new Uint8Array(this.digestLength); + this.finish(out); + return out; + }; + return HMAC2; + })() + ); + exports2.HMAC = HMAC; + function hash(data) { + var h = new Hash().update(data); + var digest = h.digest(); + h.clean(); + return digest; + } + exports2.hash = hash; + exports2["default"] = hash; + function hmac(key, data) { + var h = new HMAC(key).update(data); + var digest = h.digest(); + h.clean(); + return digest; + } + exports2.hmac = hmac; + function fillBuffer(buffer, hmac2, info, counter) { + var num2 = counter[0]; + if (num2 === 0) { + throw new Error("hkdf: cannot expand more"); + } + hmac2.reset(); + if (num2 > 1) { + hmac2.update(buffer); + } + if (info) { + hmac2.update(info); + } + hmac2.update(counter); + hmac2.finish(buffer); + counter[0]++; + } + var hkdfSalt = new Uint8Array(exports2.digestLength); + function hkdf(key, salt, info, length) { + if (salt === void 0) { + salt = hkdfSalt; + } + if (length === void 0) { + length = 32; + } + var counter = new Uint8Array([1]); + var okm = hmac(salt, key); + var hmac_ = new HMAC(okm); + var buffer = new Uint8Array(hmac_.digestLength); + var bufpos = buffer.length; + var out = new Uint8Array(length); + for (var i = 0; i < length; i++) { + if (bufpos === buffer.length) { + fillBuffer(buffer, hmac_, info, counter); + bufpos = 0; + } + out[i] = buffer[bufpos++]; + } + hmac_.clean(); + buffer.fill(0); + counter.fill(0); + return out; + } + exports2.hkdf = hkdf; + function pbkdf2(password, salt, iterations, dkLen) { + var prf = new HMAC(password); + var len = prf.digestLength; + var ctr = new Uint8Array(4); + var t = new Uint8Array(len); + var u = new Uint8Array(len); + var dk = new Uint8Array(dkLen); + for (var i = 0; i * len < dkLen; i++) { + var c = i + 1; + ctr[0] = c >>> 24 & 255; + ctr[1] = c >>> 16 & 255; + ctr[2] = c >>> 8 & 255; + ctr[3] = c >>> 0 & 255; + prf.reset(); + prf.update(salt); + prf.update(ctr); + prf.finish(u); + for (var j = 0; j < len; j++) { + t[j] = u[j]; + } + for (var j = 2; j <= iterations; j++) { + prf.reset(); + prf.update(u).finish(u); + for (var k = 0; k < len; k++) { + t[k] ^= u[k]; + } + } + for (var j = 0; j < len && i * len + j < dkLen; j++) { + dk[i * len + j] = t[j]; + } + } + for (var i = 0; i < len; i++) { + t[i] = u[i] = 0; + } + for (var i = 0; i < 4; i++) { + ctr[i] = 0; + } + prf.clean(); + return dk; + } + exports2.pbkdf2 = pbkdf2; + }); + } +}); + +// node_modules/standardwebhooks/dist/timing_safe_equal.js +var require_timing_safe_equal = __commonJS({ + "node_modules/standardwebhooks/dist/timing_safe_equal.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.timingSafeEqual = timingSafeEqual; + function assert2(expr, msg = "") { + if (!expr) { + throw new Error(msg); + } + } + function timingSafeEqual(a, b) { + if (a.byteLength !== b.byteLength) { + return false; + } + if (!(a instanceof DataView)) { + a = new DataView(ArrayBuffer.isView(a) ? a.buffer : a); + } + if (!(b instanceof DataView)) { + b = new DataView(ArrayBuffer.isView(b) ? b.buffer : b); + } + assert2(a instanceof DataView); + assert2(b instanceof DataView); + const length = a.byteLength; + let out = 0; + let i = -1; + while (++i < length) { + out |= a.getUint8(i) ^ b.getUint8(i); + } + return out === 0; + } + } +}); + +// node_modules/standardwebhooks/dist/index.js +var require_dist2 = __commonJS({ + "node_modules/standardwebhooks/dist/index.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.Webhook = exports.WebhookVerificationError = void 0; + var base64 = require_base64(); + var sha256 = require_sha256(); + var timing_safe_equal_1 = require_timing_safe_equal(); + var WEBHOOK_TOLERANCE_IN_SECONDS = 5 * 60; + var ExtendableError = class _ExtendableError extends Error { + constructor(message) { + super(message); + Object.setPrototypeOf(this, _ExtendableError.prototype); + this.name = "ExtendableError"; + this.stack = new Error(message).stack; + } + }; + var WebhookVerificationError = class _WebhookVerificationError extends ExtendableError { + constructor(message) { + super(message); + Object.setPrototypeOf(this, _WebhookVerificationError.prototype); + this.name = "WebhookVerificationError"; + } + }; + exports.WebhookVerificationError = WebhookVerificationError; + var Webhook2 = class _Webhook { + constructor(secret, options) { + if ((options === null || options === void 0 ? void 0 : options.format) === "raw") { + if (secret instanceof Uint8Array) { + this.key = secret; + } else { + this.key = Uint8Array.from(secret, (c) => c.charCodeAt(0)); + } + } else { + if (typeof secret !== "string") { + throw new Error("Expected secret to be of type string"); + } + if (secret.startsWith(_Webhook.prefix)) { + secret = secret.substring(_Webhook.prefix.length); + } + this.key = base64.decode(secret); + } + if (this.key.length === 0) { + throw new Error("Secret can't be empty."); + } + } + verify(payload, headers, options) { + var _a6; + const jsonParse = (_a6 = options === null || options === void 0 ? void 0 : options.jsonParse) !== null && _a6 !== void 0 ? _a6 : true; + const normalizedHeaders = {}; + for (const key of Object.keys(headers)) { + normalizedHeaders[key.toLowerCase()] = headers[key]; + } + const msgId = normalizedHeaders["webhook-id"]; + const msgSignature = normalizedHeaders["webhook-signature"]; + const msgTimestamp = normalizedHeaders["webhook-timestamp"]; + if (!msgSignature || !msgId || !msgTimestamp) { + throw new WebhookVerificationError("Missing required headers"); + } + const timestamp2 = this.verifyTimestamp(msgTimestamp); + const computedSignature = this.sign(msgId, timestamp2, payload); + const expectedSignature = computedSignature.split(",")[1]; + const passedSignatures = msgSignature.split(" "); + const encoder4 = new globalThis.TextEncoder(); + for (const versionedSignature of passedSignatures) { + const [version, signature] = versionedSignature.split(","); + if (version !== "v1") { + continue; + } + if ((0, timing_safe_equal_1.timingSafeEqual)(encoder4.encode(signature), encoder4.encode(expectedSignature))) { + const payloadString = payload.toString(); + if (payloadString === "") { + return void 0; + } + if (jsonParse) { + return JSON.parse(payloadString); + } else { + return void 0; + } + } + } + throw new WebhookVerificationError("No matching signature found"); + } + sign(msgId, timestamp2, payload) { + if (typeof payload === "string") { + } else if (payload.constructor.name === "Buffer") { + payload = payload.toString(); + } else { + throw new Error("Expected payload to be of type string or Buffer."); + } + const encoder4 = new TextEncoder(); + const timestampNumber = Math.floor(timestamp2.getTime() / 1e3); + const toSign = encoder4.encode(`${msgId}.${timestampNumber}.${payload}`); + const expectedSignature = base64.encode(sha256.hmac(this.key, toSign)); + return `v1,${expectedSignature}`; + } + verifyTimestamp(timestampHeader) { + const now = Math.floor(Date.now() / 1e3); + const timestamp2 = parseInt(timestampHeader, 10); + if (Number.isNaN(timestamp2)) { + throw new WebhookVerificationError("Invalid Signature Headers"); + } + if (now - timestamp2 > WEBHOOK_TOLERANCE_IN_SECONDS) { + throw new WebhookVerificationError("Message timestamp too old"); + } + if (timestamp2 > now + WEBHOOK_TOLERANCE_IN_SECONDS) { + throw new WebhookVerificationError("Message timestamp too new"); + } + return new Date(timestamp2 * 1e3); + } + }; + exports.Webhook = Webhook2; + Webhook2.prefix = "whsec_"; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/webhooks.mjs +var import_standardwebhooks, Webhooks2; +var init_webhooks2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/webhooks.mjs"() { + init_resource2(); + import_standardwebhooks = __toESM(require_dist2(), 1); + Webhooks2 = class extends APIResource2 { + /** + * Parses a webhook payload into an event without verifying its signature. Prefer + * `unwrap()` unless you have already verified the signature yourself. + */ + parseUnverified(body) { + return JSON.parse(body); + } + /** + * Verifies the webhook signature from the `webhook-id`, `webhook-timestamp` and + * `webhook-signature` headers using your webhook signing key, then parses the + * payload into an event. Fails if the signature is missing or invalid. + */ + unwrap(body, options) { + const headers = options?.headers; + if (headers == null) + throw new Error("Webhook headers are required in order to verify the signature"); + const keyStr = options.key === void 0 ? this._client.webhookKey : options.key; + if (!keyStr) + throw new Error("Webhook key must not be null or empty in order to unwrap"); + const wh = new import_standardwebhooks.Webhook(keyStr); + wh.verify(body, headers); + return JSON.parse(body); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/agents/versions.mjs +var Versions2; +var init_versions2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/agents/versions.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Versions2 = class extends APIResource2 { + /** + * List Agent Versions + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsAgent of client.beta.agents.versions.list( + * 'agent_011CZkYpogX7uDKUyvBTophP', + * )) { + * // ... + * } + * ``` + */ + list(agentID, params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/agents/${agentID}/versions?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/agents/agents.mjs +var Agents2; +var init_agents2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/agents/agents.mjs"() { + init_resource2(); + init_versions2(); + init_versions2(); + init_pagination2(); + init_headers3(); + init_path2(); + Agents2 = /* @__PURE__ */ (() => { + class Agents3 extends APIResource2 { + constructor() { + super(...arguments); + this.versions = new Versions2(this._client); + } + /** + * Create Agent + * + * @example + * ```ts + * const betaManagedAgentsAgent = + * await client.beta.agents.create({ + * model: 'claude-opus-5', + * name: 'My First Agent', + * }); + * ``` + */ + create(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/agents?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Get Agent + * + * @example + * ```ts + * const betaManagedAgentsAgent = + * await client.beta.agents.retrieve( + * 'agent_011CZkYpogX7uDKUyvBTophP', + * ); + * ``` + */ + retrieve(agentID, params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.get(path3`/v1/agents/${agentID}?beta=true`, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Update Agent + * + * @example + * ```ts + * const betaManagedAgentsAgent = + * await client.beta.agents.update( + * 'agent_011CZkYpogX7uDKUyvBTophP', + * { description: 'updated' }, + * ); + * ``` + */ + update(agentID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/agents/${agentID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List Agents + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsAgent of client.beta.agents.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/agents?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Archive Agent + * + * @example + * ```ts + * const betaManagedAgentsAgent = + * await client.beta.agents.archive( + * 'agent_011CZkYpogX7uDKUyvBTophP', + * ); + * ``` + */ + archive(agentID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/agents/${agentID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + } + Agents3.Versions = Versions2; + return Agents3; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/abort.mjs +function linkAbort(external, controller) { + if (!external) + return () => { + }; + if (external.aborted) { + controller.abort(); + return () => { + }; + } + const onAbort = () => controller.abort(); + external.addEventListener("abort", onAbort); + return () => external.removeEventListener("abort", onAbort); +} +var init_abort3 = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/abort.mjs"() { + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/backoff.mjs +function isStatus(e, code) { + return e instanceof APIError2 && e.status === code; +} +function is4xx(e) { + return e instanceof APIError2 && typeof e.status === "number" && e.status >= 400 && e.status < 500; +} +function isFatal4xx(e) { + return is4xx(e) && !isStatus(e, 408) && !isStatus(e, 409) && !isStatus(e, 429); +} +function backoff(attempt, baseMs, capMs) { + return Math.min(baseMs * 2 ** attempt, capMs); +} +function jitter(lowMs, highMs) { + return lowMs + Math.random() * (highMs - lowMs); +} +function applyJitter(ms) { + return ms * (1 - Math.random() * 0.25); +} +var init_backoff = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/backoff.mjs"() { + init_error3(); + } +}); + +// node_modules/@anthropic-ai/sdk/lib/helper-client.mjs +function copyClientForHelper(client, { authToken, helper }) { + if (!authToken) { + throw new AnthropicError(`copyClientForHelper: expected a non-empty authToken but received ${JSON.stringify(authToken)}`); + } + const internal = client; + const parentDefaults = internal._options.defaultHeaders; + const parentAuthExtraHeaders = internal._authState?.extraHeaders; + const inheritedAuthExtraHeaders = parentAuthExtraHeaders ? Object.fromEntries(Object.entries(parentAuthExtraHeaders).filter(([name]) => { + const lower = name.toLowerCase(); + return lower !== "authorization" && lower !== "x-api-key"; + })) : void 0; + const defaultHeaders = buildHeaders2([ + inheritedAuthExtraHeaders, + parentDefaults, + { [STAINLESS_HELPER_HEADER]: helper } + ]); + return client.withOptions({ + apiKey: null, + authToken, + baseURL: client.baseURL, + credentials: void 0, + defaultHeaders + }); +} +var init_helper_client = __esm({ + "node_modules/@anthropic-ai/sdk/lib/helper-client.mjs"() { + init_error3(); + init_headers3(); + init_stainless_helper_header(); + } +}); + +// node_modules/@anthropic-ai/sdk/lib/environments/poller.mjs +function backoff2(attempt) { + return backoff(attempt, POLL_BACKOFF_BASE_MS, POLL_BACKOFF_CAP_MS); +} +function defaultWorkerId() { + const env = globalThis.process?.env; + const host = env?.["HOSTNAME"]; + return host ? `${host}-${uuid42()}` : uuid42(); +} +var _WorkPoller_runnerClient, _WorkPoller_consumed, _WorkPoller_controller, _WorkPoller_detachExternal, _WorkPoller_autoStop, _WorkPoller_drain, _WorkPoller_blockMs, _WorkPoller_reclaimOlderThanMs, _WorkPoller_requestOpts, _IdleLog_log, _IdleLog_environmentId, _IdleLog_idleSince, _IdleLog_lastReport, POLL_BLOCK_MS, POLL_BACKOFF_BASE_MS, POLL_BACKOFF_CAP_MS, IDLE_REPORT_INTERVAL_MS, WorkPoller, IdleLog; +var init_poller = __esm({ + "node_modules/@anthropic-ai/sdk/lib/environments/poller.mjs"() { + init_tslib2(); + init_error3(); + init_log2(); + init_sleep2(); + init_uuid2(); + init_abort3(); + init_headers3(); + init_backoff(); + init_helper_client(); + POLL_BLOCK_MS = 999; + POLL_BACKOFF_BASE_MS = 1e3; + POLL_BACKOFF_CAP_MS = 6e4; + IDLE_REPORT_INTERVAL_MS = 3e5; + WorkPoller = /* @__PURE__ */ (() => { + class WorkPoller2 { + constructor(opts) { + _WorkPoller_runnerClient.set(this, void 0); + _WorkPoller_consumed.set(this, false); + _WorkPoller_controller.set(this, void 0); + _WorkPoller_detachExternal.set(this, void 0); + _WorkPoller_autoStop.set(this, void 0); + _WorkPoller_drain.set(this, void 0); + _WorkPoller_blockMs.set(this, void 0); + _WorkPoller_reclaimOlderThanMs.set(this, void 0); + _WorkPoller_requestOpts.set(this, void 0); + this.client = opts.client; + this.environmentId = opts.environmentId; + this.environmentKey = opts.environmentKey; + this.workerId = opts.workerId ?? defaultWorkerId(); + __classPrivateFieldSet2(this, _WorkPoller_runnerClient, copyClientForHelper(opts.client, { + authToken: opts.environmentKey, + helper: "environments-work-poller" + }), "f"); + __classPrivateFieldSet2(this, _WorkPoller_autoStop, opts.autoStop ?? true, "f"); + __classPrivateFieldSet2(this, _WorkPoller_drain, opts.drain ?? false, "f"); + __classPrivateFieldSet2(this, _WorkPoller_blockMs, opts.blockMs === void 0 ? POLL_BLOCK_MS : opts.blockMs, "f"); + __classPrivateFieldSet2(this, _WorkPoller_reclaimOlderThanMs, opts.reclaimOlderThanMs ?? null, "f"); + __classPrivateFieldSet2(this, _WorkPoller_requestOpts, opts.requestOptions, "f"); + __classPrivateFieldSet2(this, _WorkPoller_controller, new AbortController(), "f"); + __classPrivateFieldSet2(this, _WorkPoller_detachExternal, linkAbort(opts.signal, __classPrivateFieldGet2(this, _WorkPoller_controller, "f")), "f"); + } + /** Read-only view of this iterator's abort signal. */ + get signal() { + return __classPrivateFieldGet2(this, _WorkPoller_controller, "f").signal; + } + /** Abort the iterator. The current `for await` will exit cleanly. */ + abort() { + __classPrivateFieldGet2(this, _WorkPoller_controller, "f").abort(); + } + async *[(_WorkPoller_runnerClient = /* @__PURE__ */ new WeakMap(), _WorkPoller_consumed = /* @__PURE__ */ new WeakMap(), _WorkPoller_controller = /* @__PURE__ */ new WeakMap(), _WorkPoller_detachExternal = /* @__PURE__ */ new WeakMap(), _WorkPoller_autoStop = /* @__PURE__ */ new WeakMap(), _WorkPoller_drain = /* @__PURE__ */ new WeakMap(), _WorkPoller_blockMs = /* @__PURE__ */ new WeakMap(), _WorkPoller_reclaimOlderThanMs = /* @__PURE__ */ new WeakMap(), _WorkPoller_requestOpts = /* @__PURE__ */ new WeakMap(), Symbol.asyncIterator)]() { + if (__classPrivateFieldGet2(this, _WorkPoller_consumed, "f")) { + throw new AnthropicError("Cannot iterate over a consumed WorkPoller"); + } + __classPrivateFieldSet2(this, _WorkPoller_consumed, true, "f"); + const log = loggerFor2(this.client); + log.info("poller starting", { + component: "work-poller", + environment_id: this.environmentId + }); + const idle = new IdleLog(log, this.environmentId); + try { + let attempt = 0; + while (!__classPrivateFieldGet2(this, _WorkPoller_controller, "f").signal.aborted) { + let work; + try { + work = await __classPrivateFieldGet2(this, _WorkPoller_runnerClient, "f").beta.environments.work.poll(this.environmentId, { + "Anthropic-Worker-ID": this.workerId, + ...__classPrivateFieldGet2(this, _WorkPoller_blockMs, "f") !== null ? { block_ms: __classPrivateFieldGet2(this, _WorkPoller_blockMs, "f") } : {}, + ...__classPrivateFieldGet2(this, _WorkPoller_reclaimOlderThanMs, "f") !== null ? { reclaim_older_than_ms: __classPrivateFieldGet2(this, _WorkPoller_reclaimOlderThanMs, "f") } : {} + }, { headers: buildHeaders2([__classPrivateFieldGet2(this, _WorkPoller_requestOpts, "f")?.headers]), signal: __classPrivateFieldGet2(this, _WorkPoller_controller, "f").signal }); + } catch (e) { + if (__classPrivateFieldGet2(this, _WorkPoller_controller, "f").signal.aborted) + return; + if (isFatal4xx(e)) { + log.error("poll failed permanently, stopping poller", { error: String(e) }); + throw e; + } + const wait = applyJitter(backoff2(attempt)); + log.warn("poll failed, backing off", { error: String(e), backoff_ms: wait }); + attempt++; + await sleep2(wait, __classPrivateFieldGet2(this, _WorkPoller_controller, "f").signal); + continue; + } + attempt = 0; + if (work == null) { + if (__classPrivateFieldGet2(this, _WorkPoller_drain, "f")) + return; + idle.onEmptyPoll(); + await sleep2(jitter(1e3, 3e3), __classPrivateFieldGet2(this, _WorkPoller_controller, "f").signal); + continue; + } + idle.onClaim(); + log.info("claimed work", { + component: "work-poller", + environment_id: this.environmentId, + work_id: work.id, + work_type: work.data.type + }); + try { + await __classPrivateFieldGet2(this, _WorkPoller_runnerClient, "f").beta.environments.work.ack(work.id, { environment_id: work.environment_id }, { headers: buildHeaders2([__classPrivateFieldGet2(this, _WorkPoller_requestOpts, "f")?.headers]), signal: __classPrivateFieldGet2(this, _WorkPoller_controller, "f").signal }); + } catch (e) { + log.error("ack failed", { work_id: work.id, error: String(e) }); + continue; + } + try { + yield work; + } finally { + if (__classPrivateFieldGet2(this, _WorkPoller_autoStop, "f")) { + try { + await __classPrivateFieldGet2(this, _WorkPoller_runnerClient, "f").beta.environments.work.stop(work.id, { environment_id: work.environment_id }, { headers: buildHeaders2([__classPrivateFieldGet2(this, _WorkPoller_requestOpts, "f")?.headers]) }); + } catch (e) { + if (!isStatus(e, 409)) + log.warn("stop failed", { work_id: work.id, error: String(e) }); + } + } + } + } + } finally { + __classPrivateFieldGet2(this, _WorkPoller_detachExternal, "f").call(this); + } + } + } + return WorkPoller2; + })(); + IdleLog = /* @__PURE__ */ (() => { + class IdleLog2 { + constructor(log, environmentId) { + _IdleLog_log.set(this, void 0); + _IdleLog_environmentId.set(this, void 0); + _IdleLog_idleSince.set(this, void 0); + _IdleLog_lastReport.set(this, 0); + __classPrivateFieldSet2(this, _IdleLog_log, log, "f"); + __classPrivateFieldSet2(this, _IdleLog_environmentId, environmentId, "f"); + } + onEmptyPoll() { + const now = Date.now(); + const fields = { component: "work-poller", environment_id: __classPrivateFieldGet2(this, _IdleLog_environmentId, "f") }; + if (__classPrivateFieldGet2(this, _IdleLog_idleSince, "f") === void 0) { + __classPrivateFieldSet2(this, _IdleLog_idleSince, __classPrivateFieldSet2(this, _IdleLog_lastReport, now, "f"), "f"); + __classPrivateFieldGet2(this, _IdleLog_log, "f").info("idle; polling for work", fields); + } else if (now - __classPrivateFieldGet2(this, _IdleLog_lastReport, "f") >= IDLE_REPORT_INTERVAL_MS) { + __classPrivateFieldSet2(this, _IdleLog_lastReport, now, "f"); + __classPrivateFieldGet2(this, _IdleLog_log, "f").info(`still polling; idle for ${Math.round((now - __classPrivateFieldGet2(this, _IdleLog_idleSince, "f")) / 1e3)}s`, fields); + } else { + __classPrivateFieldGet2(this, _IdleLog_log, "f").debug("poll returned no work", fields); + } + } + onClaim() { + __classPrivateFieldSet2(this, _IdleLog_idleSince, void 0, "f"); + } + } + _IdleLog_log = /* @__PURE__ */ new WeakMap(), _IdleLog_environmentId = /* @__PURE__ */ new WeakMap(), _IdleLog_idleSince = /* @__PURE__ */ new WeakMap(), _IdleLog_lastReport = /* @__PURE__ */ new WeakMap(); + return IdleLog2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/async-queue.mjs +var _AsyncQueue_items, _AsyncQueue_waiters, _AsyncQueue_closed, AsyncQueue; +var init_async_queue = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/async-queue.mjs"() { + init_tslib2(); + AsyncQueue = /* @__PURE__ */ (() => { + class AsyncQueue2 { + constructor() { + _AsyncQueue_items.set(this, []); + _AsyncQueue_waiters.set(this, []); + _AsyncQueue_closed.set(this, false); + } + /** Enqueue an item, or hand it directly to a waiting reader. Returns `false` once closed. */ + push(item) { + if (__classPrivateFieldGet2(this, _AsyncQueue_closed, "f")) + return false; + const w = __classPrivateFieldGet2(this, _AsyncQueue_waiters, "f").shift(); + if (w) + w({ done: false, value: item }); + else + __classPrivateFieldGet2(this, _AsyncQueue_items, "f").push(item); + return true; + } + /** Mark the queue done. Idempotent; wakes every pending reader with `done: true`. */ + close() { + if (__classPrivateFieldGet2(this, _AsyncQueue_closed, "f")) + return; + __classPrivateFieldSet2(this, _AsyncQueue_closed, true, "f"); + while (__classPrivateFieldGet2(this, _AsyncQueue_waiters, "f").length > 0) { + const w = __classPrivateFieldGet2(this, _AsyncQueue_waiters, "f").shift(); + w({ done: true, value: void 0 }); + } + } + /** + * Resolve with the next item, or `done: true` once the queue is closed and + * drained. When `signal` is supplied, aborting it resolves a pending read + * with `done: true` (cancellation is pushed down here rather than handled by + * an outer `Promise.race`). + */ + next(signal) { + if (__classPrivateFieldGet2(this, _AsyncQueue_items, "f").length > 0) { + return Promise.resolve({ done: false, value: __classPrivateFieldGet2(this, _AsyncQueue_items, "f").shift() }); + } + if (__classPrivateFieldGet2(this, _AsyncQueue_closed, "f") || signal?.aborted) { + return Promise.resolve({ done: true, value: void 0 }); + } + return new Promise((resolve2) => { + const waiter = (r) => { + signal?.removeEventListener("abort", onAbort); + resolve2(r); + }; + const onAbort = () => { + const idx = __classPrivateFieldGet2(this, _AsyncQueue_waiters, "f").indexOf(waiter); + if (idx >= 0) + __classPrivateFieldGet2(this, _AsyncQueue_waiters, "f").splice(idx, 1); + resolve2({ done: true, value: void 0 }); + }; + __classPrivateFieldGet2(this, _AsyncQueue_waiters, "f").push(waiter); + signal?.addEventListener("abort", onAbort, { once: true }); + }); + } + /** Synchronously remove and return the next buffered item, or `undefined` if empty. */ + tryShift() { + return __classPrivateFieldGet2(this, _AsyncQueue_items, "f").shift(); + } + } + _AsyncQueue_items = /* @__PURE__ */ new WeakMap(), _AsyncQueue_waiters = /* @__PURE__ */ new WeakMap(), _AsyncQueue_closed = /* @__PURE__ */ new WeakMap(); + return AsyncQueue2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/lib/tools/ToolError.mjs +var ToolError; +var init_ToolError = __esm({ + "node_modules/@anthropic-ai/sdk/lib/tools/ToolError.mjs"() { + ToolError = /* @__PURE__ */ (() => { + class ToolError2 extends Error { + constructor(content) { + const message = typeof content === "string" ? content : content.map((block) => { + if (block.type === "text") + return block.text; + return `[${block.type}]`; + }).join(" "); + super(message); + this.name = "ToolError"; + this.content = content; + } + } + return ToolError2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/lib/tools/BetaRunnableTool.mjs +function toolName(tool) { + return "name" in tool ? tool.name : "mcp_server_name" in tool ? tool.mcp_server_name : tool.type; +} +function toolErrorContent(e) { + return e instanceof ToolError ? e.content : `Error: ${e instanceof Error ? e.message : String(e)}`; +} +async function runRunnableTool(tool, rawInput, context) { + try { + const input = tool.parse ? tool.parse(rawInput) : rawInput; + const content = await tool.run(input, context); + return { content, isError: false }; + } catch (e) { + return { content: toolErrorContent(e), isError: true }; + } +} +var init_BetaRunnableTool = __esm({ + "node_modules/@anthropic-ai/sdk/lib/tools/BetaRunnableTool.mjs"() { + init_ToolError(); + } +}); + +// node_modules/@anthropic-ai/sdk/lib/tools/SessionToolRunner.mjs +function isEndTurnIdle(ev) { + return ev.type === "session.status_idle" && ev.stop_reason?.type === "end_turn"; +} +function buildResultEvent(ev, isError, content) { + if (ev.type === "agent.custom_tool_use") { + return { type: "user.custom_tool_result", custom_tool_use_id: ev.id, is_error: isError, content }; + } + return { type: "user.tool_result", tool_use_id: ev.id, is_error: isError, content }; +} +function toSessionContent(content) { + if (typeof content === "string") + return [{ type: "text", text: content || "(no output)" }]; + const out = content.map((b) => { + if (b.type === "text") + return { type: "text", text: b.text || "(no output)" }; + if (b.type === "image" || b.type === "document") + return b; + if (b.type === "search_result") { + return { + type: "search_result", + source: b.source, + title: b.title, + content: b.content.map((c) => ({ type: "text", text: c.text })), + citations: { enabled: b.citations?.enabled ?? false } + }; + } + return { type: "text", text: JSON.stringify(b) }; + }); + return out.length > 0 ? out : [{ type: "text", text: "(no output)" }]; +} +var _IdleClock_maxIdleMs, _IdleClock_onExpire, _IdleClock_blockers, _IdleClock_armPending, _IdleClock_timer, _SessionToolRunner_instances, _SessionToolRunner_consumed, _SessionToolRunner_controller, _SessionToolRunner_detachExternal, _SessionToolRunner_requestOpts, _SessionToolRunner_toolByName, _SessionToolRunner_logger, _SessionToolRunner_seen, _SessionToolRunner_answered, _SessionToolRunner_confirmationVerdicts, _SessionToolRunner_awaitingConfirmation, _SessionToolRunner_results, _SessionToolRunner_inFlightCount, _SessionToolRunner_sendRetryWindowMs, _SessionToolRunner_onIdle, _SessionToolRunner_idleClock, _SessionToolRunner_requestOptions, _SessionToolRunner_streamLoop, _SessionToolRunner_reconcile, _SessionToolRunner_ingestHistory, _SessionToolRunner_handleStreamEvent, _SessionToolRunner_routeToolEvent, _SessionToolRunner_noteConfirmation, _SessionToolRunner_applyVerdict, _SessionToolRunner_surfaceCall, _SessionToolRunner_execute, _SessionToolRunner_sendResult, _SessionToolRunner_drain, STREAM_BACKOFF_START_MS, STREAM_BACKOFF_CAP_MS, TOOL_TIMEOUT_MS, DRAIN_TIMEOUT_MS, SEND_BACKOFF_START_MS, SEND_BACKOFF_CAP_MS, SEND_RETRY_WINDOW_MS, DEFAULT_MAX_IDLE_MS, IdleClock, SessionToolRunner; +var init_SessionToolRunner = __esm({ + "node_modules/@anthropic-ai/sdk/lib/tools/SessionToolRunner.mjs"() { + init_tslib2(); + init_error3(); + init_log2(); + init_sleep2(); + init_backoff(); + init_abort3(); + init_async_queue(); + init_headers3(); + init_stainless_helper_header(); + init_BetaRunnableTool(); + STREAM_BACKOFF_START_MS = 500; + STREAM_BACKOFF_CAP_MS = 1e4; + TOOL_TIMEOUT_MS = 12e4; + DRAIN_TIMEOUT_MS = 3e4; + SEND_BACKOFF_START_MS = 1e3; + SEND_BACKOFF_CAP_MS = 3e4; + SEND_RETRY_WINDOW_MS = 5 * 6e4; + DEFAULT_MAX_IDLE_MS = 6e4; + IdleClock = /* @__PURE__ */ (() => { + class IdleClock2 { + constructor(maxIdleMs, onExpire) { + _IdleClock_maxIdleMs.set(this, void 0); + _IdleClock_onExpire.set(this, void 0); + _IdleClock_blockers.set(this, /* @__PURE__ */ new Set()); + _IdleClock_armPending.set(this, false); + _IdleClock_timer.set(this, void 0); + __classPrivateFieldSet2(this, _IdleClock_maxIdleMs, maxIdleMs, "f"); + __classPrivateFieldSet2(this, _IdleClock_onExpire, onExpire, "f"); + } + /** + * Arm on `status_idle{end_turn}`; disarm otherwise. `user.tool_confirmation` + * is neutral: it signals neither agent activity nor an idle, and its effect + * on the clock flows through {@link block} / {@link unblock} instead — + * disarming here would discard the pending arm the verdict is about to + * settle. + */ + noteEvent(ev) { + if (ev.type === "user.tool_confirmation") + return; + if (isEndTurnIdle(ev)) + this.arm(); + else + this.disarm(); + } + /** Register gated work that must resolve before an idle countdown starts. */ + block(toolUseId) { + __classPrivateFieldGet2(this, _IdleClock_blockers, "f").add(toolUseId); + if (__classPrivateFieldGet2(this, _IdleClock_timer, "f") !== void 0) { + __classPrivateFieldSet2(this, _IdleClock_armPending, true, "f"); + clearTimeout(__classPrivateFieldGet2(this, _IdleClock_timer, "f")); + __classPrivateFieldSet2(this, _IdleClock_timer, void 0, "f"); + } + } + /** + * Retire gated work (a no-op for ids never blocked); applies a pending arm — + * with a fresh full `maxIdleMs` window — once the last blocker retires. + */ + unblock(toolUseId) { + __classPrivateFieldGet2(this, _IdleClock_blockers, "f").delete(toolUseId); + if (__classPrivateFieldGet2(this, _IdleClock_blockers, "f").size === 0 && __classPrivateFieldGet2(this, _IdleClock_armPending, "f")) + this.arm(); + } + /** + * (Re)start the idle countdown — or, while blockers are outstanding, hold + * the arm pending instead. Stopping then would drop a held call when its + * verdict later arrives, or cut the runner off before a released call's + * result can drive the next turn. + */ + arm() { + if (__classPrivateFieldGet2(this, _IdleClock_maxIdleMs, "f") <= 0) + return; + if (__classPrivateFieldGet2(this, _IdleClock_blockers, "f").size > 0) { + __classPrivateFieldSet2(this, _IdleClock_armPending, true, "f"); + return; + } + __classPrivateFieldSet2(this, _IdleClock_armPending, false, "f"); + if (__classPrivateFieldGet2(this, _IdleClock_timer, "f") !== void 0) + clearTimeout(__classPrivateFieldGet2(this, _IdleClock_timer, "f")); + __classPrivateFieldSet2(this, _IdleClock_timer, setTimeout(__classPrivateFieldGet2(this, _IdleClock_onExpire, "f"), __classPrivateFieldGet2(this, _IdleClock_maxIdleMs, "f")), "f"); + } + /** + * Cancel the idle countdown and any pending arm. Blockers persist — they + * track real outstanding work, retired only by {@link unblock}. + */ + disarm() { + __classPrivateFieldSet2(this, _IdleClock_armPending, false, "f"); + if (__classPrivateFieldGet2(this, _IdleClock_timer, "f") !== void 0) { + clearTimeout(__classPrivateFieldGet2(this, _IdleClock_timer, "f")); + __classPrivateFieldSet2(this, _IdleClock_timer, void 0, "f"); + } + } + } + _IdleClock_maxIdleMs = /* @__PURE__ */ new WeakMap(), _IdleClock_onExpire = /* @__PURE__ */ new WeakMap(), _IdleClock_blockers = /* @__PURE__ */ new WeakMap(), _IdleClock_armPending = /* @__PURE__ */ new WeakMap(), _IdleClock_timer = /* @__PURE__ */ new WeakMap(); + return IdleClock2; + })(); + SessionToolRunner = /* @__PURE__ */ (() => { + class SessionToolRunner2 { + constructor(sessionId, opts) { + _SessionToolRunner_instances.add(this); + _SessionToolRunner_consumed.set(this, false); + _SessionToolRunner_controller.set(this, void 0); + _SessionToolRunner_detachExternal.set(this, void 0); + _SessionToolRunner_requestOpts.set(this, void 0); + _SessionToolRunner_toolByName.set(this, void 0); + _SessionToolRunner_logger.set(this, void 0); + _SessionToolRunner_seen.set(this, /* @__PURE__ */ new Set()); + _SessionToolRunner_answered.set(this, /* @__PURE__ */ new Set()); + _SessionToolRunner_confirmationVerdicts.set(this, /* @__PURE__ */ new Map()); + _SessionToolRunner_awaitingConfirmation.set(this, /* @__PURE__ */ new Map()); + _SessionToolRunner_results.set(this, new AsyncQueue()); + _SessionToolRunner_inFlightCount.set(this, 0); + _SessionToolRunner_sendRetryWindowMs.set(this, SEND_RETRY_WINDOW_MS); + _SessionToolRunner_onIdle.set(this, null); + _SessionToolRunner_idleClock.set(this, void 0); + this.client = opts.client; + this.sessionId = sessionId; + this.tools = opts.tools; + this.maxIdleMs = opts.maxIdleMs ?? DEFAULT_MAX_IDLE_MS; + __classPrivateFieldSet2(this, _SessionToolRunner_logger, loggerFor2(opts.client), "f"); + __classPrivateFieldSet2(this, _SessionToolRunner_toolByName, new Map(opts.tools.map((t) => [toolName(t), t])), "f"); + __classPrivateFieldSet2(this, _SessionToolRunner_controller, new AbortController(), "f"); + __classPrivateFieldSet2(this, _SessionToolRunner_detachExternal, linkAbort(opts.signal, __classPrivateFieldGet2(this, _SessionToolRunner_controller, "f")), "f"); + __classPrivateFieldSet2(this, _SessionToolRunner_requestOpts, opts.requestOptions, "f"); + __classPrivateFieldSet2(this, _SessionToolRunner_idleClock, new IdleClock(this.maxIdleMs, () => { + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").info("session idle after end_turn; stopping", { + component: "session-tool-runner", + session_id: this.sessionId, + max_idle_ms: this.maxIdleMs + }); + __classPrivateFieldGet2(this, _SessionToolRunner_controller, "f").abort(); + }), "f"); + } + /** Read-only view of this runner's abort signal. */ + get signal() { + return __classPrivateFieldGet2(this, _SessionToolRunner_controller, "f").signal; + } + /** Abort the runner. Background tasks will wind down and `for await` will exit cleanly. */ + abort() { + __classPrivateFieldGet2(this, _SessionToolRunner_controller, "f").abort(); + } + /** + * @internal + * `EnvironmentWorker` keeps this equal to the lease TTL each heartbeat + * reports; applies to a send already retrying. + */ + _setSendRetryWindow(ms) { + __classPrivateFieldSet2(this, _SessionToolRunner_sendRetryWindowMs, ms, "f"); + } + async *[(_SessionToolRunner_consumed = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_controller = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_detachExternal = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_requestOpts = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_toolByName = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_logger = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_seen = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_answered = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_confirmationVerdicts = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_awaitingConfirmation = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_results = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_inFlightCount = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_sendRetryWindowMs = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_onIdle = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_idleClock = /* @__PURE__ */ new WeakMap(), _SessionToolRunner_instances = /* @__PURE__ */ new WeakSet(), Symbol.asyncIterator)]() { + if (__classPrivateFieldGet2(this, _SessionToolRunner_consumed, "f")) { + throw new AnthropicError("Cannot iterate over a consumed SessionToolRunner"); + } + __classPrivateFieldSet2(this, _SessionToolRunner_consumed, true, "f"); + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").info("session tool runner starting", { + component: "session-tool-runner", + session_id: this.sessionId + }); + const streamPromise = __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_streamLoop).call(this).catch((e) => { + if (!__classPrivateFieldGet2(this, _SessionToolRunner_controller, "f").signal.aborted) { + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").error("stream loop failed", { error: String(e) }); + } + __classPrivateFieldGet2(this, _SessionToolRunner_controller, "f").abort(); + }); + try { + while (true) { + const next = await __classPrivateFieldGet2(this, _SessionToolRunner_results, "f").next(__classPrivateFieldGet2(this, _SessionToolRunner_controller, "f").signal); + if (next.done) + break; + yield next.value; + } + await streamPromise; + let pending; + while ((pending = __classPrivateFieldGet2(this, _SessionToolRunner_results, "f").tryShift()) !== void 0) { + yield pending; + } + } finally { + __classPrivateFieldGet2(this, _SessionToolRunner_controller, "f").abort(); + __classPrivateFieldGet2(this, _SessionToolRunner_idleClock, "f").disarm(); + await streamPromise; + try { + await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_drain).call(this); + } catch (e) { + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").warn("drain failed", { error: String(e) }); + } + __classPrivateFieldGet2(this, _SessionToolRunner_results, "f").close(); + for (const t of this.tools) { + try { + await t.close?.(); + } catch (e) { + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").warn("tool.close failed", { tool: toolName(t), error: String(e) }); + } + } + __classPrivateFieldGet2(this, _SessionToolRunner_detachExternal, "f").call(this); + } + } + } + _SessionToolRunner_requestOptions = function _SessionToolRunner_requestOptions2() { + return { + ...__classPrivateFieldGet2(this, _SessionToolRunner_requestOpts, "f"), + headers: buildHeaders2([helperHeader("session-tool-runner"), __classPrivateFieldGet2(this, _SessionToolRunner_requestOpts, "f")?.headers]), + signal: __classPrivateFieldGet2(this, _SessionToolRunner_controller, "f").signal + }; + }, _SessionToolRunner_streamLoop = // ===== event stream ===== + async function _SessionToolRunner_streamLoop2() { + const ctrl = __classPrivateFieldGet2(this, _SessionToolRunner_controller, "f"); + let backoff3 = STREAM_BACKOFF_START_MS; + while (!ctrl.signal.aborted) { + try { + const stream5 = await this.client.beta.sessions.events.stream(this.sessionId, {}, __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_requestOptions).call(this)); + await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_reconcile).call(this); + for await (const ev of stream5) { + backoff3 = STREAM_BACKOFF_START_MS; + if (await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_handleStreamEvent).call(this, ev)) + return; + } + } catch (e) { + ctrl.signal.throwIfAborted(); + if (isFatal4xx(e)) { + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").error("permanent stream failure, shutting down", { error: String(e) }); + ctrl.abort(); + throw e; + } + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").warn("stream disconnected, reconnecting", { + error: String(e), + backoff_ms: backoff3 + }); + } + ctrl.signal.throwIfAborted(); + await sleep2(backoff3, ctrl.signal); + backoff3 = Math.min(backoff3 * 2, STREAM_BACKOFF_CAP_MS); + } + }, _SessionToolRunner_reconcile = /** + * Read full history before dispatching so a `tool_use` whose result appears + * later in the same history is not re-executed. Runs after the live stream is + * already attached (see {@link SessionToolRunner.#streamLoop}). + */ + async function _SessionToolRunner_reconcile2() { + const ctrl = __classPrivateFieldGet2(this, _SessionToolRunner_controller, "f"); + const pending = []; + let lastWasEndTurn = false; + try { + for await (const ev of this.client.beta.sessions.events.list(this.sessionId, { limit: 1e3 }, __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_requestOptions).call(this))) { + __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_ingestHistory).call(this, ev, pending); + lastWasEndTurn = isEndTurnIdle(ev); + } + } catch (e) { + ctrl.signal.throwIfAborted(); + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").warn("reconcile list failed", { error: String(e) }); + for (const ev of pending) + __classPrivateFieldGet2(this, _SessionToolRunner_seen, "f").delete(ev.id); + return; + } + const unanswered = pending.filter((ev) => !__classPrivateFieldGet2(this, _SessionToolRunner_answered, "f").has(ev.id)); + __classPrivateFieldGet2(this, _SessionToolRunner_idleClock, "f").disarm(); + for (const ev of unanswered) + await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_routeToolEvent).call(this, ev); + for (const held of [...__classPrivateFieldGet2(this, _SessionToolRunner_awaitingConfirmation, "f").values()]) { + const verdict = __classPrivateFieldGet2(this, _SessionToolRunner_confirmationVerdicts, "f").get(held.id); + if (verdict !== void 0) + await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_applyVerdict).call(this, held, verdict); + } + const outstanding = unanswered.filter((ev) => !__classPrivateFieldGet2(this, _SessionToolRunner_answered, "f").has(ev.id) && !__classPrivateFieldGet2(this, _SessionToolRunner_awaitingConfirmation, "f").has(ev.id)); + if (lastWasEndTurn && outstanding.length === 0) + __classPrivateFieldGet2(this, _SessionToolRunner_idleClock, "f").arm(); + else + __classPrivateFieldGet2(this, _SessionToolRunner_idleClock, "f").disarm(); + }, _SessionToolRunner_ingestHistory = function _SessionToolRunner_ingestHistory2(ev, pending) { + if (ev.type === "agent.tool_use" || ev.type === "agent.custom_tool_use") { + __classPrivateFieldGet2(this, _SessionToolRunner_seen, "f").add(ev.id); + if (!__classPrivateFieldGet2(this, _SessionToolRunner_answered, "f").has(ev.id)) + pending.push(ev); + } else if (ev.type === "user.tool_result") { + __classPrivateFieldGet2(this, _SessionToolRunner_answered, "f").add(ev.tool_use_id); + } else if (ev.type === "user.custom_tool_result") { + __classPrivateFieldGet2(this, _SessionToolRunner_answered, "f").add(ev.custom_tool_use_id); + } else if (ev.type === "user.tool_confirmation") { + if (!__classPrivateFieldGet2(this, _SessionToolRunner_answered, "f").has(ev.tool_use_id)) + __classPrivateFieldGet2(this, _SessionToolRunner_confirmationVerdicts, "f").set(ev.tool_use_id, ev.result); + } + }, _SessionToolRunner_handleStreamEvent = /** Returns true when the runner should exit. */ + async function _SessionToolRunner_handleStreamEvent2(ev) { + __classPrivateFieldGet2(this, _SessionToolRunner_idleClock, "f").noteEvent(ev); + switch (ev.type) { + case "agent.tool_use": + case "agent.custom_tool_use": + if (!__classPrivateFieldGet2(this, _SessionToolRunner_seen, "f").has(ev.id)) { + __classPrivateFieldGet2(this, _SessionToolRunner_seen, "f").add(ev.id); + await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_routeToolEvent).call(this, ev); + } + return false; + case "user.tool_confirmation": + await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_noteConfirmation).call(this, ev); + return false; + case "user.tool_result": + __classPrivateFieldGet2(this, _SessionToolRunner_answered, "f").add(ev.tool_use_id); + return false; + case "user.custom_tool_result": + __classPrivateFieldGet2(this, _SessionToolRunner_answered, "f").add(ev.custom_tool_use_id); + return false; + case "session.status_terminated": + case "session.deleted": + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").info("session terminated", { + component: "session-tool-runner", + session_id: this.sessionId + }); + __classPrivateFieldGet2(this, _SessionToolRunner_controller, "f").abort(); + return true; + default: + return false; + } + }, _SessionToolRunner_routeToolEvent = // ===== confirmation gating (always_ask tools) ===== + /** + * Dispatch `ev`, honoring its evaluated permission. A call the server gated + * (`evaluated_permission == "ask"`) is held until its `user.tool_confirmation` + * arrives. Fails closed: only an explicit `allow` verdict releases a gated + * call; a server-side `deny` overrides any recorded verdict; an unrecognized + * permission is held like `ask` and an unrecognized verdict is denied. + */ + async function _SessionToolRunner_routeToolEvent2(ev) { + const permission = ev.evaluated_permission; + const verdict = permission === "deny" ? "deny" : __classPrivateFieldGet2(this, _SessionToolRunner_confirmationVerdicts, "f").get(ev.id); + if (verdict === void 0) { + if (permission === void 0 || permission === "allow") { + await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_execute).call(this, ev, void 0); + } else if (!__classPrivateFieldGet2(this, _SessionToolRunner_awaitingConfirmation, "f").has(ev.id)) { + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").info("tool call awaiting confirmation; holding", { + component: "session-tool-runner", + session_id: this.sessionId, + tool: ev.name, + tool_use_id: ev.id + }); + __classPrivateFieldGet2(this, _SessionToolRunner_awaitingConfirmation, "f").set(ev.id, ev); + __classPrivateFieldGet2(this, _SessionToolRunner_idleClock, "f").block(ev.id); + } + return; + } + await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_applyVerdict).call(this, ev, verdict); + }, _SessionToolRunner_noteConfirmation = /** Record an allow/deny verdict and release the held call it gates, if any. */ + async function _SessionToolRunner_noteConfirmation2(ev) { + __classPrivateFieldGet2(this, _SessionToolRunner_confirmationVerdicts, "f").set(ev.tool_use_id, ev.result); + const held = __classPrivateFieldGet2(this, _SessionToolRunner_awaitingConfirmation, "f").get(ev.tool_use_id); + if (held === void 0) + return; + await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_applyVerdict).call(this, held, ev.result); + }, _SessionToolRunner_applyVerdict = /** + * Dispatch or resolve a gated call according to its verdict. + * + * The idle-clock blocker accounting lives here: a denial retires the held + * call's blocker, while an allow keeps one on the call — taking it now if the + * verdict was already known when the call was routed, so it was never held — + * until `#execute` has finished with it. The countdown must not run over + * gated work that is still in flight. + */ + async function _SessionToolRunner_applyVerdict2(ev, verdict) { + const wasHeld = __classPrivateFieldGet2(this, _SessionToolRunner_awaitingConfirmation, "f").delete(ev.id); + if (verdict === "allow") { + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").info("tool call confirmed", { + component: "session-tool-runner", + session_id: this.sessionId, + tool: ev.name, + tool_use_id: ev.id + }); + if (!wasHeld) + __classPrivateFieldGet2(this, _SessionToolRunner_idleClock, "f").block(ev.id); + try { + await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_execute).call(this, ev, "allow"); + } finally { + __classPrivateFieldGet2(this, _SessionToolRunner_idleClock, "f").unblock(ev.id); + } + return; + } + if (wasHeld) + __classPrivateFieldGet2(this, _SessionToolRunner_idleClock, "f").unblock(ev.id); + __classPrivateFieldGet2(this, _SessionToolRunner_answered, "f").add(ev.id); + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").info("tool call denied; not executing", { + component: "session-tool-runner", + session_id: this.sessionId, + tool: ev.name, + tool_use_id: ev.id + }); + __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_surfaceCall).call(this, { + event: ev, + toolUseId: ev.id, + name: ev.name, + isError: false, + posted: false, + confirmation: "deny" + }); + }, _SessionToolRunner_surfaceCall = function _SessionToolRunner_surfaceCall2(call) { + __classPrivateFieldGet2(this, _SessionToolRunner_results, "f").push(call); + }, _SessionToolRunner_execute = // ===== tool execution ===== + async function _SessionToolRunner_execute2(ev, confirmation) { + var _a6, _b; + if (__classPrivateFieldGet2(this, _SessionToolRunner_answered, "f").has(ev.id)) + return; + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").info("executing tool", { + component: "session-tool-runner", + session_id: this.sessionId, + tool: ev.name, + tool_use_id: ev.id + }); + __classPrivateFieldSet2(this, _SessionToolRunner_inFlightCount, (_a6 = __classPrivateFieldGet2(this, _SessionToolRunner_inFlightCount, "f"), _a6++, _a6), "f"); + try { + const tool = __classPrivateFieldGet2(this, _SessionToolRunner_toolByName, "f").get(ev.name); + if (!tool) { + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").info("tool not owned by this runner; leaving the tool_use_id pending for its owner", { + component: "session-tool-runner", + session_id: this.sessionId, + tool: ev.name, + tool_use_id: ev.id + }); + __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_surfaceCall).call(this, { + event: ev, + toolUseId: ev.id, + name: ev.name, + isError: false, + posted: false, + confirmation + }); + return; + } + let content; + let isError; + const toolCtrl = new AbortController(); + const detachTool = linkAbort(__classPrivateFieldGet2(this, _SessionToolRunner_controller, "f").signal, toolCtrl); + const timer = setTimeout(() => toolCtrl.abort(), TOOL_TIMEOUT_MS); + try { + const outcome = await runRunnableTool(tool, ev.input, { + toolUse: ev, + toolUseBlock: ev, + signal: toolCtrl.signal + }); + content = outcome.content; + isError = outcome.isError; + } finally { + clearTimeout(timer); + detachTool(); + } + const result = buildResultEvent(ev, isError, toSessionContent(content)); + const posted = await __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_sendResult).call(this, result, ev.id); + __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_surfaceCall).call(this, { + event: ev, + result, + toolUseId: ev.id, + name: ev.name, + isError, + posted, + confirmation + }); + } finally { + __classPrivateFieldSet2(this, _SessionToolRunner_inFlightCount, (_b = __classPrivateFieldGet2(this, _SessionToolRunner_inFlightCount, "f"), _b--, _b), "f"); + if (__classPrivateFieldGet2(this, _SessionToolRunner_inFlightCount, "f") === 0) + __classPrivateFieldGet2(this, _SessionToolRunner_onIdle, "f")?.call(this); + } + }, _SessionToolRunner_sendResult = async function _SessionToolRunner_sendResult2(result, toolUseId) { + const ctrl = __classPrivateFieldGet2(this, _SessionToolRunner_controller, "f"); + const start = Date.now(); + let lastErr; + let attempt = 0; + while (true) { + attempt++; + ctrl.signal.throwIfAborted(); + try { + await this.client.beta.sessions.events.send(this.sessionId, { events: [result] }, __classPrivateFieldGet2(this, _SessionToolRunner_instances, "m", _SessionToolRunner_requestOptions).call(this)); + __classPrivateFieldGet2(this, _SessionToolRunner_answered, "f").add(toolUseId); + return true; + } catch (e) { + lastErr = e; + if (isFatal4xx(e)) + break; + const remainingMs = __classPrivateFieldGet2(this, _SessionToolRunner_sendRetryWindowMs, "f") - (Date.now() - start); + if (remainingMs <= 0) + break; + const waitMs = Math.min(applyJitter(backoff(attempt - 1, SEND_BACKOFF_START_MS, SEND_BACKOFF_CAP_MS)), remainingMs); + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").warn("tool result send failed; retrying", { + tool_use_id: toolUseId, + attempt, + backoff_ms: waitMs, + error: String(e) + }); + await sleep2(waitMs, ctrl.signal); + } + } + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").error("failed to send tool result", { + tool_use_id: toolUseId, + attempts: attempt, + error: String(lastErr) + }); + return false; + }, _SessionToolRunner_drain = /** Wait (bounded) for in-flight tool executions to finish during teardown. */ + async function _SessionToolRunner_drain2() { + if (__classPrivateFieldGet2(this, _SessionToolRunner_inFlightCount, "f") === 0) + return; + await Promise.race([new Promise((r) => __classPrivateFieldSet2(this, _SessionToolRunner_onIdle, r, "f")), sleep2(DRAIN_TIMEOUT_MS)]); + __classPrivateFieldSet2(this, _SessionToolRunner_onIdle, null, "f"); + if (__classPrivateFieldGet2(this, _SessionToolRunner_inFlightCount, "f") > 0) { + __classPrivateFieldGet2(this, _SessionToolRunner_logger, "f").warn("drain timeout exceeded"); + } + }; + return SessionToolRunner2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/tools/agent-toolset/sync-interval.mjs +function checkMemorySyncInterval(ms, option) { + if (!(ms >= MIN_MEMORY_SYNC_INTERVAL_MS)) { + throw new AnthropicError(`${option} must be at least ${MIN_MEMORY_SYNC_INTERVAL_MS}ms (got ${ms}); to run without memory sync, pass \`memorySyncIntervalMs: null\` to the worker instead`); + } +} +var DEFAULT_MEMORY_SYNC_INTERVAL_MS, MIN_MEMORY_SYNC_INTERVAL_MS; +var init_sync_interval = __esm({ + "node_modules/@anthropic-ai/sdk/tools/agent-toolset/sync-interval.mjs"() { + init_error3(); + DEFAULT_MEMORY_SYNC_INTERVAL_MS = 15e3; + MIN_MEMORY_SYNC_INTERVAL_MS = 5e3; + } +}); + +// node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.mjs +var node_browser_exports2 = {}; +__export(node_browser_exports2, { + BashSession: () => BashSession, + BashTimeoutError: () => BashTimeoutError, + DEFAULT_MEMORY_SYNC_INTERVAL_MS: () => DEFAULT_MEMORY_SYNC_INTERVAL_MS, + MARKER_PATH: () => MARKER_PATH, + MEMORY_FLUSH_TIMEOUT_MS: () => MEMORY_FLUSH_TIMEOUT_MS, + MIN_MEMORY_SYNC_INTERVAL_MS: () => MIN_MEMORY_SYNC_INTERVAL_MS, + SessionMemoryError: () => SessionMemoryError, + SessionMemoryStores: () => SessionMemoryStores, + betaAgentToolset20260401: () => betaAgentToolset20260401, + betaBashTool: () => betaBashTool, + betaEditTool: () => betaEditTool, + betaGlobTool: () => betaGlobTool, + betaGrepTool: () => betaGrepTool, + betaReadTool: () => betaReadTool, + betaWriteTool: () => betaWriteTool, + extractSkillArchive: () => extractSkillArchive, + resolvePath: () => resolvePath, + setupSkills: () => setupSkills +}); +function nodeOnly(name) { + throw new AnthropicError(`${name} requires Node.js or a Node-compatible runtime`); +} +function setupSkills(_ctx) { + return nodeOnly("setupSkills"); +} +function extractSkillArchive(_resp, _dest) { + return nodeOnly("extractSkillArchive"); +} +function betaAgentToolset20260401(_ctx) { + return nodeOnly("betaAgentToolset20260401"); +} +function resolvePath(_ctx, _p) { + return nodeOnly("resolvePath"); +} +function betaBashTool(_ctx) { + return nodeOnly("betaBashTool"); +} +function betaReadTool(_ctx) { + return nodeOnly("betaReadTool"); +} +function betaWriteTool(_ctx) { + return nodeOnly("betaWriteTool"); +} +function betaEditTool(_ctx) { + return nodeOnly("betaEditTool"); +} +function betaGlobTool(_ctx) { + return nodeOnly("betaGlobTool"); +} +function betaGrepTool(_ctx) { + return nodeOnly("betaGrepTool"); +} +var MEMORY_FLUSH_TIMEOUT_MS, MARKER_PATH, SessionMemoryError, SessionMemoryStores, BashTimeoutError, BashSession; +var init_node_browser2 = __esm({ + "node_modules/@anthropic-ai/sdk/tools/agent-toolset/node.browser.mjs"() { + init_error3(); + init_sync_interval(); + MEMORY_FLUSH_TIMEOUT_MS = 3e4; + MARKER_PATH = ".anthropic-memory-store"; + SessionMemoryError = class extends AnthropicError { + constructor(message, cause) { + super(message); + this.name = "SessionMemoryError"; + if (cause !== void 0) + this.cause = cause; + } + }; + SessionMemoryStores = class { + constructor(_client, _opts) { + nodeOnly("SessionMemoryStores"); + } + get roots() { + return nodeOnly("SessionMemoryStores"); + } + get readOnlyRoots() { + return nodeOnly("SessionMemoryStores"); + } + download(_session) { + return nodeOnly("SessionMemoryStores"); + } + finish() { + return nodeOnly("SessionMemoryStores"); + } + /** @internal */ + syncAll(_final) { + return nodeOnly("SessionMemoryStores"); + } + syncIfDue() { + return nodeOnly("SessionMemoryStores"); + } + flushWrites(_signal) { + return nodeOnly("SessionMemoryStores"); + } + dispose() { + return nodeOnly("SessionMemoryStores"); + } + }; + BashTimeoutError = class extends AnthropicError { + constructor(timeoutMs) { + super(`bash command timed out after ${timeoutMs}ms`); + this.name = "BashTimeoutError"; + this.timeoutMs = timeoutMs; + } + }; + BashSession = class { + constructor(_dir, _env) { + nodeOnly("BashSession"); + } + get closed() { + return nodeOnly("BashSession"); + } + exec(_command, _opts = {}) { + return nodeOnly("BashSession"); + } + close() { + nodeOnly("BashSession"); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/lib/environments/worker.mjs +function hasMemoryStore(session) { + return session.resources.some((r) => r.type === "memory_store"); +} +function sessionsTokenFromSecret(secret) { + if (!secret) + return null; + let parsed; + try { + const normalized = secret.replace(/-/g, "+").replace(/_/g, "/"); + const padded = normalized.padEnd(Math.ceil(normalized.length / 4) * 4, "="); + parsed = JSON.parse(decodeUTF82(fromBase642(padded))); + } catch { + return null; + } + if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) + return null; + const token = parsed.sessions_token; + return typeof token === "string" && token !== "" ? token : null; +} +async function withTimeout(p, ms) { + let timer; + try { + return await Promise.race([ + p.then(() => false, () => false), + new Promise((resolve2) => { + timer = setTimeout(() => resolve2(true), ms); + }) + ]); + } finally { + if (timer !== void 0) + clearTimeout(timer); + } +} +async function forceStop(client, work, log, requestOptions) { + try { + await client.beta.environments.work.stop( + work.id, + { environment_id: work.environment_id, force: true }, + // Caller's headers pass through; the helper-tag header is on the scoped + // sub-client's default_headers via copyClientForHelper, so no per-call + // re-stamping needed. + { ...requestOptions, headers: buildHeaders2([requestOptions?.headers]) } + ); + } catch (e) { + if (!isStatus(e, 409)) { + log.error("force-stop on exit failed", { work_id: work.id, error: String(e) }); + } + } +} +function serverLeaseState(e) { + let node = e instanceof APIError2 ? e.error : void 0; + for (const key of ["error", "details", "current_state"]) { + if (!isObj2(node)) + return {}; + node = node[key]; + } + return isObj2(node) ? node : {}; +} +async function heartbeatLoop(client, work, lease, logger, requestOptions, onLeaseTtl) { + let intervalMs = HEARTBEAT_DEFAULT_MS; + let ttlMs = HEARTBEAT_TTL_DEFAULT_MS; + let lastSuccessMs = Date.now(); + let last = NO_HEARTBEAT_SENTINEL; + const beat = async () => { + const beatCtrl = new AbortController(); + const detach = linkAbort(lease.signal, beatCtrl); + const cutoff = setTimeout(() => beatCtrl.abort(), intervalMs); + try { + const resp = await client.beta.environments.work.heartbeat(work.id, { environment_id: work.environment_id, expected_last_heartbeat: last }, { ...requestOptions, headers: buildHeaders2([requestOptions?.headers]), signal: beatCtrl.signal }); + lastSuccessMs = Date.now(); + last = resp.last_heartbeat; + if (resp.ttl_seconds > 0) { + ttlMs = resp.ttl_seconds * 1e3; + intervalMs = Math.max(1e3, Math.min(ttlMs / 2, HEARTBEAT_DEFAULT_MS)); + onLeaseTtl?.(ttlMs); + } + if (resp.state === "stopping" || resp.state === "stopped") { + logger.info("heartbeat signals shutdown", { work_id: work.id, state: resp.state }); + lease.finish("control_plane_stop"); + } + if (!resp.lease_extended) { + logger.warn("lease not extended, shutting down", { work_id: work.id }); + lease.finish("control_plane_stop"); + } + } catch (e) { + lease.signal.throwIfAborted(); + if (isStatus(e, 412)) { + const server = serverLeaseState(e); + logger.error("lease lost: heartbeat precondition failed", { + work_id: work.id, + server_state: server["state"], + server_ttl_seconds: server["ttl_seconds"], + server_last_heartbeat: server["last_heartbeat"] + }); + lease.finish("lease_lost"); + return; + } + if (isFatal4xx(e)) { + logger.error("permanent heartbeat failure", { work_id: work.id, error: String(e) }); + lease.finish("heartbeat_rejected"); + throw e; + } + if (Date.now() - lastSuccessMs > ttlMs) { + logger.error("lease assumed lost: no successful heartbeat in ttl", { + work_id: work.id, + ttl_ms: ttlMs, + error: String(e) + }); + lease.finish("assumed_lost"); + return; + } + logger.warn("transient heartbeat failure", { work_id: work.id, error: String(e) }); + } finally { + clearTimeout(cutoff); + detach(); + } + }; + await beat(); + while (!lease.signal.aborted) { + await sleep2(intervalMs, lease.signal); + lease.signal.throwIfAborted(); + await beat(); + } +} +var _EnvironmentWorker_instances, _EnvironmentWorker_signal, _EnvironmentWorker_handleItem, _Lease_ctrl, _Lease_endReason, HEARTBEAT_DEFAULT_MS, HEARTBEAT_TTL_DEFAULT_MS, NO_HEARTBEAT_SENTINEL, EnvironmentWorker, Lease; +var init_worker = __esm({ + "node_modules/@anthropic-ai/sdk/lib/environments/worker.mjs"() { + init_tslib2(); + init_error3(); + init_log2(); + init_base642(); + init_bytes2(); + init_env2(); + init_sleep2(); + init_backoff(); + init_abort3(); + init_values2(); + init_headers3(); + init_SessionToolRunner(); + init_poller(); + init_helper_client(); + init_sync_interval(); + HEARTBEAT_DEFAULT_MS = 3e4; + HEARTBEAT_TTL_DEFAULT_MS = 9e4; + NO_HEARTBEAT_SENTINEL = "NO_HEARTBEAT"; + EnvironmentWorker = /* @__PURE__ */ (() => { + class EnvironmentWorker2 { + constructor(opts) { + _EnvironmentWorker_instances.add(this); + _EnvironmentWorker_signal.set(this, void 0); + if (opts.unrestrictedPaths !== void 0) { + throw new AnthropicError("The `unrestrictedPaths` option you passed to EnvironmentWorker (or client.beta.environments.work.worker()) is no longer supported. The worker's file tools (read, write, edit, glob, grep) are now always confined to `workdir` plus the session's memory folders. Remove `unrestrictedPaths` from your options; to let the file tools reach any other directory, add it to `AgentToolContext.allowedRoots` from a `tools` factory."); + } + this.client = opts.client; + this.environmentId = opts.environmentId; + this.environmentKey = opts.environmentKey; + this.tools = opts.tools; + this.workdir = opts.workdir ?? process.cwd(); + this.maxFileBytes = opts.maxFileBytes; + this.maxIdleMs = opts.maxIdleMs; + if (opts.memorySyncIntervalMs != null) { + checkMemorySyncInterval(opts.memorySyncIntervalMs, "memorySyncIntervalMs"); + } + this.memorySyncIntervalMs = opts.memorySyncIntervalMs; + this.memorySyncDeletions = opts.memorySyncDeletions ?? "enabled"; + this.workerId = opts.workerId; + this.requestOptions = opts.requestOptions; + __classPrivateFieldSet2(this, _EnvironmentWorker_signal, opts.signal, "f"); + } + /** + * Poll the environment and service each claimed session until the supplied + * signal (or the one passed to the constructor) aborts. Throws if + * `environmentId` / `environmentKey` were not provided to the constructor. + */ + async run(signal) { + const { environmentId, environmentKey } = this; + if (environmentId === void 0 || environmentKey === void 0) { + throw new AnthropicError("EnvironmentWorker.run: environmentId and environmentKey are required to poll for work"); + } + const externalSignal = signal ?? __classPrivateFieldGet2(this, _EnvironmentWorker_signal, "f"); + const poller = new WorkPoller({ + client: this.client, + environmentId, + environmentKey, + ...this.workerId !== void 0 ? { workerId: this.workerId } : {}, + ...externalSignal ? { signal: externalSignal } : {}, + ...this.requestOptions !== void 0 ? { requestOptions: this.requestOptions } : {}, + // The per-item handler stops or releases every work item on exit; let it + // be the single owner of `work.stop` rather than double-posting from the + // poller. + autoStop: false + }); + for await (const work of poller) { + try { + await __classPrivateFieldGet2(this, _EnvironmentWorker_instances, "m", _EnvironmentWorker_handleItem).call(this, work, environmentKey, poller.signal); + } catch (e) { + if (poller.signal?.aborted) + throw e; + loggerFor2(this.client).error("work item failed", { work_id: work.id, error: String(e) }); + } + } + } + /** + * Service a single, already-claimed work item without the poll loop: build the + * per-session {@link AgentToolContext} (workdir from this worker's options), + * download the session agent's skills (`setupSkills`), run a + * {@link SessionToolRunner} for the session while heartbeating the work-item + * lease, and force-stop the work item on exit (whether the runner finishes + * normally, throws, or the control plane signals shutdown). The one + * exception is a lost lease: the item then belongs to the queue or another + * worker and is left alone. + * + * Use this when something else does the claiming — e.g. a `worker poll + * --on-work` script that hands an already-claimed item to a fresh process. The + * work id / environment id / session id each fall back to `ANTHROPIC_WORK_ID` / + * `ANTHROPIC_ENVIRONMENT_ID` / `ANTHROPIC_SESSION_ID` (the env vars that + * command sets) when not passed; the environment key resolves from this + * option, then the worker's own `environmentKey`, then + * `ANTHROPIC_ENVIRONMENT_KEY`, and is needed only when the work item's + * `secret` yields no sessions token — a host that receives only the + * per-item secret runs without ever holding the key. With no arguments + * inside that command it just works. Throws a clear error naming the first + * required value still missing after resolution, and — rather than ever + * running unauthenticated — when neither a sessions token nor an + * environment key resolved. Throws `SessionMemoryError` when the + * session has memory stores attached but they cannot be mounted — the work + * item carried no sessions token (unless `memorySyncIntervalMs` turned + * memory off), or a store failed to download. + * + * `workSecret` is the work item's per-item `secret` payload from the poll + * response, falling back to `ANTHROPIC_WORK_SECRET`; unlike the others it is + * optional — when present, the sessions token extracted from it is preferred + * as the Bearer credential for this item's heartbeat / force-stop / session + * calls; when absent (or undecodable) those calls use the environment key. + */ + async handleItem(opts) { + const workId = opts?.workId ?? readEnv2("ANTHROPIC_WORK_ID"); + const environmentId = opts?.environmentId ?? readEnv2("ANTHROPIC_ENVIRONMENT_ID"); + const sessionId = opts?.sessionId ?? readEnv2("ANTHROPIC_SESSION_ID"); + const environmentKey = (opts?.environmentKey ?? this.environmentKey ?? readEnv2("ANTHROPIC_ENVIRONMENT_KEY")) || void 0; + const workSecret = opts?.workSecret || readEnv2("ANTHROPIC_WORK_SECRET") || null; + if (!workId) { + throw new AnthropicError("handleItem: workId is required \u2014 pass it or set ANTHROPIC_WORK_ID"); + } + if (!environmentId) { + throw new AnthropicError("handleItem: environmentId is required \u2014 pass it or set ANTHROPIC_ENVIRONMENT_ID"); + } + if (!sessionId) { + throw new AnthropicError("handleItem: sessionId is required \u2014 pass it or set ANTHROPIC_SESSION_ID"); + } + if (!environmentKey && !workSecret) { + throw new AnthropicError("handleItem: environmentKey is required when there is no work secret \u2014 pass it, construct the worker with it, or set ANTHROPIC_ENVIRONMENT_KEY"); + } + const work = { + id: workId, + environment_id: environmentId, + secret: workSecret, + data: { type: "session", id: sessionId } + }; + await __classPrivateFieldGet2(this, _EnvironmentWorker_instances, "m", _EnvironmentWorker_handleItem).call(this, work, environmentKey, opts?.signal ?? __classPrivateFieldGet2(this, _EnvironmentWorker_signal, "f")); + } + } + _EnvironmentWorker_signal = /* @__PURE__ */ new WeakMap(), _EnvironmentWorker_instances = /* @__PURE__ */ new WeakSet(), _EnvironmentWorker_handleItem = /** + * The per-item body shared by {@link EnvironmentWorker.run}'s poll loop and + * {@link EnvironmentWorker.handleItem}: run a {@link SessionToolRunner} for the + * work item's session while heartbeating its lease, force-stopping on exit + * unless the lease was lost. Non-session work items are ignored. + * + * When the poll response carried a per-item `secret` (a short-lived payload + * scoped to this work item), the sessions token extracted from it is + * preferred over `environmentKey` as the Bearer credential for those + * per-item calls; a missing/undecodable secret falls back to + * `environmentKey` unchanged. + */ + async function _EnvironmentWorker_handleItem2(work, environmentKey, externalSignal) { + const log = loggerFor2(this.client); + const sessionsToken = sessionsTokenFromSecret(work.secret); + const itemCredential = sessionsToken ?? environmentKey; + if (itemCredential === void 0) { + throw new AnthropicError("handleItem: the work item carried a secret payload but no sessions token could be extracted, and there is no environment key to fall back to; the poller must issue a secret whose payload carries `sessions_token`, or provide the environment key (pass it, construct the worker with it, or set ANTHROPIC_ENVIRONMENT_KEY)"); + } + if (work.secret && sessionsToken === null) { + log.warn("work item carried a secret payload but no sessions token could be extracted; falling back to the environment key", { work_id: work.id }); + } + const sessionClient = copyClientForHelper(this.client, { + authToken: itemCredential, + helper: "environments-worker" + }); + const sessionId = work.data.id; + const ctrl = new AbortController(); + const detachExternal = linkAbort(externalSignal, ctrl); + const lease = new Lease(ctrl); + const agentToolset = await Promise.resolve().then(() => (init_node_browser2(), node_browser_exports2)); + let leaseTtlMs; + let runner; + const heartbeatPromise = heartbeatLoop(sessionClient, work, lease, log, this.requestOptions, (ttlMs) => { + leaseTtlMs = ttlMs; + runner?._setSendRetryWindow(ttlMs); + }).catch((e) => { + if (!ctrl.signal.aborted) + log.error("heartbeat loop failed", { work_id: work.id, error: String(e) }); + ctrl.abort(); + }); + let cleanupSkills = async () => { + }; + let stores; + let cleanEnd = false; + try { + if (work.data.type !== "session") { + log.debug("skipping non-session work item", { work_id: work.id, type: work.data.type }); + return; + } + const session = await sessionClient.beta.sessions.retrieve(sessionId); + if (sessionsToken === null && this.memorySyncIntervalMs !== null && hasMemoryStore(session)) { + throw new agentToolset.SessionMemoryError(`cannot mount the session's memories: the work item carried no sessions token (work_id=${work.id}, session_id=${sessionId}); the memory endpoints reject the environment key, so the poller must issue a per-item \`secret\` carrying \`sessions_token\`, or set \`memorySyncIntervalMs: null\` to run without memory`); + } + const ctx = { + workdir: this.workdir, + // The scoped sub-client, not the parent: the skill download + // `setupSkills` performs for this session rides the same per-item + // credential as every other per-item call. + client: sessionClient, + session, + ...this.maxFileBytes !== void 0 ? { maxFileBytes: this.maxFileBytes } : {} + }; + try { + cleanupSkills = await agentToolset.setupSkills(ctx); + } catch (e) { + log.warn("skill setup failed", { session_id: sessionId, work_id: work.id, error: String(e) }); + } + if (sessionsToken !== null && this.memorySyncIntervalMs !== null) { + stores = new agentToolset.SessionMemoryStores(sessionClient, { + workdir: this.workdir, + ...this.memorySyncIntervalMs !== void 0 ? { syncIntervalMs: this.memorySyncIntervalMs } : {}, + syncDeletions: this.memorySyncDeletions + }); + await stores.download(session); + ctx.allowedRoots = stores.roots; + ctx.readOnlyRoots = stores.readOnlyRoots; + } else { + log.debug("memory stores disabled for this item", { work_id: work.id }); + } + const tools = typeof this.tools === "function" ? this.tools(ctx) : this.tools ?? agentToolset.betaAgentToolset20260401(ctx); + runner = new SessionToolRunner(sessionId, { + client: sessionClient, + tools, + ...this.maxIdleMs !== void 0 ? { maxIdleMs: this.maxIdleMs } : {}, + ...this.requestOptions !== void 0 ? { requestOptions: this.requestOptions } : {}, + signal: ctrl.signal + }); + if (leaseTtlMs !== void 0) + runner._setSendRetryWindow(leaseTtlMs); + for await (const _ of runner) { + if (stores) + await stores.syncIfDue(); + } + cleanEnd = !ctrl.signal.aborted; + } finally { + try { + await cleanupSkills().catch((e) => { + log.warn("skill cleanup failed", { session_id: sessionId, work_id: work.id, error: String(e) }); + }); + } finally { + if (stores) { + const boundMs = agentToolset.MEMORY_FLUSH_TIMEOUT_MS; + if (cleanEnd) { + const finishCutOff = await withTimeout(stores.finish(), boundMs); + if (finishCutOff) { + log.warn(`final memory sync cut off after ${boundMs}ms; the flush that follows still uploads changed files`, { session_id: sessionId, work_id: work.id }); + } + } + const flushBound = new AbortController(); + const flushCutOff = await withTimeout(stores.flushWrites(flushBound.signal), boundMs); + if (flushCutOff) { + flushBound.abort(); + log.warn(`memory flush cut off after ${boundMs}ms; changed files it had not uploaded yet are not saved`, { session_id: sessionId, work_id: work.id }); + } + await stores.dispose().catch((e) => { + log.warn("memory store cleanup failed", { + session_id: sessionId, + work_id: work.id, + error: String(e) + }); + }); + } + } + lease.finish("runner_done"); + detachExternal(); + await heartbeatPromise; + if (lease.lost) { + log.info("lease lost; released without stopping it", { session_id: sessionId, work_id: work.id }); + } else { + await forceStop(sessionClient, work, log, this.requestOptions); + } + } + }; + return EnvironmentWorker2; + })(); + Lease = /* @__PURE__ */ (() => { + class Lease2 { + constructor(ctrl) { + _Lease_ctrl.set(this, void 0); + _Lease_endReason.set(this, void 0); + __classPrivateFieldSet2(this, _Lease_ctrl, ctrl, "f"); + } + get signal() { + return __classPrivateFieldGet2(this, _Lease_ctrl, "f").signal; + } + finish(reason) { + __classPrivateFieldSet2(this, _Lease_endReason, __classPrivateFieldGet2(this, _Lease_endReason, "f") ?? reason, "f"); + __classPrivateFieldGet2(this, _Lease_ctrl, "f").abort(); + } + /** True once the item belongs to the queue or another worker. */ + get lost() { + return __classPrivateFieldGet2(this, _Lease_endReason, "f") === "lease_lost" || __classPrivateFieldGet2(this, _Lease_endReason, "f") === "assumed_lost"; + } + } + _Lease_ctrl = /* @__PURE__ */ new WeakMap(), _Lease_endReason = /* @__PURE__ */ new WeakMap(); + return Lease2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/environments/work.mjs +var Work; +var init_work = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/environments/work.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + init_poller(); + init_worker(); + Work = /* @__PURE__ */ (() => { + class Work2 extends APIResource2 { + /** + * Note: these endpoints are called automatically by the pre-built environment + * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted + * sandbox environments. They are included here as a reference; you do not need to + * invoke them directly. + * + * Retrieve detailed information about a specific work item. + * + * @example + * ```ts + * const betaSelfHostedWork = + * await client.beta.environments.work.retrieve('work_id', { + * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * }); + * ``` + */ + retrieve(workID, params, options) { + const { environment_id, betas, workspace_id } = params; + return this._client.get(path3`/v1/environments/${environment_id}/work/${workID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Note: these endpoints are called automatically by the pre-built environment + * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted + * sandbox environments. They are included here as a reference; you do not need to + * invoke them directly. + * + * Update work item metadata with merge semantics. + * + * @example + * ```ts + * const betaSelfHostedWork = + * await client.beta.environments.work.update('work_id', { + * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * metadata: { foo: 'string' }, + * }); + * ``` + */ + update(workID, params, options) { + const { environment_id, betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/environments/${environment_id}/work/${workID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Note: these endpoints are called automatically by the pre-built environment + * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted + * sandbox environments. They are included here as a reference; you do not need to + * invoke them directly. + * + * List work items in an environment. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaSelfHostedWork of client.beta.environments.work.list( + * 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * )) { + * // ... + * } + * ``` + */ + list(environmentID, params = {}, options) { + const { betas, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/environments/${environmentID}/work?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString() }, + options?.headers + ]) + }); + } + /** + * Note: these endpoints are called automatically by the pre-built environment + * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted + * sandbox environments. They are included here as a reference; you do not need to + * invoke them directly. + * + * Acknowledge receipt of a work item, transitioning it from 'queued' to 'starting' + * and removing it from the queue. + * + * @example + * ```ts + * const betaSelfHostedWork = + * await client.beta.environments.work.ack('work_id', { + * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * }); + * ``` + */ + ack(workID, params, options) { + const { environment_id, betas } = params; + return this._client.post(path3`/v1/environments/${environment_id}/work/${workID}/ack?beta=true`, { + ...options, + headers: buildHeaders2([ + { "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString() }, + options?.headers + ]) + }); + } + /** + * Note: these endpoints are called automatically by the pre-built environment + * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted + * sandbox environments. They are included here as a reference; you do not need to + * invoke them directly. + * + * Record a heartbeat for a work item to maintain the lease. + * + * @example + * ```ts + * const betaSelfHostedWorkHeartbeatResponse = + * await client.beta.environments.work.heartbeat('work_id', { + * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * }); + * ``` + */ + heartbeat(workID, params, options) { + const { environment_id, desired_ttl_seconds, expected_last_heartbeat, betas } = params; + return this._client.post(path3`/v1/environments/${environment_id}/work/${workID}/heartbeat?beta=true`, { + query: { desired_ttl_seconds, expected_last_heartbeat }, + ...options, + headers: buildHeaders2([ + { "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString() }, + options?.headers + ]) + }); + } + /** + * Note: these endpoints are called automatically by the pre-built environment + * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted + * sandbox environments. They are included here as a reference; you do not need to + * invoke them directly. + * + * Long poll for work items in the queue. + * + * @example + * ```ts + * const betaSelfHostedWork = + * await client.beta.environments.work.poll( + * 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * ); + * ``` + */ + poll(environmentID, params = {}, options) { + const { betas, "Anthropic-Worker-ID": anthropicWorkerID, ...query } = params ?? {}; + return this._client.get(path3`/v1/environments/${environmentID}/work/poll?beta=true`, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...anthropicWorkerID != null ? { "Anthropic-Worker-ID": anthropicWorkerID } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Get statistics about the work queue for an environment. + * + * @example + * ```ts + * const betaSelfHostedWorkQueueStats = + * await client.beta.environments.work.stats( + * 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * ); + * ``` + */ + stats(environmentID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/environments/${environmentID}/work/stats?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Note: these endpoints are called automatically by the pre-built environment + * worker provided in the SDKs and CLI, for orchestrating sessions with self-hosted + * sandbox environments. They are included here as a reference; you do not need to + * invoke them directly. + * + * Stop a work item, initiating graceful or forced shutdown. + * + * @example + * ```ts + * const betaSelfHostedWork = + * await client.beta.environments.work.stop('work_id', { + * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * }); + * ``` + */ + stop(workID, params, options) { + const { environment_id, betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/environments/${environment_id}/work/${workID}/stop?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Continuously claim work from a self-hosted environment, ack each item, + * and yield it. Posts `stop` automatically when the consumer's loop body + * returns or when iteration ends. + * + * @example + * ```ts + * for await (const work of client.beta.environments.work.poller({ + * environmentId, + * environmentKey, + * })) { + * if (work.data.type !== 'session') continue; + * // ...service the work... + * } + * ``` + */ + poller(opts) { + return new WorkPoller({ ...opts, client: this._client }); + } + worker(opts) { + return new EnvironmentWorker({ ...opts, client: this._client }); + } + } + Work2.WorkPoller = WorkPoller; + Work2.EnvironmentWorker = EnvironmentWorker; + return Work2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/environments/environments.mjs +var Environments2; +var init_environments2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/environments/environments.mjs"() { + init_resource2(); + init_work(); + init_work(); + init_pagination2(); + init_headers3(); + init_path2(); + Environments2 = /* @__PURE__ */ (() => { + class Environments3 extends APIResource2 { + constructor() { + super(...arguments); + this.work = new Work(this._client); + } + /** + * Create a new environment with the specified configuration. + * + * @example + * ```ts + * const betaEnvironment = + * await client.beta.environments.create({ + * name: 'python-data-analysis', + * }); + * ``` + */ + create(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/environments?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Retrieve a specific environment by ID. + * + * @example + * ```ts + * const betaEnvironment = + * await client.beta.environments.retrieve( + * 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * ); + * ``` + */ + retrieve(environmentID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/environments/${environmentID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Update an existing environment's configuration. + * + * @example + * ```ts + * const betaEnvironment = + * await client.beta.environments.update( + * 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * ); + * ``` + */ + update(environmentID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/environments/${environmentID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List environments with pagination support. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaEnvironment of client.beta.environments.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/environments?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Delete an environment by ID. Returns a confirmation of the deletion. + * + * @example + * ```ts + * const betaEnvironmentDeleteResponse = + * await client.beta.environments.delete( + * 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * ); + * ``` + */ + delete(environmentID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.delete(path3`/v1/environments/${environmentID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Archive an environment by ID. Archived environments cannot be used to create new + * sessions. + * + * @example + * ```ts + * const betaEnvironment = + * await client.beta.environments.archive( + * 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * ); + * ``` + */ + archive(environmentID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/environments/${environmentID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + } + Environments3.Work = Work; + return Environments3; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memories.mjs +var Memories; +var init_memories = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memories.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Memories = class extends APIResource2 { + /** + * Create a memory + * + * @example + * ```ts + * const betaManagedAgentsMemory = + * await client.beta.memoryStores.memories.create( + * 'memory_store_id', + * { content: 'content', path: 'xx' }, + * ); + * ``` + */ + create(memoryStoreID, params, options) { + const { view: view2, betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/memory_stores/${memoryStoreID}/memories?beta=true`, { + query: { view: view2 }, + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Retrieve a memory + * + * @example + * ```ts + * const betaManagedAgentsMemory = + * await client.beta.memoryStores.memories.retrieve( + * 'memory_id', + * { memory_store_id: 'memory_store_id' }, + * ); + * ``` + */ + retrieve(memoryID, params, options) { + const { memory_store_id, betas, workspace_id, ...query } = params; + return this._client.get(path3`/v1/memory_stores/${memory_store_id}/memories/${memoryID}?beta=true`, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Update a memory + * + * @example + * ```ts + * const betaManagedAgentsMemory = + * await client.beta.memoryStores.memories.update( + * 'memory_id', + * { memory_store_id: 'memory_store_id' }, + * ); + * ``` + */ + update(memoryID, params, options) { + const { memory_store_id, view: view2, betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/memory_stores/${memory_store_id}/memories/${memoryID}?beta=true`, { + query: { view: view2 }, + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List memories + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsMemoryListItem of client.beta.memoryStores.memories.list( + * 'memory_store_id', + * )) { + * // ... + * } + * ``` + */ + list(memoryStoreID, params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/memory_stores/${memoryStoreID}/memories?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Delete a memory + * + * @example + * ```ts + * const betaManagedAgentsDeletedMemory = + * await client.beta.memoryStores.memories.delete( + * 'memory_id', + * { memory_store_id: 'memory_store_id' }, + * ); + * ``` + */ + delete(memoryID, params, options) { + const { memory_store_id, expected_content_sha256, betas, workspace_id } = params; + return this._client.delete(path3`/v1/memory_stores/${memory_store_id}/memories/${memoryID}?beta=true`, { + query: { expected_content_sha256 }, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-versions.mjs +var MemoryVersions; +var init_memory_versions = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-versions.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + MemoryVersions = class extends APIResource2 { + /** + * Retrieve a memory version + * + * @example + * ```ts + * const betaManagedAgentsMemoryVersion = + * await client.beta.memoryStores.memoryVersions.retrieve( + * 'memory_version_id', + * { memory_store_id: 'memory_store_id' }, + * ); + * ``` + */ + retrieve(memoryVersionID, params, options) { + const { memory_store_id, betas, workspace_id, ...query } = params; + return this._client.get(path3`/v1/memory_stores/${memory_store_id}/memory_versions/${memoryVersionID}?beta=true`, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List memory versions + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsMemoryVersion of client.beta.memoryStores.memoryVersions.list( + * 'memory_store_id', + * )) { + * // ... + * } + * ``` + */ + list(memoryStoreID, params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/memory_stores/${memoryStoreID}/memory_versions?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Redact a memory version + * + * @example + * ```ts + * const betaManagedAgentsMemoryVersion = + * await client.beta.memoryStores.memoryVersions.redact( + * 'memory_version_id', + * { memory_store_id: 'memory_store_id' }, + * ); + * ``` + */ + redact(memoryVersionID, params, options) { + const { memory_store_id, betas, workspace_id } = params; + return this._client.post(path3`/v1/memory_stores/${memory_store_id}/memory_versions/${memoryVersionID}/redact?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-stores.mjs +var MemoryStores; +var init_memory_stores = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/memory-stores/memory-stores.mjs"() { + init_resource2(); + init_memories(); + init_memories(); + init_memory_versions(); + init_memory_versions(); + init_pagination2(); + init_headers3(); + init_path2(); + MemoryStores = /* @__PURE__ */ (() => { + class MemoryStores2 extends APIResource2 { + constructor() { + super(...arguments); + this.memories = new Memories(this._client); + this.memoryVersions = new MemoryVersions(this._client); + } + /** + * Create a memory store + * + * @example + * ```ts + * const betaManagedAgentsMemoryStore = + * await client.beta.memoryStores.create({ name: 'x' }); + * ``` + */ + create(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/memory_stores?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Retrieve a memory store + * + * @example + * ```ts + * const betaManagedAgentsMemoryStore = + * await client.beta.memoryStores.retrieve( + * 'memory_store_id', + * ); + * ``` + */ + retrieve(memoryStoreID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/memory_stores/${memoryStoreID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Update a memory store + * + * @example + * ```ts + * const betaManagedAgentsMemoryStore = + * await client.beta.memoryStores.update('memory_store_id'); + * ``` + */ + update(memoryStoreID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/memory_stores/${memoryStoreID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List memory stores + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsMemoryStore of client.beta.memoryStores.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/memory_stores?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Delete a memory store + * + * @example + * ```ts + * const betaManagedAgentsDeletedMemoryStore = + * await client.beta.memoryStores.delete('memory_store_id'); + * ``` + */ + delete(memoryStoreID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.delete(path3`/v1/memory_stores/${memoryStoreID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Archive a memory store + * + * @example + * ```ts + * const betaManagedAgentsMemoryStore = + * await client.beta.memoryStores.archive('memory_store_id'); + * ``` + */ + archive(memoryStoreID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/memory_stores/${memoryStoreID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "agent-memory-2026-07-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + } + MemoryStores2.Memories = Memories; + MemoryStores2.MemoryVersions = MemoryVersions; + return MemoryStores2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/error.mjs +var init_error4 = __esm({ + "node_modules/@anthropic-ai/sdk/error.mjs"() { + init_error3(); + } +}); + +// node_modules/@anthropic-ai/sdk/internal/decoders/jsonl.mjs +var JSONLDecoder; +var init_jsonl = __esm({ + "node_modules/@anthropic-ai/sdk/internal/decoders/jsonl.mjs"() { + init_error3(); + init_shims2(); + init_line2(); + JSONLDecoder = /* @__PURE__ */ (() => { + class JSONLDecoder2 { + constructor(iterator, controller) { + this.iterator = iterator; + this.controller = controller; + } + async *decoder() { + const lineDecoder = new LineDecoder2(); + for await (const chunk of this.iterator) { + for (const line of lineDecoder.decode(chunk)) { + yield JSON.parse(line); + } + } + for (const line of lineDecoder.flush()) { + yield JSON.parse(line); + } + } + [Symbol.asyncIterator]() { + return this.decoder(); + } + static fromResponse(response, controller) { + if (!response.body) { + controller.abort(); + if (typeof globalThis.navigator !== "undefined" && globalThis.navigator.product === "ReactNative") { + throw new AnthropicError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`); + } + throw new AnthropicError(`Attempted to iterate over a response with no body`); + } + return new JSONLDecoder2(ReadableStreamToAsyncIterable2(response.body), controller); + } + } + return JSONLDecoder2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/messages/batches.mjs +var Batches2; +var init_batches2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/messages/batches.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_jsonl(); + init_error4(); + init_path2(); + Batches2 = class extends APIResource2 { + /** + * Send a batch of Message creation requests. + * + * The Message Batches API can be used to process multiple Messages API requests at + * once. Once a Message Batch is created, it begins processing immediately. Batches + * can take up to 24 hours to complete. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * const betaMessageBatch = + * await client.beta.messages.batches.create({ + * requests: [ + * { + * custom_id: 'my-custom-id-1', + * params: { + * max_tokens: 1024, + * messages: [ + * { content: 'Hello, world', role: 'user' }, + * ], + * model: 'claude-opus-5', + * }, + * }, + * ], + * }); + * ``` + */ + create(params, options) { + const { betas, user_profile_id, workspace_id, ...body } = params; + return this._client.post("/v1/messages/batches?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), + ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * This endpoint is idempotent and can be used to poll for Message Batch + * completion. To access the results of a Message Batch, make a request to the + * `results_url` field in the response. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * const betaMessageBatch = + * await client.beta.messages.batches.retrieve( + * 'message_batch_id', + * ); + * ``` + */ + retrieve(messageBatchID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/messages/batches/${messageBatchID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List all Message Batches within a Workspace. Most recently created batches are + * returned first. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaMessageBatch of client.beta.messages.batches.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/messages/batches?beta=true", Page2, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Delete a Message Batch. + * + * Message Batches can only be deleted once they've finished processing. If you'd + * like to delete an in-progress batch, you must first cancel it. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * const betaDeletedMessageBatch = + * await client.beta.messages.batches.delete( + * 'message_batch_id', + * ); + * ``` + */ + delete(messageBatchID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.delete(path3`/v1/messages/batches/${messageBatchID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Batches may be canceled any time before processing ends. Once cancellation is + * initiated, the batch enters a `canceling` state, at which time the system may + * complete any in-progress, non-interruptible requests before finalizing + * cancellation. + * + * The number of canceled requests is specified in `request_counts`. To determine + * which requests were canceled, check the individual results within the batch. + * Note that cancellation may not result in any canceled requests if they were + * non-interruptible. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * const betaMessageBatch = + * await client.beta.messages.batches.cancel( + * 'message_batch_id', + * ); + * ``` + */ + cancel(messageBatchID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/messages/batches/${messageBatchID}/cancel?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Streams the results of a Message Batch as a `.jsonl` file. + * + * Each line in the file is a JSON object containing the result of a single request + * in the Message Batch. Results are not guaranteed to be in the same order as + * requests. Use the `custom_id` field to match results to requests. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * const betaMessageBatchIndividualResponse = + * await client.beta.messages.batches.results( + * 'message_batch_id', + * ); + * ``` + */ + async results(messageBatchID, params = {}, options) { + const batch = await this.retrieve(messageBatchID, params, options); + if (!batch.results_url) { + throw new AnthropicError(`No batch \`results_url\`; Has it finished processing? ${batch.processing_status} - ${batch.id}`); + } + const { betas, workspace_id } = params ?? {}; + return this._client.get(batch.results_url, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString(), + Accept: "application/binary", + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]), + stream: true, + __binaryResponse: true + })._thenUnwrap((_, props) => JSONLDecoder.fromResponse(props.response, props.controller)); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/internal/constants.mjs +var MODEL_NONSTREAMING_TOKENS; +var init_constants = __esm({ + "node_modules/@anthropic-ai/sdk/internal/constants.mjs"() { + MODEL_NONSTREAMING_TOKENS = { + "claude-opus-4@20250514": 8192, + "anthropic.claude-opus-4-1-20250805-v1:0": 8192, + "claude-opus-4-1@20250805": 8192 + }; + } +}); + +// node_modules/@anthropic-ai/sdk/lib/beta-parser.mjs +function getOutputFormat(params) { + return params?.output_format ?? params?.output_config?.format; +} +function maybeParseBetaMessage(message, params, opts) { + const outputFormat = getOutputFormat(params); + if (!params || !("parse" in (outputFormat ?? {}))) { + return { + ...message, + content: message.content.map((block) => { + if (block.type === "text") { + const parsedBlock = Object.defineProperty({ ...block }, "parsed_output", { + value: null, + enumerable: false + }); + return Object.defineProperty(parsedBlock, "parsed", { + get() { + opts.logger.warn("The `parsed` property on `text` blocks is deprecated, please use `parsed_output` instead."); + return null; + }, + enumerable: false + }); + } + return block; + }), + parsed_output: null + }; + } + return parseBetaMessage(message, params, opts); +} +function parseBetaMessage(message, params, opts) { + let firstParsedOutput = null; + const content = message.content.map((block) => { + if (block.type === "text") { + const parsedOutput = parseBetaOutputFormat(params, block.text); + if (firstParsedOutput === null) { + firstParsedOutput = parsedOutput; + } + const parsedBlock = Object.defineProperty({ ...block }, "parsed_output", { + value: parsedOutput, + enumerable: false + }); + return Object.defineProperty(parsedBlock, "parsed", { + get() { + opts.logger.warn("The `parsed` property on `text` blocks is deprecated, please use `parsed_output` instead."); + return parsedOutput; + }, + enumerable: false + }); + } + return block; + }); + return { + ...message, + content, + parsed_output: firstParsedOutput + }; +} +function parseBetaOutputFormat(params, content) { + const outputFormat = getOutputFormat(params); + if (outputFormat?.type !== "json_schema") { + return null; + } + try { + if ("parse" in outputFormat) { + return outputFormat.parse(content); + } + return JSON.parse(content); + } catch (error) { + throw new AnthropicError(`Failed to parse structured output: ${error}`); + } +} +var init_beta_parser = __esm({ + "node_modules/@anthropic-ai/sdk/lib/beta-parser.mjs"() { + init_error3(); + } +}); + +// node_modules/@anthropic-ai/sdk/streaming.mjs +var init_streaming4 = __esm({ + "node_modules/@anthropic-ai/sdk/streaming.mjs"() { + init_streaming3(); + } +}); + +// node_modules/@anthropic-ai/sdk/_vendor/partial-json-parser/parser.mjs +var tokenize, strip, unstrip, generate, partialParse3; +var init_parser3 = __esm({ + "node_modules/@anthropic-ai/sdk/_vendor/partial-json-parser/parser.mjs"() { + tokenize = (input) => { + let current = 0; + let tokens = []; + while (current < input.length) { + let char = input[current]; + if (char === "\\") { + current++; + continue; + } + if (char === "{") { + tokens.push({ + type: "brace", + value: "{" + }); + current++; + continue; + } + if (char === "}") { + tokens.push({ + type: "brace", + value: "}" + }); + current++; + continue; + } + if (char === "[") { + tokens.push({ + type: "paren", + value: "[" + }); + current++; + continue; + } + if (char === "]") { + tokens.push({ + type: "paren", + value: "]" + }); + current++; + continue; + } + if (char === ":") { + tokens.push({ + type: "separator", + value: ":" + }); + current++; + continue; + } + if (char === ",") { + tokens.push({ + type: "delimiter", + value: "," + }); + current++; + continue; + } + if (char === '"') { + const start = current + 1; + let end = start; + let danglingQuote = false; + while (true) { + end = input.indexOf('"', end); + if (end === -1) { + danglingQuote = true; + break; + } + let backslashes = 0; + let i = end - 1; + while (i >= start && input[i] === "\\") { + backslashes++; + i--; + } + if (backslashes % 2 === 0) + break; + end++; + } + if (danglingQuote) { + current = input.length; + } else { + tokens.push({ + type: "string", + value: input.slice(start, end) + }); + current = end + 1; + } + continue; + } + let WHITESPACE = /\s/; + if (char && WHITESPACE.test(char)) { + current++; + continue; + } + let NUMBERS = /[0-9]/; + if (char && NUMBERS.test(char) || char === "-" || char === ".") { + let value2 = ""; + if (char === "-") { + value2 += char; + char = input[++current]; + } + while (char && (NUMBERS.test(char) || char === "." || // exponent marker, e.g. `1e10` or `1.5E-9` + char === "e" || char === "E" || // exponent sign, only valid immediately after the exponent marker + (char === "-" || char === "+") && (value2[value2.length - 1] === "e" || value2[value2.length - 1] === "E"))) { + value2 += char; + char = input[++current]; + } + tokens.push({ + type: "number", + value: value2, + unterminated: current === input.length + }); + continue; + } + let LETTERS = /[a-z]/i; + if (char && LETTERS.test(char)) { + let value2 = ""; + while (char && LETTERS.test(char)) { + if (current === input.length) { + break; + } + value2 += char; + char = input[++current]; + } + if (value2 == "true" || value2 == "false" || value2 === "null") { + tokens.push({ + type: "name", + value: value2 + }); + } else { + current++; + continue; + } + continue; + } + current++; + } + return tokens; + }; + strip = (tokens) => { + let open = []; + for (const token of tokens) { + if (token.type === "brace" || token.type === "paren") { + if (token.value === "{" || token.value === "[") { + open.push(token.value); + } else { + open.pop(); + } + } + } + let innermostOpenBracket = open[open.length - 1]; + let length = tokens.length; + let JSON_NUMBER = /^-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][-+]?[0-9]+)?$/; + while (length > 0) { + let lastToken = tokens[length - 1]; + switch (lastToken.type) { + case "separator": + length--; + continue; + case "number": + if (lastToken.unterminated || !JSON_NUMBER.test(lastToken.value)) { + length--; + continue; + } + break; + case "string": + let tokenBeforeTheLastToken = tokens[length - 2]; + if (innermostOpenBracket === "{" && (tokenBeforeTheLastToken?.type === "delimiter" || tokenBeforeTheLastToken?.type === "brace" && tokenBeforeTheLastToken.value === "{")) { + length--; + continue; + } + break; + case "delimiter": + length--; + break; + } + break; + } + return tokens.slice(0, length); + }; + unstrip = (tokens) => { + let tail = []; + tokens.map((token) => { + if (token.type === "brace") { + if (token.value === "{") { + tail.push("}"); + } else { + tail.splice(tail.lastIndexOf("}"), 1); + } + } + if (token.type === "paren") { + if (token.value === "[") { + tail.push("]"); + } else { + tail.splice(tail.lastIndexOf("]"), 1); + } + } + }); + if (tail.length > 0) { + tail.reverse().map((item) => { + if (item === "}") { + tokens.push({ + type: "brace", + value: "}" + }); + } else if (item === "]") { + tokens.push({ + type: "paren", + value: "]" + }); + } + }); + } + return tokens; + }; + generate = (tokens) => { + let output = ""; + tokens.map((token) => { + switch (token.type) { + case "string": + output += '"' + token.value + '"'; + break; + default: + output += token.value; + break; + } + }); + return output; + }; + partialParse3 = (input) => JSON.parse(generate(unstrip(strip(tokenize(input))))); + } +}); + +// node_modules/@anthropic-ai/sdk/internal/message-stream-utils.mjs +function withLazyInput(prev, jsonBuf) { + const next = {}; + for (const key of Object.keys(prev)) { + if (key !== "input") + next[key] = prev[key]; + } + Object.defineProperty(next, JSON_BUF_PROPERTY, { value: jsonBuf, enumerable: false, writable: true }); + let input; + let parsed = false; + Object.defineProperty(next, "input", { + enumerable: true, + configurable: true, + get() { + if (!parsed) { + input = jsonBuf ? partialParse3(jsonBuf) : {}; + parsed = true; + } + return input; + } + }); + return next; +} +var JSON_BUF_PROPERTY; +var init_message_stream_utils = __esm({ + "node_modules/@anthropic-ai/sdk/internal/message-stream-utils.mjs"() { + init_parser3(); + JSON_BUF_PROPERTY = "__json_buf"; + } +}); + +// node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.mjs +function tracksToolInput(content) { + return content.type === "tool_use" || content.type === "server_tool_use" || content.type === "mcp_tool_use"; +} +var _BetaMessageStream_instances, _BetaMessageStream_currentMessageSnapshot, _BetaMessageStream_params, _BetaMessageStream_connectedPromise, _BetaMessageStream_resolveConnectedPromise, _BetaMessageStream_rejectConnectedPromise, _BetaMessageStream_endPromise, _BetaMessageStream_resolveEndPromise, _BetaMessageStream_rejectEndPromise, _BetaMessageStream_listeners, _BetaMessageStream_ended, _BetaMessageStream_errored, _BetaMessageStream_aborted, _BetaMessageStream_catchingPromiseCreated, _BetaMessageStream_response, _BetaMessageStream_request_id, _BetaMessageStream_workspace_id, _BetaMessageStream_logger, _BetaMessageStream_getFinalMessage, _BetaMessageStream_getFinalText, _BetaMessageStream_handleError, _BetaMessageStream_beginRequest, _BetaMessageStream_addStreamEvent, _BetaMessageStream_endRequest, _BetaMessageStream_accumulateMessage, _BetaMessageStream_toolInputParseError, BetaMessageStream; +var init_BetaMessageStream = __esm({ + "node_modules/@anthropic-ai/sdk/lib/BetaMessageStream.mjs"() { + init_tslib2(); + init_stainless_helper_header(); + init_error4(); + init_errors2(); + init_values2(); + init_streaming4(); + init_beta_parser(); + init_message_stream_utils(); + BetaMessageStream = /* @__PURE__ */ (() => { + class BetaMessageStream2 { + constructor(params, opts) { + _BetaMessageStream_instances.add(this); + this.messages = []; + this.receivedMessages = []; + _BetaMessageStream_currentMessageSnapshot.set(this, void 0); + _BetaMessageStream_params.set(this, null); + this.controller = new AbortController(); + _BetaMessageStream_connectedPromise.set(this, void 0); + _BetaMessageStream_resolveConnectedPromise.set(this, () => { + }); + _BetaMessageStream_rejectConnectedPromise.set(this, () => { + }); + _BetaMessageStream_endPromise.set(this, void 0); + _BetaMessageStream_resolveEndPromise.set(this, () => { + }); + _BetaMessageStream_rejectEndPromise.set(this, () => { + }); + _BetaMessageStream_listeners.set(this, {}); + _BetaMessageStream_ended.set(this, false); + _BetaMessageStream_errored.set(this, false); + _BetaMessageStream_aborted.set(this, false); + _BetaMessageStream_catchingPromiseCreated.set(this, false); + _BetaMessageStream_response.set(this, void 0); + _BetaMessageStream_request_id.set(this, void 0); + _BetaMessageStream_workspace_id.set(this, void 0); + _BetaMessageStream_logger.set(this, void 0); + _BetaMessageStream_handleError.set(this, (error) => { + __classPrivateFieldSet2(this, _BetaMessageStream_errored, true, "f"); + if (isAbortError2(error)) { + error = new APIUserAbortError2(); + } + if (error instanceof APIUserAbortError2) { + __classPrivateFieldSet2(this, _BetaMessageStream_aborted, true, "f"); + return this._emit("abort", error); + } + if (error instanceof AnthropicError) { + return this._emit("error", error); + } + if (error instanceof Error) { + const anthropicError = new AnthropicError(error.message); + anthropicError.cause = error; + return this._emit("error", anthropicError); + } + return this._emit("error", new AnthropicError(String(error))); + }); + __classPrivateFieldSet2(this, _BetaMessageStream_connectedPromise, new Promise((resolve2, reject2) => { + __classPrivateFieldSet2(this, _BetaMessageStream_resolveConnectedPromise, resolve2, "f"); + __classPrivateFieldSet2(this, _BetaMessageStream_rejectConnectedPromise, reject2, "f"); + }), "f"); + __classPrivateFieldSet2(this, _BetaMessageStream_endPromise, new Promise((resolve2, reject2) => { + __classPrivateFieldSet2(this, _BetaMessageStream_resolveEndPromise, resolve2, "f"); + __classPrivateFieldSet2(this, _BetaMessageStream_rejectEndPromise, reject2, "f"); + }), "f"); + __classPrivateFieldGet2(this, _BetaMessageStream_connectedPromise, "f").catch(() => { + }); + __classPrivateFieldGet2(this, _BetaMessageStream_endPromise, "f").catch(() => { + }); + __classPrivateFieldSet2(this, _BetaMessageStream_params, params, "f"); + __classPrivateFieldSet2(this, _BetaMessageStream_logger, opts?.logger ?? console, "f"); + } + get response() { + return __classPrivateFieldGet2(this, _BetaMessageStream_response, "f"); + } + get request_id() { + return __classPrivateFieldGet2(this, _BetaMessageStream_request_id, "f"); + } + get workspace_id() { + return __classPrivateFieldGet2(this, _BetaMessageStream_workspace_id, "f"); + } + /** + * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request, + * returned vie the `request-id` header which is useful for debugging requests and resporting + * issues to Anthropic. + * + * This is the same as the `APIPromise.withResponse()` method. + * + * This method will raise an error if you created the stream using `MessageStream.fromReadableStream` + * as no `Response` is available. + */ + async withResponse() { + __classPrivateFieldSet2(this, _BetaMessageStream_catchingPromiseCreated, true, "f"); + const response = await __classPrivateFieldGet2(this, _BetaMessageStream_connectedPromise, "f"); + if (!response) { + throw new Error("Could not resolve a `Response` object"); + } + return { + data: this, + response, + request_id: response.headers.get("request-id"), + workspace_id: response.headers.get("anthropic-workspace-id") + }; + } + /** + * Intended for use on the frontend, consuming a stream produced with + * `.toReadableStream()` on the backend. + * + * Note that messages sent to the model do not appear in `.on('message')` + * in this context. + */ + static fromReadableStream(stream5) { + const runner = new BetaMessageStream2(null); + runner._run(() => runner._fromReadableStream(stream5)); + return runner; + } + static createMessage(messages, params, options, { logger } = {}) { + const runner = new BetaMessageStream2(params, { logger }); + for (const message of params.messages) { + runner._addMessageParam(message); + } + __classPrivateFieldSet2(runner, _BetaMessageStream_params, { ...params, stream: true }, "f"); + runner._run(() => runner._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, [STAINLESS_HELPER_METHOD_HEADER]: "stream" } })); + return runner; + } + _run(executor) { + executor().then(() => { + this._emitFinal(); + this._emit("end"); + }, __classPrivateFieldGet2(this, _BetaMessageStream_handleError, "f")); + } + _addMessageParam(message) { + this.messages.push(message); + } + _addMessage(message, emit = true) { + this.receivedMessages.push(message); + if (emit) { + this._emit("message", message); + } + } + async _createMessage(messages, params, options) { + const signal = options?.signal; + let abortHandler; + if (signal) { + if (signal.aborted) + this.controller.abort(); + abortHandler = this.controller.abort.bind(this.controller); + signal.addEventListener("abort", abortHandler); + } + try { + __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_beginRequest).call(this); + const { response, data: stream5 } = await messages.create({ ...params, stream: true }, { ...options, signal: this.controller.signal }).withResponse(); + this._connected(response); + for await (const event of stream5) { + __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_addStreamEvent).call(this, event); + } + if (stream5.controller.signal?.aborted) { + throw new APIUserAbortError2(); + } + __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_endRequest).call(this); + } finally { + if (signal && abortHandler) { + signal.removeEventListener("abort", abortHandler); + } + } + } + _connected(response) { + if (this.ended) + return; + __classPrivateFieldSet2(this, _BetaMessageStream_response, response, "f"); + __classPrivateFieldSet2(this, _BetaMessageStream_request_id, response?.headers.get("request-id"), "f"); + __classPrivateFieldSet2(this, _BetaMessageStream_workspace_id, response?.headers.get("anthropic-workspace-id"), "f"); + __classPrivateFieldGet2(this, _BetaMessageStream_resolveConnectedPromise, "f").call(this, response); + this._emit("connect"); + } + get ended() { + return __classPrivateFieldGet2(this, _BetaMessageStream_ended, "f"); + } + get errored() { + return __classPrivateFieldGet2(this, _BetaMessageStream_errored, "f"); + } + get aborted() { + return __classPrivateFieldGet2(this, _BetaMessageStream_aborted, "f"); + } + abort() { + this.controller.abort(); + } + /** + * Adds the listener function to the end of the listeners array for the event. + * No checks are made to see if the listener has already been added. Multiple calls passing + * the same combination of event and listener will result in the listener being added, and + * called, multiple times. + * @returns this MessageStream, so that calls can be chained + */ + on(event, listener) { + const listeners = __classPrivateFieldGet2(this, _BetaMessageStream_listeners, "f")[event] || (__classPrivateFieldGet2(this, _BetaMessageStream_listeners, "f")[event] = []); + listeners.push({ listener }); + return this; + } + /** + * Removes the specified listener from the listener array for the event. + * off() will remove, at most, one instance of a listener from the listener array. If any single + * listener has been added multiple times to the listener array for the specified event, then + * off() must be called multiple times to remove each instance. + * @returns this MessageStream, so that calls can be chained + */ + off(event, listener) { + const listeners = __classPrivateFieldGet2(this, _BetaMessageStream_listeners, "f")[event]; + if (!listeners) + return this; + const index = listeners.findIndex((l) => l.listener === listener); + if (index >= 0) + listeners.splice(index, 1); + return this; + } + /** + * Adds a one-time listener function for the event. The next time the event is triggered, + * this listener is removed and then invoked. + * @returns this MessageStream, so that calls can be chained + */ + once(event, listener) { + const listeners = __classPrivateFieldGet2(this, _BetaMessageStream_listeners, "f")[event] || (__classPrivateFieldGet2(this, _BetaMessageStream_listeners, "f")[event] = []); + listeners.push({ listener, once: true }); + return this; + } + /** + * This is similar to `.once()`, but returns a Promise that resolves the next time + * the event is triggered, instead of calling a listener callback. + * @returns a Promise that resolves the next time given event is triggered, + * or rejects if an error is emitted. (If you request the 'error' event, + * returns a promise that resolves with the error). + * + * Example: + * + * const message = await stream.emitted('message') // rejects if the stream errors + */ + emitted(event) { + return new Promise((resolve2, reject2) => { + __classPrivateFieldSet2(this, _BetaMessageStream_catchingPromiseCreated, true, "f"); + if (event !== "error") + this.once("error", reject2); + this.once(event, resolve2); + }); + } + async done() { + __classPrivateFieldSet2(this, _BetaMessageStream_catchingPromiseCreated, true, "f"); + await __classPrivateFieldGet2(this, _BetaMessageStream_endPromise, "f"); + } + get currentMessage() { + return __classPrivateFieldGet2(this, _BetaMessageStream_currentMessageSnapshot, "f"); + } + /** + * @returns a promise that resolves with the the final assistant Message response, + * or rejects if an error occurred or the stream ended prematurely without producing a Message. + * If structured outputs were used, this will be a ParsedMessage with a `parsed` field. + */ + async finalMessage() { + await this.done(); + return __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalMessage).call(this); + } + /** + * @returns a promise that resolves with the the final assistant Message's text response, concatenated + * together if there are more than one text blocks. + * Rejects if an error occurred or the stream ended prematurely without producing a Message. + */ + async finalText() { + await this.done(); + return __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalText).call(this); + } + _emit(event, ...args) { + if (__classPrivateFieldGet2(this, _BetaMessageStream_ended, "f")) + return; + if (event === "end") { + __classPrivateFieldSet2(this, _BetaMessageStream_ended, true, "f"); + __classPrivateFieldGet2(this, _BetaMessageStream_resolveEndPromise, "f").call(this); + } + const listeners = __classPrivateFieldGet2(this, _BetaMessageStream_listeners, "f")[event]; + if (listeners) { + __classPrivateFieldGet2(this, _BetaMessageStream_listeners, "f")[event] = listeners.filter((l) => !l.once); + listeners.forEach(({ listener }) => listener(...args)); + } + if (event === "abort") { + const error = args[0]; + if (!__classPrivateFieldGet2(this, _BetaMessageStream_catchingPromiseCreated, "f") && !listeners?.length) { + Promise.reject(error); + } + __classPrivateFieldGet2(this, _BetaMessageStream_rejectConnectedPromise, "f").call(this, error); + __classPrivateFieldGet2(this, _BetaMessageStream_rejectEndPromise, "f").call(this, error); + this._emit("end"); + return; + } + if (event === "error") { + const error = args[0]; + if (!__classPrivateFieldGet2(this, _BetaMessageStream_catchingPromiseCreated, "f") && !listeners?.length) { + Promise.reject(error); + } + __classPrivateFieldGet2(this, _BetaMessageStream_rejectConnectedPromise, "f").call(this, error); + __classPrivateFieldGet2(this, _BetaMessageStream_rejectEndPromise, "f").call(this, error); + this._emit("end"); + } + } + _emitFinal() { + const finalMessage = this.receivedMessages.at(-1); + if (finalMessage) { + this._emit("finalMessage", __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_getFinalMessage).call(this)); + } + } + async _fromReadableStream(readableStream, options) { + const signal = options?.signal; + let abortHandler; + if (signal) { + if (signal.aborted) + this.controller.abort(); + abortHandler = this.controller.abort.bind(this.controller); + signal.addEventListener("abort", abortHandler); + } + try { + __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_beginRequest).call(this); + this._connected(null); + const stream5 = Stream2.fromReadableStream(readableStream, this.controller); + for await (const event of stream5) { + __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_addStreamEvent).call(this, event); + } + if (stream5.controller.signal?.aborted) { + throw new APIUserAbortError2(); + } + __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_endRequest).call(this); + } finally { + if (signal && abortHandler) { + signal.removeEventListener("abort", abortHandler); + } + } + } + [(_BetaMessageStream_currentMessageSnapshot = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_params = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_connectedPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_resolveConnectedPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_rejectConnectedPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_endPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_resolveEndPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_rejectEndPromise = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_listeners = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_ended = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_errored = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_aborted = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_catchingPromiseCreated = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_response = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_request_id = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_workspace_id = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_logger = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_handleError = /* @__PURE__ */ new WeakMap(), _BetaMessageStream_instances = /* @__PURE__ */ new WeakSet(), _BetaMessageStream_getFinalMessage = function _BetaMessageStream_getFinalMessage2() { + if (this.receivedMessages.length === 0) { + throw new AnthropicError("stream ended without producing a Message with role=assistant"); + } + return this.receivedMessages.at(-1); + }, _BetaMessageStream_getFinalText = function _BetaMessageStream_getFinalText2() { + if (this.receivedMessages.length === 0) { + throw new AnthropicError("stream ended without producing a Message with role=assistant"); + } + const textBlocks = this.receivedMessages.at(-1).content.filter((block) => block.type === "text").map((block) => block.text); + if (textBlocks.length === 0) { + throw new AnthropicError("stream ended without producing a content block with type=text"); + } + return textBlocks.join(" "); + }, _BetaMessageStream_beginRequest = function _BetaMessageStream_beginRequest2() { + if (this.ended) + return; + __classPrivateFieldSet2(this, _BetaMessageStream_currentMessageSnapshot, void 0, "f"); + }, _BetaMessageStream_addStreamEvent = function _BetaMessageStream_addStreamEvent2(event) { + if (this.ended) + return; + const messageSnapshot = __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_accumulateMessage).call(this, event); + this._emit("streamEvent", event, messageSnapshot); + switch (event.type) { + case "content_block_delta": { + const content = messageSnapshot.content.at(-1); + switch (event.delta.type) { + case "text_delta": { + if (content.type === "text") { + this._emit("text", event.delta.text, content.text || ""); + } + break; + } + case "citations_delta": { + if (content.type === "text") { + this._emit("citation", event.delta.citation, content.citations ?? []); + } + break; + } + case "input_json_delta": { + if (tracksToolInput(content) && __classPrivateFieldGet2(this, _BetaMessageStream_listeners, "f").inputJson?.length) { + let jsonSnapshot; + try { + jsonSnapshot = content.input; + } catch (err) { + __classPrivateFieldGet2(this, _BetaMessageStream_handleError, "f").call(this, __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_toolInputParseError).call(this, content, err)); + break; + } + this._emit("inputJson", event.delta.partial_json, jsonSnapshot); + } + break; + } + case "thinking_delta": { + if (content.type === "thinking") { + this._emit("thinking", event.delta.thinking, content.thinking); + } + break; + } + case "signature_delta": { + if (content.type === "thinking") { + this._emit("signature", content.signature); + } + break; + } + case "compaction_delta": { + if (content.type === "compaction" && content.content) { + this._emit("compaction", content.content); + } + break; + } + default: + checkNever(event.delta); + } + break; + } + case "message_stop": { + this._addMessageParam(messageSnapshot); + this._addMessage(maybeParseBetaMessage(messageSnapshot, __classPrivateFieldGet2(this, _BetaMessageStream_params, "f"), { logger: __classPrivateFieldGet2(this, _BetaMessageStream_logger, "f") }), true); + break; + } + case "content_block_stop": { + this._emit("contentBlock", messageSnapshot.content.at(-1)); + break; + } + case "message_start": { + __classPrivateFieldSet2(this, _BetaMessageStream_currentMessageSnapshot, messageSnapshot, "f"); + break; + } + case "content_block_start": + case "message_delta": + break; + } + }, _BetaMessageStream_endRequest = function _BetaMessageStream_endRequest2() { + if (this.ended) { + throw new AnthropicError(`stream has ended, this shouldn't happen`); + } + const snapshot = __classPrivateFieldGet2(this, _BetaMessageStream_currentMessageSnapshot, "f"); + if (!snapshot) { + throw new AnthropicError(`request ended without sending any chunks`); + } + __classPrivateFieldSet2(this, _BetaMessageStream_currentMessageSnapshot, void 0, "f"); + return maybeParseBetaMessage(snapshot, __classPrivateFieldGet2(this, _BetaMessageStream_params, "f"), { logger: __classPrivateFieldGet2(this, _BetaMessageStream_logger, "f") }); + }, _BetaMessageStream_accumulateMessage = function _BetaMessageStream_accumulateMessage2(event) { + let snapshot = __classPrivateFieldGet2(this, _BetaMessageStream_currentMessageSnapshot, "f"); + if (event.type === "message_start") { + if (snapshot) { + throw new AnthropicError(`Unexpected event order, got ${event.type} before receiving "message_stop"`); + } + return event.message; + } + if (!snapshot) { + throw new AnthropicError(`Unexpected event order, got ${event.type} before "message_start"`); + } + switch (event.type) { + case "message_stop": + return snapshot; + case "message_delta": + snapshot.stop_reason = event.delta.stop_reason; + snapshot.stop_sequence = event.delta.stop_sequence; + snapshot.stop_details = event.delta.stop_details; + snapshot.usage.output_tokens = event.usage.output_tokens; + if (event.delta.container != null) { + snapshot.container = event.delta.container; + } + if (event.context_management != null) { + snapshot.context_management = event.context_management; + } + if (event.input_transformations != null) { + snapshot.input_transformations = event.input_transformations; + } + if (event.usage.input_tokens != null) { + snapshot.usage.input_tokens = event.usage.input_tokens; + } + if (event.usage.cache_creation_input_tokens != null) { + snapshot.usage.cache_creation_input_tokens = event.usage.cache_creation_input_tokens; + } + if (event.usage.cache_read_input_tokens != null) { + snapshot.usage.cache_read_input_tokens = event.usage.cache_read_input_tokens; + } + if (event.usage.server_tool_use != null) { + snapshot.usage.server_tool_use = event.usage.server_tool_use; + } + if (event.usage.iterations != null) { + snapshot.usage.iterations = event.usage.iterations; + } + if (event.usage.fallback_credit != null) { + snapshot.usage.fallback_credit = event.usage.fallback_credit; + } + if (event.usage.output_tokens_details != null) { + snapshot.usage.output_tokens_details = event.usage.output_tokens_details; + } + return snapshot; + case "content_block_start": + snapshot.content.push(event.content_block); + if (event.content_block.type === "fallback") { + snapshot.model = event.content_block.to.model; + } + return snapshot; + case "content_block_delta": { + const snapshotContent = snapshot.content.at(event.index); + switch (event.delta.type) { + case "text_delta": { + if (snapshotContent?.type === "text") { + snapshot.content[event.index] = { + ...snapshotContent, + text: (snapshotContent.text || "") + event.delta.text + }; + } + break; + } + case "citations_delta": { + if (snapshotContent?.type === "text") { + snapshot.content[event.index] = { + ...snapshotContent, + citations: [...snapshotContent.citations ?? [], event.delta.citation] + }; + } + break; + } + case "input_json_delta": { + if (snapshotContent && tracksToolInput(snapshotContent)) { + const jsonBuf = (snapshotContent[JSON_BUF_PROPERTY] || "") + event.delta.partial_json; + snapshot.content[event.index] = withLazyInput(snapshotContent, jsonBuf); + } + break; + } + case "thinking_delta": { + if (snapshotContent?.type === "thinking") { + snapshot.content[event.index] = { + ...snapshotContent, + thinking: snapshotContent.thinking + event.delta.thinking + }; + } + break; + } + case "signature_delta": { + if (snapshotContent?.type === "thinking") { + snapshot.content[event.index] = { + ...snapshotContent, + signature: event.delta.signature + }; + } + break; + } + case "compaction_delta": { + if (snapshotContent?.type === "compaction") { + const block = { ...snapshotContent, content: event.delta.content }; + if ("encrypted_content" in event.delta) { + block.encrypted_content = event.delta.encrypted_content; + } + snapshot.content[event.index] = block; + } + break; + } + default: + checkNever(event.delta); + } + return snapshot; + } + case "content_block_stop": { + const snapshotContent = snapshot.content.at(event.index); + if (snapshotContent && tracksToolInput(snapshotContent) && JSON_BUF_PROPERTY in snapshotContent) { + let input; + try { + input = snapshotContent.input; + } catch (err) { + input = {}; + __classPrivateFieldGet2(this, _BetaMessageStream_handleError, "f").call(this, __classPrivateFieldGet2(this, _BetaMessageStream_instances, "m", _BetaMessageStream_toolInputParseError).call(this, snapshotContent, err)); + } + Object.defineProperty(snapshotContent, "input", { + value: input, + enumerable: true, + configurable: true, + writable: true + }); + } + return snapshot; + } + } + }, _BetaMessageStream_toolInputParseError = function _BetaMessageStream_toolInputParseError2(block, err) { + const jsonBuf = block[JSON_BUF_PROPERTY]; + return new AnthropicError(`Unable to parse tool parameter JSON from model. Please retry your request or adjust your prompt. Error: ${err}. JSON: ${jsonBuf}`); + }, Symbol.asyncIterator)]() { + const pushQueue = []; + const readQueue = []; + let done = false; + this.on("streamEvent", (event) => { + const reader = readQueue.shift(); + if (reader) { + reader.resolve(event); + } else { + pushQueue.push(event); + } + }); + this.on("end", () => { + done = true; + for (const reader of readQueue) { + reader.resolve(void 0); + } + readQueue.length = 0; + }); + this.on("abort", (err) => { + done = true; + for (const reader of readQueue) { + reader.reject(err); + } + readQueue.length = 0; + }); + this.on("error", (err) => { + done = true; + for (const reader of readQueue) { + reader.reject(err); + } + readQueue.length = 0; + }); + return { + next: async () => { + if (!pushQueue.length) { + if (done) { + return { value: void 0, done: true }; + } + return new Promise((resolve2, reject2) => readQueue.push({ resolve: resolve2, reject: reject2 })).then((chunk2) => chunk2 ? { value: chunk2, done: false } : { value: void 0, done: true }); + } + const chunk = pushQueue.shift(); + return { value: chunk, done: false }; + }, + return: async () => { + this.abort(); + return { value: void 0, done: true }; + } + }; + } + toReadableStream() { + const stream5 = new Stream2(this[Symbol.asyncIterator].bind(this), this.controller); + return stream5.toReadableStream(); + } + } + return BetaMessageStream2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/lib/internal/BetaToolRunnerStream.mjs +var _BetaToolRunnerStream_instances, _BetaToolRunnerStream_onToolCall, _BetaToolRunnerStream_emitted, _BetaToolRunnerStream_readers, _BetaToolRunnerStream_toolCalls, _BetaToolRunnerStream_closed, _BetaToolRunnerStream_ready, _BetaToolRunnerStream_fallback, _BetaToolRunnerStream_track, _BetaToolRunnerStream_release, _BetaToolRunnerStream_removeReader, BetaToolRunnerStream; +var init_BetaToolRunnerStream = __esm({ + "node_modules/@anthropic-ai/sdk/lib/internal/BetaToolRunnerStream.mjs"() { + init_tslib2(); + init_stainless_helper_header(); + init_BetaMessageStream(); + BetaToolRunnerStream = /* @__PURE__ */ (() => { + class BetaToolRunnerStream2 extends BetaMessageStream { + constructor(params, onToolCall) { + super(params); + _BetaToolRunnerStream_instances.add(this); + _BetaToolRunnerStream_onToolCall.set(this, void 0); + _BetaToolRunnerStream_emitted.set(this, 0); + _BetaToolRunnerStream_readers.set(this, []); + _BetaToolRunnerStream_toolCalls.set(this, []); + _BetaToolRunnerStream_closed.set(this, void 0); + _BetaToolRunnerStream_ready.set(this, []); + _BetaToolRunnerStream_fallback.set(this, false); + __classPrivateFieldSet2(this, _BetaToolRunnerStream_onToolCall, onToolCall, "f"); + } + /** The `tool_use` blocks that have finished streaming, in the model's order */ + get toolCalls() { + return __classPrivateFieldGet2(this, _BetaToolRunnerStream_toolCalls, "f"); + } + /** Sends the request as `client.beta.messages.stream()` does. */ + static start(messages, params, options, onToolCall) { + const stream5 = new BetaToolRunnerStream2({ ...params, stream: true }, onToolCall); + for (const message of params.messages) { + stream5._addMessageParam(message); + } + stream5._run(() => stream5._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, [STAINLESS_HELPER_METHOD_HEADER]: "stream" } })); + return stream5; + } + _emit(event, ...args) { + var _a6; + if (event !== "streamEvent" || this.ended) { + super._emit(event, ...args); + return; + } + __classPrivateFieldSet2(this, _BetaToolRunnerStream_emitted, (_a6 = __classPrivateFieldGet2(this, _BetaToolRunnerStream_emitted, "f"), _a6++, _a6), "f"); + const [streamEvent, snapshot] = args; + const block = streamEvent.type === "content_block_stop" ? snapshot.content[streamEvent.index] : void 0; + const closed = block?.type === "tool_use" ? block : void 0; + if (closed) { + __classPrivateFieldGet2(this, _BetaToolRunnerStream_toolCalls, "f").push(closed); + } + super._emit(event, ...args); + __classPrivateFieldGet2(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_track).call(this, streamEvent, closed); + __classPrivateFieldGet2(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_release).call(this); + } + [(_BetaToolRunnerStream_onToolCall = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_emitted = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_readers = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_toolCalls = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_closed = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_ready = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_fallback = /* @__PURE__ */ new WeakMap(), _BetaToolRunnerStream_instances = /* @__PURE__ */ new WeakSet(), Symbol.asyncIterator)]() { + const iterator = super[Symbol.asyncIterator](); + const reader = { handled: __classPrivateFieldGet2(this, _BetaToolRunnerStream_emitted, "f") }; + __classPrivateFieldGet2(this, _BetaToolRunnerStream_readers, "f").push(reader); + let holdsEvent = false; + return { + next: async () => { + if (holdsEvent) { + holdsEvent = false; + reader.handled++; + __classPrivateFieldGet2(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_release).call(this); + } + try { + const result = await iterator.next(); + holdsEvent = !result.done; + if (result.done) { + __classPrivateFieldGet2(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_removeReader).call(this, reader); + } + return result; + } catch (error) { + __classPrivateFieldGet2(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_removeReader).call(this, reader); + throw error; + } + }, + return: async () => { + const result = iterator.return?.(); + __classPrivateFieldGet2(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_removeReader).call(this, reader); + return await result ?? { value: void 0, done: true }; + } + }; + } + } + _BetaToolRunnerStream_track = function _BetaToolRunnerStream_track2(event, closed) { + if (__classPrivateFieldGet2(this, _BetaToolRunnerStream_fallback, "f")) { + return; + } + if (event.type === "content_block_start" && event.content_block.type === "fallback") { + __classPrivateFieldSet2(this, _BetaToolRunnerStream_fallback, true, "f"); + __classPrivateFieldSet2(this, _BetaToolRunnerStream_closed, void 0, "f"); + return; + } + const movedOn = event.type === "content_block_start" || event.type === "message_delta" && event.delta.stop_reason === "tool_use"; + if (__classPrivateFieldGet2(this, _BetaToolRunnerStream_closed, "f") && movedOn) { + __classPrivateFieldGet2(this, _BetaToolRunnerStream_ready, "f").push({ toolUse: __classPrivateFieldGet2(this, _BetaToolRunnerStream_closed, "f"), event: __classPrivateFieldGet2(this, _BetaToolRunnerStream_emitted, "f") }); + __classPrivateFieldSet2(this, _BetaToolRunnerStream_closed, void 0, "f"); + } + if (closed) { + __classPrivateFieldSet2(this, _BetaToolRunnerStream_closed, closed, "f"); + } + }, _BetaToolRunnerStream_release = function _BetaToolRunnerStream_release2() { + if (this.errored || this.controller.signal.aborted) { + return; + } + const handled = Math.min(__classPrivateFieldGet2(this, _BetaToolRunnerStream_emitted, "f"), ...__classPrivateFieldGet2(this, _BetaToolRunnerStream_readers, "f").map((reader) => reader.handled)); + while (__classPrivateFieldGet2(this, _BetaToolRunnerStream_ready, "f")[0] && __classPrivateFieldGet2(this, _BetaToolRunnerStream_ready, "f")[0].event <= handled) { + __classPrivateFieldGet2(this, _BetaToolRunnerStream_onToolCall, "f").call(this, __classPrivateFieldGet2(this, _BetaToolRunnerStream_ready, "f").shift().toolUse); + } + }, _BetaToolRunnerStream_removeReader = function _BetaToolRunnerStream_removeReader2(reader) { + const index = __classPrivateFieldGet2(this, _BetaToolRunnerStream_readers, "f").indexOf(reader); + if (index >= 0) { + __classPrivateFieldGet2(this, _BetaToolRunnerStream_readers, "f").splice(index, 1); + __classPrivateFieldGet2(this, _BetaToolRunnerStream_instances, "m", _BetaToolRunnerStream_release).call(this); + } + }; + return BetaToolRunnerStream2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/internal/utils/promise.mjs +function promiseWithResolvers() { + let resolve2; + let reject2; + const promise = new Promise((res, rej) => { + resolve2 = res; + reject2 = rej; + }); + return { promise, resolve: resolve2, reject: reject2 }; +} +var init_promise = __esm({ + "node_modules/@anthropic-ai/sdk/internal/utils/promise.mjs"() { + } +}); + +// node_modules/@anthropic-ai/sdk/lib/tools/BetaToolRunner.mjs +function rejectCompactionParam(params) { + if ("compaction" in params && params.compaction != null) { + throw new AnthropicError("`compaction` cannot be set on a tool runner: every request in the loop would compact again. Call `runner.compactBeforeNextTurn()` when the conversation should be compacted instead."); + } +} +function rejectCompactionControl(params) { + if ("compactionControl" in params && params.compactionControl != null) { + throw new AnthropicError("`compactionControl` has been removed from the tool runner. Use server-side compaction instead: call `runner.compactBeforeNextTurn()` when the conversation should be compacted."); + } +} +function rejectRunToolsEagerlyWithoutStream(params) { + if (params.runToolsEagerly && !params.stream) { + throw new TypeError("`runToolsEagerly: true` needs `stream: true` in the tool runner's params, because a reply that isn't streamed arrives whole."); + } +} +function rejectCompactionEdit(params) { + if (params.context_management?.edits?.some((edit) => edit.type.startsWith("compact_"))) { + throw new AnthropicError("`compactBeforeNextTurn()` can't be used while `context_management` has a compaction edit, because the API doesn't accept a compaction block together with one. Remove the edit first."); + } +} +function withoutCompactionIncompatibleParams(params) { + const { context_management, stop_sequences, output_format, ...kept } = params; + const withoutFormat = ({ format, ...outputConfig }) => outputConfig; + if (kept.tool_choice?.type === "any" || kept.tool_choice?.type === "tool") { + delete kept.tool_choice; + } + if (kept.output_config) { + kept.output_config = withoutFormat(kept.output_config); + } + if (Array.isArray(kept.fallbacks)) { + kept.fallbacks = kept.fallbacks.map((fallback) => fallback.output_config ? { ...fallback, output_config: withoutFormat(fallback.output_config) } : fallback); + } + return kept; +} +async function generateToolResponse(runnable, available, lastMessage, requestOptions, calls) { + if (!lastMessage || lastMessage.role !== "assistant" || !lastMessage.content || typeof lastMessage.content === "string") { + return null; + } + const toolUseBlocks = lastMessage.content.filter((content) => content.type === "tool_use"); + if (toolUseBlocks.length === 0) { + return null; + } + const toolResults = await Promise.all(toolUseBlocks.map((toolUse) => { + const call = calls?.get(toolUse.id); + if (call?.status === "started") { + return call.result; + } + const result = runToolCall(runnable, available, toolUse, requestOptions); + calls?.set(toolUse.id, { status: "started", result }); + return result; + })); + return { + role: "user", + content: toolResults + }; +} +async function runToolCall(runnable, available, toolUse, requestOptions) { + const tool = available.has(toolUse.name) ? runnable.get(toolUse.name) : void 0; + if (!tool) { + return toolNotFoundResult(toolUse); + } + try { + let input = toolUse.input; + if ("parse" in tool && tool.parse) { + input = tool.parse(input); + } + const result = await tool.run(input, { + toolUse, + toolUseBlock: toolUse, + signal: requestOptions?.signal + }); + return { + type: "tool_result", + tool_use_id: toolUse.id, + content: result + }; + } catch (error) { + return { + type: "tool_result", + tool_use_id: toolUse.id, + content: error instanceof ToolError ? error.content : `Error: ${error instanceof Error ? error.message : String(error)}`, + is_error: true + }; + } +} +function asContentParam(content) { + return content; +} +function toolNotFoundResult(toolUse) { + return { + type: "tool_result", + tool_use_id: toolUse.id, + content: `Error: Tool '${toolUse.name}' not found`, + is_error: true + }; +} +function applyToolChange(block, available) { + switch (block.type) { + case "tool_removal": + case "tool_addition": + applyToolReference(block, available); + break; + } +} +function applyToolReference(block, available) { + const name = changedToolName(block.tool); + if (name === void 0) + return; + if (block.type === "tool_removal") { + available.delete(name); + } else { + available.add(name); + } +} +function changedToolName(tool) { + switch (tool.type) { + case "tool_reference": + return tool.name; + case "tool_definition": + return "name" in tool.definition ? tool.definition.name : void 0; + default: + return void 0; + } +} +function determineNextStepFromStopReason(stopReason) { + if (stopReason === null) + return "stop"; + switch (stopReason) { + case "tool_use": + return "run_tools"; + case "pause_turn": + // pause_after_compaction hands the turn back before the model answers; sending it back + // unchanged continues it. + case "compaction": + return "resume"; + case "end_turn": + case "stop_sequence": + case "max_tokens": + case "model_context_window_exceeded": + case "refusal": + return "stop"; + default: + checkNever(stopReason); + return "stop"; + } +} +var _BetaToolRunner_instances, _BetaToolRunner_consumed, _BetaToolRunner_mutated, _BetaToolRunner_state, _BetaToolRunner_options, _BetaToolRunner_message, _BetaToolRunner_stream, _BetaToolRunner_toolResponse, _BetaToolRunner_completion, _BetaToolRunner_iterationCount, _BetaToolRunner_compaction, _BetaToolRunner_calls, _BetaToolRunner_lastStopReason, _BetaToolRunner_toolOverrides, _BetaToolRunner_pendingToolChanges, _BetaToolRunner_send, _BetaToolRunner_streamThatStartsTools, _BetaToolRunner_startedCallsSettled, _BetaToolRunner_compact, _BetaToolRunner_runnableTools, _BetaToolRunner_availableToolNames, _BetaToolRunner_recordRemovalsFromHistory, _BetaToolRunner_compactAfterFinalTurn, _BetaToolRunner_generateToolResponse, _BetaToolRunner_flushPendingToolChanges, _BetaToolRunner_pendingToolChangesMessage, BetaToolRunner; +var init_BetaToolRunner = __esm({ + "node_modules/@anthropic-ai/sdk/lib/tools/BetaToolRunner.mjs"() { + init_tslib2(); + init_ToolError(); + init_error3(); + init_BetaToolRunnerStream(); + init_headers3(); + init_promise(); + init_values2(); + init_log2(); + init_stainless_helper_header(); + BetaToolRunner = /* @__PURE__ */ (() => { + class BetaToolRunner2 { + constructor(client, params, options) { + _BetaToolRunner_instances.add(this); + this.client = client; + _BetaToolRunner_consumed.set(this, false); + _BetaToolRunner_mutated.set(this, false); + _BetaToolRunner_state.set(this, void 0); + _BetaToolRunner_options.set(this, void 0); + _BetaToolRunner_message.set(this, void 0); + _BetaToolRunner_stream.set(this, void 0); + _BetaToolRunner_toolResponse.set(this, void 0); + _BetaToolRunner_completion.set(this, void 0); + _BetaToolRunner_iterationCount.set(this, 0); + _BetaToolRunner_compaction.set(this, { status: "idle" }); + _BetaToolRunner_calls.set(this, void 0); + _BetaToolRunner_lastStopReason.set(this, null); + _BetaToolRunner_toolOverrides.set(this, /* @__PURE__ */ new Map()); + _BetaToolRunner_pendingToolChanges.set(this, []); + rejectCompactionParam(params); + rejectCompactionControl(params); + rejectRunToolsEagerlyWithoutStream(params); + __classPrivateFieldSet2(this, _BetaToolRunner_state, { + params: { + // You can't clone the entire params since there are functions as handlers. + // You also don't really need to clone params.messages, but it probably will prevent a foot gun + // somewhere. + ...params, + // Not structuredClone(): it throws on a function, and a runnable tool written by value into a + // `tool_addition` block has `run`. A JSON copy is the messages as they are sent, which drops it. + messages: JSON.parse(JSON.stringify(params.messages)) + } + }, "f"); + const collected = collectStainlessHelpers(params.tools, params.messages); + __classPrivateFieldSet2(this, _BetaToolRunner_options, { + ...options, + headers: buildHeaders2([ + helperHeader("BetaToolRunner"), + collected.length ? { [STAINLESS_HELPER_HEADER]: collected.join(", ") } : void 0, + options?.headers + ]) + }, "f"); + __classPrivateFieldSet2(this, _BetaToolRunner_completion, promiseWithResolvers(), "f"); + } + async *[(_BetaToolRunner_consumed = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_mutated = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_state = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_options = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_message = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_stream = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_toolResponse = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_completion = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_iterationCount = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_compaction = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_calls = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_lastStopReason = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_toolOverrides = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_pendingToolChanges = /* @__PURE__ */ new WeakMap(), _BetaToolRunner_instances = /* @__PURE__ */ new WeakSet(), Symbol.asyncIterator)]() { + var _a6; + if (__classPrivateFieldGet2(this, _BetaToolRunner_consumed, "f")) { + throw new AnthropicError("Cannot iterate over a consumed stream"); + } + __classPrivateFieldSet2(this, _BetaToolRunner_consumed, true, "f"); + __classPrivateFieldSet2(this, _BetaToolRunner_mutated, true, "f"); + __classPrivateFieldSet2(this, _BetaToolRunner_toolResponse, void 0, "f"); + try { + while (true) { + try { + if (__classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.max_iterations && __classPrivateFieldGet2(this, _BetaToolRunner_iterationCount, "f") >= __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.max_iterations) { + break; + } + __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_flushPendingToolChanges).call(this); + if (__classPrivateFieldGet2(this, _BetaToolRunner_compaction, "f").status === "scheduled" && determineNextStepFromStopReason(__classPrivateFieldGet2(this, _BetaToolRunner_lastStopReason, "f")) !== "resume") { + yield* __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compact).call(this, __classPrivateFieldGet2(this, _BetaToolRunner_compaction, "f").config); + continue; + } + __classPrivateFieldSet2(this, _BetaToolRunner_mutated, false, "f"); + __classPrivateFieldSet2(this, _BetaToolRunner_toolResponse, void 0, "f"); + __classPrivateFieldSet2(this, _BetaToolRunner_iterationCount, (_a6 = __classPrivateFieldGet2(this, _BetaToolRunner_iterationCount, "f"), _a6++, _a6), "f"); + __classPrivateFieldSet2(this, _BetaToolRunner_message, void 0, "f"); + const { max_iterations, runToolsEagerly, ...params } = __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params; + yield* __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_send).call(this, params); + if (!__classPrivateFieldGet2(this, _BetaToolRunner_mutated, "f")) { + const message = await __classPrivateFieldGet2(this, _BetaToolRunner_message, "f"); + const nextStep = determineNextStepFromStopReason(message.stop_reason); + __classPrivateFieldSet2(this, _BetaToolRunner_lastStopReason, message.stop_reason, "f"); + __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.messages.push({ + role: message.role, + content: asContentParam(message.content) + }); + const { container } = __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params; + if (message.container) { + if (container == null) { + __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.container = message.container.id; + } else if (typeof container === "object" && container.id == null) { + __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.container = { ...container, id: message.container.id }; + } + } + if (nextStep === "stop") { + yield* __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compactAfterFinalTurn).call(this); + break; + } + if (nextStep === "resume") { + continue; + } + } else { + __classPrivateFieldSet2(this, _BetaToolRunner_lastStopReason, null, "f"); + } + const toolMessage = await __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_generateToolResponse).call(this, __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.messages.at(-1)); + if (toolMessage) { + __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.messages.push(toolMessage); + } else if (!__classPrivateFieldGet2(this, _BetaToolRunner_mutated, "f")) { + yield* __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compactAfterFinalTurn).call(this); + break; + } + } finally { + __classPrivateFieldGet2(this, _BetaToolRunner_stream, "f")?.abort(); + __classPrivateFieldSet2(this, _BetaToolRunner_stream, void 0, "f"); + } + } + await __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_startedCallsSettled).call(this); + if (!__classPrivateFieldGet2(this, _BetaToolRunner_message, "f")) { + throw new AnthropicError("ToolRunner concluded without a message from the server"); + } + __classPrivateFieldGet2(this, _BetaToolRunner_completion, "f").resolve(await __classPrivateFieldGet2(this, _BetaToolRunner_message, "f")); + } catch (error) { + __classPrivateFieldSet2(this, _BetaToolRunner_consumed, false, "f"); + __classPrivateFieldGet2(this, _BetaToolRunner_completion, "f").promise.catch(() => { + }); + __classPrivateFieldGet2(this, _BetaToolRunner_completion, "f").reject(error); + __classPrivateFieldSet2(this, _BetaToolRunner_completion, promiseWithResolvers(), "f"); + throw error; + } + } + setMessagesParams(paramsOrMutator) { + const params = typeof paramsOrMutator === "function" ? paramsOrMutator(__classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params) : paramsOrMutator; + rejectCompactionParam(params); + rejectRunToolsEagerlyWithoutStream(params); + if (__classPrivateFieldGet2(this, _BetaToolRunner_compaction, "f").status !== "idle") { + rejectCompactionEdit(params); + } + if (__classPrivateFieldGet2(this, _BetaToolRunner_compaction, "f").status === "in_flight" && params.messages !== __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.messages) { + throw new AnthropicError("Message params can't be changed while the conversation is being compacted, because the compaction response is about to replace them. Change them after this iteration instead."); + } + __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params = params; + __classPrivateFieldSet2(this, _BetaToolRunner_mutated, true, "f"); + __classPrivateFieldSet2(this, _BetaToolRunner_toolResponse, void 0, "f"); + } + setRequestOptions(optionsOrMutator) { + if (typeof optionsOrMutator === "function") { + __classPrivateFieldSet2(this, _BetaToolRunner_options, optionsOrMutator(__classPrivateFieldGet2(this, _BetaToolRunner_options, "f")), "f"); + } else { + __classPrivateFieldSet2(this, _BetaToolRunner_options, { ...__classPrivateFieldGet2(this, _BetaToolRunner_options, "f"), ...optionsOrMutator }, "f"); + } + } + /** + * Get the tool response for the last message from the assistant. + * Avoids redundant tool executions by caching results. With `runToolsEagerly`, it reuses the calls of + * the reply that have started and runs the rest, including the ones `deferToolCall()` is holding, so that no + * call runs twice. + * + * @returns A promise that resolves to a BetaMessageParam containing tool results, or null if no tools need to be executed + * + * @example + * const toolResponse = await runner.generateToolResponse(); + * if (toolResponse) { + * console.log('Tool results:', toolResponse.content); + * } + */ + async generateToolResponse(signal = __classPrivateFieldGet2(this, _BetaToolRunner_options, "f").signal) { + const message = await __classPrivateFieldGet2(this, _BetaToolRunner_message, "f") ?? this.params.messages.at(-1); + if (!message) { + return null; + } + return __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_generateToolResponse).call(this, message, signal); + } + /** + * Hold a tool call of the current reply until you are done with the reply, which is when it runs without + * streaming: at the end of the loop body, or when you call `generateToolResponse()`. + * + * With `runToolsEagerly` the runner otherwise starts each call while the reply streams, as soon as + * the model has moved on from it: when the next block starts, or the reply stops with `tool_use`. A call + * never starts before your stream listeners and any `for await` over the stream have handled that event, so + * you can call this from either once you have seen the call. The other calls of the reply still start early. + * It does nothing for a call that has started, outside the loop body, and without `runToolsEagerly`. + * + * @param toolUse - The `tool_use` block of the call, or its id + * + * @example + * for await (const stream of runner) { + * stream.on('contentBlock', (block) => { + * if (block.type === 'tool_use' && block.name === 'delete_file') { + * runner.deferToolCall(block); + * } + * }); + * await stream.finalMessage(); + * // No `delete_file` call has started yet. + * } + */ + deferToolCall(toolUse) { + const id = typeof toolUse === "string" ? toolUse : toolUse.id; + if (__classPrivateFieldGet2(this, _BetaToolRunner_calls, "f") && !__classPrivateFieldGet2(this, _BetaToolRunner_calls, "f").has(id)) { + __classPrivateFieldGet2(this, _BetaToolRunner_calls, "f").set(id, { status: "held" }); + } + } + /** + * The tool calls of the current reply that `deferToolCall()` is holding, in the model's order, as their + * `tool_use` blocks. A call is in the list once its block has finished streaming, so read the list when you + * are done with the stream. A call that has started is not in it. It is empty without + * `runToolsEagerly`. + * + * Held calls are listed whatever the reply's `stop_reason`, because `generateToolResponse()` runs them + * whatever it is. After `max_tokens` the input of the last call can be cut off. + * + * @example + * for await (const stream of runner) { + * stream.on('contentBlock', (block) => { + * if (block.type === 'tool_use' && block.name === 'delete_file') { + * runner.deferToolCall(block); + * } + * }); + * await stream.finalMessage(); + * + * const held = runner.deferredToolCalls; + * if (held.length > 0 && !(await confirm(held))) break; + * } + */ + get deferredToolCalls() { + const stream5 = __classPrivateFieldGet2(this, _BetaToolRunner_stream, "f"); + const calls = __classPrivateFieldGet2(this, _BetaToolRunner_calls, "f"); + if (!(stream5 instanceof BetaToolRunnerStream) || !calls) { + return []; + } + return stream5.toolCalls.filter((toolUse) => calls.get(toolUse.id)?.status === "held"); + } + /** + * Wait for the async iterator to complete. This works even if the async iterator hasn't yet started, and + * will wait for an instance to start and go to completion. + * + * @returns A promise that resolves to the final BetaMessage when the iterator completes + * + * @example + * // Start consuming the iterator + * for await (const message of runner) { + * console.log('Message:', message.content); + * } + * + * // Meanwhile, wait for completion from another part of the code + * const finalMessage = await runner.done(); + * console.log('Final response:', finalMessage.content); + */ + done() { + return __classPrivateFieldGet2(this, _BetaToolRunner_completion, "f").promise; + } + /** + * Returns a promise indicating that the stream is done. Unlike .done(), this will eagerly read the stream: + * * If the iterator has not been consumed, consume the entire iterator and return the final message from the + * assistant. + * * If the iterator has been consumed, waits for it to complete and returns the final message. + * + * @returns A promise that resolves to the final BetaMessage from the conversation + * @throws {AnthropicError} If no messages were processed during the conversation + * + * @example + * const finalMessage = await runner.runUntilDone(); + * console.log('Final response:', finalMessage.content); + */ + async runUntilDone() { + if (!__classPrivateFieldGet2(this, _BetaToolRunner_consumed, "f")) { + for await (const _ of this) { + } + } + return this.done(); + } + /** + * Get the current parameters being used by the ToolRunner. + * + * @returns A readonly view of the current ToolRunnerParams + * + * @example + * const currentParams = runner.params; + * console.log('Current model:', currentParams.model); + * console.log('Message count:', currentParams.messages.length); + */ + get params() { + return __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params; + } + /** + * Add one or more messages to the conversation history. + * + * @param messages - One or more BetaMessageParam objects to add to the conversation + * + * @example + * runner.pushMessages( + * { role: 'user', content: 'Also, what about the weather in NYC?' } + * ); + * + * @example + * // Adding multiple messages + * runner.pushMessages( + * { role: 'user', content: 'What about NYC?' }, + * { role: 'user', content: 'And Boston?' } + * ); + */ + pushMessages(...messages) { + this.setMessagesParams((params) => ({ + ...params, + messages: [...params.messages, ...messages] + })); + } + /** + * Schedule a compaction of the conversation. Once the current turn has finished, including any tool + * calls, the runner requests a summary and replaces the message history with the compaction response, + * which is yielded like any other message. Requires the `compact-2026-09-04` beta. + * + * @param compaction - The config to send, as `messages.create()` takes it. Defaults to `{ type: 'summarize' }` + * + * @example + * for await (const message of runner) { + * if (message.usage.input_tokens > 100_000) { + * runner.compactBeforeNextTurn(); + * } + * } + */ + compactBeforeNextTurn(compaction) { + if (__classPrivateFieldGet2(this, _BetaToolRunner_compaction, "f").status === "in_flight") { + return; + } + rejectCompactionEdit(__classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params); + __classPrivateFieldSet2(this, _BetaToolRunner_compaction, { status: "scheduled", config: compaction ?? { type: "summarize" } }, "f"); + } + /** + * Give the model more tools without changing `params.tools`, which would miss the prompt cache. + * + * Each tool's whole definition is sent in a `tool_addition` block with the next request, and a + * runnable tool replaces a runnable tool of the same name straight away, even for a call already in + * the message being handled. A call that started while the reply streamed keeps the old one. A raw + * definition is only sent: the runner never runs it, and stops running a tool of the same name. + * Requires the `inline-tools-2026-09-15` beta, which the runner does not add for you. + * + * @param tools - Runnable tools (for example from `betaZodTool()`) or raw tool definitions + * + * @example + * runner.addTools(queryDatabaseTool); + */ + addTools(...tools) { + for (const tool of tools) { + if ("name" in tool) { + __classPrivateFieldGet2(this, _BetaToolRunner_toolOverrides, "f").set(tool.name, "run" in tool ? tool : null); + } + __classPrivateFieldGet2(this, _BetaToolRunner_pendingToolChanges, "f").push({ type: "addition", tool }); + } + } + /** + * Take tools away from the model without changing `params.tools`, which would miss the prompt cache. + * + * The tools stop being run straight away: a call to one of them, even one in the message being + * handled, gets the same "not found" error result as a call to an unknown tool. A call that started + * while the reply streamed finishes as usual. The model is told in a `tool_removal` block with the + * next request. Use {@link addTools} to bring a tool back. + * Requires the `inline-tools-2026-09-15` beta, which the runner does not add for you. + * + * @param tools - The tools to remove, or their names + * + * @example + * runner.removeTools('query_database'); + */ + removeTools(...tools) { + for (const tool of tools) { + const name = typeof tool === "string" ? tool : tool.name; + __classPrivateFieldGet2(this, _BetaToolRunner_toolOverrides, "f").set(name, null); + __classPrivateFieldGet2(this, _BetaToolRunner_pendingToolChanges, "f").push({ type: "removal", name }); + } + } + /** + * Makes the ToolRunner directly awaitable, equivalent to calling .runUntilDone() + * This allows using `await runner` instead of `await runner.runUntilDone()` + */ + then(onfulfilled, onrejected) { + return this.runUntilDone().then(onfulfilled, onrejected); + } + } + _BetaToolRunner_send = /** + * Sends one request and yields its message, or its stream when streaming. `#message` and `#stream` are set + * before the yield, so they are there while the caller handles the item; the loop aborts the stream at the + * end of the iteration. + */ + async function* _BetaToolRunner_send2(params) { + await __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_startedCallsSettled).call(this); + __classPrivateFieldSet2(this, _BetaToolRunner_calls, void 0, "f"); + if (params.stream) { + __classPrivateFieldSet2(this, _BetaToolRunner_stream, __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.runToolsEagerly ? __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_streamThatStartsTools).call(this, params) : this.client.beta.messages.stream({ ...params }, __classPrivateFieldGet2(this, _BetaToolRunner_options, "f")), "f"); + __classPrivateFieldSet2(this, _BetaToolRunner_message, __classPrivateFieldGet2(this, _BetaToolRunner_stream, "f").finalMessage(), "f"); + __classPrivateFieldGet2(this, _BetaToolRunner_message, "f").catch(() => { + }); + yield __classPrivateFieldGet2(this, _BetaToolRunner_stream, "f"); + } else { + __classPrivateFieldSet2(this, _BetaToolRunner_message, this.client.beta.messages.create({ ...params, stream: false }, __classPrivateFieldGet2(this, _BetaToolRunner_options, "f")), "f"); + yield __classPrivateFieldGet2(this, _BetaToolRunner_message, "f"); + } + }, _BetaToolRunner_streamThatStartsTools = function _BetaToolRunner_streamThatStartsTools2(params) { + const calls = /* @__PURE__ */ new Map(); + __classPrivateFieldSet2(this, _BetaToolRunner_calls, calls, "f"); + return BetaToolRunnerStream.start(this.client.beta.messages, params, __classPrivateFieldGet2(this, _BetaToolRunner_options, "f"), (toolUse) => { + if (calls.has(toolUse.id)) { + return; + } + const result = runToolCall(__classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_runnableTools).call(this), __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_availableToolNames).call(this), toolUse, __classPrivateFieldGet2(this, _BetaToolRunner_options, "f")); + result.catch(() => { + }); + calls.set(toolUse.id, { status: "started", result }); + }); + }, _BetaToolRunner_startedCallsSettled = /** Waits for the calls of the last streamed reply that have started, whether or not their results were sent. */ + async function _BetaToolRunner_startedCallsSettled2() { + const started = [...__classPrivateFieldGet2(this, _BetaToolRunner_calls, "f")?.values() ?? []].filter((call) => call.status === "started"); + await Promise.allSettled(started.map((call) => call.result)); + }, _BetaToolRunner_compact = async function* _BetaToolRunner_compact2(compaction) { + rejectCompactionEdit(__classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params); + const { max_iterations, runToolsEagerly, ...requestParams } = __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params; + const params = withoutCompactionIncompatibleParams(requestParams); + __classPrivateFieldSet2(this, _BetaToolRunner_compaction, { status: "in_flight" }, "f"); + __classPrivateFieldSet2(this, _BetaToolRunner_toolResponse, void 0, "f"); + const lastMessage = __classPrivateFieldGet2(this, _BetaToolRunner_message, "f"); + try { + yield* __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_send).call(this, { ...params, compaction }); + const message = await __classPrivateFieldGet2(this, _BetaToolRunner_message, "f"); + if (message.content.some((block) => block.type === "compaction" && block.content)) { + __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_recordRemovalsFromHistory).call(this); + __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.messages = [{ role: message.role, content: message.content }]; + } else { + loggerFor2(this.client).warn("Compaction produced no summary; keeping the conversation as it is."); + __classPrivateFieldSet2(this, _BetaToolRunner_message, lastMessage, "f"); + } + } finally { + __classPrivateFieldSet2(this, _BetaToolRunner_compaction, { status: "idle" }, "f"); + } + }, _BetaToolRunner_runnableTools = function _BetaToolRunner_runnableTools2() { + const runnable = /* @__PURE__ */ new Map(); + for (const tool of __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.tools) { + if ("run" in tool) { + runnable.set(tool.name, tool); + } + } + for (const [name, tool] of __classPrivateFieldGet2(this, _BetaToolRunner_toolOverrides, "f")) { + if (tool) { + runnable.set(name, tool); + } else { + runnable.delete(name); + } + } + return runnable; + }, _BetaToolRunner_availableToolNames = function _BetaToolRunner_availableToolNames2() { + const available = new Set(__classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_runnableTools).call(this).keys()); + for (const message of [...__classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.messages, __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_pendingToolChangesMessage).call(this)]) { + if (typeof message.content === "string") { + continue; + } + for (const block of message.content) { + if (message.role === "system") { + applyToolChange(block, available); + } else if (message.role === "assistant" && block.type === "compaction") { + for (const change of block.tool_changes ?? []) { + applyToolChange(change, available); + } + } + } + } + return available; + }, _BetaToolRunner_recordRemovalsFromHistory = function _BetaToolRunner_recordRemovalsFromHistory2() { + const available = __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_availableToolNames).call(this); + for (const name of __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_runnableTools).call(this).keys()) { + if (!available.has(name)) { + __classPrivateFieldGet2(this, _BetaToolRunner_toolOverrides, "f").set(name, null); + } + } + }, _BetaToolRunner_compactAfterFinalTurn = async function* _BetaToolRunner_compactAfterFinalTurn2() { + if (__classPrivateFieldGet2(this, _BetaToolRunner_compaction, "f").status !== "scheduled") { + return; + } + const lastContent = __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.messages.at(-1)?.content; + if (Array.isArray(lastContent) && lastContent.some((block) => block.type === "tool_use")) { + loggerFor2(this.client).warn("The pending compaction was skipped because the last turn ended with tool calls that were not run. Call `compactBeforeNextTurn()` again if you continue the conversation."); + __classPrivateFieldSet2(this, _BetaToolRunner_compaction, { status: "idle" }, "f"); + return; + } + yield* __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_compact).call(this, __classPrivateFieldGet2(this, _BetaToolRunner_compaction, "f").config); + }, _BetaToolRunner_generateToolResponse = async function _BetaToolRunner_generateToolResponse2(lastMessage, signal = __classPrivateFieldGet2(this, _BetaToolRunner_options, "f").signal) { + if (__classPrivateFieldGet2(this, _BetaToolRunner_toolResponse, "f") !== void 0) { + return __classPrivateFieldGet2(this, _BetaToolRunner_toolResponse, "f"); + } + __classPrivateFieldSet2(this, _BetaToolRunner_toolResponse, generateToolResponse(__classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_runnableTools).call(this), __classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_availableToolNames).call(this), lastMessage, { ...__classPrivateFieldGet2(this, _BetaToolRunner_options, "f"), signal }, __classPrivateFieldGet2(this, _BetaToolRunner_calls, "f")), "f"); + return __classPrivateFieldGet2(this, _BetaToolRunner_toolResponse, "f"); + }, _BetaToolRunner_flushPendingToolChanges = function _BetaToolRunner_flushPendingToolChanges2() { + if (__classPrivateFieldGet2(this, _BetaToolRunner_lastStopReason, "f") === "pause_turn" || __classPrivateFieldGet2(this, _BetaToolRunner_pendingToolChanges, "f").length === 0) { + return; + } + __classPrivateFieldGet2(this, _BetaToolRunner_state, "f").params.messages.push(__classPrivateFieldGet2(this, _BetaToolRunner_instances, "m", _BetaToolRunner_pendingToolChangesMessage).call(this)); + __classPrivateFieldSet2(this, _BetaToolRunner_pendingToolChanges, [], "f"); + }, _BetaToolRunner_pendingToolChangesMessage = function _BetaToolRunner_pendingToolChangesMessage2() { + const content = []; + for (const change of __classPrivateFieldGet2(this, _BetaToolRunner_pendingToolChanges, "f")) { + if (change.type === "removal") { + content.push({ type: "tool_removal", tool: { type: "tool_reference", name: change.name } }); + continue; + } + let definition = change.tool; + if ("run" in change.tool) { + const { run: run2, parse: parse2, close, ...rest } = change.tool; + definition = rest; + } + content.push({ type: "tool_addition", tool: { type: "tool_definition", definition } }); + } + return { role: "system", content }; + }; + return BetaToolRunner2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.mjs +function transformOutputFormat(params) { + if (!params.output_format) { + return params; + } + if (params.output_config?.format) { + throw new AnthropicError("Both output_format and output_config.format were provided. Please use only output_config.format (output_format is deprecated)."); + } + const { output_format, ...rest } = params; + return { + ...rest, + output_config: { + ...params.output_config, + format: output_format + } + }; +} +var DEPRECATED_MODELS, MODELS_TO_WARN_WITH_THINKING_ENABLED, Messages3; +var init_messages3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/messages/messages.mjs"() { + init_error4(); + init_batches2(); + init_resource2(); + init_constants(); + init_headers3(); + init_stainless_helper_header(); + init_beta_parser(); + init_BetaMessageStream(); + init_BetaToolRunner(); + init_ToolError(); + init_batches2(); + DEPRECATED_MODELS = {}; + MODELS_TO_WARN_WITH_THINKING_ENABLED = ["claude-mythos-preview", "claude-opus-4-6"]; + Messages3 = /* @__PURE__ */ (() => { + class Messages5 extends APIResource2 { + constructor() { + super(...arguments); + this.batches = new Batches2(this._client); + } + create(params, options) { + const modifiedParams = transformOutputFormat(params); + const { betas, user_profile_id, workspace_id, ...body } = modifiedParams; + if (body.model in DEPRECATED_MODELS) { + console.warn(`The model '${body.model}' is deprecated and will reach end-of-life on ${DEPRECATED_MODELS[body.model]} +Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`); + } + if (MODELS_TO_WARN_WITH_THINKING_ENABLED.includes(body.model) && body.thinking && body.thinking.type === "enabled") { + console.warn(`Using Claude with ${body.model} and 'thinking.type=enabled' is deprecated. Use 'thinking.type=adaptive' instead which results in better model performance in our testing: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking`); + } + let timeout = options?.timeout ?? this._client._options.timeout; + if (!body.stream && timeout == null) { + const maxNonstreamingTokens = MODEL_NONSTREAMING_TOKENS[body.model] ?? void 0; + timeout = this._client.calculateNonstreamingTimeout(body.max_tokens, maxNonstreamingTokens); + } + const helperHeader2 = stainlessHelperHeader(body.tools, body.messages); + return this._client.post("/v1/messages?beta=true", { + body, + timeout: timeout ?? 6e5, + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + helperHeader2, + options?.headers + ]), + stream: modifiedParams.stream ?? false + }); + } + /** + * Send a structured list of input messages with text and/or image content, along with an expected `output_format` and + * the response will be automatically parsed and available in the `parsed_output` property of the message. + * + * @example + * ```ts + * const message = await client.beta.messages.parse({ + * model: 'claude-3-5-sonnet-20241022', + * max_tokens: 1024, + * messages: [{ role: 'user', content: 'What is 2+2?' }], + * output_format: zodOutputFormat(z.object({ answer: z.number() }), 'math'), + * }); + * + * console.log(message.parsed_output?.answer); // 4 + * ``` + */ + parse(params, options) { + options = { + ...options, + headers: buildHeaders2([ + { "anthropic-beta": [...params.betas ?? [], "structured-outputs-2025-12-15"].toString() }, + options?.headers + ]) + }; + return this.create(params, options).then((message) => parseBetaMessage(message, params, { logger: this._client.logger ?? console })); + } + /** + * Create a Message stream + */ + stream(body, options) { + return BetaMessageStream.createMessage(this, body, options); + } + /** + * Count the number of tokens in a Message. + * + * The Token Count API can be used to count the number of tokens in a Message, + * including tools, images, and documents, without creating it. + * + * Learn more about token counting in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/token-counting) + * + * @example + * ```ts + * const betaMessageTokensCount = + * await client.beta.messages.countTokens({ + * messages: [{ content: 'Hello, world', role: 'user' }], + * model: 'claude-opus-5', + * }); + * ``` + */ + countTokens(params, options) { + const modifiedParams = transformOutputFormat(params); + const { betas, user_profile_id, workspace_id, ...body } = modifiedParams; + return this._client.post("/v1/messages/count_tokens?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "token-counting-2024-11-01"].toString(), + ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + toolRunner(body, options) { + return new BetaToolRunner(this._client, body, options); + } + } + Messages5.Batches = Batches2; + Messages5.BetaToolRunner = BetaToolRunner; + Messages5.ToolError = ToolError; + return Messages5; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.mjs +var APIKeys3; +var init_api_keys3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/api-keys.mjs"() { + init_resource2(); + init_pagination2(); + init_path2(); + APIKeys3 = class extends APIResource2 { + /** + * Get API Key + * + * @example + * ```ts + * const betaAPIKey = + * await client.beta.organization.apiKeys.retrieve( + * 'api_key_id', + * ); + * ``` + */ + retrieve(apiKeyID, options) { + return this._client.get(path3`/v1/organizations/api_keys/${apiKeyID}?beta=true`, options); + } + /** + * Update API Key + * + * @example + * ```ts + * const betaAPIKey = + * await client.beta.organization.apiKeys.update( + * 'api_key_id', + * ); + * ``` + */ + update(apiKeyID, body, options) { + return this._client.post(path3`/v1/organizations/api_keys/${apiKeyID}?beta=true`, { body, ...options }); + } + /** + * List API Keys + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaAPIKey of client.beta.organization.apiKeys.list()) { + * // ... + * } + * ``` + */ + list(query = {}, options) { + return this._client.getAPIList("/v1/organizations/api_keys?beta=true", Page2, { + query, + ...options + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.mjs +var ComplianceSettings; +var init_compliance_settings = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/compliance-settings.mjs"() { + init_resource2(); + ComplianceSettings = class extends APIResource2 { + /** + * Retrieve your organization's Compliance Settings. + * + * Compliance Settings is a singleton resource: there is exactly one per + * organization, addressed without an identifier. The `state` field reflects + * whether the Compliance API is enabled. An organization with a parent + * organization reads the state inherited from the parent's configuration. + * + * @example + * ```ts + * const betaComplianceSettings = + * await client.beta.organization.complianceSettings.retrieve(); + * ``` + */ + retrieve(options) { + return this._client.get("/v1/organizations/compliance_settings?beta=true", options); + } + /** + * Update your organization's Compliance Settings. + * + * Setting `state` to `enabled` turns on the Compliance API and begins capturing + * organization activity events. Setting it to `disabled` turns both off. `state` + * reflects whether the Compliance API is enabled. + * + * A request that sets `state` to its current value succeeds and leaves the + * resource unchanged. A `disabled` request stays in effect until a later `enabled` + * request or the organization's next provisioning action that enables Access + * Transparency: enabling Access Transparency also enables the Compliance API, + * which serves its activity events, so such provisioning (including re-runs) + * re-enables the Compliance API even after a `disabled` request. Automated + * provisioning never disables compliance settings. + * + * @example + * ```ts + * const betaComplianceSettings = + * await client.beta.organization.complianceSettings.update({ + * state: { type: 'enabled' }, + * }); + * ``` + */ + update(body, options) { + return this._client.post("/v1/organizations/compliance_settings?beta=true", { body, ...options }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.mjs +var ExternalKeys; +var init_external_keys = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/external-keys.mjs"() { + init_resource2(); + init_pagination2(); + init_path2(); + ExternalKeys = class extends APIResource2 { + /** + * Create an external key config owned by the caller's organization. + * + * @example + * ```ts + * const betaExternalKey = + * await client.beta.organization.externalKeys.create({ + * provider_config: { + * kms_arn: + * 'arn:aws:kms:us-east-1:111122223333:key/abcd1234-5678-90ab-cdef-000011112222', + * type: 'aws', + * }, + * }); + * ``` + */ + create(body, options) { + return this._client.post("/v1/organizations/external_keys?beta=true", { body, ...options }); + } + /** + * Retrieve a single external key config in the caller's organization by ID. + * + * @example + * ```ts + * const betaExternalKey = + * await client.beta.organization.externalKeys.retrieve( + * 'external_key_id', + * ); + * ``` + */ + retrieve(externalKeyID, options) { + return this._client.get(path3`/v1/organizations/external_keys/${externalKeyID}?beta=true`, options); + } + /** + * Partially update an external key config. Omitted fields are left unchanged. + * + * `display_name` is always editable. `geo` and `provider_config` cannot be changed + * once any workspace references this config, because previously encrypted data + * requires the original key identity to decrypt. + * + * @example + * ```ts + * const betaExternalKey = + * await client.beta.organization.externalKeys.update( + * 'external_key_id', + * ); + * ``` + */ + update(externalKeyID, body, options) { + return this._client.post(path3`/v1/organizations/external_keys/${externalKeyID}?beta=true`, { + body, + ...options + }); + } + /** + * List external key configs in the caller's organization. + * + * Results are ordered by creation time (newest first). Use the `next_page` cursor + * from the response to fetch subsequent pages. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaExternalKey of client.beta.organization.externalKeys.list()) { + * // ... + * } + * ``` + */ + list(query = {}, options) { + return this._client.getAPIList("/v1/organizations/external_keys?beta=true", PageCursor, { + query, + ...options + }); + } + /** + * Delete an external key config. + * + * The request is rejected if any workspace still references this config. + * + * @example + * ```ts + * const externalKey = + * await client.beta.organization.externalKeys.delete( + * 'external_key_id', + * ); + * ``` + */ + delete(externalKeyID, options) { + return this._client.delete(path3`/v1/organizations/external_keys/${externalKeyID}?beta=true`, options); + } + /** + * Validate an external key config against the customer's KMS. + * + * Anthropic performs an encrypt/decrypt roundtrip against the configured KMS key + * and waits up to 30 seconds for the result. The response status is `success` if + * the roundtrip succeeded, or `failure` with an error message if it failed or + * timed out. + * + * @example + * ```ts + * const response = + * await client.beta.organization.externalKeys.validate( + * 'external_key_id', + * ); + * ``` + */ + validate(externalKeyID, options) { + return this._client.post(path3`/v1/organizations/external_keys/${externalKeyID}/validate?beta=true`, options); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.mjs +var Invites2; +var init_invites2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/invites.mjs"() { + init_resource2(); + init_pagination2(); + init_path2(); + Invites2 = class extends APIResource2 { + /** + * Invite a user to join the organization by email. + * + * On plans that draw members from a finite pool of purchased seats, the invite + * automatically consumes a seat from the lowest tier with availability; there is + * no seat-tier parameter. When no seat is free the request fails with a 400 error + * rather than purchasing a seat. + * + * @example + * ```ts + * const betaOrganizationInvite = + * await client.beta.organization.invites.create({ + * email: 'user@emaildomain.com', + * role: 'user', + * }); + * ``` + */ + create(body, options) { + return this._client.post("/v1/organizations/invites?beta=true", { body, ...options }); + } + /** + * Retrieve an invite by ID. + * + * @example + * ```ts + * const betaOrganizationInvite = + * await client.beta.organization.invites.retrieve( + * 'invite_id', + * ); + * ``` + */ + retrieve(inviteID, options) { + return this._client.get(path3`/v1/organizations/invites/${inviteID}?beta=true`, options); + } + /** + * List the organization's invites. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaOrganizationInvite of client.beta.organization.invites.list()) { + * // ... + * } + * ``` + */ + list(query = {}, options) { + return this._client.getAPIList("/v1/organizations/invites?beta=true", Page2, { + query, + ...options + }); + } + /** + * Delete a pending invite. + * + * @example + * ```ts + * const invite = + * await client.beta.organization.invites.delete( + * 'invite_id', + * ); + * ``` + */ + delete(inviteID, options) { + return this._client.delete(path3`/v1/organizations/invites/${inviteID}?beta=true`, options); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.mjs +var RateLimits2; +var init_rate_limits2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/rate-limits.mjs"() { + init_resource2(); + init_pagination2(); + RateLimits2 = class extends APIResource2 { + /** + * List Messages API rate limits for your organization. + * + * Each entry corresponds to one rate-limit group (either a model family or an + * API-surface category such as the Files API or Message Batches) and contains the + * set of limiter values that apply to it. + * + * When `limit` is omitted, every matching entry is returned in a single page; when + * `limit` truncates the result, follow `next_page` to fetch the remaining entries. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaOrganizationRateLimit of client.beta.organization.rateLimits.list()) { + * // ... + * } + * ``` + */ + list(query = {}, options) { + return this._client.getAPIList("/v1/organizations/rate_limits?beta=true", PageCursor, { query, ...options }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/users.mjs +var Users4; +var init_users4 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/users.mjs"() { + init_resource2(); + init_pagination2(); + init_path2(); + Users4 = class extends APIResource2 { + /** + * Retrieve a member of the organization by user ID. + * + * @example + * ```ts + * const betaOrganizationUser = + * await client.beta.organization.users.retrieve('user_id'); + * ``` + */ + retrieve(userID, options) { + return this._client.get(path3`/v1/organizations/users/${userID}?beta=true`, options); + } + /** + * Update a member's organization role. + * + * @example + * ```ts + * const betaOrganizationUser = + * await client.beta.organization.users.update('user_id', { + * role: 'user', + * }); + * ``` + */ + update(userID, body, options) { + return this._client.post(path3`/v1/organizations/users/${userID}?beta=true`, { body, ...options }); + } + /** + * List the organization's members. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaOrganizationUser of client.beta.organization.users.list()) { + * // ... + * } + * ``` + */ + list(query = {}, options) { + return this._client.getAPIList("/v1/organizations/users?beta=true", Page2, { + query, + ...options + }); + } + /** + * Remove a member from the organization. + * + * @example + * ```ts + * const user = await client.beta.organization.users.remove( + * 'user_id', + * ); + * ``` + */ + remove(userID, options) { + return this._client.delete(path3`/v1/organizations/users/${userID}?beta=true`, options); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.mjs +var Issuers; +var init_issuers = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/issuers.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Issuers = class extends APIResource2 { + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Register an OIDC issuer that Anthropic will trust for workload identity + * federation in your organization. + * + * The `jwks` field controls how the issuer's signing keys are obtained and takes + * one of three shapes selected by `type`: `discovery` (resolve keys through OIDC + * discovery), `explicit_url` (fetch keys from a fixed JWKS URL), or `inline` + * (provide a static key set). When `jwks.type` is `discovery` and no + * `discovery_base` is set, the issuer URL must be publicly reachable over HTTPS so + * Anthropic can fetch the discovery document; for `explicit_url` and `inline` + * modes the issuer URL is only matched as the JWT's `iss` claim and is not + * fetched. + * + * @example + * ```ts + * const betaFederationIssuer = + * await client.beta.organization.federation.issuers.create({ + * issuer_url: 'x', + * name: 'x', + * }); + * ``` + */ + create(params, options) { + const { betas, ...body } = params; + return this._client.post("/v1/organizations/federation_issuers?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Retrieve a federation issuer by its ID (`fdis_...`). + * + * @example + * ```ts + * const betaFederationIssuer = + * await client.beta.organization.federation.issuers.retrieve( + * 'federation_issuer_id', + * ); + * ``` + */ + retrieve(federationIssuerID, params = {}, options) { + const { betas } = params ?? {}; + return this._client.get(path3`/v1/organizations/federation_issuers/${federationIssuerID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Partially update a federation issuer. + * + * Setting `jwks` replaces the full JWKS shape at once. Archived issuers cannot be + * updated; this returns 400. Create a new issuer instead. + * + * Updating an issuer that backs a rule with a scope outside `workspace:developer` + * or `workspace:inference` requires a Console session. + * + * @example + * ```ts + * const betaFederationIssuer = + * await client.beta.organization.federation.issuers.update( + * 'federation_issuer_id', + * ); + * ``` + */ + update(federationIssuerID, params, options) { + const { betas, ...body } = params; + return this._client.post(path3`/v1/organizations/federation_issuers/${federationIssuerID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * List federation issuers in your organization. + * + * Archived issuers are excluded unless `include_archived=true`. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaFederationIssuer of client.beta.organization.federation.issuers.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, ...query } = params ?? {}; + return this._client.getAPIList("/v1/organizations/federation_issuers?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Archive a federation issuer. + * + * Idempotent; re-archiving returns the issuer with its original `archived_at`. + * Rejected with 400 if any live (non-archived) federation rule still references + * the issuer; archive those rules first (a rule's issuer cannot be changed), or + * recreate them against another issuer. + * + * @example + * ```ts + * const betaFederationIssuer = + * await client.beta.organization.federation.issuers.archive( + * 'federation_issuer_id', + * ); + * ``` + */ + archive(federationIssuerID, params = {}, options) { + const { betas } = params ?? {}; + return this._client.post(path3`/v1/organizations/federation_issuers/${federationIssuerID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.mjs +var Workspaces; +var init_workspaces = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/workspaces.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Workspaces = class extends APIResource2 { + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * List workspaces where this federation rule is enabled. + * + * Returns all workspace enablements in a single response; the `limit` and `page` + * parameters are accepted but have no effect, and `next_page` is always `null`. + * Returns explicit per-workspace enablements only; for rules with + * `applies_to_all_workspaces` or a legacy single `workspace_id`, check those + * fields on the rule itself. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaFederationRuleWorkspace of client.beta.organization.federation.rules.workspaces.list( + * 'federation_rule_id', + * )) { + * // ... + * } + * ``` + */ + list(federationRuleID, params = {}, options) { + const { betas, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/organizations/federation_rules/${federationRuleID}/workspaces?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Enable a federation rule for a workspace. + * + * Idempotent; re-enabling returns the existing enablement. The rule and workspace + * must both belong to your organization. Membership of the rule's target service + * account in this workspace is not checked at enablement: token exchange into this + * workspace is rejected unless the target is a member (it is implicitly a member + * of the default workspace). Archived rules are rejected with 400. OAuth callers + * may only manage rules whose `oauth_scope` is `workspace:developer` or + * `workspace:inference`; other scopes require a Console session. + * + * @example + * ```ts + * const betaFederationRuleWorkspace = + * await client.beta.organization.federation.rules.workspaces.add( + * 'federation_rule_id', + * { workspace_id: 'workspace_id' }, + * ); + * ``` + */ + add(federationRuleID, params, options) { + const { betas, ...body } = params; + return this._client.post(path3`/v1/organizations/federation_rules/${federationRuleID}/workspaces?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Disable a federation rule for a workspace. + * + * Idempotent; succeeds even if the enablement was already removed. OAuth callers + * may only manage rules whose `oauth_scope` is `workspace:developer` or + * `workspace:inference`; other scopes require a Console session. + * + * @example + * ```ts + * const workspace = + * await client.beta.organization.federation.rules.workspaces.remove( + * 'workspace_id', + * { federation_rule_id: 'federation_rule_id' }, + * ); + * ``` + */ + remove(workspaceID, params, options) { + const { federation_rule_id, betas } = params; + return this._client.delete(path3`/v1/organizations/federation_rules/${federation_rule_id}/workspaces/${workspaceID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.mjs +var Rules; +var init_rules = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/rules/rules.mjs"() { + init_resource2(); + init_workspaces(); + init_workspaces(); + init_pagination2(); + init_headers3(); + init_path2(); + Rules = /* @__PURE__ */ (() => { + class Rules2 extends APIResource2 { + constructor() { + super(...arguments); + this.workspaces = new Workspaces(this._client); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Create a federation rule owned by your organization. + * + * The referenced issuer and the target service account must already exist in the + * same organization; invalid references are rejected with a 400 error. The + * workspace reference is validated. Membership is not checked at rule creation: + * token exchange resolves a single enabled workspace per call and is rejected + * unless the target service account is a member of that workspace (it is + * implicitly a member of the default workspace). Rules on well-known shared + * issuers (GitHub Actions, GitLab, Buildkite, Terraform Cloud, Google) must + * constrain tenant identity via an identity-bearing claim, a tenant-pinning + * subject prefix (such as `repo:YOUR_ORG/...`), or a CEL condition referencing one + * of those identity claims (e.g. `claims.repository_owner`). OAuth callers may + * only manage rules whose `oauth_scope` is `workspace:developer` or + * `workspace:inference`; other scopes require a Console session. + * + * @example + * ```ts + * const betaFederationRule = + * await client.beta.organization.federation.rules.create({ + * issuer_id: 'issuer_id', + * match: {}, + * name: 'x', + * oauth_scope: 'x', + * target: { + * service_account_id: 'svac_01SDCCSbTxrXDpWc1phhtcfK', + * type: 'service_account', + * }, + * }); + * ``` + */ + create(params, options) { + const { betas, ...body } = params; + return this._client.post("/v1/organizations/federation_rules?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Retrieve a federation rule by its ID (`fdrl_...`). + * + * @example + * ```ts + * const betaFederationRule = + * await client.beta.organization.federation.rules.retrieve( + * 'federation_rule_id', + * ); + * ``` + */ + retrieve(federationRuleID, params = {}, options) { + const { betas } = params ?? {}; + return this._client.get(path3`/v1/organizations/federation_rules/${federationRuleID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Partially update a federation rule. + * + * `issuer_id` is immutable. `match` and `target` are replaced as whole objects + * when set. Referenced service accounts and workspaces must exist in your + * organization; invalid references are rejected with a 400 error. Archived rules + * cannot be updated; this returns 400. Create a new rule instead. Rules on + * well-known shared issuers (GitHub Actions, GitLab, Buildkite, Terraform Cloud, + * Google) must constrain tenant identity via an identity-bearing claim, a + * tenant-pinning subject prefix (such as `repo:YOUR_ORG/...`), or a CEL condition + * referencing one of those identity claims (e.g. `claims.repository_owner`). On + * these issuers the requirement is re-checked on every update; if an existing + * rule's stored match does not yet constrain tenant identity, any update (even a + * rename or description change) must also supply a conforming `match` in the same + * request. OAuth callers may only manage rules whose `oauth_scope` is + * `workspace:developer` or `workspace:inference`; other scopes require a Console + * session. + * + * @example + * ```ts + * const betaFederationRule = + * await client.beta.organization.federation.rules.update( + * 'federation_rule_id', + * ); + * ``` + */ + update(federationRuleID, params, options) { + const { betas, ...body } = params; + return this._client.post(path3`/v1/organizations/federation_rules/${federationRuleID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * List federation rules in your organization. + * + * Optionally filter by issuer with `issuer_id`. Archived rules are excluded unless + * `include_archived=true`. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaFederationRule of client.beta.organization.federation.rules.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, ...query } = params ?? {}; + return this._client.getAPIList("/v1/organizations/federation_rules?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Archive a federation rule. + * + * Token exchange through this rule stops immediately. Idempotent; re-archiving + * returns the rule with its original `archived_at`. Archiving clears the rule's + * workspace targeting (`workspace_id` and `workspace_ids` are emptied). Tokens + * already minted before archive remain valid until they expire. OAuth callers may + * only manage rules whose `oauth_scope` is `workspace:developer` or + * `workspace:inference`; other scopes require a Console session. + * + * @example + * ```ts + * const betaFederationRule = + * await client.beta.organization.federation.rules.archive( + * 'federation_rule_id', + * ); + * ``` + */ + archive(federationRuleID, params = {}, options) { + const { betas } = params ?? {}; + return this._client.post(path3`/v1/organizations/federation_rules/${federationRuleID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + } + Rules2.Workspaces = Workspaces; + return Rules2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.mjs +var Federation; +var init_federation = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/federation/federation.mjs"() { + init_resource2(); + init_issuers(); + init_issuers(); + init_rules(); + init_rules(); + Federation = /* @__PURE__ */ (() => { + class Federation2 extends APIResource2 { + constructor() { + super(...arguments); + this.issuers = new Issuers(this._client); + this.rules = new Rules(this._client); + } + } + Federation2.Issuers = Issuers; + Federation2.Rules = Rules; + return Federation2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.mjs +var Workspaces2; +var init_workspaces2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/workspaces.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Workspaces2 = class extends APIResource2 { + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * List the workspaces a service account is a member of. + * + * Each entry includes the service account's `workspace_role` in that workspace. + * Use `limit` and the `next_page` cursor to paginate. When the service account has + * no explicit default-workspace membership, the implicit (`implicit: true`) + * membership is returned as the first entry on the first page; with `limit=1` the + * first page may return up to 2 entries (the implicit entry plus one explicit + * membership) so a pagination cursor can be derived. Memberships are returned only + * while the service account is active. Without a `page` cursor, an archived + * service account returns an empty list. A `page` cursor that does not match an + * active membership returns a 400 invalid-request error. A cursor stops matching + * when the membership is removed, the workspace is deleted, or the service account + * is archived. Restart pagination from the first page to recover. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaServiceAccountWorkspaceMember of client.beta.organization.serviceAccounts.workspaces.list( + * 'service_account_id', + * )) { + * // ... + * } + * ``` + */ + list(serviceAccountID, params = {}, options) { + const { betas, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/organizations/service_accounts/${serviceAccountID}/workspaces?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Add a service account to a workspace with the given `workspace_role`. + * + * Mirror of `POST /workspaces/{workspace_id}/service_accounts`, addressed from the + * service-account side; both create the same membership. If the service account is + * already an explicit member of the workspace, its `workspace_role` is replaced + * with the value supplied here. Archived workspaces return 400. Archived service + * accounts cannot be added and are rejected. + * + * @example + * ```ts + * const betaServiceAccountWorkspaceMember = + * await client.beta.organization.serviceAccounts.workspaces.add( + * 'service_account_id', + * { + * workspace_id: 'workspace_id', + * workspace_role: 'workspace_admin', + * }, + * ); + * ``` + */ + add(serviceAccountID, params, options) { + const { betas, ...body } = params; + return this._client.post(path3`/v1/organizations/service_accounts/${serviceAccountID}/workspaces?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Remove a service account from a workspace. + * + * Mirror of + * `DELETE /workspaces/{workspace_id}/service_accounts/{service_account_id}`, + * addressed from the service-account side. Removal is idempotent (returns 200 even + * if the membership was already removed). A DELETE against the implicit + * default-workspace membership returns 200 but is a no-op and the membership + * persists; deleting an explicit default-workspace row reverts to the implicit + * `workspace_user` membership. Archived workspaces return 400. + * + * @example + * ```ts + * const workspace = + * await client.beta.organization.serviceAccounts.workspaces.remove( + * 'workspace_id', + * { service_account_id: 'service_account_id' }, + * ); + * ``` + */ + remove(workspaceID, params, options) { + const { service_account_id, betas } = params; + return this._client.delete(path3`/v1/organizations/service_accounts/${service_account_id}/workspaces/${workspaceID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.mjs +var ServiceAccounts2; +var init_service_accounts2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/service-accounts/service-accounts.mjs"() { + init_resource2(); + init_workspaces2(); + init_workspaces2(); + init_pagination2(); + init_headers3(); + init_path2(); + ServiceAccounts2 = /* @__PURE__ */ (() => { + class ServiceAccounts4 extends APIResource2 { + constructor() { + super(...arguments); + this.workspaces = new Workspaces2(this._client); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Create a service account. + * + * A service account is a named workload identity that federation rules target. + * `organization_role` is `developer` (default) or `admin`; a rule may only be + * created or retargeted to grant `org:admin` scope when the target's + * `organization_role` is `admin`. Creating an `admin`-role service account + * requires an interactive credential (a user OAuth token or a Console session) — a + * workload may only create `developer`-role service accounts. + * + * @example + * ```ts + * const betaServiceAccount = + * await client.beta.organization.serviceAccounts.create({ + * name: 'ci-deploy-bot', + * }); + * ``` + */ + create(params, options) { + const { betas, ...body } = params; + return this._client.post("/v1/organizations/service_accounts?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Retrieve a service account by its ID (`svac_...`). + * + * @example + * ```ts + * const betaServiceAccount = + * await client.beta.organization.serviceAccounts.retrieve( + * 'service_account_id', + * ); + * ``` + */ + retrieve(serviceAccountID, params = {}, options) { + const { betas } = params ?? {}; + return this._client.get(path3`/v1/organizations/service_accounts/${serviceAccountID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Update a service account. + * + * Only `description` and `organization_role` are mutable; `name` cannot be + * changed. Archived service accounts cannot be updated; this returns 400. Setting + * `organization_role` to `admin` (even when unchanged) requires an interactive + * credential (a user OAuth token or a Console session). + * + * @example + * ```ts + * const betaServiceAccount = + * await client.beta.organization.serviceAccounts.update( + * 'service_account_id', + * ); + * ``` + */ + update(serviceAccountID, params, options) { + const { betas, ...body } = params; + return this._client.post(path3`/v1/organizations/service_accounts/${serviceAccountID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * List service accounts in the caller's organization. + * + * Results are ordered by creation time, newest first. Use `limit` and the + * `next_page` cursor to paginate; set `include_archived=true` to include archived + * service accounts. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaServiceAccount of client.beta.organization.serviceAccounts.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, ...query } = params ?? {}; + return this._client.getAPIList("/v1/organizations/service_accounts?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Archive a service account. + * + * Idempotent; re-archiving returns the service account with its original + * `archived_at`. Rejected with 400 if any live (non-archived) federation rule + * still targets this service account, same as issuer archival; archive those rules + * first or change their target to another service account. + * + * @example + * ```ts + * const betaServiceAccount = + * await client.beta.organization.serviceAccounts.archive( + * 'service_account_id', + * ); + * ``` + */ + archive(serviceAccountID, params = {}, options) { + const { betas } = params ?? {}; + return this._client.post(path3`/v1/organizations/service_accounts/${serviceAccountID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + } + ServiceAccounts4.Workspaces = Workspaces2; + return ServiceAccounts4; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.mjs +var Members; +var init_members = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/members.mjs"() { + init_resource2(); + init_pagination2(); + init_path2(); + Members = class extends APIResource2 { + /** + * Get Workspace Member + * + * @example + * ```ts + * const betaWorkspaceMember = + * await client.beta.organization.workspaces.members.retrieve( + * 'user_id', + * { workspace_id: 'workspace_id' }, + * ); + * ``` + */ + retrieve(userID, params, options) { + const { workspace_id } = params; + return this._client.get(path3`/v1/organizations/workspaces/${workspace_id}/members/${userID}?beta=true`, options); + } + /** + * Update Workspace Member + * + * @example + * ```ts + * const betaWorkspaceMember = + * await client.beta.organization.workspaces.members.update( + * 'user_id', + * { + * workspace_id: 'workspace_id', + * workspace_role: 'workspace_admin', + * }, + * ); + * ``` + */ + update(userID, params, options) { + const { workspace_id, ...body } = params; + return this._client.post(path3`/v1/organizations/workspaces/${workspace_id}/members/${userID}?beta=true`, { + body, + ...options + }); + } + /** + * List Workspace Members + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaWorkspaceMember of client.beta.organization.workspaces.members.list( + * 'workspace_id', + * )) { + * // ... + * } + * ``` + */ + list(workspaceID, query = {}, options) { + return this._client.getAPIList(path3`/v1/organizations/workspaces/${workspaceID}/members?beta=true`, Page2, { query, ...options }); + } + /** + * Create Workspace Member + * + * @example + * ```ts + * const betaWorkspaceMember = + * await client.beta.organization.workspaces.members.add( + * 'workspace_id', + * { + * user_id: 'user_01WCz1FkmYMm4gnmykNKUu3Q', + * workspace_role: 'workspace_admin', + * }, + * ); + * ``` + */ + add(workspaceID, body, options) { + return this._client.post(path3`/v1/organizations/workspaces/${workspaceID}/members?beta=true`, { + body, + ...options + }); + } + /** + * Delete Workspace Member + * + * @example + * ```ts + * const member = + * await client.beta.organization.workspaces.members.remove( + * 'user_id', + * { workspace_id: 'workspace_id' }, + * ); + * ``` + */ + remove(userID, params, options) { + const { workspace_id } = params; + return this._client.delete(path3`/v1/organizations/workspaces/${workspace_id}/members/${userID}?beta=true`, options); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.mjs +var RateLimits3; +var init_rate_limits3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/rate-limits.mjs"() { + init_resource2(); + init_pagination2(); + init_path2(); + RateLimits3 = class extends APIResource2 { + /** + * List a workspace's rate limits. + * + * By default, returns only the groups and limiter types that have a + * workspace-level override. With `include_inherited=true`, returns every group + * with organization-level limits the workspace can see, listing for each the + * values it inherits from the organization as well as its own overrides. Each + * value's `source` says which it is. + * + * When `limit` is omitted, every matching entry is returned in a single page; when + * `limit` truncates the result, follow `next_page` to fetch the remaining entries. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaWorkspaceRateLimit of client.beta.organization.workspaces.rateLimits.list( + * 'workspace_id', + * )) { + * // ... + * } + * ``` + */ + list(workspaceID, query = {}, options) { + return this._client.getAPIList(path3`/v1/organizations/workspaces/${workspaceID}/rate_limits?beta=true`, PageCursor, { query, ...options }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.mjs +var ServiceAccounts3; +var init_service_accounts3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/service-accounts.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + ServiceAccounts3 = class extends APIResource2 { + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Retrieve a service account's membership in a workspace. + * + * Returns the membership record, including the service account's `workspace_role` + * in this workspace. Archived workspaces return 400. For the default workspace, + * returns the implicit (`implicit: true`) membership when no explicit membership + * exists; an explicitly added membership is returned with its assigned role. An + * archived service account returns 404. + * + * @example + * ```ts + * const betaServiceAccountWorkspaceMember = + * await client.beta.organization.workspaces.serviceAccounts.retrieve( + * 'service_account_id', + * { workspace_id: 'workspace_id' }, + * ); + * ``` + */ + retrieve(serviceAccountID, params, options) { + const { workspace_id, betas } = params; + return this._client.get(path3`/v1/organizations/workspaces/${workspace_id}/service_accounts/${serviceAccountID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Change a service account's role in a workspace. + * + * The new `workspace_role` replaces the current one. Only explicit memberships can + * be updated; to set a role on the implicit default-workspace membership, add the + * service account explicitly with + * `POST /workspaces/{workspace_id}/service_accounts`. Archived workspaces + * return 400. Archived service accounts cannot be updated and are rejected. + * + * @example + * ```ts + * const betaServiceAccountWorkspaceMember = + * await client.beta.organization.workspaces.serviceAccounts.update( + * 'service_account_id', + * { + * workspace_id: 'workspace_id', + * workspace_role: 'workspace_admin', + * }, + * ); + * ``` + */ + update(serviceAccountID, params, options) { + const { workspace_id, betas, ...body } = params; + return this._client.post(path3`/v1/organizations/workspaces/${workspace_id}/service_accounts/${serviceAccountID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * List the service accounts that are members of a workspace. + * + * Each entry includes the service account's `workspace_role`. Use `limit` and the + * `next_page` cursor to paginate. Archived workspaces return 400; use + * `GET /service_accounts/{id}/workspaces` to audit memberships of an archived + * workspace. The implicit default-workspace membership is not included in this + * list. Memberships of archived service accounts are omitted from the results. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaServiceAccountWorkspaceMember of client.beta.organization.workspaces.serviceAccounts.list( + * 'workspace_id', + * )) { + * // ... + * } + * ``` + */ + list(workspaceID, params = {}, options) { + const { betas, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/organizations/workspaces/${workspaceID}/service_accounts?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Add a service account to a workspace with the given `workspace_role`. + * + * The role determines what the service account can do in the workspace and which + * workspace-scoped permissions it can be granted when authenticating through + * federation. Every service account is already an implicit `workspace_user` member + * of the default workspace; adding it explicitly assigns a chosen role. If the + * service account is already an explicit member of the workspace, its + * `workspace_role` is replaced with the value supplied here. Archived workspaces + * return 400. Archived service accounts cannot be added and are rejected. + * + * @example + * ```ts + * const betaServiceAccountWorkspaceMember = + * await client.beta.organization.workspaces.serviceAccounts.add( + * 'workspace_id', + * { + * service_account_id: 'service_account_id', + * workspace_role: 'workspace_admin', + * }, + * ); + * ``` + */ + add(workspaceID, params, options) { + const { betas, ...body } = params; + return this._client.post(path3`/v1/organizations/workspaces/${workspaceID}/service_accounts?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * **Requires an OAuth access token with the `org:admin` scope**, from + * `ant auth login --scope org:admin` or a workload identity federation rule; Admin + * API keys are not accepted. See + * [Manage WIF with the Admin API](/docs/en/manage-claude/wif-admin-api). + * + * Remove a service account from a workspace. + * + * Removal is idempotent (returns 200 even if the membership was already removed). + * A DELETE against the implicit default-workspace membership returns 200 but is a + * no-op and the membership persists; deleting an explicit default-workspace row + * reverts to the implicit `workspace_user` membership. Archived workspaces + * return 400. + * + * @example + * ```ts + * const serviceAccount = + * await client.beta.organization.workspaces.serviceAccounts.remove( + * 'service_account_id', + * { workspace_id: 'workspace_id' }, + * ); + * ``` + */ + remove(serviceAccountID, params, options) { + const { workspace_id, betas } = params; + return this._client.delete(path3`/v1/organizations/workspaces/${workspace_id}/service_accounts/${serviceAccountID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.mjs +var Workspaces3; +var init_workspaces3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/workspaces/workspaces.mjs"() { + init_resource2(); + init_members(); + init_members(); + init_rate_limits3(); + init_rate_limits3(); + init_service_accounts3(); + init_service_accounts3(); + init_pagination2(); + init_headers3(); + init_path2(); + Workspaces3 = /* @__PURE__ */ (() => { + class Workspaces4 extends APIResource2 { + constructor() { + super(...arguments); + this.rateLimits = new RateLimits3(this._client); + this.members = new Members(this._client); + this.serviceAccounts = new ServiceAccounts3(this._client); + } + /** + * Create Workspace + * + * @example + * ```ts + * const betaWorkspace = + * await client.beta.organization.workspaces.create({ + * name: 'x', + * }); + * ``` + */ + create(params, options) { + const { betas, ...body } = params; + return this._client.post("/v1/organizations/workspaces?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0 }, + options?.headers + ]) + }); + } + /** + * Get Workspace + * + * @example + * ```ts + * const betaWorkspace = + * await client.beta.organization.workspaces.retrieve( + * 'workspace_id', + * ); + * ``` + */ + retrieve(workspaceID, options) { + return this._client.get(path3`/v1/organizations/workspaces/${workspaceID}?beta=true`, options); + } + /** + * Update Workspace + * + * @example + * ```ts + * const betaWorkspace = + * await client.beta.organization.workspaces.update( + * 'workspace_id', + * ); + * ``` + */ + update(workspaceID, body, options) { + return this._client.post(path3`/v1/organizations/workspaces/${workspaceID}?beta=true`, { + body, + ...options + }); + } + /** + * List Workspaces + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaWorkspace of client.beta.organization.workspaces.list()) { + * // ... + * } + * ``` + */ + list(query = {}, options) { + return this._client.getAPIList("/v1/organizations/workspaces?beta=true", Page2, { + query, + ...options + }); + } + /** + * Archive Workspace + * + * @example + * ```ts + * const betaWorkspace = + * await client.beta.organization.workspaces.archive( + * 'workspace_id', + * ); + * ``` + */ + archive(workspaceID, options) { + return this._client.post(path3`/v1/organizations/workspaces/${workspaceID}/archive?beta=true`, options); + } + } + Workspaces4.RateLimits = RateLimits3; + Workspaces4.Members = Members; + Workspaces4.ServiceAccounts = ServiceAccounts3; + return Workspaces4; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.mjs +var Organization2; +var init_organization2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/organization/organization.mjs"() { + init_resource2(); + init_api_keys3(); + init_api_keys3(); + init_compliance_settings(); + init_compliance_settings(); + init_external_keys(); + init_external_keys(); + init_invites2(); + init_invites2(); + init_rate_limits2(); + init_rate_limits2(); + init_users4(); + init_users4(); + init_federation(); + init_federation(); + init_service_accounts2(); + init_service_accounts2(); + init_workspaces3(); + init_workspaces3(); + Organization2 = /* @__PURE__ */ (() => { + class Organization3 extends APIResource2 { + constructor() { + super(...arguments); + this.apiKeys = new APIKeys3(this._client); + this.externalKeys = new ExternalKeys(this._client); + this.federation = new Federation(this._client); + this.invites = new Invites2(this._client); + this.serviceAccounts = new ServiceAccounts2(this._client); + this.users = new Users4(this._client); + this.workspaces = new Workspaces3(this._client); + this.rateLimits = new RateLimits2(this._client); + this.complianceSettings = new ComplianceSettings(this._client); + } + /** + * Retrieve information about the organization associated with the authenticated + * API key. + * + * @example + * ```ts + * const betaOrganization = + * await client.beta.organization.retrieve(); + * ``` + */ + retrieve(options) { + return this._client.get("/v1/organizations/me?beta=true", options); + } + } + Organization3.APIKeys = APIKeys3; + Organization3.ExternalKeys = ExternalKeys; + Organization3.Federation = Federation; + Organization3.Invites = Invites2; + Organization3.ServiceAccounts = ServiceAccounts2; + Organization3.Users = Users4; + Organization3.Workspaces = Workspaces3; + Organization3.RateLimits = RateLimits2; + Organization3.ComplianceSettings = ComplianceSettings; + return Organization3; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/sessions/events.mjs +var Events2; +var init_events2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/sessions/events.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + init_SessionToolRunner(); + Events2 = /* @__PURE__ */ (() => { + class Events4 extends APIResource2 { + /** + * List Events + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsSessionEvent of client.beta.sessions.events.list( + * 'sesn_011CZkZAtmR3yMPDzynEDxu7', + * )) { + * // ... + * } + * ``` + */ + list(sessionID, params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/sessions/${sessionID}/events?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Send Events + * + * @example + * ```ts + * const betaManagedAgentsSendSessionEvents = + * await client.beta.sessions.events.send( + * 'sesn_011CZkZAtmR3yMPDzynEDxu7', + * { + * events: [ + * { + * content: [ + * { + * text: 'Where is my order #1234?', + * type: 'text', + * }, + * ], + * type: 'user.message', + * }, + * ], + * }, + * ); + * ``` + */ + send(sessionID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/sessions/${sessionID}/events?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Stream Events + * + * @example + * ```ts + * const betaManagedAgentsStreamSessionEvents = + * await client.beta.sessions.events.stream( + * 'sesn_011CZkZAtmR3yMPDzynEDxu7', + * ); + * ``` + */ + stream(sessionID, params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.get(path3`/v1/sessions/${sessionID}/events/stream?beta=true`, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]), + stream: true + }); + } + /** + * Attach to a session and dispatch every incoming `agent.tool_use` and + * `agent.custom_tool_use` event to a local tool registry, sending the matching + * result back (`user.tool_result` / `user.custom_tool_result`). The + * sessions-side counterpart to `client.beta.messages.toolRunner`: yields one + * entry per completed tool call so callers can observe each dispatch (and + * `break` to abort cleanly). + * + * @example + * ```ts + * import { betaAgentToolset20260401 } from '@anthropic-ai/sdk/tools/agent-toolset/node'; + * + * for await (const call of client.beta.sessions.events.toolRunner(work.data.id, { + * tools: [...betaAgentToolset20260401({ workdir }), myTool], + * })) { + * console.log(`${call.name} -> ${call.isError ? 'error' : 'ok'}`); + * } + * ``` + */ + toolRunner(sessionID, opts) { + return new SessionToolRunner(sessionID, { ...opts, client: this._client }); + } + } + Events4.SessionToolRunner = SessionToolRunner; + return Events4; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/sessions/resources.mjs +var Resources; +var init_resources2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/sessions/resources.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Resources = class extends APIResource2 { + /** + * Get Session Resource + * + * @example + * ```ts + * const resource = + * await client.beta.sessions.resources.retrieve( + * 'sesrsc_011CZkZBJq5dWxk9fVLNcPht', + * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, + * ); + * ``` + */ + retrieve(resourceID, params, options) { + const { session_id, betas, workspace_id } = params; + return this._client.get(path3`/v1/sessions/${session_id}/resources/${resourceID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Update Session Resource + * + * @example + * ```ts + * const resource = + * await client.beta.sessions.resources.update( + * 'sesrsc_011CZkZBJq5dWxk9fVLNcPht', + * { + * session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7', + * authorization_token: 'ghp_exampletoken', + * }, + * ); + * ``` + */ + update(resourceID, params, options) { + const { session_id, betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/sessions/${session_id}/resources/${resourceID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List Session Resources + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsSessionResource of client.beta.sessions.resources.list( + * 'sesn_011CZkZAtmR3yMPDzynEDxu7', + * )) { + * // ... + * } + * ``` + */ + list(sessionID, params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/sessions/${sessionID}/resources?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Delete Session Resource + * + * @example + * ```ts + * const betaManagedAgentsDeleteSessionResource = + * await client.beta.sessions.resources.delete( + * 'sesrsc_011CZkZBJq5dWxk9fVLNcPht', + * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, + * ); + * ``` + */ + delete(resourceID, params, options) { + const { session_id, betas, workspace_id } = params; + return this._client.delete(path3`/v1/sessions/${session_id}/resources/${resourceID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Add Session Resource + * + * @example + * ```ts + * const betaManagedAgentsFileResource = + * await client.beta.sessions.resources.add( + * 'sesn_011CZkZAtmR3yMPDzynEDxu7', + * { + * file_id: 'file_011CNha8iCJcU1wXNR6q4V8w', + * type: 'file', + * }, + * ); + * ``` + */ + add(sessionID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/sessions/${sessionID}/resources?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/events.mjs +var Events3; +var init_events3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/events.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Events3 = class extends APIResource2 { + /** + * List Session Thread Events + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsSessionEvent of client.beta.sessions.threads.events.list( + * 'sthr_011CZkZVWa6oIjw0rgXZpnBt', + * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, + * )) { + * // ... + * } + * ``` + */ + list(threadID, params, options) { + const { session_id, betas, workspace_id, ...query } = params; + return this._client.getAPIList(path3`/v1/sessions/${session_id}/threads/${threadID}/events?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Stream Session Thread Events + * + * @example + * ```ts + * const betaManagedAgentsStreamSessionThreadEvents = + * await client.beta.sessions.threads.events.stream( + * 'sthr_011CZkZVWa6oIjw0rgXZpnBt', + * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, + * ); + * ``` + */ + stream(threadID, params, options) { + const { session_id, betas, workspace_id, ...query } = params; + return this._client.get(path3`/v1/sessions/${session_id}/threads/${threadID}/stream?beta=true`, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]), + stream: true + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/threads.mjs +var Threads3; +var init_threads3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/sessions/threads/threads.mjs"() { + init_resource2(); + init_events3(); + init_events3(); + init_pagination2(); + init_headers3(); + init_path2(); + Threads3 = /* @__PURE__ */ (() => { + class Threads4 extends APIResource2 { + constructor() { + super(...arguments); + this.events = new Events3(this._client); + } + /** + * Get Session Thread + * + * @example + * ```ts + * const betaManagedAgentsSessionThread = + * await client.beta.sessions.threads.retrieve( + * 'sthr_011CZkZVWa6oIjw0rgXZpnBt', + * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, + * ); + * ``` + */ + retrieve(threadID, params, options) { + const { session_id, betas, workspace_id } = params; + return this._client.get(path3`/v1/sessions/${session_id}/threads/${threadID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List Session Threads + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsSessionThread of client.beta.sessions.threads.list( + * 'sesn_011CZkZAtmR3yMPDzynEDxu7', + * )) { + * // ... + * } + * ``` + */ + list(sessionID, params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/sessions/${sessionID}/threads?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Archive Session Thread + * + * @example + * ```ts + * const betaManagedAgentsSessionThread = + * await client.beta.sessions.threads.archive( + * 'sthr_011CZkZVWa6oIjw0rgXZpnBt', + * { session_id: 'sesn_011CZkZAtmR3yMPDzynEDxu7' }, + * ); + * ``` + */ + archive(threadID, params, options) { + const { session_id, betas, workspace_id } = params; + return this._client.post(path3`/v1/sessions/${session_id}/threads/${threadID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + } + Threads4.Events = Events3; + return Threads4; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/sessions/sessions.mjs +var Sessions5; +var init_sessions5 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/sessions/sessions.mjs"() { + init_resource2(); + init_events2(); + init_events2(); + init_resources2(); + init_resources2(); + init_threads3(); + init_threads3(); + init_pagination2(); + init_headers3(); + init_path2(); + Sessions5 = /* @__PURE__ */ (() => { + class Sessions6 extends APIResource2 { + constructor() { + super(...arguments); + this.events = new Events2(this._client); + this.resources = new Resources(this._client); + this.threads = new Threads3(this._client); + } + /** + * Create Session + * + * @example + * ```ts + * const betaManagedAgentsSession = + * await client.beta.sessions.create({ + * agent: 'agent_011CZkYpogX7uDKUyvBTophP', + * environment_id: 'env_011CZkZ9X2dpNyB7HsEFoRfW', + * }); + * ``` + */ + create(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/sessions?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Get Session + * + * @example + * ```ts + * const betaManagedAgentsSession = + * await client.beta.sessions.retrieve( + * 'sesn_011CZkZAtmR3yMPDzynEDxu7', + * ); + * ``` + */ + retrieve(sessionID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/sessions/${sessionID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Update Session + * + * @example + * ```ts + * const betaManagedAgentsSession = + * await client.beta.sessions.update( + * 'sesn_011CZkZAtmR3yMPDzynEDxu7', + * ); + * ``` + */ + update(sessionID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/sessions/${sessionID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List Sessions + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsSession of client.beta.sessions.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/sessions?beta=true", BidirectionalPageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Delete Session + * + * @example + * ```ts + * const betaManagedAgentsDeletedSession = + * await client.beta.sessions.delete( + * 'sesn_011CZkZAtmR3yMPDzynEDxu7', + * ); + * ``` + */ + delete(sessionID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.delete(path3`/v1/sessions/${sessionID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Archive Session + * + * @example + * ```ts + * const betaManagedAgentsSession = + * await client.beta.sessions.archive( + * 'sesn_011CZkZAtmR3yMPDzynEDxu7', + * ); + * ``` + */ + archive(sessionID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/sessions/${sessionID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + } + Sessions6.Events = Events2; + Sessions6.Resources = Resources; + Sessions6.Threads = Threads3; + return Sessions6; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.mjs +var Versions3; +var init_versions3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/skills/versions.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_uploads4(); + init_path2(); + Versions3 = class extends APIResource2 { + /** + * Create Skill Version + * + * @example + * ```ts + * const betaSkillVersion = + * await client.beta.skills.versions.create('skill_id', { + * files: [fs.createReadStream('path/to/file')], + * }); + * ``` + */ + create(skillID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/skills/${skillID}/versions?beta=true`, multipartFormRequestOptions2({ + body, + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }, this._client, false)); + } + /** + * Get Skill Version + * + * @example + * ```ts + * const betaSkillVersion = + * await client.beta.skills.versions.retrieve('version', { + * skill_id: 'skill_id', + * }); + * ``` + */ + retrieve(version, params, options) { + const { skill_id, betas, workspace_id } = params; + return this._client.get(path3`/v1/skills/${skill_id}/versions/${version}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List Skill Versions + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaSkillVersion of client.beta.skills.versions.list( + * 'skill_id', + * )) { + * // ... + * } + * ``` + */ + list(skillID, params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/skills/${skillID}/versions?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Delete Skill Version + * + * @example + * ```ts + * const betaDeletedSkillVersion = + * await client.beta.skills.versions.delete('version', { + * skill_id: 'skill_id', + * }); + * ``` + */ + delete(version, params, options) { + const { skill_id, betas, workspace_id } = params; + return this._client.delete(path3`/v1/skills/${skill_id}/versions/${version}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Download a skill version's content as a zip archive. + * + * @example + * ```ts + * const response = await client.beta.skills.versions.download( + * 'version', + * { skill_id: 'skill_id' }, + * ); + * + * const content = await response.blob(); + * console.log(content); + * ``` + */ + download(version, params, options) { + const { skill_id, betas, workspace_id } = params; + return this._client.get(path3`/v1/skills/${skill_id}/versions/${version}/content?beta=true`, { + ...options, + headers: buildHeaders2([ + { + Accept: "application/binary", + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]), + __binaryResponse: true + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.mjs +var Skills2; +var init_skills2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/skills/skills.mjs"() { + init_resource2(); + init_versions3(); + init_versions3(); + init_pagination2(); + init_headers3(); + init_uploads4(); + init_path2(); + Skills2 = /* @__PURE__ */ (() => { + class Skills4 extends APIResource2 { + constructor() { + super(...arguments); + this.versions = new Versions3(this._client); + } + /** + * Create Skill + * + * @example + * ```ts + * const betaSkill = await client.beta.skills.create({ + * files: [fs.createReadStream('path/to/file')], + * }); + * ``` + */ + create(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/skills?beta=true", multipartFormRequestOptions2({ + body, + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }, this._client, false)); + } + /** + * Get Skill + * + * @example + * ```ts + * const betaSkill = await client.beta.skills.retrieve( + * 'skill_id', + * ); + * ``` + */ + retrieve(skillID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/skills/${skillID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List Skills + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaSkill of client.beta.skills.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/skills?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Delete Skill + * + * @example + * ```ts + * const betaDeletedSkill = await client.beta.skills.delete( + * 'skill_id', + * ); + * ``` + */ + delete(skillID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.delete(path3`/v1/skills/${skillID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + } + Skills4.Versions = Versions3; + return Skills4; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/tunnels/certificates.mjs +var Certificates3; +var init_certificates3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/tunnels/certificates.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Certificates3 = class extends APIResource2 { + /** + * The Tunnels API is in research preview. It requires the + * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a + * deprecation period. It supersedes the Admin API endpoints at + * `/v1/organizations/tunnels`, which remain available during a migration window. + * + * Registers a public CA certificate on a tunnel. Anthropic verifies the gateway's + * server certificate against this CA when it terminates the inner TLS session. A + * tunnel holds at most two non-archived certificates. + * + * @example + * ```ts + * const betaTunnelCertificate = + * await client.beta.tunnels.certificates.create( + * 'tunnel_id', + * { ca_certificate_pem: 'ca_certificate_pem' }, + * ); + * ``` + */ + create(tunnelID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/tunnels/${tunnelID}/certificates?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * The Tunnels API is in research preview. It requires the + * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a + * deprecation period. It supersedes the Admin API endpoints at + * `/v1/organizations/tunnels`, which remain available during a migration window. + * + * Fetches a tunnel certificate by ID. + * + * @example + * ```ts + * const betaTunnelCertificate = + * await client.beta.tunnels.certificates.retrieve( + * 'certificate_id', + * { tunnel_id: 'tunnel_id' }, + * ); + * ``` + */ + retrieve(certificateID, params, options) { + const { tunnel_id, betas, workspace_id } = params; + return this._client.get(path3`/v1/tunnels/${tunnel_id}/certificates/${certificateID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * The Tunnels API is in research preview. It requires the + * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a + * deprecation period. It supersedes the Admin API endpoints at + * `/v1/organizations/tunnels`, which remain available during a migration window. + * + * Lists the certificates registered on a tunnel. Archived certificates are + * excluded unless include_archived is set. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaTunnelCertificate of client.beta.tunnels.certificates.list( + * 'tunnel_id', + * )) { + * // ... + * } + * ``` + */ + list(tunnelID, params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/tunnels/${tunnelID}/certificates?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * The Tunnels API is in research preview. It requires the + * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a + * deprecation period. It supersedes the Admin API endpoints at + * `/v1/organizations/tunnels`, which remain available during a migration window. + * + * Archives a tunnel certificate, removing it from the set Anthropic trusts for the + * tunnel. The certificate record is retained. Archiving the last non-archived + * certificate is permitted; the tunnel rejects MCP traffic until a new certificate + * is added. + * + * @example + * ```ts + * const betaTunnelCertificate = + * await client.beta.tunnels.certificates.archive( + * 'certificate_id', + * { tunnel_id: 'tunnel_id' }, + * ); + * ``` + */ + archive(certificateID, params, options) { + const { tunnel_id, betas, workspace_id } = params; + return this._client.post(path3`/v1/tunnels/${tunnel_id}/certificates/${certificateID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/tunnels/tunnels.mjs +var Tunnels; +var init_tunnels = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/tunnels/tunnels.mjs"() { + init_resource2(); + init_certificates3(); + init_certificates3(); + init_pagination2(); + init_headers3(); + init_path2(); + Tunnels = /* @__PURE__ */ (() => { + class Tunnels2 extends APIResource2 { + constructor() { + super(...arguments); + this.certificates = new Certificates3(this._client); + } + /** + * The Tunnels API is in research preview. It requires the + * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a + * deprecation period. It supersedes the Admin API endpoints at + * `/v1/organizations/tunnels`, which remain available during a migration window. + * + * Creates a tunnel. Creation allocates a fresh hostname and provisions the tunnel; + * it is not idempotent. The new tunnel rejects MCP traffic until at least one CA + * certificate is added. + * + * @example + * ```ts + * const betaTunnel = await client.beta.tunnels.create(); + * ``` + */ + create(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/tunnels?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * The Tunnels API is in research preview. It requires the + * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a + * deprecation period. It supersedes the Admin API endpoints at + * `/v1/organizations/tunnels`, which remain available during a migration window. + * + * Fetches a tunnel by ID. + * + * @example + * ```ts + * const betaTunnel = await client.beta.tunnels.retrieve( + * 'tunnel_id', + * ); + * ``` + */ + retrieve(tunnelID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/tunnels/${tunnelID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * The Tunnels API is in research preview. It requires the + * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a + * deprecation period. It supersedes the Admin API endpoints at + * `/v1/organizations/tunnels`, which remain available during a migration window. + * + * Lists tunnels. Results are ordered by creation time, newest first; archived + * tunnels are excluded unless include_archived is set. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaTunnel of client.beta.tunnels.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/tunnels?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * The Tunnels API is in research preview. It requires the + * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a + * deprecation period. It supersedes the Admin API endpoints at + * `/v1/organizations/tunnels`, which remain available during a migration window. + * + * Archives a tunnel. Archival is irreversible: every non-archived certificate on + * the tunnel is archived in the same operation, the hostname is retired and never + * re-allocated, and the tunnel token is invalidated. Retrying against an + * already-archived tunnel returns the existing record unchanged. + * + * @example + * ```ts + * const betaTunnel = await client.beta.tunnels.archive( + * 'tunnel_id', + * ); + * ``` + */ + archive(tunnelID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/tunnels/${tunnelID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * The Tunnels API is in research preview. It requires the + * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a + * deprecation period. It supersedes the Admin API endpoints at + * `/v1/organizations/tunnels`, which remain available during a migration window. + * + * Reveals a tunnel's connector token. The value is fetched live on each call; + * Anthropic does not store it. Repeated calls return the same value until the + * token is rotated. Exposed as POST so the token does not appear in intermediary + * access logs. + * + * @example + * ```ts + * const betaTunnelToken = + * await client.beta.tunnels.revealToken('tunnel_id'); + * ``` + */ + revealToken(tunnelID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/tunnels/${tunnelID}/reveal_token?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * The Tunnels API is in research preview. It requires the + * `anthropic-beta: mcp-tunnels-2026-06-22` header and may change without a + * deprecation period. It supersedes the Admin API endpoints at + * `/v1/organizations/tunnels`, which remain available during a migration window. + * + * Rotates a tunnel's connector token. Rotation invalidates the current token for + * new connections and returns a fresh value; established connections are not + * severed. A connector restarted after rotation must use the new value. + * + * @example + * ```ts + * const betaTunnelToken = + * await client.beta.tunnels.rotateToken('tunnel_id'); + * ``` + */ + rotateToken(tunnelID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/tunnels/${tunnelID}/rotate_token?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "mcp-tunnels-2026-06-22"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + } + Tunnels2.Certificates = Certificates3; + return Tunnels2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/vaults/credentials.mjs +var Credentials2; +var init_credentials3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/vaults/credentials.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Credentials2 = class extends APIResource2 { + /** + * Create Credential + * + * @example + * ```ts + * const betaManagedAgentsCredential = + * await client.beta.vaults.credentials.create( + * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', + * { + * auth: { + * token: 'bearer_exampletoken', + * mcp_server_url: + * 'https://example-server.modelcontextprotocol.io/sse', + * type: 'static_bearer', + * }, + * }, + * ); + * ``` + */ + create(vaultID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/vaults/${vaultID}/credentials?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Get Credential + * + * @example + * ```ts + * const betaManagedAgentsCredential = + * await client.beta.vaults.credentials.retrieve( + * 'vcrd_011CZkZEMt8gZan2iYOQfSkw', + * { vault_id: 'vlt_011CZkZDLs7fYzm1hXNPeRjv' }, + * ); + * ``` + */ + retrieve(credentialID, params, options) { + const { vault_id, betas, workspace_id } = params; + return this._client.get(path3`/v1/vaults/${vault_id}/credentials/${credentialID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Update Credential + * + * @example + * ```ts + * const betaManagedAgentsCredential = + * await client.beta.vaults.credentials.update( + * 'vcrd_011CZkZEMt8gZan2iYOQfSkw', + * { vault_id: 'vlt_011CZkZDLs7fYzm1hXNPeRjv' }, + * ); + * ``` + */ + update(credentialID, params, options) { + const { vault_id, betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/vaults/${vault_id}/credentials/${credentialID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List Credentials + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsCredential of client.beta.vaults.credentials.list( + * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', + * )) { + * // ... + * } + * ``` + */ + list(vaultID, params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/vaults/${vaultID}/credentials?beta=true`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Delete Credential + * + * @example + * ```ts + * const betaManagedAgentsDeletedCredential = + * await client.beta.vaults.credentials.delete( + * 'vcrd_011CZkZEMt8gZan2iYOQfSkw', + * { vault_id: 'vlt_011CZkZDLs7fYzm1hXNPeRjv' }, + * ); + * ``` + */ + delete(credentialID, params, options) { + const { vault_id, betas, workspace_id } = params; + return this._client.delete(path3`/v1/vaults/${vault_id}/credentials/${credentialID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Archive Credential + * + * @example + * ```ts + * const betaManagedAgentsCredential = + * await client.beta.vaults.credentials.archive( + * 'vcrd_011CZkZEMt8gZan2iYOQfSkw', + * { vault_id: 'vlt_011CZkZDLs7fYzm1hXNPeRjv' }, + * ); + * ``` + */ + archive(credentialID, params, options) { + const { vault_id, betas, workspace_id } = params; + return this._client.post(path3`/v1/vaults/${vault_id}/credentials/${credentialID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Validate Credential + * + * @example + * ```ts + * const betaManagedAgentsCredentialValidation = + * await client.beta.vaults.credentials.mcpOAuthValidate( + * 'vcrd_011CZkZEMt8gZan2iYOQfSkw', + * { vault_id: 'vlt_011CZkZDLs7fYzm1hXNPeRjv' }, + * ); + * ``` + */ + mcpOAuthValidate(credentialID, params, options) { + const { vault_id, betas, workspace_id } = params; + return this._client.post(path3`/v1/vaults/${vault_id}/credentials/${credentialID}/mcp_oauth_validate?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/vaults/vaults.mjs +var Vaults2; +var init_vaults2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/vaults/vaults.mjs"() { + init_resource2(); + init_credentials3(); + init_credentials3(); + init_pagination2(); + init_headers3(); + init_path2(); + Vaults2 = /* @__PURE__ */ (() => { + class Vaults3 extends APIResource2 { + constructor() { + super(...arguments); + this.credentials = new Credentials2(this._client); + } + /** + * Create Vault + * + * @example + * ```ts + * const betaManagedAgentsVault = + * await client.beta.vaults.create({ + * display_name: 'Example vault', + * }); + * ``` + */ + create(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/vaults?beta=true", { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Get Vault + * + * @example + * ```ts + * const betaManagedAgentsVault = + * await client.beta.vaults.retrieve( + * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', + * ); + * ``` + */ + retrieve(vaultID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/vaults/${vaultID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Update Vault + * + * @example + * ```ts + * const betaManagedAgentsVault = + * await client.beta.vaults.update( + * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', + * ); + * ``` + */ + update(vaultID, params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post(path3`/v1/vaults/${vaultID}?beta=true`, { + body, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List Vaults + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const betaManagedAgentsVault of client.beta.vaults.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/vaults?beta=true", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Delete Vault + * + * @example + * ```ts + * const betaManagedAgentsDeletedVault = + * await client.beta.vaults.delete( + * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', + * ); + * ``` + */ + delete(vaultID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.delete(path3`/v1/vaults/${vaultID}?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * Archive Vault + * + * @example + * ```ts + * const betaManagedAgentsVault = + * await client.beta.vaults.archive( + * 'vlt_011CZkZDLs7fYzm1hXNPeRjv', + * ); + * ``` + */ + archive(vaultID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.post(path3`/v1/vaults/${vaultID}/archive?beta=true`, { + ...options, + headers: buildHeaders2([ + { + "anthropic-beta": [...betas ?? [], "managed-agents-2026-04-01"].toString(), + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + } + Vaults3.Credentials = Credentials2; + return Vaults3; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/beta/beta.mjs +var Beta2; +var init_beta2 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/beta/beta.mjs"() { + init_resource2(); + init_deployment_runs(); + init_deployment_runs(); + init_deployments(); + init_deployments(); + init_dreams(); + init_dreams(); + init_files5(); + init_files5(); + init_models3(); + init_models3(); + init_user_profiles(); + init_user_profiles(); + init_webhooks2(); + init_webhooks2(); + init_agents2(); + init_agents2(); + init_environments2(); + init_environments2(); + init_memory_stores(); + init_memory_stores(); + init_messages3(); + init_messages3(); + init_organization2(); + init_organization2(); + init_sessions5(); + init_sessions5(); + init_skills2(); + init_skills2(); + init_tunnels(); + init_tunnels(); + init_vaults2(); + init_vaults2(); + Beta2 = /* @__PURE__ */ (() => { + class Beta3 extends APIResource2 { + constructor() { + super(...arguments); + this.models = new Models2(this._client); + this.messages = new Messages3(this._client); + this.agents = new Agents2(this._client); + this.environments = new Environments2(this._client); + this.sessions = new Sessions5(this._client); + this.deployments = new Deployments(this._client); + this.deploymentRuns = new DeploymentRuns(this._client); + this.vaults = new Vaults2(this._client); + this.memoryStores = new MemoryStores(this._client); + this.files = new Files5(this._client); + this.skills = new Skills2(this._client); + this.webhooks = new Webhooks2(this._client); + this.userProfiles = new UserProfiles(this._client); + this.dreams = new Dreams(this._client); + this.tunnels = new Tunnels(this._client); + this.organization = new Organization2(this._client); + } + } + Beta3.Models = Models2; + Beta3.Messages = Messages3; + Beta3.Agents = Agents2; + Beta3.Environments = Environments2; + Beta3.Sessions = Sessions5; + Beta3.Deployments = Deployments; + Beta3.DeploymentRuns = DeploymentRuns; + Beta3.Vaults = Vaults2; + Beta3.MemoryStores = MemoryStores; + Beta3.Files = Files5; + Beta3.Skills = Skills2; + Beta3.Webhooks = Webhooks2; + Beta3.UserProfiles = UserProfiles; + Beta3.Dreams = Dreams; + Beta3.Tunnels = Tunnels; + Beta3.Organization = Organization2; + return Beta3; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/completions.mjs +var Completions3; +var init_completions4 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/completions.mjs"() { + init_resource2(); + init_headers3(); + Completions3 = class extends APIResource2 { + create(params, options) { + const { betas, workspace_id, ...body } = params; + return this._client.post("/v1/complete", { + body, + timeout: this._client._options.timeout ?? 6e5, + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]), + stream: params.stream ?? false + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/files.mjs +var Files6; +var init_files6 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/files.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_stainless_helper_header(); + init_uploads4(); + init_path2(); + Files6 = class extends APIResource2 { + /** + * List Files + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const fileMetadata of client.files.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/files", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + /** + * Delete File + * + * @example + * ```ts + * const deletedFile = await client.files.delete('file_id'); + * ``` + */ + delete(fileID, params = {}, options) { + const { workspace_id } = params ?? {}; + return this._client.delete(path3`/v1/files/${fileID}`, { + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + /** + * Download File + * + * @example + * ```ts + * const response = await client.files.download('file_id'); + * + * const content = await response.blob(); + * console.log(content); + * ``` + */ + download(fileID, params = {}, options) { + const { workspace_id } = params ?? {}; + return this._client.get(path3`/v1/files/${fileID}/content`, { + ...options, + headers: buildHeaders2([ + { + Accept: "application/binary", + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]), + __binaryResponse: true + }); + } + /** + * Get File Metadata + * + * @example + * ```ts + * const fileMetadata = await client.files.retrieveMetadata( + * 'file_id', + * ); + * ``` + */ + retrieveMetadata(fileID, params = {}, options) { + const { workspace_id } = params ?? {}; + return this._client.get(path3`/v1/files/${fileID}`, { + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + /** + * Upload File + * + * @example + * ```ts + * const fileMetadata = await client.files.upload({ + * file: fs.createReadStream('path/to/file'), + * }); + * ``` + */ + upload(params, options) { + const { workspace_id, ...body } = params; + return this._client.post("/v1/files", multipartFormRequestOptions2({ + body, + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + stainlessHelperHeaderFromFile(body.file), + options?.headers + ]) + }, this._client)); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/lib/parser.mjs +function getOutputFormat2(params) { + return params?.output_config?.format; +} +function maybeParseMessage(message, params, opts) { + const outputFormat = getOutputFormat2(params); + if (!params || !("parse" in (outputFormat ?? {}))) { + return { + ...message, + content: message.content.map((block) => { + if (block.type === "text") { + const parsedBlock = Object.defineProperty({ ...block }, "parsed_output", { + value: null, + enumerable: false + }); + return parsedBlock; + } + return block; + }), + parsed_output: null + }; + } + return parseMessage(message, params, opts); +} +function parseMessage(message, params, opts) { + let firstParsedOutput = null; + const content = message.content.map((block) => { + if (block.type === "text") { + const parsedOutput = parseOutputFormat(params, block.text); + if (firstParsedOutput === null) { + firstParsedOutput = parsedOutput; + } + const parsedBlock = Object.defineProperty({ ...block }, "parsed_output", { + value: parsedOutput, + enumerable: false + }); + return parsedBlock; + } + return block; + }); + return { + ...message, + content, + parsed_output: firstParsedOutput + }; +} +function parseOutputFormat(params, content) { + const outputFormat = getOutputFormat2(params); + if (outputFormat?.type !== "json_schema") { + return null; + } + try { + if ("parse" in outputFormat) { + return outputFormat.parse(content); + } + return JSON.parse(content); + } catch (error) { + throw new AnthropicError(`Failed to parse structured output: ${error}`); + } +} +var init_parser4 = __esm({ + "node_modules/@anthropic-ai/sdk/lib/parser.mjs"() { + init_error3(); + } +}); + +// node_modules/@anthropic-ai/sdk/lib/MessageStream.mjs +function tracksToolInput2(content) { + return content.type === "tool_use" || content.type === "server_tool_use"; +} +var _MessageStream_instances, _MessageStream_currentMessageSnapshot, _MessageStream_params, _MessageStream_connectedPromise, _MessageStream_resolveConnectedPromise, _MessageStream_rejectConnectedPromise, _MessageStream_endPromise, _MessageStream_resolveEndPromise, _MessageStream_rejectEndPromise, _MessageStream_listeners, _MessageStream_ended, _MessageStream_errored, _MessageStream_aborted, _MessageStream_catchingPromiseCreated, _MessageStream_response, _MessageStream_request_id, _MessageStream_workspace_id, _MessageStream_logger, _MessageStream_getFinalMessage, _MessageStream_getFinalText, _MessageStream_handleError, _MessageStream_beginRequest, _MessageStream_addStreamEvent, _MessageStream_endRequest, _MessageStream_accumulateMessage, MessageStream; +var init_MessageStream = __esm({ + "node_modules/@anthropic-ai/sdk/lib/MessageStream.mjs"() { + init_tslib2(); + init_stainless_helper_header(); + init_errors2(); + init_values2(); + init_error4(); + init_streaming4(); + init_parser4(); + init_message_stream_utils(); + MessageStream = /* @__PURE__ */ (() => { + class MessageStream2 { + constructor(params, opts) { + _MessageStream_instances.add(this); + this.messages = []; + this.receivedMessages = []; + _MessageStream_currentMessageSnapshot.set(this, void 0); + _MessageStream_params.set(this, null); + this.controller = new AbortController(); + _MessageStream_connectedPromise.set(this, void 0); + _MessageStream_resolveConnectedPromise.set(this, () => { + }); + _MessageStream_rejectConnectedPromise.set(this, () => { + }); + _MessageStream_endPromise.set(this, void 0); + _MessageStream_resolveEndPromise.set(this, () => { + }); + _MessageStream_rejectEndPromise.set(this, () => { + }); + _MessageStream_listeners.set(this, {}); + _MessageStream_ended.set(this, false); + _MessageStream_errored.set(this, false); + _MessageStream_aborted.set(this, false); + _MessageStream_catchingPromiseCreated.set(this, false); + _MessageStream_response.set(this, void 0); + _MessageStream_request_id.set(this, void 0); + _MessageStream_workspace_id.set(this, void 0); + _MessageStream_logger.set(this, void 0); + _MessageStream_handleError.set(this, (error) => { + __classPrivateFieldSet2(this, _MessageStream_errored, true, "f"); + if (isAbortError2(error)) { + error = new APIUserAbortError2(); + } + if (error instanceof APIUserAbortError2) { + __classPrivateFieldSet2(this, _MessageStream_aborted, true, "f"); + return this._emit("abort", error); + } + if (error instanceof AnthropicError) { + return this._emit("error", error); + } + if (error instanceof Error) { + const anthropicError = new AnthropicError(error.message); + anthropicError.cause = error; + return this._emit("error", anthropicError); + } + return this._emit("error", new AnthropicError(String(error))); + }); + __classPrivateFieldSet2(this, _MessageStream_connectedPromise, new Promise((resolve2, reject2) => { + __classPrivateFieldSet2(this, _MessageStream_resolveConnectedPromise, resolve2, "f"); + __classPrivateFieldSet2(this, _MessageStream_rejectConnectedPromise, reject2, "f"); + }), "f"); + __classPrivateFieldSet2(this, _MessageStream_endPromise, new Promise((resolve2, reject2) => { + __classPrivateFieldSet2(this, _MessageStream_resolveEndPromise, resolve2, "f"); + __classPrivateFieldSet2(this, _MessageStream_rejectEndPromise, reject2, "f"); + }), "f"); + __classPrivateFieldGet2(this, _MessageStream_connectedPromise, "f").catch(() => { + }); + __classPrivateFieldGet2(this, _MessageStream_endPromise, "f").catch(() => { + }); + __classPrivateFieldSet2(this, _MessageStream_params, params, "f"); + __classPrivateFieldSet2(this, _MessageStream_logger, opts?.logger ?? console, "f"); + } + get response() { + return __classPrivateFieldGet2(this, _MessageStream_response, "f"); + } + get request_id() { + return __classPrivateFieldGet2(this, _MessageStream_request_id, "f"); + } + get workspace_id() { + return __classPrivateFieldGet2(this, _MessageStream_workspace_id, "f"); + } + /** + * Returns the `MessageStream` data, the raw `Response` instance and the ID of the request, + * returned vie the `request-id` header which is useful for debugging requests and resporting + * issues to Anthropic. + * + * This is the same as the `APIPromise.withResponse()` method. + * + * This method will raise an error if you created the stream using `MessageStream.fromReadableStream` + * as no `Response` is available. + */ + async withResponse() { + __classPrivateFieldSet2(this, _MessageStream_catchingPromiseCreated, true, "f"); + const response = await __classPrivateFieldGet2(this, _MessageStream_connectedPromise, "f"); + if (!response) { + throw new Error("Could not resolve a `Response` object"); + } + return { + data: this, + response, + request_id: response.headers.get("request-id"), + workspace_id: response.headers.get("anthropic-workspace-id") + }; + } + /** + * Intended for use on the frontend, consuming a stream produced with + * `.toReadableStream()` on the backend. + * + * Note that messages sent to the model do not appear in `.on('message')` + * in this context. + */ + static fromReadableStream(stream5) { + const runner = new MessageStream2(null); + runner._run(() => runner._fromReadableStream(stream5)); + return runner; + } + static createMessage(messages, params, options, { logger } = {}) { + const runner = new MessageStream2(params, { logger }); + for (const message of params.messages) { + runner._addMessageParam(message); + } + __classPrivateFieldSet2(runner, _MessageStream_params, { ...params, stream: true }, "f"); + runner._run(() => runner._createMessage(messages, { ...params, stream: true }, { ...options, headers: { ...options?.headers, [STAINLESS_HELPER_METHOD_HEADER]: "stream" } })); + return runner; + } + _run(executor) { + executor().then(() => { + this._emitFinal(); + this._emit("end"); + }, __classPrivateFieldGet2(this, _MessageStream_handleError, "f")); + } + _addMessageParam(message) { + this.messages.push(message); + } + _addMessage(message, emit = true) { + this.receivedMessages.push(message); + if (emit) { + this._emit("message", message); + } + } + async _createMessage(messages, params, options) { + const signal = options?.signal; + let abortHandler; + if (signal) { + if (signal.aborted) + this.controller.abort(); + abortHandler = this.controller.abort.bind(this.controller); + signal.addEventListener("abort", abortHandler); + } + try { + __classPrivateFieldGet2(this, _MessageStream_instances, "m", _MessageStream_beginRequest).call(this); + const { response, data: stream5 } = await messages.create({ ...params, stream: true }, { ...options, signal: this.controller.signal }).withResponse(); + this._connected(response); + for await (const event of stream5) { + __classPrivateFieldGet2(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event); + } + if (stream5.controller.signal?.aborted) { + throw new APIUserAbortError2(); + } + __classPrivateFieldGet2(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this); + } finally { + if (signal && abortHandler) { + signal.removeEventListener("abort", abortHandler); + } + } + } + _connected(response) { + if (this.ended) + return; + __classPrivateFieldSet2(this, _MessageStream_response, response, "f"); + __classPrivateFieldSet2(this, _MessageStream_request_id, response?.headers.get("request-id"), "f"); + __classPrivateFieldSet2(this, _MessageStream_workspace_id, response?.headers.get("anthropic-workspace-id"), "f"); + __classPrivateFieldGet2(this, _MessageStream_resolveConnectedPromise, "f").call(this, response); + this._emit("connect"); + } + get ended() { + return __classPrivateFieldGet2(this, _MessageStream_ended, "f"); + } + get errored() { + return __classPrivateFieldGet2(this, _MessageStream_errored, "f"); + } + get aborted() { + return __classPrivateFieldGet2(this, _MessageStream_aborted, "f"); + } + abort() { + this.controller.abort(); + } + /** + * Adds the listener function to the end of the listeners array for the event. + * No checks are made to see if the listener has already been added. Multiple calls passing + * the same combination of event and listener will result in the listener being added, and + * called, multiple times. + * @returns this MessageStream, so that calls can be chained + */ + on(event, listener) { + const listeners = __classPrivateFieldGet2(this, _MessageStream_listeners, "f")[event] || (__classPrivateFieldGet2(this, _MessageStream_listeners, "f")[event] = []); + listeners.push({ listener }); + return this; + } + /** + * Removes the specified listener from the listener array for the event. + * off() will remove, at most, one instance of a listener from the listener array. If any single + * listener has been added multiple times to the listener array for the specified event, then + * off() must be called multiple times to remove each instance. + * @returns this MessageStream, so that calls can be chained + */ + off(event, listener) { + const listeners = __classPrivateFieldGet2(this, _MessageStream_listeners, "f")[event]; + if (!listeners) + return this; + const index = listeners.findIndex((l) => l.listener === listener); + if (index >= 0) + listeners.splice(index, 1); + return this; + } + /** + * Adds a one-time listener function for the event. The next time the event is triggered, + * this listener is removed and then invoked. + * @returns this MessageStream, so that calls can be chained + */ + once(event, listener) { + const listeners = __classPrivateFieldGet2(this, _MessageStream_listeners, "f")[event] || (__classPrivateFieldGet2(this, _MessageStream_listeners, "f")[event] = []); + listeners.push({ listener, once: true }); + return this; + } + /** + * This is similar to `.once()`, but returns a Promise that resolves the next time + * the event is triggered, instead of calling a listener callback. + * @returns a Promise that resolves the next time given event is triggered, + * or rejects if an error is emitted. (If you request the 'error' event, + * returns a promise that resolves with the error). + * + * Example: + * + * const message = await stream.emitted('message') // rejects if the stream errors + */ + emitted(event) { + return new Promise((resolve2, reject2) => { + __classPrivateFieldSet2(this, _MessageStream_catchingPromiseCreated, true, "f"); + if (event !== "error") + this.once("error", reject2); + this.once(event, resolve2); + }); + } + async done() { + __classPrivateFieldSet2(this, _MessageStream_catchingPromiseCreated, true, "f"); + await __classPrivateFieldGet2(this, _MessageStream_endPromise, "f"); + } + get currentMessage() { + return __classPrivateFieldGet2(this, _MessageStream_currentMessageSnapshot, "f"); + } + /** + * @returns a promise that resolves with the the final assistant Message response, + * or rejects if an error occurred or the stream ended prematurely without producing a Message. + * If structured outputs were used, this will be a ParsedMessage with a `parsed_output` field. + */ + async finalMessage() { + await this.done(); + return __classPrivateFieldGet2(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this); + } + /** + * @returns a promise that resolves with the the final assistant Message's text response, concatenated + * together if there are more than one text blocks. + * Rejects if an error occurred or the stream ended prematurely without producing a Message. + */ + async finalText() { + await this.done(); + return __classPrivateFieldGet2(this, _MessageStream_instances, "m", _MessageStream_getFinalText).call(this); + } + _emit(event, ...args) { + if (__classPrivateFieldGet2(this, _MessageStream_ended, "f")) + return; + if (event === "end") { + __classPrivateFieldSet2(this, _MessageStream_ended, true, "f"); + __classPrivateFieldGet2(this, _MessageStream_resolveEndPromise, "f").call(this); + } + const listeners = __classPrivateFieldGet2(this, _MessageStream_listeners, "f")[event]; + if (listeners) { + __classPrivateFieldGet2(this, _MessageStream_listeners, "f")[event] = listeners.filter((l) => !l.once); + listeners.forEach(({ listener }) => listener(...args)); + } + if (event === "abort") { + const error = args[0]; + if (!__classPrivateFieldGet2(this, _MessageStream_catchingPromiseCreated, "f") && !listeners?.length) { + Promise.reject(error); + } + __classPrivateFieldGet2(this, _MessageStream_rejectConnectedPromise, "f").call(this, error); + __classPrivateFieldGet2(this, _MessageStream_rejectEndPromise, "f").call(this, error); + this._emit("end"); + return; + } + if (event === "error") { + const error = args[0]; + if (!__classPrivateFieldGet2(this, _MessageStream_catchingPromiseCreated, "f") && !listeners?.length) { + Promise.reject(error); + } + __classPrivateFieldGet2(this, _MessageStream_rejectConnectedPromise, "f").call(this, error); + __classPrivateFieldGet2(this, _MessageStream_rejectEndPromise, "f").call(this, error); + this._emit("end"); + } + } + _emitFinal() { + const finalMessage = this.receivedMessages.at(-1); + if (finalMessage) { + this._emit("finalMessage", __classPrivateFieldGet2(this, _MessageStream_instances, "m", _MessageStream_getFinalMessage).call(this)); + } + } + async _fromReadableStream(readableStream, options) { + const signal = options?.signal; + let abortHandler; + if (signal) { + if (signal.aborted) + this.controller.abort(); + abortHandler = this.controller.abort.bind(this.controller); + signal.addEventListener("abort", abortHandler); + } + try { + __classPrivateFieldGet2(this, _MessageStream_instances, "m", _MessageStream_beginRequest).call(this); + this._connected(null); + const stream5 = Stream2.fromReadableStream(readableStream, this.controller); + for await (const event of stream5) { + __classPrivateFieldGet2(this, _MessageStream_instances, "m", _MessageStream_addStreamEvent).call(this, event); + } + if (stream5.controller.signal?.aborted) { + throw new APIUserAbortError2(); + } + __classPrivateFieldGet2(this, _MessageStream_instances, "m", _MessageStream_endRequest).call(this); + } finally { + if (signal && abortHandler) { + signal.removeEventListener("abort", abortHandler); + } + } + } + [(_MessageStream_currentMessageSnapshot = /* @__PURE__ */ new WeakMap(), _MessageStream_params = /* @__PURE__ */ new WeakMap(), _MessageStream_connectedPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_resolveConnectedPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_rejectConnectedPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_endPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_resolveEndPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_rejectEndPromise = /* @__PURE__ */ new WeakMap(), _MessageStream_listeners = /* @__PURE__ */ new WeakMap(), _MessageStream_ended = /* @__PURE__ */ new WeakMap(), _MessageStream_errored = /* @__PURE__ */ new WeakMap(), _MessageStream_aborted = /* @__PURE__ */ new WeakMap(), _MessageStream_catchingPromiseCreated = /* @__PURE__ */ new WeakMap(), _MessageStream_response = /* @__PURE__ */ new WeakMap(), _MessageStream_request_id = /* @__PURE__ */ new WeakMap(), _MessageStream_workspace_id = /* @__PURE__ */ new WeakMap(), _MessageStream_logger = /* @__PURE__ */ new WeakMap(), _MessageStream_handleError = /* @__PURE__ */ new WeakMap(), _MessageStream_instances = /* @__PURE__ */ new WeakSet(), _MessageStream_getFinalMessage = function _MessageStream_getFinalMessage2() { + if (this.receivedMessages.length === 0) { + throw new AnthropicError("stream ended without producing a Message with role=assistant"); + } + return this.receivedMessages.at(-1); + }, _MessageStream_getFinalText = function _MessageStream_getFinalText2() { + if (this.receivedMessages.length === 0) { + throw new AnthropicError("stream ended without producing a Message with role=assistant"); + } + const textBlocks = this.receivedMessages.at(-1).content.filter((block) => block.type === "text").map((block) => block.text); + if (textBlocks.length === 0) { + throw new AnthropicError("stream ended without producing a content block with type=text"); + } + return textBlocks.join(" "); + }, _MessageStream_beginRequest = function _MessageStream_beginRequest2() { + if (this.ended) + return; + __classPrivateFieldSet2(this, _MessageStream_currentMessageSnapshot, void 0, "f"); + }, _MessageStream_addStreamEvent = function _MessageStream_addStreamEvent2(event) { + if (this.ended) + return; + const messageSnapshot = __classPrivateFieldGet2(this, _MessageStream_instances, "m", _MessageStream_accumulateMessage).call(this, event); + this._emit("streamEvent", event, messageSnapshot); + switch (event.type) { + case "content_block_delta": { + const content = messageSnapshot.content.at(-1); + switch (event.delta.type) { + case "text_delta": { + if (content.type === "text") { + this._emit("text", event.delta.text, content.text || ""); + } + break; + } + case "citations_delta": { + if (content.type === "text") { + this._emit("citation", event.delta.citation, content.citations ?? []); + } + break; + } + case "input_json_delta": { + if (tracksToolInput2(content) && __classPrivateFieldGet2(this, _MessageStream_listeners, "f").inputJson?.length) { + this._emit("inputJson", event.delta.partial_json, content.input); + } + break; + } + case "thinking_delta": { + if (content.type === "thinking") { + this._emit("thinking", event.delta.thinking, content.thinking); + } + break; + } + case "signature_delta": { + if (content.type === "thinking") { + this._emit("signature", content.signature); + } + break; + } + default: + checkNever(event.delta); + } + break; + } + case "message_stop": { + this._addMessageParam(messageSnapshot); + this._addMessage(maybeParseMessage(messageSnapshot, __classPrivateFieldGet2(this, _MessageStream_params, "f"), { logger: __classPrivateFieldGet2(this, _MessageStream_logger, "f") }), true); + break; + } + case "content_block_stop": { + this._emit("contentBlock", messageSnapshot.content.at(-1)); + break; + } + case "message_start": { + __classPrivateFieldSet2(this, _MessageStream_currentMessageSnapshot, messageSnapshot, "f"); + break; + } + case "content_block_start": + case "message_delta": + break; + } + }, _MessageStream_endRequest = function _MessageStream_endRequest2() { + if (this.ended) { + throw new AnthropicError(`stream has ended, this shouldn't happen`); + } + const snapshot = __classPrivateFieldGet2(this, _MessageStream_currentMessageSnapshot, "f"); + if (!snapshot) { + throw new AnthropicError(`request ended without sending any chunks`); + } + __classPrivateFieldSet2(this, _MessageStream_currentMessageSnapshot, void 0, "f"); + return maybeParseMessage(snapshot, __classPrivateFieldGet2(this, _MessageStream_params, "f"), { logger: __classPrivateFieldGet2(this, _MessageStream_logger, "f") }); + }, _MessageStream_accumulateMessage = function _MessageStream_accumulateMessage2(event) { + let snapshot = __classPrivateFieldGet2(this, _MessageStream_currentMessageSnapshot, "f"); + if (event.type === "message_start") { + if (snapshot) { + throw new AnthropicError(`Unexpected event order, got ${event.type} before receiving "message_stop"`); + } + return event.message; + } + if (!snapshot) { + throw new AnthropicError(`Unexpected event order, got ${event.type} before "message_start"`); + } + switch (event.type) { + case "message_stop": + return snapshot; + case "message_delta": + snapshot.stop_reason = event.delta.stop_reason; + snapshot.stop_sequence = event.delta.stop_sequence; + snapshot.stop_details = event.delta.stop_details; + snapshot.usage.output_tokens = event.usage.output_tokens; + if (event.delta.container != null) { + snapshot.container = event.delta.container; + } + if (event.usage.input_tokens != null) { + snapshot.usage.input_tokens = event.usage.input_tokens; + } + if (event.usage.cache_creation_input_tokens != null) { + snapshot.usage.cache_creation_input_tokens = event.usage.cache_creation_input_tokens; + } + if (event.usage.cache_read_input_tokens != null) { + snapshot.usage.cache_read_input_tokens = event.usage.cache_read_input_tokens; + } + if (event.usage.server_tool_use != null) { + snapshot.usage.server_tool_use = event.usage.server_tool_use; + } + if (event.usage.output_tokens_details != null) { + snapshot.usage.output_tokens_details = event.usage.output_tokens_details; + } + return snapshot; + case "content_block_start": + snapshot.content.push({ ...event.content_block }); + return snapshot; + case "content_block_delta": { + const snapshotContent = snapshot.content.at(event.index); + switch (event.delta.type) { + case "text_delta": { + if (snapshotContent?.type === "text") { + snapshot.content[event.index] = { + ...snapshotContent, + text: (snapshotContent.text || "") + event.delta.text + }; + } + break; + } + case "citations_delta": { + if (snapshotContent?.type === "text") { + snapshot.content[event.index] = { + ...snapshotContent, + citations: [...snapshotContent.citations ?? [], event.delta.citation] + }; + } + break; + } + case "input_json_delta": { + if (snapshotContent && tracksToolInput2(snapshotContent)) { + const jsonBuf = (snapshotContent[JSON_BUF_PROPERTY] || "") + event.delta.partial_json; + snapshot.content[event.index] = withLazyInput(snapshotContent, jsonBuf); + } + break; + } + case "thinking_delta": { + if (snapshotContent?.type === "thinking") { + snapshot.content[event.index] = { + ...snapshotContent, + thinking: snapshotContent.thinking + event.delta.thinking + }; + } + break; + } + case "signature_delta": { + if (snapshotContent?.type === "thinking") { + snapshot.content[event.index] = { + ...snapshotContent, + signature: event.delta.signature + }; + } + break; + } + default: + checkNever(event.delta); + } + return snapshot; + } + case "content_block_stop": { + const snapshotContent = snapshot.content.at(event.index); + if (snapshotContent && tracksToolInput2(snapshotContent) && JSON_BUF_PROPERTY in snapshotContent) { + Object.defineProperty(snapshotContent, "input", { + value: snapshotContent.input, + enumerable: true, + configurable: true, + writable: true + }); + } + return snapshot; + } + } + }, Symbol.asyncIterator)]() { + const pushQueue = []; + const readQueue = []; + let done = false; + this.on("streamEvent", (event) => { + const reader = readQueue.shift(); + if (reader) { + reader.resolve(event); + } else { + pushQueue.push(event); + } + }); + this.on("end", () => { + done = true; + for (const reader of readQueue) { + reader.resolve(void 0); + } + readQueue.length = 0; + }); + this.on("abort", (err) => { + done = true; + for (const reader of readQueue) { + reader.reject(err); + } + readQueue.length = 0; + }); + this.on("error", (err) => { + done = true; + for (const reader of readQueue) { + reader.reject(err); + } + readQueue.length = 0; + }); + return { + next: async () => { + if (!pushQueue.length) { + if (done) { + return { value: void 0, done: true }; + } + return new Promise((resolve2, reject2) => readQueue.push({ resolve: resolve2, reject: reject2 })).then((chunk2) => chunk2 ? { value: chunk2, done: false } : { value: void 0, done: true }); + } + const chunk = pushQueue.shift(); + return { value: chunk, done: false }; + }, + return: async () => { + this.abort(); + return { value: void 0, done: true }; + } + }; + } + toReadableStream() { + const stream5 = new Stream2(this[Symbol.asyncIterator].bind(this), this.controller); + return stream5.toReadableStream(); + } + } + return MessageStream2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/messages/batches.mjs +var Batches3; +var init_batches3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/messages/batches.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_jsonl(); + init_error4(); + init_path2(); + Batches3 = class extends APIResource2 { + /** + * Send a batch of Message creation requests. + * + * The Message Batches API can be used to process multiple Messages API requests at + * once. Once a Message Batch is created, it begins processing immediately. Batches + * can take up to 24 hours to complete. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * const messageBatch = await client.messages.batches.create({ + * requests: [ + * { + * custom_id: 'my-custom-id-1', + * params: { + * max_tokens: 1024, + * messages: [ + * { content: 'Hello, world', role: 'user' }, + * ], + * model: 'claude-opus-5', + * }, + * }, + * ], + * }); + * ``` + */ + create(params, options) { + const { user_profile_id, workspace_id, ...body } = params; + return this._client.post("/v1/messages/batches", { + body, + ...options, + headers: buildHeaders2([ + { + ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * This endpoint is idempotent and can be used to poll for Message Batch + * completion. To access the results of a Message Batch, make a request to the + * `results_url` field in the response. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * const messageBatch = await client.messages.batches.retrieve( + * 'message_batch_id', + * ); + * ``` + */ + retrieve(messageBatchID, params = {}, options) { + const { workspace_id } = params ?? {}; + return this._client.get(path3`/v1/messages/batches/${messageBatchID}`, { + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + /** + * List all Message Batches within a Workspace. Most recently created batches are + * returned first. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const messageBatch of client.messages.batches.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/messages/batches", Page2, { + query, + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + /** + * Delete a Message Batch. + * + * Message Batches can only be deleted once they've finished processing. If you'd + * like to delete an in-progress batch, you must first cancel it. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * const deletedMessageBatch = + * await client.messages.batches.delete('message_batch_id'); + * ``` + */ + delete(messageBatchID, params = {}, options) { + const { workspace_id } = params ?? {}; + return this._client.delete(path3`/v1/messages/batches/${messageBatchID}`, { + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + /** + * Batches may be canceled any time before processing ends. Once cancellation is + * initiated, the batch enters a `canceling` state, at which time the system may + * complete any in-progress, non-interruptible requests before finalizing + * cancellation. + * + * The number of canceled requests is specified in `request_counts`. To determine + * which requests were canceled, check the individual results within the batch. + * Note that cancellation may not result in any canceled requests if they were + * non-interruptible. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * const messageBatch = await client.messages.batches.cancel( + * 'message_batch_id', + * ); + * ``` + */ + cancel(messageBatchID, params = {}, options) { + const { workspace_id } = params ?? {}; + return this._client.post(path3`/v1/messages/batches/${messageBatchID}/cancel`, { + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + /** + * Streams the results of a Message Batch as a `.jsonl` file. + * + * Each line in the file is a JSON object containing the result of a single request + * in the Message Batch. Results are not guaranteed to be in the same order as + * requests. Use the `custom_id` field to match results to requests. + * + * Learn more about the Message Batches API in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/batch-processing) + * + * @example + * ```ts + * const messageBatchIndividualResponse = + * await client.messages.batches.results('message_batch_id'); + * ``` + */ + async results(messageBatchID, params = {}, options) { + const batch = await this.retrieve(messageBatchID, params, options); + if (!batch.results_url) { + throw new AnthropicError(`No batch \`results_url\`; Has it finished processing? ${batch.processing_status} - ${batch.id}`); + } + const { workspace_id } = params ?? {}; + return this._client.get(batch.results_url, { + ...options, + headers: buildHeaders2([ + { + Accept: "application/binary", + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]), + stream: true, + __binaryResponse: true + })._thenUnwrap((_, props) => JSONLDecoder.fromResponse(props.response, props.controller)); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/messages/messages.mjs +var Messages4, DEPRECATED_MODELS2, MODELS_TO_WARN_WITH_THINKING_ENABLED2; +var init_messages4 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/messages/messages.mjs"() { + init_resource2(); + init_headers3(); + init_stainless_helper_header(); + init_MessageStream(); + init_parser4(); + init_batches3(); + init_batches3(); + init_constants(); + Messages4 = /* @__PURE__ */ (() => { + class Messages5 extends APIResource2 { + constructor() { + super(...arguments); + this.batches = new Batches3(this._client); + } + create(params, options) { + const { user_profile_id, workspace_id, ...body } = params; + if (body.model in DEPRECATED_MODELS2) { + console.warn(`The model '${body.model}' is deprecated and will reach end-of-life on ${DEPRECATED_MODELS2[body.model]} +Please migrate to a newer model. Visit https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.`); + } + if (MODELS_TO_WARN_WITH_THINKING_ENABLED2.includes(body.model) && body.thinking && body.thinking.type === "enabled") { + console.warn(`Using Claude with ${body.model} and 'thinking.type=enabled' is deprecated. Use 'thinking.type=adaptive' instead which results in better model performance in our testing: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking`); + } + let timeout = options?.timeout ?? this._client._options.timeout; + if (!body.stream && timeout == null) { + const maxNonstreamingTokens = MODEL_NONSTREAMING_TOKENS[body.model] ?? void 0; + timeout = this._client.calculateNonstreamingTimeout(body.max_tokens, maxNonstreamingTokens); + } + const helperHeader2 = stainlessHelperHeader(body.tools, body.messages); + return this._client.post("/v1/messages", { + body, + timeout: timeout ?? 6e5, + ...options, + headers: buildHeaders2([ + { + ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + helperHeader2, + options?.headers + ]), + stream: params.stream ?? false + }); + } + /** + * Send a structured list of input messages with text and/or image content, along with an expected `output_config.format` and + * the response will be automatically parsed and available in the `parsed_output` property of the message. + * + * @example + * ```ts + * const message = await client.messages.parse({ + * model: 'claude-sonnet-4-5-20250929', + * max_tokens: 1024, + * messages: [{ role: 'user', content: 'What is 2+2?' }], + * output_config: { + * format: zodOutputFormat(z.object({ answer: z.number() })), + * }, + * }); + * + * console.log(message.parsed_output?.answer); // 4 + * ``` + */ + parse(params, options) { + return this.create(params, options).then((message) => parseMessage(message, params, { logger: this._client.logger ?? console })); + } + /** + * Create a Message stream. + * + * If `output_config.format` is provided with a parseable format (like `zodOutputFormat()`), + * the final message will include a `parsed_output` property with the parsed content. + * + * @example + * ```ts + * const stream = client.messages.stream({ + * model: 'claude-sonnet-4-5-20250929', + * max_tokens: 1024, + * messages: [{ role: 'user', content: 'What is 2+2?' }], + * output_config: { + * format: zodOutputFormat(z.object({ answer: z.number() })), + * }, + * }); + * + * const message = await stream.finalMessage(); + * console.log(message.parsed_output?.answer); // 4 + * ``` + */ + stream(body, options) { + return MessageStream.createMessage(this, body, options, { logger: this._client.logger ?? console }); + } + /** + * Count the number of tokens in a Message. + * + * The Token Count API can be used to count the number of tokens in a Message, + * including tools, images, and documents, without creating it. + * + * Learn more about token counting in our + * [user guide](https://platform.claude.com/docs/en/build-with-claude/token-counting) + * + * @example + * ```ts + * const messageTokensCount = + * await client.messages.countTokens({ + * messages: [{ content: 'Hello, world', role: 'user' }], + * model: 'claude-opus-5', + * }); + * ``` + */ + countTokens(params, options) { + const { user_profile_id, workspace_id, ...body } = params; + return this._client.post("/v1/messages/count_tokens", { + body, + ...options, + headers: buildHeaders2([ + { + ...user_profile_id != null ? { "anthropic-user-profile-id": user_profile_id } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + } + Messages5.Batches = Batches3; + return Messages5; + })(); + DEPRECATED_MODELS2 = {}; + MODELS_TO_WARN_WITH_THINKING_ENABLED2 = ["claude-mythos-preview", "claude-opus-4-6"]; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/models.mjs +var Models3; +var init_models4 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/models.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_path2(); + Models3 = class extends APIResource2 { + /** + * Get a specific model. + * + * The Models API response can be used to determine information about a specific + * model or resolve a model alias to a model ID. + * + * @example + * ```ts + * const modelInfo = await client.models.retrieve('model_id'); + * ``` + */ + retrieve(modelID, params = {}, options) { + const { betas, workspace_id } = params ?? {}; + return this._client.get(path3`/v1/models/${modelID}`, { + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + /** + * List available models. + * + * The Models API response can be used to determine which models are available for + * use in the API. More recently released models are listed first. + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const modelInfo of client.models.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { betas, workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/models", Page2, { + query, + ...options, + headers: buildHeaders2([ + { + ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : void 0, + ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 + }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/skills/versions.mjs +var Versions4; +var init_versions4 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/skills/versions.mjs"() { + init_resource2(); + init_pagination2(); + init_headers3(); + init_uploads4(); + init_path2(); + Versions4 = class extends APIResource2 { + /** + * Create Skill Version + * + * @example + * ```ts + * const skillVersion = await client.skills.versions.create( + * 'skill_id', + * { files: [fs.createReadStream('path/to/file')] }, + * ); + * ``` + */ + create(skillID, params, options) { + const { workspace_id, ...body } = params; + return this._client.post(path3`/v1/skills/${skillID}/versions`, multipartFormRequestOptions2({ + body, + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }, this._client, false)); + } + /** + * Get Skill Version + * + * @example + * ```ts + * const skillVersion = await client.skills.versions.retrieve( + * 'version', + * { skill_id: 'skill_id' }, + * ); + * ``` + */ + retrieve(version, params, options) { + const { skill_id, workspace_id } = params; + return this._client.get(path3`/v1/skills/${skill_id}/versions/${version}`, { + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + /** + * List Skill Versions + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const skillVersion of client.skills.versions.list( + * 'skill_id', + * )) { + * // ... + * } + * ``` + */ + list(skillID, params = {}, options) { + const { workspace_id, ...query } = params ?? {}; + return this._client.getAPIList(path3`/v1/skills/${skillID}/versions`, PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + /** + * Delete Skill Version + * + * @example + * ```ts + * const deletedSkillVersion = + * await client.skills.versions.delete('version', { + * skill_id: 'skill_id', + * }); + * ``` + */ + delete(version, params, options) { + const { skill_id, workspace_id } = params; + return this._client.delete(path3`/v1/skills/${skill_id}/versions/${version}`, { + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + }; + } +}); + +// node_modules/@anthropic-ai/sdk/resources/skills/skills.mjs +var Skills3; +var init_skills3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/skills/skills.mjs"() { + init_resource2(); + init_versions4(); + init_versions4(); + init_pagination2(); + init_headers3(); + init_uploads4(); + init_path2(); + Skills3 = /* @__PURE__ */ (() => { + class Skills4 extends APIResource2 { + constructor() { + super(...arguments); + this.versions = new Versions4(this._client); + } + /** + * Create Skill + * + * @example + * ```ts + * const skill = await client.skills.create({ + * files: [fs.createReadStream('path/to/file')], + * }); + * ``` + */ + create(params, options) { + const { workspace_id, ...body } = params; + return this._client.post("/v1/skills", multipartFormRequestOptions2({ + body, + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }, this._client, false)); + } + /** + * Get Skill + * + * @example + * ```ts + * const skill = await client.skills.retrieve('skill_id'); + * ``` + */ + retrieve(skillID, params = {}, options) { + const { workspace_id } = params ?? {}; + return this._client.get(path3`/v1/skills/${skillID}`, { + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + /** + * List Skills + * + * @example + * ```ts + * // Automatically fetches more pages as needed. + * for await (const skill of client.skills.list()) { + * // ... + * } + * ``` + */ + list(params = {}, options) { + const { workspace_id, ...query } = params ?? {}; + return this._client.getAPIList("/v1/skills", PageCursor, { + query, + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + /** + * Delete Skill + * + * @example + * ```ts + * const deletedSkill = await client.skills.delete('skill_id'); + * ``` + */ + delete(skillID, params = {}, options) { + const { workspace_id } = params ?? {}; + return this._client.delete(path3`/v1/skills/${skillID}`, { + ...options, + headers: buildHeaders2([ + { ...workspace_id != null ? { "anthropic-workspace-id": workspace_id } : void 0 }, + options?.headers + ]) + }); + } + } + Skills4.Versions = Versions4; + return Skills4; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/resources/index.mjs +var init_resources3 = __esm({ + "node_modules/@anthropic-ai/sdk/resources/index.mjs"() { + init_shared2(); + init_beta2(); + init_completions4(); + init_files6(); + init_messages4(); + init_models4(); + init_skills3(); + } +}); + +// node_modules/@anthropic-ai/sdk/client.mjs +var _BaseAnthropic_instances, _a5, _BaseAnthropic_encoder, _BaseAnthropic_baseURLOverridden, HUMAN_PROMPT, AI_PROMPT, BaseAnthropic, Anthropic; +var init_client2 = __esm({ + "node_modules/@anthropic-ai/sdk/client.mjs"() { + init_tslib2(); + init_values2(); + init_sleep2(); + init_errors2(); + init_detect_platform2(); + init_request_signal(); + init_shims2(); + init_request_options2(); + init_query2(); + init_version3(); + init_error3(); + init_types(); + init_token_cache(); + init_credential_chain(); + init_middleware(); + init_pagination2(); + init_uploads5(); + init_resources3(); + init_api_promise2(); + init_completions4(); + init_files6(); + init_models4(); + init_beta2(); + init_messages4(); + init_skills3(); + init_detect_platform2(); + init_headers3(); + init_env2(); + init_log2(); + init_values2(); + HUMAN_PROMPT = "\\n\\nHuman:"; + AI_PROMPT = "\\n\\nAssistant:"; + BaseAnthropic = /* @__PURE__ */ (() => { + class BaseAnthropic2 { + /** + * The active credential provider. Default credential resolution runs once + * at construction time. If it fails, the error is surfaced on every + * request and the client must be reconstructed — there is no retry path. + * + * Clones returned by {@link withOptions} share the parent's auth state + * (provider, token cache, pending resolution, and any resolution error) + * unless the caller passes an explicit `apiKey`, `authToken`, + * `credentials`, `config`, or `profile` override. + */ + get credentials() { + return this._authState.provider; + } + /** + * API Client for interfacing with the Anthropic API. + * + * @param {string | null | undefined} [opts.apiKey=process.env['ANTHROPIC_API_KEY'] ?? null] + * @param {string | null | undefined} [opts.authToken=process.env['ANTHROPIC_AUTH_TOKEN'] ?? null] + * @param {string | null | undefined} [opts.webhookKey=process.env['ANTHROPIC_WEBHOOK_SIGNING_KEY'] ?? null] + * @param {string} [opts.baseURL=process.env['ANTHROPIC_BASE_URL'] ?? https://api.anthropic.com] - Override the default base URL for the API. + * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out. + * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls. + * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation. + * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request. + * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API. + * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API. + * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers. + */ + constructor({ baseURL = readEnv2("ANTHROPIC_BASE_URL"), apiKey, authToken, webhookKey = readEnv2("ANTHROPIC_WEBHOOK_SIGNING_KEY") ?? null, ...opts } = {}) { + _BaseAnthropic_instances.add(this); + this._requestAuthFlags = /* @__PURE__ */ new WeakMap(); + _BaseAnthropic_encoder.set(this, void 0); + if (apiKey === void 0) { + apiKey = opts.profile != null ? null : readEnv2("ANTHROPIC_API_KEY") ?? null; + } + if (authToken === void 0) { + authToken = opts.profile != null ? null : readEnv2("ANTHROPIC_AUTH_TOKEN") ?? null; + } + if (opts.profile != null && (opts.credentials != null || opts.config != null)) { + throw new TypeError("Pass at most one of `profile`, `credentials`, or `config`."); + } + const options = { + apiKey, + authToken, + webhookKey, + ...opts, + baseURL: baseURL || `https://api.anthropic.com` + }; + if (!options.dangerouslyAllowBrowser && isRunningInBrowser2()) { + throw new AnthropicError("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew Anthropic({ apiKey, dangerouslyAllowBrowser: true });\n"); + } + this.baseURL = options.baseURL; + this._baseURLIsExplicit = opts.__baseURLIsExplicit ?? !!baseURL; + this.timeout = options.timeout ?? _a5.DEFAULT_TIMEOUT; + this.logger = options.logger ?? console; + this.logLevel = defaultLogLevel; + this.logLevel = parseLogLevel2(options.logLevel, "ClientOptions.logLevel", loggerFor2(this)) ?? parseLogLevel2(readEnv2("ANTHROPIC_LOG"), "process.env['ANTHROPIC_LOG']", loggerFor2(this)) ?? defaultLogLevel; + this.fetchOptions = options.fetchOptions; + this.maxRetries = validatePositiveInteger2("maxRetries", options.maxRetries ?? 2); + this.fetch = options.fetch ?? getDefaultFetch2(); + __classPrivateFieldSet2(this, _BaseAnthropic_encoder, FallbackEncoder2, "f"); + this.middleware = [...options.middleware ?? []]; + const customHeadersEnv = readEnv2("ANTHROPIC_CUSTOM_HEADERS"); + if (customHeadersEnv) { + const parsed = {}; + for (const line of customHeadersEnv.split("\n")) { + const colon = line.indexOf(":"); + if (colon >= 0) { + parsed[line.substring(0, colon).trim()] = line.substring(colon + 1).trim(); + } + } + options.defaultHeaders = { ...parsed, ...options.defaultHeaders }; + } + const inherited = opts.__auth; + delete options.__auth; + delete options.__baseURLIsExplicit; + this._options = options; + this.apiKey = typeof apiKey === "string" ? apiKey : null; + this.authToken = authToken; + this.webhookKey = webhookKey; + if (inherited) { + this._authState = inherited; + if (!this._baseURLIsExplicit && inherited.baseURL) { + this.baseURL = inherited.baseURL; + } + } else { + this._authState = { provider: null, tokenCache: null, resolution: null, error: null, extraHeaders: {} }; + if (this.apiKey == null && this.authToken == null) { + const credentials = options.credentials ?? null; + if (credentials) { + this._authState.provider = credentials; + this._authState.tokenCache = this._makeTokenCache(credentials); + } else if (options.config != null) { + const result = resolveCredentialsFromConfig(options.config, this._credentialResolverOptions()); + this._authState.provider = result.provider; + this._authState.tokenCache = this._makeTokenCache(result.provider); + this._authState.extraHeaders = result.extraHeaders; + this._applyCredentialBaseURL(result.baseURL); + } else if (options.profile != null) { + this._authState.resolution = this._resolveDefaultCredentials(options.profile); + } else if (this._shouldResolveDefaultCredentials()) { + this._authState.resolution = this._resolveDefaultCredentials(); + } + } + } + } + /** + * Whether to lazily resolve auth from the default credential chain when no + * explicit auth is configured. Called once from the constructor, so + * overrides must not depend on subclass instance state. Subclasses that + * bring their own auth scheme return false so unrelated local credentials + * are never resolved or allowed to supply a base URL. + */ + _shouldResolveDefaultCredentials() { + return true; + } + /** + * Stores a profile/config-supplied base URL on the shared auth state and, if + * the caller did not pin `baseURL` via constructor option or env, adopts it + * as this client's outbound API host. Precedence: ctor opt > env > profile > + * hardcoded default. + */ + _applyCredentialBaseURL(baseURL) { + if (!baseURL) + return; + const normalized = baseURL.replace(/\/+$/, ""); + this._authState.baseURL = normalized; + if (!this._baseURLIsExplicit) { + this.baseURL = normalized; + } + } + /** + * Options bag passed into the credential chain. `baseURL` here is only the + * fallback host for the token-exchange POST when the config itself omits + * `base_url`; the chain returns the config's own `base_url` (if any) on + * {@link CredentialResult.baseURL}, which {@link _applyCredentialBaseURL} + * then adopts for outbound API requests. The two are deliberately decoupled + * so this fallback never round-trips into precedence. + */ + _credentialResolverOptions() { + return { + baseURL: this.baseURL, + fetch: this._credentialsFetch(), + userAgent: this.getUserAgent(), + onCacheWriteError: (err) => { + loggerFor2(this).debug("credential cache write failed (best-effort)", err); + }, + onSafetyWarning: (msg) => { + loggerFor2(this).warn(msg); + } + }; + } + /** + * A `Fetch` for first-party credential token-exchange requests (OIDC + * federation jwt-bearer grants, user-OAuth refresh grants) that routes + * through this client's middleware chain, so middleware observes token + * traffic like any other request. Only client-level middleware applies: + * a minted token is shared across requests, so attributing the exchange + * to any one request's per-request middleware would be arbitrary. For the + * same reason, `ctx.options` is undefined for these requests. + */ + _credentialsFetch() { + return wrapFetchWithMiddleware(this.fetch, this.middleware, void 0, this); + } + _makeTokenCache(provider2) { + return new TokenCache(provider2, (err) => { + loggerFor2(this).debug("advisory token refresh failed; serving cached token", err); + }); + } + /** + * Create a new client instance re-using the same options given to the + * current client with optional overriding. + */ + withOptions(options) { + const overridesStructuredAuth = "credentials" in options || "config" in options || "profile" in options; + const overridesAuth = "apiKey" in options || "authToken" in options || overridesStructuredAuth; + const internal = { + ...this._options, + // Only forward baseURL when the caller (or env) explicitly chose it. + // For a non-explicit parent, this.baseURL may have been mutated to the + // profile-resolved host; pinning that as the clone's options.baseURL + // would make _options on the clone misreport caller intent and would + // leave the clone stuck on the parent's host across an auth override. + // The clone instead receives the construction-time value via + // ...this._options above and re-adopts the profile host through the + // shared _authState.baseURL + __baseURLIsExplicit=false path. + ...this._baseURLIsExplicit ? { baseURL: this.baseURL } : {}, + maxRetries: this.maxRetries, + timeout: this.timeout, + logger: this.logger, + logLevel: this.logLevel, + fetch: this.fetch, + fetchOptions: this.fetchOptions, + middleware: this.middleware, + apiKey: this.apiKey, + authToken: this.authToken, + webhookKey: this.webhookKey, + // credentials: this.credentials is a no-op when __auth is shared (the + // ctor takes the inherited path and ignores options.credentials); when + // overridesAuth is true via apiKey/authToken only, it lets the clone + // build a fresh TokenCache around the parent's provider. + credentials: this.credentials, + // When the caller passes a structured-credential override, drop inherited + // structured-credential options so only `...options` supplies them — + // otherwise an inherited `credentials`/`config`/`profile` would trip the + // mutual-exclusion check or precedence over the override. + ...overridesStructuredAuth ? { credentials: void 0, config: void 0, profile: void 0 } : {}, + ...options, + // Always set __auth so any stale value from ...this._options is + // overwritten. undefined means "build fresh auth from these options". + __auth: overridesAuth ? void 0 : this._authState, + __baseURLIsExplicit: "baseURL" in options ? true : this._baseURLIsExplicit + }; + return new this.constructor(internal); + } + /** + * Lazily resolves credentials from config files or environment variables. + * Called once from the constructor when no explicit auth is provided, or + * when an explicit `profile` was passed (in which case a missing/unresolved + * profile is surfaced as an error instead of falling through to "no auth"). + * The returned promise is stored and awaited on the first request. + */ + async _resolveDefaultCredentials(profile) { + try { + const result = await defaultCredentials(this._credentialResolverOptions(), profile); + if (result) { + this._authState.provider = result.provider; + this._authState.tokenCache = this._makeTokenCache(result.provider); + this._authState.extraHeaders = result.extraHeaders; + this._applyCredentialBaseURL(result.baseURL); + } else if (profile != null) { + throw new AnthropicError(`Profile "${profile}" could not be resolved (no /configs/${profile}.json found).`); + } + } catch (err) { + this._authState.error = err; + } finally { + this._authState.resolution = null; + } + } + defaultQuery() { + return this._options.defaultQuery; + } + validateHeaders({ values, nulls }) { + if (values.get("x-api-key") || values.get("authorization")) { + return; + } + if (this._authState.error) { + throw this._authState.error; + } + if (this._authState.tokenCache || this._authState.resolution) { + return; + } + if (this.apiKey && values.get("x-api-key")) { + return; + } + if (nulls.has("x-api-key")) { + return; + } + if (this.authToken && values.get("authorization")) { + return; + } + if (nulls.has("authorization")) { + return; + } + throw new Error('Could not resolve authentication method. Expected one of apiKey, authToken, credentials, config, or profile to be set. Or for one of the "X-Api-Key" or "Authorization" headers to be explicitly omitted'); + } + _authFlags(opts) { + let flags = this._requestAuthFlags.get(opts); + if (!flags) { + flags = { usedTokenCache: false, didRefreshFor401: false }; + this._requestAuthFlags.set(opts, flags); + } + return flags; + } + async authHeaders(opts) { + if (this._authState.resolution) { + await this._authState.resolution; + } + if (this._authState.error) { + return void 0; + } + if (this._authState.tokenCache && this.apiKey == null) { + const token = await this._authState.tokenCache.getToken(); + this._authFlags(opts).usedTokenCache = true; + return buildHeaders2([{ Authorization: `Bearer ${token}` }]); + } + return buildHeaders2([await this.apiKeyAuth(opts), await this.bearerAuth(opts)]); + } + async apiKeyAuth(opts) { + if (this.apiKey == null) { + return void 0; + } + return buildHeaders2([{ "X-Api-Key": this.apiKey }]); + } + async bearerAuth(opts) { + if (this.authToken == null) { + return void 0; + } + return buildHeaders2([{ Authorization: `Bearer ${this.authToken}` }]); + } + stringifyQuery(query) { + return stringifyQuery2(query); + } + getUserAgent() { + return `Anthropic/JS ${VERSION2}`; + } + makeStatusError(status, error, message, headers) { + return APIError2.generate(status, error, message, headers); + } + buildURL(path5, query, defaultBaseURL) { + const baseURL = !__classPrivateFieldGet2(this, _BaseAnthropic_instances, "m", _BaseAnthropic_baseURLOverridden).call(this) && defaultBaseURL || this.baseURL; + const url = isAbsoluteURL2(path5) ? new URL(path5) : new URL(baseURL + (baseURL.endsWith("/") && path5.startsWith("/") ? path5.slice(1) : path5)); + const defaultQuery = this.defaultQuery(); + const pathQuery = Object.fromEntries(url.searchParams); + if (!isEmptyObj2(defaultQuery) || !isEmptyObj2(pathQuery)) { + query = { ...pathQuery, ...defaultQuery, ...query }; + } + if (typeof query === "object" && query && !Array.isArray(query)) { + url.search = this.stringifyQuery(query); + } + return url.toString(); + } + _calculateNonstreamingTimeout(maxTokens) { + const defaultTimeout = 10 * 60; + const expectedTimeout = 60 * 60 * maxTokens / 128e3; + if (expectedTimeout > defaultTimeout) { + throw new AnthropicError("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#streaming-responses for more details"); + } + return defaultTimeout * 1e3; + } + /** + * Used as a callback for mutating the given `FinalRequestOptions` object. + */ + async prepareOptions(options) { + } + /** + * Used as a callback for mutating the given `RequestInit` object. + * + * This is useful for cases where you want to add certain headers based off of + * the request properties, e.g. `method` or `url`. + * + * Runs after all middleware (including {@link backendMiddleware}), + * immediately before each underlying fetch call, so it sees exactly what + * goes over the wire. Middleware may replay a request by calling `next()` + * more than once, so this hook can run multiple times per attempt: + * overrides must be idempotent and overwrite headers from a previous + * invocation rather than append to them. + */ + async prepareRequest(request2, { url, options }) { + if (this._authState.tokenCache && this.apiKey == null) { + const headers = request2.headers instanceof Headers ? request2.headers : new Headers(request2.headers); + for (const [k, v] of Object.entries(this._authState.extraHeaders)) { + if (!headers.has(k)) + headers.set(k, v); + } + const existing = headers.get("anthropic-beta")?.split(",").map((s) => s.trim()); + if (!existing?.includes(OAUTH_API_BETA_HEADER)) { + headers.set("anthropic-beta", [...existing ?? [], OAUTH_API_BETA_HEADER].join(",")); + } + request2.headers = headers; + } + } + /** + * Internal {@link Middleware} composed innermost in the chain — inside both + * client-level and per-request middleware, immediately around the underlying + * `fetch`. Subclasses for third-party backends override this to adapt the + * canonical Anthropic-shaped request to the backend's wire shape (URL/body + * rewriting, request signing) and to normalize the wire response back to the + * canonical shape (e.g. AWS EventStream to SSE). + * + * Running inside the user's middleware means user middleware always observes + * canonical Anthropic-shaped traffic, and the adaptation re-runs (e.g. + * re-signs) on every `next()` invocation, covering whatever the middleware + * mutated. + * + * Errors thrown here follow the middleware error policy: they propagate to + * the caller as-is — no retries, no `APIConnectionError` wrapping — unless + * retryable (see {@link Middleware}); throw a `RetryableError` to opt into + * the retry path. + */ + backendMiddleware() { + return []; + } + get(path5, opts) { + return this.methodRequest("get", path5, opts); + } + post(path5, opts) { + return this.methodRequest("post", path5, opts); + } + patch(path5, opts) { + return this.methodRequest("patch", path5, opts); + } + put(path5, opts) { + return this.methodRequest("put", path5, opts); + } + delete(path5, opts) { + return this.methodRequest("delete", path5, opts); + } + methodRequest(method, path5, opts) { + return this.request(Promise.resolve(opts).then((opts2) => { + return { method, path: path5, ...opts2 }; + })); + } + request(options, remainingRetries = null) { + return new APIPromise2(this, this.makeRequest(options, remainingRetries, void 0)); + } + async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) { + const options = await optionsInput; + let maxRetries = validatePositiveInteger2("maxRetries", options.maxRetries ?? this.maxRetries); + if (this.isStreamBody(options.body)) { + maxRetries = 0; + } + if (retriesRemaining == null) { + retriesRemaining = maxRetries; + this._requestAuthFlags.delete(options); + } + await this.prepareOptions(options); + const { req, url, timeout } = await this.buildRequest(options, { + retryCount: maxRetries - retriesRemaining + }); + const requestLogID = "log_" + (Math.random() * (1 << 24) | 0).toString(16).padStart(6, "0"); + const retryLogStr = retryOfRequestLogID === void 0 ? "" : `, retryOf: ${retryOfRequestLogID}`; + const startTime = Date.now(); + if (options.signal?.aborted) { + throw new APIUserAbortError2(); + } + const controller = new AbortController(); + const response = await this.fetchWithTimeout(url, req, timeout, controller, options, { + requestLogID, + retryOfRequestLogID + }).catch(castToError2); + const headersTime = Date.now(); + if (response instanceof globalThis.Error) { + releaseRequestSignal(controller); + const retryMessage = `retrying, ${retriesRemaining} attempts remaining`; + if (options.signal?.aborted) { + throw new APIUserAbortError2(); + } + const isTimeout = isAbortError2(response) || /timed? ?out/i.test(String(response) + ("cause" in response ? String(response.cause) : "")); + const hasMiddleware = this.middleware.length > 0 || !!options.middleware?.length || this.backendMiddleware().length > 0; + if (hasMiddleware && !isTimeout && !isRetryableError(response)) { + loggerFor2(this).info(`[${requestLogID}] middleware error (not retryable)`); + debugLogRequestDetails(loggerFor2(this), `[${requestLogID}] middleware error (not retryable)`, { + retryOfRequestLogID, + url, + durationMs: headersTime - startTime, + message: response.message + }); + throw response; + } + if (retriesRemaining) { + loggerFor2(this).info(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} - ${retryMessage}`); + debugLogRequestDetails(loggerFor2(this), `[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} (${retryMessage})`, { + retryOfRequestLogID, + url, + durationMs: headersTime - startTime, + message: response.message + }); + return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID); + } + loggerFor2(this).info(`[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} - error; no more retries left`); + debugLogRequestDetails(loggerFor2(this), `[${requestLogID}] connection ${isTimeout ? "timed out" : "failed"} (error; no more retries left)`, { + retryOfRequestLogID, + url, + durationMs: headersTime - startTime, + message: response.message + }); + if (isTimeout) { + throw new APIConnectionTimeoutError2(); + } + if (hasMiddleware && !isFetchOriginError(response)) { + throw response; + } + throw new APIConnectionError2({ cause: response }); + } + const specialHeaders = [...response.headers.entries()].filter(([name]) => name === "request-id" || name === "anthropic-workspace-id").map(([name, value2]) => ", " + name + ": " + JSON.stringify(value2)).join(""); + const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? "succeeded" : "failed"} with status ${response.status} in ${headersTime - startTime}ms`; + if (!response.ok) { + const shouldRetry = await this.shouldRetry(response, options); + if (retriesRemaining && shouldRetry) { + const retryMessage2 = `retrying, ${retriesRemaining} attempts remaining`; + await CancelReadableStream2(response.body); + releaseRequestSignal(controller); + loggerFor2(this).info(`${responseInfo} - ${retryMessage2}`); + debugLogRequestDetails(loggerFor2(this), `[${requestLogID}] response error (${retryMessage2})`, { + retryOfRequestLogID, + url: response.url, + status: response.status, + headers: response.headers, + durationMs: headersTime - startTime + }); + return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers); + } + const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`; + loggerFor2(this).info(`${responseInfo} - ${retryMessage}`); + const errText = await response.text().catch((err2) => castToError2(err2).message); + const errJSON = safeJSON2(errText); + const errMessage = errJSON ? void 0 : errText; + debugLogRequestDetails(loggerFor2(this), `[${requestLogID}] response error (${retryMessage})`, { + retryOfRequestLogID, + url: response.url, + status: response.status, + headers: response.headers, + message: errMessage, + durationMs: Date.now() - startTime + }); + releaseRequestSignal(controller); + const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers); + throw err; + } + loggerFor2(this).info(responseInfo); + debugLogRequestDetails(loggerFor2(this), `[${requestLogID}] response start`, { + retryOfRequestLogID, + url: response.url, + status: response.status, + headers: response.headers, + durationMs: headersTime - startTime + }); + armAbandonmentBackstop(response.body ?? response, controller); + return { response, options, controller, requestLogID, retryOfRequestLogID, startTime }; + } + getAPIList(path5, Page3, opts) { + return this.requestAPIList(Page3, opts && "then" in opts ? opts.then((opts2) => ({ method: "get", path: path5, ...opts2 })) : { method: "get", path: path5, ...opts }); + } + requestAPIList(Page3, options) { + const request2 = this.makeRequest(options, null, void 0); + return new PagePromise2(this, request2, Page3); + } + async fetchWithTimeout(url, init, ms, controller, requestOptions, logCtx) { + const { signal, method, ...options } = init || {}; + const abort = this._makeAbort(controller); + if (signal) { + signal.addEventListener("abort", abort, { once: true }); + registerRequestSignalCleanup(controller, signal, abort); + } + const isReadableBody = globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream || typeof options.body === "object" && options.body !== null && Symbol.asyncIterator in options.body; + const fetchOptions = { + signal: controller.signal, + ...isReadableBody ? { duplex: "half" } : {}, + method: "GET", + ...options + }; + if (method) { + fetchOptions.method = method.toUpperCase(); + } + const baseFetch = this.fetch; + const timedFetch = async (innerUrl, innerInit) => { + const timeout = setTimeout(abort, ms); + try { + return await baseFetch.call(void 0, innerUrl, innerInit); + } finally { + clearTimeout(timeout); + } + }; + const innerFetch = requestOptions === void 0 ? timedFetch : (async (innerUrl, innerInit = {}) => { + const innerUrlStr = typeof innerUrl === "string" ? innerUrl : innerUrl instanceof URL ? innerUrl.href : innerUrl.url; + innerInit.headers = innerInit.headers instanceof Headers ? innerInit.headers : new Headers(innerInit.headers); + await this.prepareRequest(innerInit, { url: innerUrlStr, options: requestOptions }); + if (logCtx) { + debugLogRequestDetails(loggerFor2(this), `[${logCtx.requestLogID}] sending request`, { + retryOfRequestLogID: logCtx.retryOfRequestLogID, + method: innerInit.method, + url: innerUrlStr, + options: requestOptions, + headers: innerInit.headers + }); + } + return timedFetch(innerUrl, innerInit); + }); + const requestMiddleware = requestOptions?.middleware; + const backendMiddleware = this.backendMiddleware(); + const allMiddleware = requestMiddleware?.length || backendMiddleware.length ? [...this.middleware, ...requestMiddleware ?? [], ...backendMiddleware] : this.middleware; + return await wrapFetchWithMiddleware(innerFetch, allMiddleware, requestOptions, this)(url, fetchOptions); + } + async shouldRetry(response, options) { + const flags = this._authFlags(options); + if (response.status === 401 && this._authState.tokenCache && flags.usedTokenCache && !flags.didRefreshFor401) { + flags.didRefreshFor401 = true; + this._authState.tokenCache.invalidate(); + return true; + } + const shouldRetryHeader = response.headers.get("x-should-retry"); + if (shouldRetryHeader === "true") + return true; + if (shouldRetryHeader === "false") + return false; + if (response.status === 408) + return true; + if (response.status === 409) + return true; + if (response.status === 429) + return true; + if (response.status >= 500) + return true; + return false; + } + async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) { + let timeoutMillis; + const retryAfterMillisHeader = responseHeaders?.get("retry-after-ms"); + if (retryAfterMillisHeader) { + const timeoutMs = parseFloat(retryAfterMillisHeader); + if (!Number.isNaN(timeoutMs)) { + timeoutMillis = timeoutMs; + } + } + const retryAfterHeader = responseHeaders?.get("retry-after"); + if (retryAfterHeader && !timeoutMillis) { + const timeoutSeconds = parseFloat(retryAfterHeader); + if (!Number.isNaN(timeoutSeconds)) { + timeoutMillis = timeoutSeconds * 1e3; + } else { + timeoutMillis = Date.parse(retryAfterHeader) - Date.now(); + } + } + if (timeoutMillis === void 0 || !(timeoutMillis > 0 && timeoutMillis <= 2 ** 31 - 1)) { + const maxRetries = options.maxRetries ?? this.maxRetries; + timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries); + } + await sleep2(timeoutMillis, options.signal ?? void 0); + return this.makeRequest(options, retriesRemaining - 1, requestLogID); + } + calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) { + const initialRetryDelay = 0.5; + const maxRetryDelay = 8; + const numRetries = maxRetries - retriesRemaining; + const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay); + const jitter2 = 1 - Math.random() * 0.25; + return sleepSeconds * jitter2 * 1e3; + } + calculateNonstreamingTimeout(maxTokens, maxNonstreamingTokens) { + const maxTime = 60 * 60 * 1e3; + const defaultTime = 60 * 10 * 1e3; + const expectedTime = maxTime * maxTokens / 128e3; + if (expectedTime > defaultTime || maxNonstreamingTokens != null && maxTokens > maxNonstreamingTokens) { + throw new AnthropicError("Streaming is required for operations that may take longer than 10 minutes. See https://github.com/anthropics/anthropic-sdk-typescript#long-requests for more details"); + } + return defaultTime; + } + async buildRequest(inputOptions, { retryCount = 0 } = {}) { + const options = { ...inputOptions }; + const { method, path: path5, query, defaultBaseURL } = options; + if (this._authState.resolution) { + await this._authState.resolution; + } + if (!this._baseURLIsExplicit && this._authState.baseURL && this.baseURL !== this._authState.baseURL) { + this.baseURL = this._authState.baseURL; + } + const url = this.buildURL(path5, query, defaultBaseURL); + if ("timeout" in options) + validatePositiveInteger2("timeout", options.timeout); + options.timeout = options.timeout ?? this.timeout; + const { bodyHeaders, body } = this.buildBody({ options }); + const reqHeaders = await this.buildHeaders({ + options: inputOptions, + method, + bodyHeaders, + retryCount, + timeout: options.timeout + }); + const req = { + method, + headers: reqHeaders, + ...options.signal && { signal: options.signal }, + ...globalThis.ReadableStream && body instanceof globalThis.ReadableStream && { duplex: "half" }, + ...body && { body }, + ...this.fetchOptions ?? {}, + ...options.fetchOptions ?? {} + }; + return { req, url, timeout: options.timeout }; + } + async buildHeaders({ options, method, bodyHeaders, retryCount, timeout }) { + const headers = buildHeaders2([ + { + Accept: "application/json", + "User-Agent": this.getUserAgent(), + "X-Stainless-Retry-Count": String(retryCount), + "X-Stainless-Timeout": String(Math.trunc(timeout / 1e3)), + ...getPlatformHeaders2(), + ...this._options.dangerouslyAllowBrowser ? { "anthropic-dangerous-direct-browser-access": "true" } : void 0, + "anthropic-version": "2023-06-01" + }, + await this.authHeaders(options), + this._options.defaultHeaders, + bodyHeaders, + options.headers + ]); + this.validateHeaders(headers); + return headers.values; + } + _makeAbort(controller) { + return () => controller.abort(); + } + buildBody({ options: { body, headers: rawHeaders } }) { + if (!body) { + return { bodyHeaders: void 0, body: void 0 }; + } + const headers = buildHeaders2([rawHeaders]); + if ( + // Pass raw type verbatim + ArrayBuffer.isView(body) || body instanceof ArrayBuffer || body instanceof DataView || typeof body === "string" && // Preserve legacy string encoding behavior for now + headers.values.has("content-type") || // `Blob` is superset of `File` + globalThis.Blob && body instanceof globalThis.Blob || // `FormData` -> `multipart/form-data` + body instanceof FormData || // `URLSearchParams` -> `application/x-www-form-urlencoded` + body instanceof URLSearchParams || // Send chunked stream (each chunk has own `length`) + globalThis.ReadableStream && body instanceof globalThis.ReadableStream + ) { + return { bodyHeaders: void 0, body }; + } else if (this.isStreamBody(body)) { + return { bodyHeaders: void 0, body: ReadableStreamFrom2(body) }; + } else if (typeof body === "object" && headers.values.get("content-type") === "application/x-www-form-urlencoded") { + return { + bodyHeaders: { "content-type": "application/x-www-form-urlencoded" }, + body: this.stringifyQuery(body) + }; + } else { + return __classPrivateFieldGet2(this, _BaseAnthropic_encoder, "f").call(this, { body, headers }); + } + } + /** + * Whether `body` is sent as a stream, which can be read only once: + * a `ReadableStream`, an async iterable or an iterator. + */ + isStreamBody(body) { + if (globalThis.ReadableStream && body instanceof globalThis.ReadableStream) { + return true; + } + return typeof body === "object" && body !== null && (Symbol.asyncIterator in body || Symbol.iterator in body && "next" in body && typeof body.next === "function"); + } + } + _a5 = BaseAnthropic2, _BaseAnthropic_encoder = /* @__PURE__ */ new WeakMap(), _BaseAnthropic_instances = /* @__PURE__ */ new WeakSet(), _BaseAnthropic_baseURLOverridden = function _BaseAnthropic_baseURLOverridden2() { + return this.baseURL !== "https://api.anthropic.com"; + }; + BaseAnthropic2.Anthropic = _a5; + BaseAnthropic2.DEFAULT_TIMEOUT = 6e5; + BaseAnthropic2.AnthropicError = AnthropicError; + BaseAnthropic2.APIError = APIError2; + BaseAnthropic2.APIConnectionError = APIConnectionError2; + BaseAnthropic2.APIConnectionTimeoutError = APIConnectionTimeoutError2; + BaseAnthropic2.APIUserAbortError = APIUserAbortError2; + BaseAnthropic2.NotFoundError = NotFoundError2; + BaseAnthropic2.ConflictError = ConflictError2; + BaseAnthropic2.RateLimitError = RateLimitError2; + BaseAnthropic2.BadRequestError = BadRequestError2; + BaseAnthropic2.AuthenticationError = AuthenticationError2; + BaseAnthropic2.InternalServerError = InternalServerError2; + BaseAnthropic2.PermissionDeniedError = PermissionDeniedError2; + BaseAnthropic2.UnprocessableEntityError = UnprocessableEntityError2; + BaseAnthropic2.toFile = toFile2; + BaseAnthropic2.HUMAN_PROMPT = HUMAN_PROMPT; + BaseAnthropic2.AI_PROMPT = AI_PROMPT; + return BaseAnthropic2; + })(); + Anthropic = /* @__PURE__ */ (() => { + class Anthropic2 extends BaseAnthropic { + constructor() { + super(...arguments); + this.completions = new Completions3(this); + this.messages = new Messages4(this); + this.models = new Models3(this); + this.files = new Files6(this); + this.skills = new Skills3(this); + this.beta = new Beta2(this); + } + } + Anthropic2.Completions = Completions3; + Anthropic2.Messages = Messages4; + Anthropic2.Models = Models3; + Anthropic2.Files = Files6; + Anthropic2.Skills = Skills3; + Anthropic2.Beta = Beta2; + return Anthropic2; + })(); + } +}); + +// node_modules/@anthropic-ai/sdk/index.mjs +var init_sdk = __esm({ + "node_modules/@anthropic-ai/sdk/index.mjs"() { + init_client2(); + } +}); + +// node_modules/@earendil-works/pi-ai/dist/env-api-keys.js +var __rewriteRelativeImportExtension2, _existsSync, _homedir, _join, dynamicImport, NODE_FS_SPECIFIER, NODE_OS_SPECIFIER, NODE_PATH_SPECIFIER, ANTHROPIC_FEDERATION_RULE_ID_ENV, ANTHROPIC_ORGANIZATION_ID_ENV, ANTHROPIC_SERVICE_ACCOUNT_ID_ENV, ANTHROPIC_IDENTITY_TOKEN_FILE_ENV, ANTHROPIC_WORKSPACE_ID_ENV; +var init_env_api_keys = __esm({ + "node_modules/@earendil-works/pi-ai/dist/env-api-keys.js"() { + __rewriteRelativeImportExtension2 = function(path5, preserveJsx) { + if (typeof path5 === "string" && /^\.\.?\//.test(path5)) { + return path5.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function(m, tsx, d, ext, cm) { + return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : d + ext + "." + cm.toLowerCase() + "js"; + }); + } + return path5; + }; + _existsSync = null; + _homedir = null; + _join = null; + dynamicImport = (specifier) => import(__rewriteRelativeImportExtension2(specifier)); + NODE_FS_SPECIFIER = "node:fs"; + NODE_OS_SPECIFIER = "node:os"; + NODE_PATH_SPECIFIER = "node:path"; + if (typeof process !== "undefined" && (process.versions?.node || process.versions?.bun)) { + dynamicImport(NODE_FS_SPECIFIER).then((m) => { + _existsSync = m.existsSync; + }); + dynamicImport(NODE_OS_SPECIFIER).then((m) => { + _homedir = m.homedir; + }); + dynamicImport(NODE_PATH_SPECIFIER).then((m) => { + _join = m.join; + }); + } + ANTHROPIC_FEDERATION_RULE_ID_ENV = "ANTHROPIC_FEDERATION_RULE_ID"; + ANTHROPIC_ORGANIZATION_ID_ENV = "ANTHROPIC_ORGANIZATION_ID"; + ANTHROPIC_SERVICE_ACCOUNT_ID_ENV = "ANTHROPIC_SERVICE_ACCOUNT_ID"; + ANTHROPIC_IDENTITY_TOKEN_FILE_ENV = "ANTHROPIC_IDENTITY_TOKEN_FILE"; + ANTHROPIC_WORKSPACE_ID_ENV = "ANTHROPIC_WORKSPACE_ID"; + } +}); + +// node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +var anthropic_messages_exports = {}; +__export(anthropic_messages_exports, { + stream: () => stream3, + streamSimple: () => streamSimple2 +}); +function resolveCacheRetention2(cacheRetention, env) { + if (cacheRetention) { + return cacheRetention; + } + if (getProviderEnvValue("PI_CACHE_RETENTION", env) === "long") { + return "long"; + } + return "short"; +} +function getCacheControl(model2, cacheRetention, env) { + const retention = resolveCacheRetention2(cacheRetention, env); + if (retention === "none") { + return { retention }; + } + const ttl = retention === "long" && getAnthropicCompat(model2).supportsLongCacheRetention ? "1h" : void 0; + return { + retention, + cacheControl: { type: "ephemeral", ...ttl && { ttl } } + }; +} +function convertImageBlock(image) { + return { + type: "image", + source: { + type: "base64", + media_type: image.mimeType, + data: image.data + } + }; +} +function convertContentBlocks(content) { + const hasImages = content.some((c) => c.type === "image"); + if (!hasImages) { + return sanitizeSurrogates(content.map((c) => c.text).join("\n")); + } + const blocks = content.map((block) => { + if (block.type === "text") { + return { + type: "text", + text: sanitizeSurrogates(block.text) + }; + } + return convertImageBlock(block); + }); + const hasText = blocks.some((b) => b.type === "text"); + if (!hasText) { + blocks.unshift({ + type: "text", + text: "(see attached image)" + }); + } + return blocks; +} +function shouldUseServerSideFallbackBeta(model2) { + return (model2.compat?.allowedFallbackModels?.length ?? 0) > 0; +} +function getAnthropicCompat(model2) { + const isOpenRouter2 = model2.provider === "openrouter" || model2.baseUrl.includes("openrouter.ai"); + return { + supportsEagerToolInputStreaming: model2.compat?.supportsEagerToolInputStreaming ?? true, + supportsLongCacheRetention: model2.compat?.supportsLongCacheRetention ?? true, + sendSessionAffinityHeaders: model2.compat?.sendSessionAffinityHeaders ?? isOpenRouter2, + sessionAffinityFormat: model2.compat?.sessionAffinityFormat ?? (isOpenRouter2 ? "openrouter" : void 0), + supportsCacheControlOnTools: model2.compat?.supportsCacheControlOnTools ?? true, + supportsTemperature: model2.compat?.supportsTemperature ?? true, + allowEmptySignature: model2.compat?.allowEmptySignature ?? false, + supportsStrictTools: model2.compat?.supportsStrictTools ?? false, + supportsMidConvoSystemMessages: model2.compat?.supportsMidConvoSystemMessages ?? false, + supportsMidConvoToolChanges: model2.compat?.supportsMidConvoToolChanges ?? false + }; +} +function mergeHeaders2(...headerSources) { + const merged = {}; + for (const headers of headerSources) { + if (headers) { + Object.assign(merged, headers); + } + } + return merged; +} +function hasHeader2(headers, name) { + if (!headers) + return false; + const expected = name.toLowerCase(); + for (const [key, value2] of Object.entries(headers)) { + if (key.toLowerCase() === expected && value2 !== null && value2.trim().length > 0) + return true; + } + return false; +} +function hasRequestAuth(apiKey, headers) { + return !!apiKey || hasHeader2(headers, "authorization") || hasHeader2(headers, "x-api-key") || hasHeader2(headers, "cf-aig-authorization"); +} +function assertRequestAuth(provider2, apiKey, headers) { + if (!hasRequestAuth(apiKey, headers)) + throw new Error(`No API key for provider: ${provider2}`); +} +function getAnthropicFederation(model2, apiKey, headers, env) { + if (model2.provider !== "anthropic" || hasRequestAuth(apiKey, headers)) + return void 0; + const federationRuleId = getProviderEnvValue(ANTHROPIC_FEDERATION_RULE_ID_ENV, env); + const organizationId = getProviderEnvValue(ANTHROPIC_ORGANIZATION_ID_ENV, env); + const identityTokenFile = getProviderEnvValue(ANTHROPIC_IDENTITY_TOKEN_FILE_ENV, env); + if (!federationRuleId || !organizationId || !identityTokenFile) + return void 0; + return { + organization_id: organizationId, + workspace_id: getProviderEnvValue(ANTHROPIC_WORKSPACE_ID_ENV, env), + authentication: { + type: "oidc_federation", + federation_rule_id: federationRuleId, + service_account_id: getProviderEnvValue(ANTHROPIC_SERVICE_ACCOUNT_ID_ENV, env), + identity_token: { source: "file", path: identityTokenFile } + } + }; +} +function flushSseEvent(state2) { + if (!state2.event && state2.data.length === 0) { + return null; + } + const event = { + event: state2.event, + data: state2.data.join("\n"), + raw: [...state2.raw] + }; + state2.event = null; + state2.data = []; + state2.raw = []; + return event; +} +function decodeSseLine(line, state2) { + if (line === "") { + return flushSseEvent(state2); + } + state2.raw.push(line); + if (line.startsWith(":")) { + return null; + } + const delimiterIndex = line.indexOf(":"); + const fieldName = delimiterIndex === -1 ? line : line.slice(0, delimiterIndex); + let value2 = delimiterIndex === -1 ? "" : line.slice(delimiterIndex + 1); + if (value2.startsWith(" ")) { + value2 = value2.slice(1); + } + if (fieldName === "event") { + state2.event = value2; + } else if (fieldName === "data") { + state2.data.push(value2); + } + return null; +} +function nextLineBreakIndex(text) { + const carriageReturnIndex = text.indexOf("\r"); + const newlineIndex = text.indexOf("\n"); + if (carriageReturnIndex === -1) { + return newlineIndex; + } + if (newlineIndex === -1) { + return carriageReturnIndex; + } + return Math.min(carriageReturnIndex, newlineIndex); +} +function consumeLine(text) { + const lineBreakIndex = nextLineBreakIndex(text); + if (lineBreakIndex === -1) { + return null; + } + let nextIndex = lineBreakIndex + 1; + if (text[lineBreakIndex] === "\r" && text[nextIndex] === "\n") { + nextIndex += 1; + } + return { + line: text.slice(0, lineBreakIndex), + rest: text.slice(nextIndex) + }; +} +async function* iterateSseMessages(body, signal) { + const reader = body.getReader(); + const decoder3 = new TextDecoder(); + const state2 = { event: null, data: [], raw: [] }; + let buffer = ""; + try { + while (true) { + if (signal?.aborted) { + throw new Error("Request was aborted"); + } + const { value: value2, done } = await reader.read(); + if (done) { + break; + } + buffer += decoder3.decode(value2, { stream: true }); + let consumed2 = consumeLine(buffer); + while (consumed2) { + buffer = consumed2.rest; + const event = decodeSseLine(consumed2.line, state2); + if (event) { + yield event; + } + consumed2 = consumeLine(buffer); + } + } + buffer += decoder3.decode(); + let consumed = consumeLine(buffer); + while (consumed) { + buffer = consumed.rest; + const event = decodeSseLine(consumed.line, state2); + if (event) { + yield event; + } + consumed = consumeLine(buffer); + } + if (buffer.length > 0) { + const event = decodeSseLine(buffer, state2); + if (event) { + yield event; + } + } + const trailingEvent = flushSseEvent(state2); + if (trailingEvent) { + yield trailingEvent; + } + } finally { + reader.releaseLock(); + } +} +async function* iterateAnthropicEvents(response, signal) { + if (!response.body) { + throw new Error("Attempted to iterate over an Anthropic response with no body"); + } + let sawMessageStart = false; + let sawMessageEnd = false; + for await (const sse of iterateSseMessages(response.body, signal)) { + if (sse.event === "error") { + throw new Error(sse.data); + } + if (!ANTHROPIC_MESSAGE_EVENTS.has(sse.event ?? "")) { + continue; + } + try { + const event = parseJsonWithRepair(sse.data); + if (event.type === "message_start") { + sawMessageStart = true; + } else if (event.type === "message_stop") { + sawMessageEnd = true; + } + yield event; + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + throw new Error(`Could not parse Anthropic SSE event ${sse.event}: ${message}; data=${sse.data}; raw=${sse.raw.join("\\n")}`); + } + } + if (sawMessageStart && !sawMessageEnd) { + throw new Error("Anthropic stream ended before message_stop"); + } +} +function mapThinkingLevelToEffort(model2, level) { + const mapped = level ? model2.thinkingLevelMap?.[level] : void 0; + if (typeof mapped === "string") + return mapped; + switch (level) { + case "minimal": + case "low": + return "low"; + case "medium": + return "medium"; + case "high": + return "high"; + default: + return "high"; + } +} +function isOAuthToken(apiKey) { + return apiKey.includes("sk-ant-oat"); +} +function createClient2(model2, apiKey, optionsHeaders, fetch2, dynamicHeaders, sessionId, federation, identity) { + if (model2.provider === "github-copilot") { + const client2 = new PiAnthropic({ + apiKey: null, + authToken: apiKey ?? null, + baseURL: model2.baseUrl, + dangerouslyAllowBrowser: true, + fetch: fetch2, + defaultHeaders: mergeHeaders2(getIdentityHeaders(model2, identity), { + accept: "application/json", + "anthropic-dangerous-direct-browser-access": "true" + }, model2.headers, dynamicHeaders, optionsHeaders) + }); + return { client: client2, isOAuthToken: false }; + } + if (apiKey && isOAuthToken(apiKey)) { + const client2 = new PiAnthropic({ + apiKey: null, + authToken: apiKey, + baseURL: model2.baseUrl, + dangerouslyAllowBrowser: true, + fetch: fetch2, + defaultHeaders: mergeHeaders2({ + accept: "application/json", + "anthropic-dangerous-direct-browser-access": "true", + "user-agent": `claude-cli/${claudeCodeVersion}`, + "x-app": "cli" + }, model2.headers, optionsHeaders) + }); + return { client: client2, isOAuthToken: true }; + } + const compat = getAnthropicCompat(model2); + const sessionAffinityHeaders = {}; + if (sessionId && compat.sendSessionAffinityHeaders) { + const header = compat.sessionAffinityFormat === "openrouter" ? "x-session-id" : "x-session-affinity"; + sessionAffinityHeaders[header] = sessionId; + } + const defaultHeaders = mergeHeaders2(getIdentityHeaders(model2, identity), { + accept: "application/json", + "anthropic-dangerous-direct-browser-access": "true" + }, sessionAffinityHeaders, model2.headers, optionsHeaders); + if (federation) { + const key = JSON.stringify([model2.baseUrl, federation]); + if (federationClient?.key !== key || federationClient.fetch !== fetch2) { + const client2 = new PiAnthropic({ + apiKey: null, + authToken: null, + config: federation, + baseURL: model2.baseUrl, + dangerouslyAllowBrowser: true, + fetch: fetch2 + }); + federationClient = { key, fetch: fetch2, client: client2 }; + } + return { client: federationClient.client.withOptions({ defaultHeaders }), isOAuthToken: false }; + } + const client = new PiAnthropic({ + apiKey: apiKey ?? null, + authToken: null, + baseURL: model2.baseUrl, + dangerouslyAllowBrowser: true, + fetch: fetch2, + defaultHeaders + }); + return { client, isOAuthToken: false }; +} +function getBetaFeatures(model2, context, isOAuthToken2, nativeToolChanges, options) { + let configuredFeatures; + for (const headers of [model2.headers, options?.headers]) { + for (const [name, value2] of Object.entries(headers ?? {})) { + if (name.toLowerCase() === "anthropic-beta") + configuredFeatures = value2; + } + } + if (configuredFeatures === null) + return []; + if (configuredFeatures !== void 0) { + return [ + ...new Set(configuredFeatures.split(",").map((feature) => feature.trim()).filter((feature) => feature.length > 0)) + ]; + } + const features = []; + if (isOAuthToken2) + features.push("claude-code-20250219", "oauth-2025-04-20"); + if (shouldUseFineGrainedToolStreamingBeta(model2, context)) + features.push(FINE_GRAINED_TOOL_STREAMING_BETA); + if (model2.reasoning && options?.thinkingEnabled === true && (options.interleavedThinking ?? true) && model2.compat?.forceAdaptiveThinking !== true) { + features.push(INTERLEAVED_THINKING_BETA); + } + if (shouldUseServerSideFallbackBeta(model2)) + features.push(SERVER_SIDE_FALLBACK_BETA); + if (model2.compat?.supportsMidConvoEffort === true) { + features.push(MID_CONVERSATION_OUTPUT_CONFIG_BETA, THINKING_BINDING_CONTROLS_BETA); + } + if (nativeToolChanges) + features.push(INLINE_TOOLS_BETA); + return [...new Set(features)]; +} +function buildParams2(model2, context, isOAuthToken2, options, disablePreferredStrictTools = false) { + const { cacheControl } = getCacheControl(model2, options?.cacheRetention, options?.env); + const compat = getAnthropicCompat(model2); + const initialSystemMessage = getInitialSystemMessage(context.messages); + const initialSystemText = initialSystemMessage ? getSystemMessageText(initialSystemMessage) : ""; + const transformedMessages = transformMessages(context.messages, model2, normalizeToolCallId); + const conversationMessages = initialSystemMessage ? transformedMessages.slice(1) : transformedMessages; + let hasPreferredStrictTools = false; + const convertToolDefinitions = (tools, toolCacheControl2) => { + const definitions = convertTools2(tools, isOAuthToken2, compat.supportsEagerToolInputStreaming, compat.supportsStrictTools, toolCacheControl2, disablePreferredStrictTools); + if (definitions.some((definition, index) => definition.strict === true && prefersJsonSchemaStrictSampling(tools[index]))) { + hasPreferredStrictTools = true; + } + return definitions; + }; + const initialTools = initialSystemMessage?.toolsAdded ?? []; + const nativeToolChanges = compat.supportsMidConvoSystemMessages && compat.supportsMidConvoToolChanges && initialTools.length > 0; + const thinkingDisabled = model2.reasoning && options?.thinkingEnabled === false && model2.thinkingLevelMap?.off !== null; + const effortMessages = model2.compat?.supportsMidConvoEffort === true && !thinkingDisabled; + const converted = convertMessages2(conversationMessages, isOAuthToken2, cacheControl, compat.allowEmptySignature, effortMessages ? model2.provider : void 0, nativeToolChanges ? convertToolDefinitions : void 0); + const activeEffort = options?.effort ?? "high"; + const betaFeatures = getBetaFeatures(model2, context, isOAuthToken2, nativeToolChanges, options); + const params = { + model: model2.id, + messages: effortMessages ? insertThinkingLevelMessages(converted, activeEffort) : converted.messages, + max_tokens: options?.maxTokens ?? model2.maxTokens, + stream: true, + ...betaFeatures.length > 0 ? { betas: betaFeatures } : {} + }; + if (isOAuthToken2) { + params.system = [ + { + type: "text", + text: "You are Claude Code, Anthropic's official CLI for Claude.", + ...cacheControl ? { cache_control: cacheControl } : {} + } + ]; + if (initialSystemText) { + params.system.push({ + type: "text", + text: sanitizeSurrogates(initialSystemText), + ...cacheControl ? { cache_control: cacheControl } : {} + }); + } + } else if (initialSystemText) { + params.system = [ + { + type: "text", + text: sanitizeSurrogates(initialSystemText), + ...cacheControl ? { cache_control: cacheControl } : {} + } + ]; + } + if (options?.temperature !== void 0 && !options?.thinkingEnabled && model2.compat?.supportsMidConvoEffort !== true && compat.supportsTemperature) { + params.temperature = options.temperature; + } + const toolCacheControl = compat.supportsCacheControlOnTools ? cacheControl : void 0; + if (nativeToolChanges) { + params.tools = [...convertToolDefinitions(initialTools, toolCacheControl), DEFERRED_TOOL_PLACEHOLDER]; + } else { + const tools = getCurrentTools(context.messages); + if (tools.length > 0) { + params.tools = convertToolDefinitions(tools, toolCacheControl); + } + } + if (thinkingDisabled) { + params.thinking = { type: "disabled" }; + } else if (effortMessages) { + params.thinking = { + type: "adaptive", + display: options?.thinkingDisplay ?? "summarized", + block_binding: { prefix_mismatch_behavior: "drop_block" } + }; + params.output_config = { effort: "low" }; + } else if (model2.reasoning && options?.thinkingEnabled) { + const display = options.thinkingDisplay ?? "summarized"; + if (model2.compat?.forceAdaptiveThinking === true) { + params.thinking = { type: "adaptive", display }; + if (options.effort) { + params.output_config = { effort: options.effort }; + } + } else { + params.thinking = { + type: "enabled", + budget_tokens: options.thinkingBudgetTokens || 1024, + display + }; + } + } + if (options?.metadata) { + const userId = options.metadata.user_id; + if (typeof userId === "string") { + params.metadata = { user_id: userId }; + } + } + if (options?.toolChoice) { + if (typeof options.toolChoice === "string") { + params.tool_choice = { type: options.toolChoice }; + } else { + params.tool_choice = options.toolChoice; + } + } + const allowedFallbackModels = model2.compat?.allowedFallbackModels; + if (allowedFallbackModels && allowedFallbackModels.length > 0) { + params.fallbacks = allowedFallbackModels.map((fallback) => ({ model: fallback.model })); + } + return { params, hasPreferredStrictTools, providerThinkingLevel: effortMessages ? activeEffort : void 0 }; +} +function normalizeToolCallId(id) { + return id.replace(/[^a-zA-Z0-9_-]/g, "_").slice(0, 64); +} +function convertToolResult(msg, content = msg.content) { + return { + type: "tool_result", + tool_use_id: msg.toolCallId, + content: convertContentBlocks(content), + is_error: msg.isError + }; +} +function convertMessages2(transformedMessages, isOAuthToken2, cacheControl, allowEmptySignature = false, managedProvider, convertToolDefinitions) { + const params = []; + const assistantLevels = /* @__PURE__ */ new Map(); + const pendingSystemMessages = []; + const flushPendingSystemMessages = () => { + params.push(...pendingSystemMessages); + pendingSystemMessages.length = 0; + }; + for (let i = 0; i < transformedMessages.length; i++) { + const msg = transformedMessages[i]; + if (msg.role === "system") { + const text = renderSystemMessageUpdate(msg); + const blocks = []; + if (text.length > 0) + blocks.push({ type: "text", text: sanitizeSurrogates(text) }); + if (convertToolDefinitions) { + const added = msg.toolsAdded ?? []; + const redefined = new Set(added.map((tool) => tool.name)); + for (const tool of msg.toolsRemoved ?? []) { + if (redefined.has(tool.name)) + continue; + blocks.push({ + type: "tool_removal", + tool: { type: "tool_reference", name: isOAuthToken2 ? toClaudeCodeName(tool.name) : tool.name } + }); + } + for (const definition of convertToolDefinitions(added)) { + blocks.push({ type: "tool_addition", tool: { type: "tool_definition", definition } }); + } + } + if (blocks.length > 0) + pendingSystemMessages.push({ role: "system", content: blocks }); + } else if (msg.role === "user") { + if (typeof msg.content === "string") { + if (msg.content.trim().length > 0) { + params.push({ + role: "user", + content: sanitizeSurrogates(msg.content) + }); + } + } else { + const blocks = msg.content.map((item) => { + if (item.type === "text") { + return { + type: "text", + text: sanitizeSurrogates(item.text) + }; + } else { + return convertImageBlock(item); + } + }); + const filteredBlocks = blocks.filter((b) => { + if (b.type === "text") { + return b.text.trim().length > 0; + } + return true; + }); + if (filteredBlocks.length === 0) + continue; + params.push({ + role: "user", + content: filteredBlocks + }); + } + } else if (msg.role === "assistant") { + const blocks = []; + for (const block of msg.content) { + if (block.type === "text") { + if (block.text.trim().length === 0) + continue; + blocks.push({ + type: "text", + text: sanitizeSurrogates(block.text) + }); + } else if (block.type === "thinking") { + if (block.redacted) { + blocks.push({ + type: "redacted_thinking", + data: block.thinkingSignature + }); + continue; + } + const thinkingSignature = block.thinkingSignature; + const hasThinkingSignature = !!thinkingSignature && thinkingSignature.trim().length > 0; + if (block.thinking.trim().length === 0 && !hasThinkingSignature) + continue; + if (!hasThinkingSignature) { + blocks.push(allowEmptySignature ? { + type: "thinking", + thinking: sanitizeSurrogates(block.thinking), + signature: "" + } : { + type: "text", + text: sanitizeSurrogates(block.thinking) + }); + } else { + blocks.push({ + type: "thinking", + thinking: sanitizeSurrogates(block.thinking), + signature: thinkingSignature + }); + } + } else if (block.type === "toolCall") { + blocks.push({ + type: "tool_use", + id: block.id, + name: isOAuthToken2 ? toClaudeCodeName(block.name) : block.name, + input: block.arguments ?? {} + }); + } + } + if (blocks.length === 0) + continue; + flushPendingSystemMessages(); + const messageIndex = params.length; + params.push({ + role: "assistant", + content: blocks + }); + if (managedProvider !== void 0 && msg.api === "anthropic-messages" && msg.provider === managedProvider && isAnthropicEffort(msg.providerThinkingLevel)) { + assistantLevels.set(messageIndex, msg.providerThinkingLevel); + } + } else if (msg.role === "toolResult") { + const toolResults = []; + const errorImages = []; + let j = i; + while (j < transformedMessages.length && transformedMessages[j].role === "toolResult") { + const toolMsg = transformedMessages[j]; + const split = splitErrorToolResultImages(toolMsg); + toolResults.push(convertToolResult(toolMsg, split?.content)); + if (split) { + errorImages.push({ type: "text", text: split.caption }, ...split.images.map(convertImageBlock)); + } + j++; + } + i = j - 1; + params.push({ + role: "user", + content: [...toolResults, ...errorImages] + }); + } + } + flushPendingSystemMessages(); + if (cacheControl && params.length > 0) { + const lastMessage = params[params.length - 1]; + if (lastMessage.role === "user" || lastMessage.role === "system") { + if (Array.isArray(lastMessage.content)) { + const lastBlock = lastMessage.content[lastMessage.content.length - 1]; + if (lastBlock && (lastBlock.type === "text" || lastBlock.type === "image" || lastBlock.type === "tool_result" || lastBlock.type === "tool_addition" || lastBlock.type === "tool_removal")) { + lastBlock.cache_control = cacheControl; + } + } else if (typeof lastMessage.content === "string") { + lastMessage.content = [ + { + type: "text", + text: lastMessage.content, + cache_control: cacheControl + } + ]; + } + } + } + return { messages: params, assistantLevels }; +} +function isAnthropicEffort(value2) { + return value2 === "low" || value2 === "medium" || value2 === "high" || value2 === "xhigh" || value2 === "max"; +} +function insertThinkingLevelMessages(converted, activeEffort) { + const messages = []; + for (let index = 0; index < converted.messages.length; index++) { + const historicalEffort = converted.assistantLevels.get(index); + if (historicalEffort !== void 0) { + messages.push({ role: "system", content: [], output_config: { effort: historicalEffort } }); + } + messages.push(converted.messages[index]); + } + messages.push({ role: "system", content: [], output_config: { effort: activeEffort } }); + return messages; +} +function shouldUseFineGrainedToolStreamingBeta(model2, context) { + return getCurrentTools(context.messages).length > 0 && !getAnthropicCompat(model2).supportsEagerToolInputStreaming; +} +function convertTools2(tools, isOAuthToken2, supportsEagerToolInputStreaming, supportsStrictTools, cacheControl, disablePreferredStrictTools = false) { + if (!tools) + return []; + return tools.map((tool, index) => { + const strict = disablePreferredStrictTools && prefersJsonSchemaStrictSampling(tool) ? void 0 : resolveJsonSchemaStrictSampling(tool, supportsStrictTools, isAnthropicStrictUnsupportedKeyword); + const parameters = getJsonSchemaToolParameters(tool, strict); + const schema4 = parameters; + const legacyInputSchema = { + type: "object", + properties: schema4.properties ?? {}, + required: schema4.required ?? [] + }; + const inputSchema = strict === true ? { + ...parameters, + ...legacyInputSchema + } : legacyInputSchema; + return { + name: isOAuthToken2 ? toClaudeCodeName(tool.name) : tool.name, + description: tool.description, + ...supportsEagerToolInputStreaming ? { eager_input_streaming: true } : {}, + ...strict === true ? { strict: true } : {}, + input_schema: inputSchema, + ...cacheControl && index === tools.length - 1 ? { cache_control: cacheControl } : {} + }; + }); +} +function mapStopReason2(reason, stopDetails) { + switch (reason) { + case "end_turn": + return { stopReason: "stop" }; + case "max_tokens": + return { stopReason: "length" }; + case "tool_use": + return { stopReason: "toolUse" }; + case "refusal": + return { + stopReason: "error", + errorMessage: stopDetails?.explanation || `The model refused to complete the request` + }; + case "pause_turn": + return { stopReason: "stop" }; + case "stop_sequence": + return { stopReason: "stop" }; + // We don't supply stop sequences, so this should never happen + case "sensitive": + return { stopReason: "error", errorMessage: "Provider stopped with: sensitive" }; + default: + throw new Error(`Unhandled stop reason: ${reason}`); + } +} +var claudeCodeVersion, claudeCodeTools, ccToolLookup, toClaudeCodeName, fromClaudeCodeName, FINE_GRAINED_TOOL_STREAMING_BETA, INTERLEAVED_THINKING_BETA, SERVER_SIDE_FALLBACK_BETA, MID_CONVERSATION_OUTPUT_CONFIG_BETA, THINKING_BINDING_CONTROLS_BETA, INLINE_TOOLS_BETA, DEFERRED_TOOL_PLACEHOLDER, PiAnthropic, federationClient, ANTHROPIC_MESSAGE_EVENTS, stream3, streamSimple2, ANTHROPIC_STRICT_UNSUPPORTED_KEYWORDS, ANTHROPIC_STRICT_STRING_FORMATS, isAnthropicStrictUnsupportedKeyword; +var init_anthropic_messages = __esm({ + "node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js"() { + init_sdk(); + init_env_api_keys(); + init_models(); + init_diagnostics(); + init_event_stream(); + init_headers2(); + init_identity(); + init_json_parse(); + init_openrouter_cost(); + init_provider_env(); + init_provider_retry(); + init_sanitize_unicode(); + init_streaming_json(); + init_text(); + init_transcript(); + init_constrained_sampling(); + init_github_copilot_headers(); + init_simple_options(); + init_transform_messages(); + claudeCodeVersion = "2.1.280"; + claudeCodeTools = [ + "Read", + "Write", + "Edit", + "Bash", + "Grep", + "Glob", + "AskUserQuestion", + "EnterPlanMode", + "ExitPlanMode", + "KillShell", + "NotebookEdit", + "Skill", + "Task", + "TaskOutput", + "TodoWrite", + "WebFetch", + "WebSearch" + ]; + ccToolLookup = new Map(claudeCodeTools.map((t) => [t.toLowerCase(), t])); + toClaudeCodeName = (name) => ccToolLookup.get(name.toLowerCase()) ?? name; + fromClaudeCodeName = (name, tools) => { + if (tools && tools.length > 0) { + const lowerName = name.toLowerCase(); + const matchedTool = tools.find((tool) => tool.name.toLowerCase() === lowerName); + if (matchedTool) + return matchedTool.name; + } + return name; + }; + FINE_GRAINED_TOOL_STREAMING_BETA = "fine-grained-tool-streaming-2025-05-14"; + INTERLEAVED_THINKING_BETA = "interleaved-thinking-2025-05-14"; + SERVER_SIDE_FALLBACK_BETA = "server-side-fallback-2026-07-01"; + MID_CONVERSATION_OUTPUT_CONFIG_BETA = "mid-conversation-output-config-2026-07-01"; + THINKING_BINDING_CONTROLS_BETA = "thinking-binding-controls-2026-08-01"; + INLINE_TOOLS_BETA = "inline-tools-2026-09-15"; + DEFERRED_TOOL_PLACEHOLDER = { + name: "__pi_deferred_placeholder__", + description: "Reserved placeholder. Never available. Never call this.", + input_schema: { type: "object", properties: {}, required: [] }, + defer_loading: true + }; + PiAnthropic = class extends Anthropic { + _shouldResolveDefaultCredentials() { + return false; + } + }; + ANTHROPIC_MESSAGE_EVENTS = /* @__PURE__ */ new Set([ + "message_start", + "message_delta", + "message_stop", + "content_block_start", + "content_block_delta", + "content_block_stop" + ]); + stream3 = (model2, context, options) => { + const stream5 = new AssistantMessageEventStream(); + const normalizedContext = resolveTranscript(context, getAnthropicCompat(model2).supportsMidConvoSystemMessages); + const currentTools = getCurrentTools(normalizedContext.messages); + (async () => { + const output = { + role: "assistant", + content: [], + api: model2.api, + provider: model2.provider, + model: model2.id, + usage: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + totalTokens: 0, + cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 } + }, + stopReason: "pending", + timestamp: Date.now() + }; + try { + let client; + let isOAuth; + let usageModel = model2; + let inputTransformations; + if (options?.client) { + client = options.client; + isOAuth = false; + } else { + const apiKey = options?.apiKey; + const federation = getAnthropicFederation(model2, apiKey, options?.headers, options?.env); + if (!federation) + assertRequestAuth(model2.provider, apiKey, options?.headers); + let copilotDynamicHeaders; + if (model2.provider === "github-copilot") { + const hasImages = hasCopilotVisionInput(normalizedContext.messages); + copilotDynamicHeaders = buildCopilotDynamicHeaders({ + messages: normalizedContext.messages, + hasImages + }); + } + const cacheRetention = resolveCacheRetention2(options?.cacheRetention, options?.env); + const cacheSessionId = cacheRetention === "none" ? void 0 : options?.sessionId; + const created = createClient2(model2, apiKey, options?.headers, options?.fetch, copilotDynamicHeaders, cacheSessionId, federation, options?.identity); + client = created.client; + isOAuth = created.isOAuthToken; + } + const requestOptions = { + ...options?.signal ? { signal: options.signal } : {}, + ...options?.timeoutMs !== void 0 ? { timeout: options.timeoutMs } : {}, + maxRetries: 0 + }; + let disablePreferredStrictTools = false; + let response; + for (; ; ) { + options?.signal?.throwIfAborted(); + const built = buildParams2(model2, normalizedContext, isOAuth, options, disablePreferredStrictTools); + if (built.providerThinkingLevel) + output.providerThinkingLevel = built.providerThinkingLevel; + let params = built.params; + const nextParams = await options?.onPayload?.(params, model2); + if (nextParams !== void 0) { + params = { ...nextParams, stream: true }; + } + try { + response = await retryProviderRequest(() => client.beta.messages.create(params, requestOptions).asResponse(), { + maxRetries: options?.maxRetries, + maxRetryDelayMs: options?.maxRetryDelayMs, + signal: options?.signal + }); + break; + } catch (error) { + if (options?.signal?.aborted || disablePreferredStrictTools || !built.hasPreferredStrictTools || !(error instanceof Anthropic.APIError) || error.status !== 400 || error.type !== "invalid_request_error" || !isStrictToolLimitErrorMessage(error.message)) { + throw error; + } + disablePreferredStrictTools = true; + appendAssistantMessageDiagnostic(output, { + type: "anthropic_strict_tools_fallback", + timestamp: Date.now(), + error: { message: error.message }, + details: { reason: "strict_tool_limits_exceeded" } + }); + } + } + await options?.onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model2); + stream5.push({ type: "start", partial: output }); + const openBlocks = /* @__PURE__ */ new Map(); + const openBlock = (anthropicIndex) => { + const open = openBlocks.get(anthropicIndex); + return open === void 0 ? void 0 : { ...open, block: output.content[open.contentIndex] }; + }; + for await (const event of iterateAnthropicEvents(response, options?.signal)) { + await options?.onProviderStreamEvent?.(event, model2); + if (event.type === "message_start") { + output.responseId = event.message.id; + const transformations = event.message.input_transformations; + if (Array.isArray(transformations)) + inputTransformations = transformations; + const responseModel = event.message.model; + if (responseModel !== model2.id) + output.responseModel = responseModel; + const fallbackCost = responseModel === model2.id ? void 0 : model2.compat?.allowedFallbackModels?.find((fallback) => fallback.provider === model2.provider && fallback.model === responseModel)?.cost; + usageModel = fallbackCost ? { ...model2, id: responseModel, cost: fallbackCost } : model2; + output.usage.input = event.message.usage.input_tokens || 0; + output.usage.output = event.message.usage.output_tokens || 0; + output.usage.cacheRead = event.message.usage.cache_read_input_tokens || 0; + output.usage.cacheWrite = event.message.usage.cache_creation_input_tokens || 0; + output.usage.cacheWrite1h = event.message.usage.cache_creation?.ephemeral_1h_input_tokens || 0; + output.usage.totalTokens = output.usage.input + output.usage.output + output.usage.cacheRead + output.usage.cacheWrite; + calculateCost(usageModel, output.usage); + } else if (event.type === "content_block_start") { + if (event.content_block.type === "fallback") { + if (output.content.length > 0) { + throw new Error("Anthropic performed an unsupported mid-output model fallback"); + } + continue; + } + if (event.content_block.type === "text") { + output.content.push({ type: "text", text: event.content_block.text ?? "" }); + openBlocks.set(event.index, { contentIndex: output.content.length - 1 }); + stream5.push({ type: "text_start", contentIndex: output.content.length - 1, partial: output }); + } else if (event.content_block.type === "thinking") { + output.content.push({ + type: "thinking", + thinking: event.content_block.thinking ?? "", + thinkingSignature: event.content_block.signature ?? "" + }); + openBlocks.set(event.index, { contentIndex: output.content.length - 1 }); + stream5.push({ type: "thinking_start", contentIndex: output.content.length - 1, partial: output }); + } else if (event.content_block.type === "redacted_thinking") { + output.content.push({ + type: "thinking", + thinking: "[Reasoning redacted]", + thinkingSignature: event.content_block.data, + redacted: true + }); + openBlocks.set(event.index, { contentIndex: output.content.length - 1 }); + stream5.push({ type: "thinking_start", contentIndex: output.content.length - 1, partial: output }); + } else if (event.content_block.type === "tool_use") { + output.content.push({ + type: "toolCall", + id: event.content_block.id, + name: isOAuth ? fromClaudeCodeName(event.content_block.name, currentTools) : event.content_block.name, + arguments: event.content_block.input ?? {} + }); + openBlocks.set(event.index, { + contentIndex: output.content.length - 1, + arguments: new ToolCallArgumentsStream() + }); + stream5.push({ type: "toolcall_start", contentIndex: output.content.length - 1, partial: output }); + } + } else if (event.type === "content_block_delta") { + const open = openBlock(event.index); + if (event.delta.type === "text_delta") { + if (open?.block.type === "text") { + open.block.text += event.delta.text; + stream5.push({ + type: "text_delta", + contentIndex: open.contentIndex, + delta: event.delta.text, + partial: output + }); + } + } else if (event.delta.type === "thinking_delta") { + if (open?.block.type === "thinking") { + open.block.thinking += event.delta.thinking; + stream5.push({ + type: "thinking_delta", + contentIndex: open.contentIndex, + delta: event.delta.thinking, + partial: output + }); + } + } else if (event.delta.type === "input_json_delta") { + if (open?.block.type === "toolCall" && open.arguments !== void 0) { + open.block.arguments = open.arguments.append(event.delta.partial_json); + stream5.push({ + type: "toolcall_delta", + contentIndex: open.contentIndex, + delta: event.delta.partial_json, + partial: output + }); + } + } else if (event.delta.type === "signature_delta") { + if (open?.block.type === "thinking") { + open.block.thinkingSignature = open.block.thinkingSignature || ""; + open.block.thinkingSignature += event.delta.signature; + } + } + } else if (event.type === "content_block_stop") { + const open = openBlock(event.index); + openBlocks.delete(event.index); + if (open) { + const { block, contentIndex: index } = open; + if (block.type === "text") { + stream5.push({ + type: "text_end", + contentIndex: index, + content: block.text, + partial: output + }); + } else if (block.type === "thinking") { + stream5.push({ + type: "thinking_end", + contentIndex: index, + content: block.thinking, + partial: output + }); + } else if (block.type === "toolCall" && open.arguments !== void 0) { + Object.assign(block, open.arguments.finish()); + stream5.push({ + type: "toolcall_end", + contentIndex: index, + toolCall: block, + partial: output + }); + } + } + } else if (event.type === "message_delta") { + const transformations = event.input_transformations; + if (Array.isArray(transformations)) + inputTransformations = transformations; + if (event.delta.stop_reason) { + output.rawStopReason = event.delta.stop_reason; + const stopReasonResult = mapStopReason2(event.delta.stop_reason, event.delta.stop_details); + output.stopReason = stopReasonResult.stopReason; + if (stopReasonResult.errorMessage) { + output.errorMessage = stopReasonResult.errorMessage; + } + } + if (event.usage) { + if (event.usage.input_tokens != null) { + output.usage.input = event.usage.input_tokens; + } + if (event.usage.output_tokens != null) { + output.usage.output = event.usage.output_tokens; + } + if (event.usage.cache_read_input_tokens != null) { + output.usage.cacheRead = event.usage.cache_read_input_tokens; + } + if (event.usage.cache_creation_input_tokens != null) { + output.usage.cacheWrite = event.usage.cache_creation_input_tokens; + } + const cacheCreation = event.usage.cache_creation; + if (cacheCreation?.ephemeral_1h_input_tokens != null) { + output.usage.cacheWrite1h = cacheCreation.ephemeral_1h_input_tokens; + } + const thinkingTokens = event.usage.output_tokens_details?.thinking_tokens; + if (thinkingTokens != null) { + output.usage.reasoning = thinkingTokens; + } + } + output.usage.totalTokens = output.usage.input + output.usage.output + output.usage.cacheRead + output.usage.cacheWrite; + calculateCost(usageModel, output.usage); + if (isOpenRouterModel(model2) && event.usage) { + applyOpenRouterReportedCost(output.usage, event.usage); + } + } + } + if (options?.signal?.aborted) { + throw new Error("Request was aborted"); + } + if (output.stopReason === "pending") { + throw new Error("Anthropic stream ended without a stop reason"); + } + if (output.stopReason === "aborted" || output.stopReason === "error") { + throw new Error(output.errorMessage || "An unknown error occurred"); + } + if (inputTransformations && inputTransformations.length > 0) { + appendAssistantMessageDiagnostic(output, { + type: "anthropic_input_transformations", + timestamp: Date.now(), + details: { + transformations: inputTransformations.map((transformation) => ({ + type: transformation.type ?? void 0, + path: transformation.path ?? void 0, + reason: transformation.reason ?? void 0 + })) + } + }); + } + stream5.push({ type: "done", reason: output.stopReason, message: output }); + stream5.end(); + } catch (error) { + output.stopReason = options?.signal?.aborted ? "aborted" : "error"; + output.errorMessage = error instanceof Error ? error.message : JSON.stringify(error); + stream5.push({ type: "error", reason: output.stopReason, error: output }); + stream5.end(); + } + })(); + return stream5; + }; + streamSimple2 = (model2, context, options) => { + if (!getAnthropicFederation(model2, options?.apiKey, options?.headers, options?.env)) { + assertRequestAuth(model2.provider, options?.apiKey, options?.headers); + } + const base = { + ...buildBaseOptions(model2, context, options, options?.apiKey), + toolChoice: options?.toolChoice + }; + if (!options?.reasoning) { + return stream3(model2, context, { + ...base, + thinkingEnabled: false + }); + } + if (model2.compat?.forceAdaptiveThinking === true) { + const effort = mapThinkingLevelToEffort(model2, options.reasoning); + return stream3(model2, context, { + ...base, + thinkingEnabled: true, + effort + }); + } + const adjusted = adjustMaxTokensForThinking(base.maxTokens, model2.maxTokens, options.reasoning, options.thinkingBudgets); + const maxTokens = clampMaxTokensToContext(model2, context, adjusted.maxTokens); + return stream3(model2, context, { + ...base, + maxTokens, + thinkingEnabled: true, + thinkingBudgetTokens: Math.min(adjusted.thinkingBudget, Math.max(0, maxTokens - 1024)) + }); + }; + ANTHROPIC_STRICT_UNSUPPORTED_KEYWORDS = /* @__PURE__ */ new Set([ + "minimum", + "maximum", + "exclusiveMinimum", + "exclusiveMaximum", + "multipleOf", + "maxItems", + "uniqueItems", + "minContains", + "maxContains", + "minProperties", + "maxProperties" + ]); + ANTHROPIC_STRICT_STRING_FORMATS = /* @__PURE__ */ new Set([ + "date-time", + "time", + "date", + "duration", + "email", + "hostname", + "uri", + "ipv4", + "ipv6", + "uuid" + ]); + isAnthropicStrictUnsupportedKeyword = (key, value2) => { + if (ANTHROPIC_STRICT_UNSUPPORTED_KEYWORDS.has(key)) + return true; + if (key === "minItems") + return value2 !== 0 && value2 !== 1; + if (key === "format") + return typeof value2 !== "string" || !ANTHROPIC_STRICT_STRING_FORMATS.has(value2); + return false; + }; } }); @@ -40345,7 +41493,7 @@ async function processResponsesStream(openaiStream, output, stream5, model2, opt const incompleteDetails = response?.incomplete_details; const incompleteReason = typeof incompleteDetails?.reason === "string" ? incompleteDetails.reason : void 0; output.rawStopReason = incompleteReason ? `${status}.${incompleteReason}` : status; - const mappedStop = mapStopReason2(status, incompleteReason); + const mappedStop = mapStopReason3(status, incompleteReason); output.stopReason = mappedStop.stopReason; if (mappedStop.errorMessage === void 0) delete output.errorMessage; @@ -40539,7 +41687,7 @@ function sendCustomInput(block, input, jsonDelta) { input.unsent = ""; return sent; } -function mapStopReason2(status, incompleteReason) { +function mapStopReason3(status, incompleteReason) { if (!status) return { stopReason: "stop" }; switch (status) { @@ -40582,13 +41730,13 @@ var init_openai_responses_shared = __esm({ // node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js var openai_responses_exports = {}; __export(openai_responses_exports, { - stream: () => stream3, - streamSimple: () => streamSimple2 + stream: () => stream4, + streamSimple: () => streamSimple3 }); function isChatGPTSignIn(model2, apiKey) { return model2.provider === "openai" && model2.baseUrl === "https://api.openai.com/v1" && apiKey !== void 0 && !apiKey.startsWith("sk-"); } -function hasHeader2(headers, name) { +function hasHeader3(headers, name) { if (!headers) return false; const expected = name.toLowerCase(); @@ -40598,17 +41746,17 @@ function hasHeader2(headers, name) { } return false; } -function getClientApiKey(provider2, apiKey, headers) { +function getClientApiKey2(provider2, apiKey, headers) { if (apiKey) return apiKey; - if (hasHeader2(headers, "authorization") || hasHeader2(headers, "cf-aig-authorization")) + if (hasHeader3(headers, "authorization") || hasHeader3(headers, "cf-aig-authorization")) return "unused"; throw new Error(`No API key for provider: ${provider2}`); } function detectSessionAffinityFormat(model2) { return model2.provider === "openrouter" || model2.baseUrl.includes("openrouter.ai") ? "openrouter" : "openai"; } -function resolveCacheRetention2(cacheRetention, env) { +function resolveCacheRetention3(cacheRetention, env) { if (cacheRetention) { return cacheRetention; } @@ -40617,7 +41765,7 @@ function resolveCacheRetention2(cacheRetention, env) { } return "short"; } -function getCompat(model2) { +function getCompat2(model2) { return { supportsDeveloperRole: model2.compat?.supportsDeveloperRole ?? true, supportsMidConvoSystemMessages: model2.compat?.supportsMidConvoSystemMessages ?? false, @@ -40651,8 +41799,8 @@ function getPromptCacheOptions(compat, cacheRetention) { return { ttl: "30m" }; return void 0; } -function createClient2(model2, context, apiKey, optionsHeaders, identity, fetch3, sessionId) { - const compat = getCompat(model2); +function createClient3(model2, context, apiKey, optionsHeaders, identity, fetch2, sessionId) { + const compat = getCompat2(model2); const headers = { ...getIdentityHeaders(model2, identity), ...model2.headers }; if (model2.provider === "github-copilot") { const hasImages = hasCopilotVisionInput(context.messages); @@ -40679,11 +41827,11 @@ function createClient2(model2, context, apiKey, optionsHeaders, identity, fetch3 apiKey, baseURL: model2.baseUrl, dangerouslyAllowBrowser: true, - fetch: fetch3, + fetch: fetch2, defaultHeaders: headers }); } -function buildParams2(model2, context, options, compat, grammarToolInputProperties, configurationUpdateEffort) { +function buildParams3(model2, context, options, compat, grammarToolInputProperties, configurationUpdateEffort) { const transcriptTools = resolveTranscriptTools(context.messages, getResponsesToolSupport(compat)); const messages = convertResponsesMessages(model2, context, OPENAI_TOOL_CALL_PROVIDERS, { grammarToolInputProperties, @@ -40696,7 +41844,7 @@ function buildParams2(model2, context, options, compat, grammarToolInputProperti }, configurationUpdateEffort }); - const cacheRetention = resolveCacheRetention2(options?.cacheRetention, options?.env); + const cacheRetention = resolveCacheRetention3(options?.cacheRetention, options?.env); const omitUnsupportedFields = isChatGPTSignIn(model2, options?.apiKey); const params = { model: model2.id, @@ -40770,7 +41918,7 @@ function applyServiceTierPricing(usage, serviceTier, model2) { usage.cost.cacheWrite *= multiplier; usage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead + usage.cost.cacheWrite; } -var OPENAI_TOOL_CALL_PROVIDERS, OPENAI_RESPONSES_MIN_OUTPUT_TOKENS, CHATGPT_USAGE_URL, CHATGPT_WORKSPACE_LIMIT_HINT, CONFIGURATION_UPDATE_REQUEST_EFFORT, stream3, streamSimple2; +var OPENAI_TOOL_CALL_PROVIDERS, OPENAI_RESPONSES_MIN_OUTPUT_TOKENS, CHATGPT_USAGE_URL, CHATGPT_WORKSPACE_LIMIT_HINT, CONFIGURATION_UPDATE_REQUEST_EFFORT, stream4, streamSimple3; var init_openai_responses = __esm({ "node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js"() { init_openai(); @@ -40792,11 +41940,11 @@ var init_openai_responses = __esm({ CHATGPT_USAGE_URL = "https://chatgpt.com/settings/usage"; CHATGPT_WORKSPACE_LIMIT_HINT = "You've reached your ChatGPT workspace's usage limit. Ask your workspace admin to increase it at admin.openai.com \u2192 Workspace \u2192 Usage limits."; CONFIGURATION_UPDATE_REQUEST_EFFORT = "medium"; - stream3 = (model2, context, options) => { + stream4 = (model2, context, options) => { const stream5 = new AssistantMessageEventStream(); - const normalizedContext = resolveTranscript(context, getCompat(model2).supportsMidConvoSystemMessages); + const normalizedContext = resolveTranscript(context, getCompat2(model2).supportsMidConvoSystemMessages); (async () => { - const compat = getCompat(model2); + const compat = getCompat2(model2); const configurationUpdateEffort = getConfigurationUpdateEffort(model2, options, compat); const output = { role: "assistant", @@ -40817,12 +41965,12 @@ var init_openai_responses = __esm({ timestamp: Date.now() }; try { - const apiKey = getClientApiKey(model2.provider, options?.apiKey, options?.headers); - const cacheRetention = resolveCacheRetention2(options?.cacheRetention, options?.env); + const apiKey = getClientApiKey2(model2.provider, options?.apiKey, options?.headers); + const cacheRetention = resolveCacheRetention3(options?.cacheRetention, options?.env); const cacheSessionId = cacheRetention === "none" ? void 0 : options?.sessionId; const grammarToolInputProperties = createGrammarToolInputProperties(getDeclaredTools(normalizedContext.messages), compat.supportsOpenAIGrammarTools); - const client = createClient2(model2, normalizedContext, apiKey, options?.headers, options?.identity, options?.fetch, cacheSessionId); - let params = buildParams2(model2, normalizedContext, options, compat, grammarToolInputProperties, configurationUpdateEffort); + const client = createClient3(model2, normalizedContext, apiKey, options?.headers, options?.identity, options?.fetch, cacheSessionId); + let params = buildParams3(model2, normalizedContext, options, compat, grammarToolInputProperties, configurationUpdateEffort); const nextParams = await options?.onPayload?.(params, model2); if (nextParams !== void 0) { params = nextParams; @@ -40874,1153 +42022,6 @@ ${CHATGPT_WORKSPACE_LIMIT_HINT}`; })(); return stream5; }; - streamSimple2 = (model2, context, options) => { - getClientApiKey(model2.provider, options?.apiKey, options?.headers); - const base = { - ...buildBaseOptions(model2, context, options, options?.apiKey), - toolChoice: options?.toolChoice - }; - const clampedReasoning = options?.reasoning ? clampThinkingLevel(model2, options.reasoning) : void 0; - const reasoningEffort = clampedReasoning === "off" ? void 0 : clampedReasoning; - return stream3(model2, context, { - ...base, - reasoningEffort - }); - }; - } -}); - -// node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js -var openai_completions_exports = {}; -__export(openai_completions_exports, { - convertMessages: () => convertMessages2, - stream: () => stream4, - streamSimple: () => streamSimple3 -}); -function hasHeader3(headers, name) { - if (!headers) - return false; - const expected = name.toLowerCase(); - for (const [key, value2] of Object.entries(headers)) { - if (key.toLowerCase() === expected && value2 !== null && value2.trim().length > 0) - return true; - } - return false; -} -function getClientApiKey2(provider2, apiKey, headers) { - if (apiKey) - return apiKey; - if (hasHeader3(headers, "authorization") || hasHeader3(headers, "cf-aig-authorization")) - return "unused"; - throw new Error(`No API key for provider: ${provider2}`); -} -function hasToolHistory(messages) { - for (const msg of messages) { - if (msg.role === "toolResult") { - return true; - } - if (msg.role === "assistant") { - if (msg.content.some((block) => block.type === "toolCall")) { - return true; - } - } - } - return false; -} -function isTextContentBlock(block) { - return block.type === "text"; -} -function isThinkingContentBlock(block) { - return block.type === "thinking"; -} -function isToolCallBlock(block) { - return block.type === "toolCall"; -} -function isImageContentBlock(block) { - return block.type === "image"; -} -function isReasoningDetailObject(detail) { - return typeof detail === "object" && detail !== null && !Array.isArray(detail); -} -function hasValidCommonReasoningDetailFields(candidate) { - return (candidate.id === void 0 || candidate.id === null || typeof candidate.id === "string") && (candidate.format === void 0 || typeof candidate.format === "string") && (candidate.index === void 0 || typeof candidate.index === "number"); -} -function isOpenAIReasoningDetail(detail) { - if (!isReasoningDetailObject(detail) || !hasValidCommonReasoningDetailFields(detail)) { - return false; - } - switch (detail.type) { - case "reasoning.summary": - return typeof detail.summary === "string"; - case "reasoning.encrypted": - return typeof detail.data === "string"; - case "reasoning.text": - return typeof detail.text === "string" && (detail.signature === void 0 || detail.signature === null || typeof detail.signature === "string"); - default: - return false; - } -} -function parseOpenAIReasoningDetails(signature) { - if (!signature) - return void 0; - try { - const parsed = JSON.parse(signature); - return Array.isArray(parsed) && parsed.length > 0 && parsed.every(isOpenAIReasoningDetail) ? parsed : void 0; - } catch { - return void 0; - } -} -function parseLegacyEncryptedReasoningDetail(signature) { - if (!signature) - return void 0; - try { - const parsed = JSON.parse(signature); - return isOpenAIReasoningDetail(parsed) && parsed.type === "reasoning.encrypted" && typeof parsed.id === "string" && parsed.id.length > 0 && parsed.data.length > 0 ? parsed : void 0; - } catch { - return void 0; - } -} -function fillMissingCommonReasoningDetailFields(target, source) { - target.id ??= source.id; - target.format ||= source.format; - target.index ??= source.index; -} -function appendOpenAIReasoningDetail(details, detail) { - const lastDetail = details[details.length - 1]; - if (detail.type === "reasoning.text" && lastDetail?.type === "reasoning.text") { - lastDetail.text += detail.text; - lastDetail.signature ||= detail.signature; - fillMissingCommonReasoningDetailFields(lastDetail, detail); - return; - } - if (detail.type === "reasoning.summary" && lastDetail?.type === "reasoning.summary") { - lastDetail.summary += detail.summary; - fillMissingCommonReasoningDetailFields(lastDetail, detail); - return; - } - details.push({ ...detail }); -} -function isOpenAICompletionsReasoningField(field) { - return OPENAI_COMPLETIONS_REASONING_FIELDS.includes(field); -} -function resolveCacheRetention3(cacheRetention, env) { - if (cacheRetention) { - return cacheRetention; - } - if (getProviderEnvValue("PI_CACHE_RETENTION", env) === "long") { - return "long"; - } - return "short"; -} -function createClient3(model2, context, apiKey, optionsHeaders, identity, fetch3, sessionId, compat = getCompat2(model2)) { - const headers = { ...getIdentityHeaders(model2, identity), ...model2.headers }; - if (model2.provider === "github-copilot") { - const hasImages = hasCopilotVisionInput(context.messages); - const copilotHeaders = buildCopilotDynamicHeaders({ - messages: context.messages, - hasImages - }); - Object.assign(headers, copilotHeaders); - } - if (sessionId && compat.sendSessionAffinityHeaders) { - if (compat.sessionAffinityFormat === "openrouter") { - headers["x-session-id"] = sessionId; - } else { - if (compat.sessionAffinityFormat === "openai") { - headers.session_id = sessionId; - } - headers["x-client-request-id"] = sessionId; - headers["x-session-affinity"] = sessionId; - } - } - if (optionsHeaders) { - Object.assign(headers, optionsHeaders); - } - return new OpenAI({ - apiKey, - baseURL: model2.baseUrl, - dangerouslyAllowBrowser: true, - fetch: fetch3, - defaultHeaders: headers - }); -} -function buildParams3(model2, context, options, compat = getCompat2(model2), cacheRetention = resolveCacheRetention3(options?.cacheRetention, options?.env), grammarToolInputProperties = createGrammarToolInputProperties(getDeclaredTools(context.messages), compat.supportsOpenAIGrammarTools)) { - const transcriptTools = resolveTranscriptTools(context.messages, compat.supportsMidConvoSystemMessages === true && compat.supportsMidConvoToolAdditions === true ? "additions" : "none"); - const messages = convertMessages2(model2, context, compat, { - grammarToolInputProperties - }); - const cacheControl = getCompatCacheControl(compat, cacheRetention); - const params = { - model: model2.id, - messages, - stream: true, - prompt_cache_key: model2.baseUrl.includes("api.openai.com") && cacheRetention !== "none" || cacheRetention === "long" && compat.supportsLongCacheRetention ? clampOpenAIPromptCacheKey(options?.sessionId) : void 0, - prompt_cache_retention: cacheRetention === "long" && compat.supportsLongCacheRetention ? "24h" : void 0 - }; - if (compat.supportsUsageInStreaming !== false) { - params.stream_options = { include_usage: true }; - } - if (compat.supportsStore) { - params.store = false; - } - if (options?.maxTokens) { - if (compat.maxTokensField === "max_tokens") { - params.max_tokens = options.maxTokens; - } else { - params.max_completion_tokens = options.maxTokens; - } - } - if (options?.temperature !== void 0) { - params.temperature = options.temperature; - } - if (transcriptTools.requestTools.length > 0) { - params.tools = convertTools2(transcriptTools.requestTools, compat); - if (compat.zaiToolStream) { - params.tool_stream = true; - } - } else if (hasToolHistory(context.messages)) { - params.tools = []; - } - if (cacheControl) { - applyAnthropicCacheControl(messages, params.tools, cacheControl); - } - if (options?.toolChoice) { - params.tool_choice = options.toolChoice; - } - if (compat.vllmPriority !== void 0) { - params.priority = compat.vllmPriority; - } - const thinkingTokenBudgetField = resolveThinkingTokenBudgetField(compat); - const thinkingBudget = resolveClampedThinkingBudget(model2, options, params); - if (compat.thinkingFormat === "zai" && model2.reasoning) { - const zaiParams = params; - zaiParams.thinking = options?.reasoningEffort ? { type: "enabled", clear_thinking: false } : { type: "disabled" }; - if (options?.reasoningEffort && compat.supportsReasoningEffort) { - const mappedEffort = model2.thinkingLevelMap?.[options.reasoningEffort]; - const effort = mappedEffort === void 0 ? options.reasoningEffort : mappedEffort; - if (typeof effort === "string") { - zaiParams.reasoning_effort = effort; - } - } - } else if (compat.thinkingFormat === "qwen" && model2.reasoning) { - params.enable_thinking = !!options?.reasoningEffort; - if (options?.reasoningEffort && compat.supportsReasoningEffort) { - const effort = model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort; - if (typeof effort === "string") { - params.reasoning_effort = effort; - } - } - } else if (compat.thinkingFormat === "qwen-chat-template" && model2.reasoning) { - params.chat_template_kwargs = { - enable_thinking: !!options?.reasoningEffort, - preserve_thinking: true - }; - } else if (compat.thinkingFormat === "chat-template" && model2.reasoning) { - const chatTemplateKwargs = buildChatTemplateValues(model2, options, compat.chatTemplateKwargs, thinkingBudget); - if (chatTemplateKwargs) { - params.chat_template_kwargs = chatTemplateKwargs; - } - } else if (compat.thinkingFormat === "baseten" && model2.reasoning) { - const basetenParams = params; - const chatTemplateArgs = buildChatTemplateValues(model2, options, compat.chatTemplateArgs, thinkingBudget); - if (chatTemplateArgs) { - basetenParams.chat_template_args = chatTemplateArgs; - } - if (compat.supportsReasoningEffort) { - const requestedEffort = options?.reasoningEffort; - const mappedEffort = requestedEffort ? model2.thinkingLevelMap?.[requestedEffort] : model2.thinkingLevelMap?.off; - const effort = mappedEffort === void 0 ? requestedEffort : mappedEffort; - if (typeof effort === "string") { - basetenParams.reasoning_effort = effort; - } - } - } else if (compat.thinkingFormat === "deepseek" && model2.reasoning) { - if (options?.reasoningEffort) { - params.thinking = { type: "enabled" }; - } else if (model2.thinkingLevelMap?.off !== null) { - params.thinking = { type: "disabled" }; - } - if (options?.reasoningEffort && compat.supportsReasoningEffort) { - params.reasoning_effort = model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort; - } - } else if (compat.thinkingFormat === "openrouter" && model2.reasoning) { - const openRouterParams = params; - if (options?.reasoningEffort) { - openRouterParams.reasoning = { - effort: model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort - }; - } else if (model2.thinkingLevelMap?.off !== null) { - openRouterParams.reasoning = { effort: model2.thinkingLevelMap?.off ?? "none" }; - } - } else if (compat.thinkingFormat === "ant-ling" && model2.reasoning && options?.reasoningEffort) { - const effort = model2.thinkingLevelMap?.[options.reasoningEffort]; - if (typeof effort === "string") { - params.reasoning = { effort }; - } - } else if (compat.thinkingFormat === "together" && model2.reasoning) { - const togetherParams = params; - togetherParams.reasoning = { enabled: !!options?.reasoningEffort }; - if (options?.reasoningEffort && compat.supportsReasoningEffort) { - togetherParams.reasoning_effort = model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort; - } - } else if (compat.thinkingFormat === "string-thinking" && model2.reasoning) { - const stringThinkingParams = params; - if (options?.reasoningEffort) { - stringThinkingParams.thinking = model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort; - } else if (model2.thinkingLevelMap?.off !== null) { - stringThinkingParams.thinking = model2.thinkingLevelMap?.off ?? "none"; - } - } else if (options?.reasoningEffort && model2.reasoning && compat.supportsReasoningEffort) { - params.reasoning_effort = model2.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort; - } else if (!options?.reasoningEffort && model2.reasoning && compat.supportsReasoningEffort) { - const offValue = model2.thinkingLevelMap?.off; - if (typeof offValue === "string") { - params.reasoning_effort = offValue; - } - } - if (thinkingTokenBudgetField && thinkingBudget !== void 0) { - Object.assign(params, { [thinkingTokenBudgetField]: thinkingBudget }); - } - if (model2.compat?.openRouterRouting) { - params.provider = model2.compat.openRouterRouting; - } - if (model2.compat?.vercelGatewayRouting) { - const routing = model2.compat.vercelGatewayRouting; - if (routing.only || routing.order) { - const gatewayOptions = {}; - if (routing.only) - gatewayOptions.only = routing.only; - if (routing.order) - gatewayOptions.order = routing.order; - params.providerOptions = { gateway: gatewayOptions }; - } - } - const samplingParams = resolveSamplingParams(model2, options?.reasoningEffort ?? "off", options?.samplingParams); - if (samplingParams) { - Object.assign(params, samplingParams); - } - return params; -} -function resolveThinkingTokenBudgetField(compat) { - if (compat.thinkingTokenBudgetField) - return compat.thinkingTokenBudgetField; - if (compat.supportsThinkingTokenBudget) - return "thinking_token_budget"; - return void 0; -} -function resolveClampedThinkingBudget(model2, options, params) { - if (!options?.reasoningEffort || !model2.reasoning) - return void 0; - const ceiling = params.max_tokens ?? params.max_completion_tokens ?? model2.maxTokens; - const budget = clampThinkingBudgetToAnswerRoom(thinkingBudgetForLevel(options.reasoningEffort, options.thinkingBudgets), ceiling); - return budget > 0 ? budget : void 0; -} -function buildChatTemplateValues(model2, options, values, thinkingBudget) { - const resolvedValues = {}; - for (const [key, value2] of Object.entries(values)) { - const resolved = resolveChatTemplateKwargValue(model2, options, value2, thinkingBudget); - if (resolved !== void 0) { - resolvedValues[key] = resolved; - } - } - return Object.keys(resolvedValues).length > 0 ? resolvedValues : void 0; -} -function resolveChatTemplateKwargValue(model2, options, value2, thinkingBudget) { - if (typeof value2 !== "object" || value2 === null) { - return value2; - } - const reasoningEffort = options?.reasoningEffort; - if (!reasoningEffort && value2.omitWhenOff) { - return void 0; - } - if (value2.$var === "thinking.enabled") { - return !!reasoningEffort; - } - if (value2.$var === "thinking.budget") { - return thinkingBudget; - } - const mappedValue = reasoningEffort ? model2.thinkingLevelMap?.[reasoningEffort] : model2.thinkingLevelMap?.off; - return mappedValue === void 0 ? reasoningEffort : typeof mappedValue === "string" ? mappedValue : void 0; -} -function getCompatCacheControl(compat, cacheRetention) { - if (compat.cacheControlFormat !== "anthropic" || cacheRetention === "none") { - return void 0; - } - const ttl = cacheRetention === "long" && compat.supportsLongCacheRetention ? "1h" : void 0; - return { type: "ephemeral", ...ttl ? { ttl } : {} }; -} -function applyAnthropicCacheControl(messages, tools, cacheControl) { - addCacheControlToSystemPrompt(messages, cacheControl); - addCacheControlToLastTool(tools, cacheControl); - addCacheControlToLastConversationMessage(messages, cacheControl); -} -function addCacheControlToSystemPrompt(messages, cacheControl) { - for (const message of messages) { - if (message.role === "system" || message.role === "developer") { - addCacheControlToInstructionMessage(message, cacheControl); - return; - } - } -} -function addCacheControlToLastConversationMessage(messages, cacheControl) { - for (let i = messages.length - 1; i >= 0; i--) { - const message = messages[i]; - if (message.role === "user" || message.role === "assistant" || message.role === "tool") { - if (addCacheControlToMessage(message, cacheControl)) { - return; - } - } - } -} -function addCacheControlToLastTool(tools, cacheControl) { - if (!tools || tools.length === 0) { - return; - } - const lastTool = tools[tools.length - 1]; - lastTool.cache_control = cacheControl; -} -function addCacheControlToInstructionMessage(message, cacheControl) { - return addCacheControlToTextContent(message, cacheControl); -} -function addCacheControlToMessage(message, cacheControl) { - if (message.role === "user" || message.role === "assistant" || message.role === "tool") { - return addCacheControlToTextContent(message, cacheControl); - } - return false; -} -function addCacheControlToTextContent(message, cacheControl) { - const content = message.content; - if (typeof content === "string") { - if (content.length === 0) { - return false; - } - message.content = [ - { - type: "text", - text: content, - cache_control: cacheControl - } - ]; - return true; - } - if (!Array.isArray(content)) { - return false; - } - for (let i = content.length - 1; i >= 0; i--) { - const part = content[i]; - if (part?.type === "text") { - const textPart = part; - textPart.cache_control = cacheControl; - return true; - } - } - return false; -} -function convertMessages2(model2, context, compat, options) { - const normalizedContext = resolveTranscript(context, compat.supportsMidConvoSystemMessages); - const params = []; - const normalizeToolCallId2 = (id) => { - if (id.includes("|")) { - const separatorIndex = id.indexOf("|"); - const callId = id.slice(0, separatorIndex).replace(/[^a-zA-Z0-9_-]/g, "_"); - const itemId = id.slice(separatorIndex + 1).replace(/[^a-zA-Z0-9_-]/g, "_"); - const combinedId = itemId.length > 0 ? `${callId}_${itemId}` : callId; - if (combinedId.length <= 40) { - return combinedId; - } - const hash = shortHash(id).slice(0, 8); - const prefix = callId.slice(0, Math.max(1, 40 - hash.length - 1)); - return `${prefix}_${hash}`; - } - if (model2.provider === "openai") - return id.length > 40 ? id.slice(0, 40) : id; - return id; - }; - const transformedMessages = transformMessages(normalizedContext.messages, model2, (id) => normalizeToolCallId2(id)); - const transcriptTools = resolveTranscriptTools(normalizedContext.messages, compat.supportsMidConvoSystemMessages === true && compat.supportsMidConvoToolAdditions === true ? "additions" : "none"); - const instructionRole = model2.reasoning && compat.supportsDeveloperRole ? "developer" : "system"; - let lastRole = null; - let systemIndex = 0; - for (let i = 0; i < transformedMessages.length; i++) { - const msg = transformedMessages[i]; - if (compat.requiresAssistantAfterToolResult && lastRole === "toolResult" && msg.role === "user") { - params.push({ - role: "assistant", - content: "I have processed the tool results." - }); - } - if (msg.role === "system") { - const addedTools = systemIndex++ >= transcriptTools.foldedSystemMessages ? msg.toolsAdded ?? [] : []; - if (addedTools.length > 0) { - const kimiToolMessage = { - role: "system", - tools: convertTools2(addedTools, compat) - }; - params.push(kimiToolMessage); - } - const text = i === 0 ? getSystemMessageText(msg) : renderSystemMessageUpdate(msg); - if (text.length > 0) { - params.push({ role: instructionRole, content: sanitizeSurrogates(text) }); - } - } else if (msg.role === "user") { - if (typeof msg.content === "string") { - params.push({ - role: "user", - content: sanitizeSurrogates(msg.content) - }); - } else { - const content = msg.content.filter((item) => item.type !== "text" || item.text.length > 0).map((item) => { - if (item.type === "text") { - return { - type: "text", - text: sanitizeSurrogates(item.text) - }; - } else { - return { - type: "image_url", - image_url: { - url: `data:${item.mimeType};base64,${item.data}` - } - }; - } - }); - if (content.length === 0) - continue; - params.push({ - role: "user", - content - }); - } - } else if (msg.role === "assistant") { - const assistantMsg = { - role: "assistant", - content: compat.requiresAssistantAfterToolResult ? "" : null - }; - const assistantTextParts = msg.content.filter(isTextContentBlock).filter((block) => block.text.trim().length > 0).map((block) => ({ - type: "text", - text: sanitizeSurrogates(block.text) - })); - const assistantText = assistantTextParts.map((part) => part.text).join(""); - const thinkingBlocks = msg.content.filter(isThinkingContentBlock); - const toolCalls = msg.content.filter(isToolCallBlock); - const signedReasoningDetails = thinkingBlocks.map((block) => parseOpenAIReasoningDetails(block.thinkingSignature)).find((details) => details !== void 0); - const legacyReasoningDetails = toolCalls.map((toolCall) => parseLegacyEncryptedReasoningDetail(toolCall.thoughtSignature)).filter((detail) => detail !== void 0); - const preservedReasoningDetails = signedReasoningDetails ?? (legacyReasoningDetails.length > 0 ? legacyReasoningDetails : void 0); - const nonEmptyThinkingBlocks = thinkingBlocks.filter((block) => block.thinking.trim().length > 0); - if (nonEmptyThinkingBlocks.length > 0) { - if (compat.requiresThinkingAsText) { - const thinkingText = nonEmptyThinkingBlocks.map((block) => sanitizeSurrogates(block.thinking)).join("\n\n"); - assistantMsg.content = [{ type: "text", text: thinkingText }, ...assistantTextParts]; - } else { - if (assistantText.length > 0) { - assistantMsg.content = assistantText; - } - if (!preservedReasoningDetails) { - let signature = nonEmptyThinkingBlocks[0].thinkingSignature; - if (model2.provider === "opencode-go" && signature === "reasoning") { - signature = "reasoning_content"; - } - if (signature && isOpenAICompletionsReasoningField(signature)) { - assistantMsg[signature] = nonEmptyThinkingBlocks.map((block) => block.thinking).join("\n"); - } - } - } - } else if (assistantText.length > 0) { - assistantMsg.content = assistantText; - } - if (toolCalls.length > 0) { - assistantMsg.tool_calls = toolCalls.map((tc) => { - const customInputProperty = options?.grammarToolInputProperties?.get(tc.name); - if (customInputProperty !== void 0) { - return { - id: tc.id, - type: "custom", - custom: { - name: tc.name, - input: sanitizeSurrogates(getGrammarToolInput(tc.name, tc.arguments, customInputProperty)) - } - }; - } - return { - id: tc.id, - type: "function", - function: { - name: tc.name, - arguments: JSON.stringify(tc.arguments) - } - }; - }); - } - if (preservedReasoningDetails) { - assistantMsg.reasoning_details = preservedReasoningDetails; - } - if (compat.requiresReasoningContentOnAssistantMessages && model2.reasoning && assistantMsg.reasoning_content === void 0) { - assistantMsg.reasoning_content = ""; - } - const content = assistantMsg.content; - const hasContent = content !== null && content !== void 0 && (typeof content === "string" ? content.length > 0 : content.length > 0); - if (!hasContent && !assistantMsg.tool_calls) { - continue; - } - params.push(assistantMsg); - } else if (msg.role === "toolResult") { - const imageBlocks = []; - let j = i; - for (; j < transformedMessages.length && transformedMessages[j].role === "toolResult"; j++) { - const toolMsg = transformedMessages[j]; - const textResult = toolMsg.content.filter(isTextContentBlock).map((block) => block.text).join("\n"); - const hasImages = toolMsg.content.some((c) => c.type === "image"); - const hasText = textResult.trim().length > 0; - const toolResultText = hasText ? textResult : hasImages ? "(see attached image)" : "(no tool output)"; - const toolResultMsg = { - role: "tool", - content: sanitizeSurrogates(toolResultText), - tool_call_id: toolMsg.toolCallId - }; - if (compat.requiresToolResultName && toolMsg.toolName) { - toolResultMsg.name = toolMsg.toolName; - } - params.push(toolResultMsg); - if (hasImages && model2.input.includes("image")) { - for (const block of toolMsg.content) { - if (isImageContentBlock(block)) { - imageBlocks.push({ - type: "image_url", - image_url: { - url: `data:${block.mimeType};base64,${block.data}` - } - }); - } - } - } - } - i = j - 1; - if (imageBlocks.length > 0) { - if (compat.requiresAssistantAfterToolResult) { - params.push({ - role: "assistant", - content: "I have processed the tool results." - }); - } - params.push({ - role: "user", - content: [ - { - type: "text", - text: "Attached image(s) from tool result:" - }, - ...imageBlocks - ] - }); - lastRole = "user"; - } else { - lastRole = "toolResult"; - } - continue; - } - lastRole = msg.role; - } - return params; -} -function convertTools2(tools, compat) { - return tools.map((tool) => { - const grammar = resolveGrammarConstrainedSampling(tool, compat.supportsOpenAIGrammarTools); - if (grammar) { - return { - type: "custom", - custom: { - name: tool.name, - description: tool.description, - format: { - type: "grammar", - grammar: { - syntax: grammar.format, - definition: grammar.definition - } - } - } - }; - } - const strict = resolveJsonSchemaStrictSampling(tool, compat.supportsStrictMode !== false); - return { - type: "function", - function: { - name: tool.name, - description: tool.description, - parameters: getJsonSchemaToolParameters(tool, strict), - // Only include strict if provider supports it. Some reject unknown fields. - ...compat.supportsStrictMode !== false && { strict: strict ?? false } - } - }; - }); -} -function parseChunkUsage(rawUsage, model2) { - const promptTokens = rawUsage.prompt_tokens || 0; - const cacheReadTokens = rawUsage.prompt_tokens_details?.cached_tokens ?? rawUsage.prompt_cache_hit_tokens ?? rawUsage.cached_tokens ?? 0; - const cacheWriteTokens = rawUsage.prompt_tokens_details?.cache_write_tokens || 0; - const input = Math.max(0, promptTokens - cacheReadTokens - cacheWriteTokens); - const outputTokens = rawUsage.completion_tokens || 0; - const usage = { - input, - output: outputTokens, - cacheRead: cacheReadTokens, - cacheWrite: cacheWriteTokens, - reasoning: rawUsage.completion_tokens_details?.reasoning_tokens || 0, - totalTokens: input + outputTokens + cacheReadTokens + cacheWriteTokens, - cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 } - }; - calculateCost(model2, usage); - if (isOpenRouterModel(model2)) { - applyOpenRouterReportedCost(usage, rawUsage); - } - return usage; -} -function mapStopReason3(reason) { - if (reason === null) - return { stopReason: "stop" }; - switch (reason) { - case "stop": - case "end": - return { stopReason: "stop" }; - case "length": - return { stopReason: "length" }; - case "function_call": - case "tool_calls": - return { stopReason: "toolUse" }; - case "content_filter": - return { stopReason: "error", errorMessage: "Provider finish_reason: content_filter" }; - case "network_error": - return { stopReason: "error", errorMessage: "Provider finish_reason: network_error" }; - default: - return { - stopReason: "error", - errorMessage: `Provider finish_reason: ${reason}` - }; - } -} -function detectCompat(model2) { - const provider2 = model2.provider; - const baseUrl = model2.baseUrl; - const isZai = provider2 === "zai" || provider2 === "zai-coding-cn" || baseUrl.includes("api.z.ai") || baseUrl.includes("open.bigmodel.cn"); - const isTogether = provider2 === "together" || baseUrl.includes("api.together.ai") || baseUrl.includes("api.together.xyz"); - const isMoonshot = provider2 === "moonshotai" || provider2 === "moonshotai-cn" || baseUrl.includes("api.moonshot."); - const isOpenRouter2 = provider2 === "openrouter" || baseUrl.includes("openrouter.ai"); - const isCloudflareWorkersAI = provider2 === "cloudflare-workers-ai" || baseUrl.includes("api.cloudflare.com"); - const isCloudflareAiGateway = provider2 === "cloudflare-ai-gateway" || baseUrl.includes("gateway.ai.cloudflare.com"); - const isNvidia = provider2 === "nvidia" || baseUrl.includes("integrate.api.nvidia.com"); - const isAntLing = provider2 === "ant-ling" || baseUrl.includes("api.ant-ling.com"); - const isCerebras = provider2 === "cerebras" || baseUrl.includes("cerebras.ai"); - const isDeepSeek = provider2 === "deepseek" || baseUrl.toLowerCase().includes("deepseek.com"); - const isNonStandard = isNvidia || isCerebras || provider2 === "xai" || baseUrl.includes("api.x.ai") || isTogether || baseUrl.includes("chutes.ai") || isDeepSeek || isZai || isMoonshot || provider2 === "opencode" || baseUrl.includes("opencode.ai") || isCloudflareWorkersAI || isCloudflareAiGateway || isAntLing; - const useMaxTokens = baseUrl.includes("chutes.ai") || isDeepSeek || isMoonshot || isCloudflareAiGateway || isTogether || isNvidia || isAntLing || isZai; - const isGrok = provider2 === "xai" || baseUrl.includes("api.x.ai"); - const isOpenRouterDeveloperRoleModel = isOpenRouter2 && (model2.id.startsWith("anthropic/") || model2.id.startsWith("openai/")); - const cacheControlFormat = provider2 === "openrouter" && model2.id.startsWith("anthropic/") ? "anthropic" : void 0; - return { - supportsStore: !isNonStandard, - supportsDeveloperRole: isOpenRouterDeveloperRoleModel || !isNonStandard && !isOpenRouter2, - supportsReasoningEffort: !isGrok && !isZai && !isMoonshot && !isTogether && !isCloudflareAiGateway && !isNvidia && !isAntLing, - supportsUsageInStreaming: true, - supportsFinishReason: true, - maxTokensField: useMaxTokens ? "max_tokens" : "max_completion_tokens", - requiresToolResultName: false, - requiresAssistantAfterToolResult: false, - requiresThinkingAsText: false, - requiresReasoningContentOnAssistantMessages: isDeepSeek, - thinkingFormat: isDeepSeek ? "deepseek" : isZai ? "zai" : isTogether ? "together" : isAntLing ? "ant-ling" : isOpenRouter2 ? "openrouter" : "openai", - openRouterRouting: {}, - vercelGatewayRouting: {}, - chatTemplateKwargs: {}, - chatTemplateArgs: {}, - zaiToolStream: false, - supportsThinkingTokenBudget: false, - thinkingTokenBudgetField: void 0, - // OpenAI compatibility alone does not imply strict JSON-schema tool support. - supportsStrictMode: false, - supportsOpenAIGrammarTools: false, - supportsMidConvoSystemMessages: false, - supportsMidConvoToolAdditions: false, - cacheControlFormat, - sendSessionAffinityHeaders: isOpenRouter2, - sessionAffinityFormat: isOpenRouter2 ? "openrouter" : "openai", - supportsLongCacheRetention: !(isTogether || isCloudflareWorkersAI || isCloudflareAiGateway || isNvidia || isAntLing) - }; -} -function getCompat2(model2) { - const detected = detectCompat(model2); - if (!model2.compat) - return detected; - return { - supportsStore: model2.compat.supportsStore ?? detected.supportsStore, - supportsDeveloperRole: model2.compat.supportsDeveloperRole ?? detected.supportsDeveloperRole, - supportsReasoningEffort: model2.compat.supportsReasoningEffort ?? detected.supportsReasoningEffort, - supportsUsageInStreaming: model2.compat.supportsUsageInStreaming ?? detected.supportsUsageInStreaming, - supportsFinishReason: model2.compat.supportsFinishReason ?? detected.supportsFinishReason, - maxTokensField: model2.compat.maxTokensField ?? detected.maxTokensField, - requiresToolResultName: model2.compat.requiresToolResultName ?? detected.requiresToolResultName, - requiresAssistantAfterToolResult: model2.compat.requiresAssistantAfterToolResult ?? detected.requiresAssistantAfterToolResult, - requiresThinkingAsText: model2.compat.requiresThinkingAsText ?? detected.requiresThinkingAsText, - requiresReasoningContentOnAssistantMessages: model2.compat.requiresReasoningContentOnAssistantMessages ?? detected.requiresReasoningContentOnAssistantMessages, - thinkingFormat: model2.compat.thinkingFormat ?? detected.thinkingFormat, - openRouterRouting: model2.compat.openRouterRouting ?? {}, - vercelGatewayRouting: model2.compat.vercelGatewayRouting ?? detected.vercelGatewayRouting, - chatTemplateKwargs: model2.compat.chatTemplateKwargs ?? detected.chatTemplateKwargs, - chatTemplateArgs: model2.compat.chatTemplateArgs ?? detected.chatTemplateArgs, - zaiToolStream: model2.compat.zaiToolStream ?? detected.zaiToolStream, - supportsThinkingTokenBudget: model2.compat.supportsThinkingTokenBudget ?? detected.supportsThinkingTokenBudget, - thinkingTokenBudgetField: model2.compat.thinkingTokenBudgetField ?? detected.thinkingTokenBudgetField, - supportsStrictMode: model2.compat.supportsStrictMode ?? detected.supportsStrictMode, - supportsOpenAIGrammarTools: model2.compat.supportsOpenAIGrammarTools ?? detected.supportsOpenAIGrammarTools, - supportsMidConvoSystemMessages: model2.compat.supportsMidConvoSystemMessages ?? detected.supportsMidConvoSystemMessages, - supportsMidConvoToolAdditions: model2.compat.supportsMidConvoToolAdditions ?? detected.supportsMidConvoToolAdditions, - cacheControlFormat: model2.compat.cacheControlFormat ?? detected.cacheControlFormat, - sendSessionAffinityHeaders: model2.compat.sendSessionAffinityHeaders ?? detected.sendSessionAffinityHeaders, - sessionAffinityFormat: model2.compat.sessionAffinityFormat ?? detected.sessionAffinityFormat, - supportsLongCacheRetention: model2.compat.supportsLongCacheRetention ?? detected.supportsLongCacheRetention, - vllmPriority: model2.compat.vllmPriority - }; -} -var OPENAI_COMPLETIONS_REASONING_FIELDS, stream4, streamSimple3; -var init_openai_completions = __esm({ - "node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js"() { - init_openai(); - init_models(); - init_error_body(); - init_event_stream(); - init_hash(); - init_headers2(); - init_identity(); - init_openrouter_cost(); - init_provider_env(); - init_provider_retry(); - init_sanitize_unicode(); - init_streaming_json(); - init_text(); - init_transcript(); - init_constrained_sampling(); - init_github_copilot_headers(); - init_openai_prompt_cache(); - init_simple_options(); - init_transform_messages(); - OPENAI_COMPLETIONS_REASONING_FIELDS = ["reasoning", "reasoning_content", "reasoning_text"]; - stream4 = (model2, context, options) => { - const stream5 = new AssistantMessageEventStream(); - const normalizedContext = resolveTranscript(context, getCompat2(model2).supportsMidConvoSystemMessages); - (async () => { - const output = { - role: "assistant", - content: [], - api: model2.api, - provider: model2.provider, - model: model2.id, - usage: { - input: 0, - output: 0, - cacheRead: 0, - cacheWrite: 0, - totalTokens: 0, - cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 } - }, - stopReason: "pending", - timestamp: Date.now() - }; - let streamedReasoningDetails; - const applyStreamedReasoningDetails = (block) => { - if (streamedReasoningDetails !== void 0) { - block.thinkingSignature = JSON.stringify(streamedReasoningDetails); - } - }; - try { - const apiKey = getClientApiKey2(model2.provider, options?.apiKey, options?.headers); - const compat = getCompat2(model2); - const grammarToolInputProperties = createGrammarToolInputProperties(getDeclaredTools(normalizedContext.messages), compat.supportsOpenAIGrammarTools); - const cacheRetention = resolveCacheRetention3(options?.cacheRetention, options?.env); - const cacheSessionId = cacheRetention === "none" ? void 0 : options?.sessionId; - const client = createClient3(model2, normalizedContext, apiKey, options?.headers, options?.identity, options?.fetch, cacheSessionId, compat); - let params = buildParams3(model2, normalizedContext, options, compat, cacheRetention, grammarToolInputProperties); - const nextParams = await options?.onPayload?.(params, model2); - if (nextParams !== void 0) { - params = nextParams; - } - const requestOptions = { - ...options?.signal ? { signal: options.signal } : {}, - ...options?.timeoutMs !== void 0 ? { timeout: options.timeoutMs } : {}, - maxRetries: 0 - }; - const { data: openaiStream, response } = await retryProviderRequest(() => client.chat.completions.create(params, requestOptions).withResponse(), { - maxRetries: options?.maxRetries, - maxRetryDelayMs: options?.maxRetryDelayMs, - signal: options?.signal - }); - await options?.onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model2); - stream5.push({ type: "start", partial: output }); - let textBlock = null; - let thinkingBlock = null; - let hasFinishReason = false; - const toolCallBlocksByIndex = /* @__PURE__ */ new Map(); - const toolCallBlocksById = /* @__PURE__ */ new Map(); - const toolCallStates = /* @__PURE__ */ new Map(); - const blocks = output.content; - const getContentIndex = (block) => blocks.indexOf(block); - const customInput2 = (property) => ({ - kind: "custom", - property, - buffer: { input: "", started: false, closed: false } - }); - const finishBlock = (block) => { - const contentIndex = getContentIndex(block); - if (contentIndex === -1) { - return; - } - if (block.type === "text") { - stream5.push({ - type: "text_end", - contentIndex, - content: block.text, - partial: output - }); - } else if (block.type === "thinking") { - applyStreamedReasoningDetails(block); - stream5.push({ - type: "thinking_end", - contentIndex, - content: block.thinking, - partial: output - }); - } else if (block.type === "toolCall") { - const input = toolCallStates.get(block).input; - toolCallStates.delete(block); - if (input.kind === "custom") { - const delta = closeGrammarToolInputJson(input.buffer, input.property, void 0); - if (delta !== void 0) { - stream5.push({ - type: "toolcall_delta", - contentIndex, - delta, - partial: output - }); - } - } else { - Object.assign(block, input.arguments.finish()); - } - stream5.push({ - type: "toolcall_end", - contentIndex, - toolCall: block, - partial: output - }); - } - }; - const ensureTextBlock = () => { - if (!textBlock) { - textBlock = { type: "text", text: "" }; - blocks.push(textBlock); - stream5.push({ type: "text_start", contentIndex: getContentIndex(textBlock), partial: output }); - } - return textBlock; - }; - const ensureThinkingBlock = (thinkingSignature) => { - if (!thinkingBlock) { - thinkingBlock = { - type: "thinking", - thinking: "", - thinkingSignature - }; - blocks.push(thinkingBlock); - stream5.push({ type: "thinking_start", contentIndex: getContentIndex(thinkingBlock), partial: output }); - } - return thinkingBlock; - }; - const ensureToolCallBlock = (toolCall) => { - const streamIndex = typeof toolCall.index === "number" ? toolCall.index : void 0; - const name = toolCall.function?.name ?? toolCall.custom?.name ?? ""; - let block = streamIndex !== void 0 ? toolCallBlocksByIndex.get(streamIndex) : void 0; - if (!block && toolCall.id) { - block = toolCallBlocksById.get(toolCall.id); - } - if (!block) { - const customInputProperty = toolCall.custom && !toolCall.function ? grammarToolInputProperties.get(name) ?? "input" : void 0; - block = { - type: "toolCall", - id: toolCall.id || "", - name, - arguments: customInputProperty !== void 0 ? { [customInputProperty]: "" } : {} - }; - toolCallStates.set(block, { - streamIndex, - input: customInputProperty !== void 0 ? customInput2(customInputProperty) : { kind: "json", arguments: new ToolCallArgumentsStream() } - }); - if (streamIndex !== void 0) { - toolCallBlocksByIndex.set(streamIndex, block); - } - if (toolCall.id) { - toolCallBlocksById.set(toolCall.id, block); - } - blocks.push(block); - stream5.push({ - type: "toolcall_start", - contentIndex: getContentIndex(block), - partial: output - }); - } - const state2 = toolCallStates.get(block); - if (streamIndex !== void 0 && state2.streamIndex === void 0) { - state2.streamIndex = streamIndex; - toolCallBlocksByIndex.set(streamIndex, block); - } - if (toolCall.id) { - toolCallBlocksById.set(toolCall.id, block); - } - if (!block.name && name) { - block.name = name; - } - if (toolCall.custom && !toolCall.function && state2.input.kind !== "custom") { - const customInputProperty = grammarToolInputProperties.get(block.name) ?? "input"; - block.arguments = { [customInputProperty]: "" }; - state2.input = customInput2(customInputProperty); - } - return { block, state: state2 }; - }; - for await (const chunk of openaiStream) { - await options?.onProviderStreamEvent?.(chunk, model2); - if (!chunk || typeof chunk !== "object") - continue; - output.responseId ||= chunk.id; - if (typeof chunk.model === "string" && chunk.model.length > 0 && chunk.model !== model2.id) { - output.responseModel ||= chunk.model; - } - if (chunk.usage) { - output.usage = parseChunkUsage(chunk.usage, model2); - } - const choice = Array.isArray(chunk.choices) ? chunk.choices[0] : void 0; - if (!choice) - continue; - if (!chunk.usage && choice.usage) { - output.usage = parseChunkUsage(choice.usage, model2); - } - if (choice.finish_reason) { - output.rawStopReason = choice.finish_reason; - const finishReasonResult = mapStopReason3(choice.finish_reason); - output.stopReason = finishReasonResult.stopReason; - if (finishReasonResult.errorMessage) { - output.errorMessage = finishReasonResult.errorMessage; - } - hasFinishReason = true; - } - if (choice.delta) { - const reasoningFields = ["reasoning_content", "reasoning", "reasoning_text"]; - const deltaFields = choice.delta; - let foundReasoningField = null; - for (const field of reasoningFields) { - const value2 = deltaFields[field]; - if (typeof value2 === "string" && value2.length > 0) { - foundReasoningField = field; - break; - } - } - if (foundReasoningField) { - const delta = deltaFields[foundReasoningField]; - if (typeof delta === "string" && delta.length > 0) { - const thinkingSignature = model2.provider === "opencode-go" && foundReasoningField === "reasoning" ? "reasoning_content" : foundReasoningField; - const block = ensureThinkingBlock(thinkingSignature); - block.thinking += delta; - stream5.push({ - type: "thinking_delta", - contentIndex: getContentIndex(block), - delta, - partial: output - }); - } - } - const reasoningDetails = choice.delta.reasoning_details; - if (Array.isArray(reasoningDetails)) { - for (const detail of reasoningDetails) { - if (!isOpenAIReasoningDetail(detail)) - continue; - ensureThinkingBlock(""); - streamedReasoningDetails ??= []; - appendOpenAIReasoningDetail(streamedReasoningDetails, detail); - } - } - if (choice.delta.content !== null && choice.delta.content !== void 0 && choice.delta.content.length > 0) { - const block = ensureTextBlock(); - block.text += choice.delta.content; - stream5.push({ - type: "text_delta", - contentIndex: getContentIndex(block), - delta: choice.delta.content, - partial: output - }); - } - if (choice?.delta?.tool_calls) { - for (const toolCall of choice.delta.tool_calls) { - const { block, state: state2 } = ensureToolCallBlock(toolCall); - if (!block.id && toolCall.id) { - block.id = toolCall.id; - toolCallBlocksById.set(toolCall.id, block); - } - const name = toolCall.function?.name ?? toolCall.custom?.name; - if (!block.name && name) { - block.name = name; - } - let delta = ""; - const input = state2.input; - if (toolCall.function?.arguments && input.kind === "json") { - delta = toolCall.function.arguments; - block.arguments = input.arguments.append(delta); - } else if (toolCall.custom?.input && input.kind === "custom") { - delta = appendGrammarToolInputJsonDelta(input.buffer, input.property, toolCall.custom.input) ?? ""; - block.arguments = { [input.property]: input.buffer.input }; - } - stream5.push({ - type: "toolcall_delta", - contentIndex: getContentIndex(block), - delta, - partial: output - }); - } - } - } - } - for (const block of blocks) { - finishBlock(block); - } - if (options?.signal?.aborted) { - throw new Error("Request was aborted"); - } - if (output.stopReason === "aborted") { - throw new Error("Request was aborted"); - } - if (!hasFinishReason && !compat.supportsFinishReason) { - output.stopReason = output.content.some((block) => block.type === "toolCall") ? "toolUse" : "stop"; - } - if (output.stopReason === "error") { - throw new Error(output.errorMessage || "Provider returned an error stop reason"); - } - if (compat.supportsFinishReason && !hasFinishReason || output.stopReason === "pending") { - throw new Error("Stream ended without finish_reason"); - } - stream5.push({ type: "done", reason: output.stopReason, message: output }); - stream5.end(); - } catch (error) { - for (const block of output.content) { - if (block.type === "thinking") { - applyStreamedReasoningDetails(block); - } - } - output.stopReason = options?.signal?.aborted ? "aborted" : "error"; - output.errorMessage = formatProviderError(normalizeProviderError(error)); - const rawMetadata = error?.error?.metadata?.raw; - if (rawMetadata && !output.errorMessage.includes(String(rawMetadata))) { - output.errorMessage += ` -${rawMetadata}`; - } - stream5.push({ type: "error", reason: output.stopReason, error: output }); - stream5.end(); - } - })(); - return stream5; - }; streamSimple3 = (model2, context, options) => { getClientApiKey2(model2.provider, options?.apiKey, options?.headers); const base = { @@ -42031,16 +42032,455 @@ ${rawMetadata}`; const reasoningEffort = clampedReasoning === "off" ? void 0 : clampedReasoning; return stream4(model2, context, { ...base, - reasoningEffort, - thinkingBudgets: options?.thinkingBudgets + reasoningEffort }); }; } }); +// node_modules/@earendil-works/pi-ai/dist/utils/uuid.js +function uuidv7(timestampMs) { + const requestedTimestamp = timestampMs ?? Date.now(); + if (!Number.isInteger(requestedTimestamp) || requestedTimestamp < 0 || requestedTimestamp > MAX_UUID_V7_TIMESTAMP) { + throw new RangeError(`UUIDv7 timestamp must be an integer between 0 and ${MAX_UUID_V7_TIMESTAMP}`); + } + const effectiveTimestamp = timestampMs === void 0 ? Math.max(requestedTimestamp, lastOrdinaryTimestamp) : timestampMs; + if (timestampMs === void 0) + lastOrdinaryTimestamp = effectiveTimestamp; + const bytes2 = new Uint8Array(16); + globalThis.crypto.getRandomValues(bytes2); + if (sequence === void 0) { + sequence = BigInt(bytes2[1]) << 32n | BigInt(bytes2[2]) << 24n | BigInt(bytes2[3]) << 16n | BigInt(bytes2[4]) << 8n | BigInt(bytes2[5]); + } else { + if (sequence === MAX_SEQUENCE) + throw new RangeError("UUIDv7 generator sequence exhausted"); + sequence++; + } + const timestamp2 = BigInt(effectiveTimestamp); + for (let index = 5; index >= 0; index--) { + bytes2[index] = Number(timestamp2 >> BigInt((5 - index) * 8)) & 255; + } + bytes2[6] = 112 | Number(sequence >> 37n & 0x0fn); + bytes2[7] = Number(sequence >> 29n & 0xffn); + bytes2[8] = 128 | Number(sequence >> 23n & 0x3fn); + bytes2[9] = Number(sequence >> 15n & 0xffn); + bytes2[10] = Number(sequence >> 7n & 0xffn); + bytes2[11] = Number((sequence & 0x7fn) << 1n) | bytes2[11] & 1; + const hex = Array.from(bytes2, (byte) => byte.toString(16).padStart(2, "0")); + return `${hex.slice(0, 4).join("")}-${hex.slice(4, 6).join("")}-${hex.slice(6, 8).join("")}-${hex.slice(8, 10).join("")}-${hex.slice(10).join("")}`; +} +var MAX_UUID_V7_TIMESTAMP, MAX_SEQUENCE, lastOrdinaryTimestamp, sequence; +var init_uuid3 = __esm({ + "node_modules/@earendil-works/pi-ai/dist/utils/uuid.js"() { + MAX_UUID_V7_TIMESTAMP = 281474976710655; + MAX_SEQUENCE = (1n << 41n) - 1n; + lastOrdinaryTimestamp = -1; + } +}); + // models.ts init_models(); +// node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +var amazon_bedrock_default = { "bedrock-converse-stream": { "chat:amazon.nova-2-lite-v1:0": { id: "amazon.nova-2-lite-v1:0", name: "Nova 2 Lite", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.33, output: 2.75, cacheRead: 0.0825, cacheWrite: 0.33 }, contextWindow: 1e6, maxTokens: 65535, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:amazon.nova-lite-v1:0": { id: "amazon.nova-lite-v1:0", name: "Nova Lite", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.06, output: 0.24, cacheRead: 0.015, cacheWrite: 0.06 }, contextWindow: 3e5, maxTokens: 1e4, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:amazon.nova-micro-v1:0": { id: "amazon.nova-micro-v1:0", name: "Nova Micro", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.035, output: 0.14, cacheRead: 875e-5, cacheWrite: 0.035 }, contextWindow: 128e3, maxTokens: 1e4, type: "chat" }, "chat:amazon.nova-pro-v1:0": { id: "amazon.nova-pro-v1:0", name: "Nova Pro", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.8, output: 3.2, cacheRead: 0.2, cacheWrite: 0.8 }, contextWindow: 3e5, maxTokens: 1e4, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-fable-5": { id: "anthropic.claude-fable-5", name: "Claude Fable 5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-fable-5-1": { id: "anthropic.claude-fable-5-1", name: "Claude Fable 5.1", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-haiku-4-5-20251001-v1:0": { id: "anthropic.claude-haiku-4-5-20251001-v1:0", name: "Claude Haiku 4.5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-haiku-5-5": { id: "anthropic.claude-haiku-5-5", name: "Claude Haiku 5.5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 1e5, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-opus-4-1-20250805-v1:0": { id: "anthropic.claude-opus-4-1-20250805-v1:0", name: "Claude Opus 4.1", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 15, output: 75, cacheRead: 1.5, cacheWrite: 18.75 }, contextWindow: 2e5, maxTokens: 32e3, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-opus-4-5-20251101-v1:0": { id: "anthropic.claude-opus-4-5-20251101-v1:0", name: "Claude Opus 4.5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-opus-4-6-v1": { id: "anthropic.claude-opus-4-6-v1", name: "Claude Opus 4.6", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-opus-4-7": { id: "anthropic.claude-opus-4-7", name: "Claude Opus 4.7", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-opus-4-8": { id: "anthropic.claude-opus-4-8", name: "Claude Opus 4.8", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-opus-5-5": { id: "anthropic.claude-opus-5-5", name: "Claude Opus 5.5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-sonnet-4-5-20250929-v1:0": { id: "anthropic.claude-sonnet-4-5-20250929-v1:0", name: "Claude Sonnet 4.5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-sonnet-4-6": { id: "anthropic.claude-sonnet-4-6", name: "Claude Sonnet 4.6", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3.3, output: 16.5, cacheRead: 0.33, cacheWrite: 4.125 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-sonnet-5": { id: "anthropic.claude-sonnet-5", name: "Claude Sonnet 5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic.claude-sonnet-5-5": { id: "anthropic.claude-sonnet-5-5", name: "Claude Sonnet 5.5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:apac.amazon.nova-lite-v1:0": { id: "apac.amazon.nova-lite-v1:0", name: "Nova Lite (APAC)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.063, output: 0.252, cacheRead: 0.01575, cacheWrite: 0.063 }, contextWindow: 3e5, maxTokens: 1e4, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:apac.amazon.nova-micro-v1:0": { id: "apac.amazon.nova-micro-v1:0", name: "Nova Micro (APAC)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.037, output: 0.148, cacheRead: 925e-5, cacheWrite: 0.037 }, contextWindow: 128e3, maxTokens: 1e4, type: "chat" }, "chat:apac.amazon.nova-pro-v1:0": { id: "apac.amazon.nova-pro-v1:0", name: "Nova Pro (APAC)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.84, output: 3.36, cacheRead: 0.21, cacheWrite: 0.84 }, contextWindow: 3e5, maxTokens: 1e4, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:apac.anthropic.claude-sonnet-4-20250514-v1:0": { id: "apac.anthropic.claude-sonnet-4-20250514-v1:0", name: "Claude Sonnet 4 (APAC)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:au.anthropic.claude-haiku-4-5-20251001-v1:0": { id: "au.anthropic.claude-haiku-4-5-20251001-v1:0", name: "Claude Haiku 4.5 (AU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 1.1, output: 5.5, cacheRead: 0.11, cacheWrite: 1.375 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:au.anthropic.claude-haiku-5-5": { id: "au.anthropic.claude-haiku-5-5", name: "Claude Haiku 5.5 (AU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.11, output: 0.55, cacheRead: 0.011, cacheWrite: 0.1375, tiers: [{ inputTokensAbove: 1e5, input: 0.55, output: 2.75, cacheRead: 0.055, cacheWrite: 0.6875 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:au.anthropic.claude-opus-4-6-v1": { id: "au.anthropic.claude-opus-4-6-v1", name: "AU Anthropic Claude Opus 4.6", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:au.anthropic.claude-opus-4-7": { id: "au.anthropic.claude-opus-4-7", name: "Claude Opus 4.7 (AU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:au.anthropic.claude-opus-4-8": { id: "au.anthropic.claude-opus-4-8", name: "Claude Opus 4.8 (AU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:au.anthropic.claude-opus-5": { id: "au.anthropic.claude-opus-5", name: "Claude Opus 5 (AU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:au.anthropic.claude-opus-5-5": { id: "au.anthropic.claude-opus-5-5", name: "Claude Opus 5.5 (AU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 4.4, output: 22, cacheRead: 0.22, cacheWrite: 5.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:au.anthropic.claude-sonnet-4-5-20250929-v1:0": { id: "au.anthropic.claude-sonnet-4-5-20250929-v1:0", name: "Claude Sonnet 4.5 (AU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3.3, output: 16.5, cacheRead: 0.33, cacheWrite: 4.125 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:au.anthropic.claude-sonnet-4-6": { id: "au.anthropic.claude-sonnet-4-6", name: "AU Anthropic Claude Sonnet 4.6", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3.3, output: 16.5, cacheRead: 0.33, cacheWrite: 4.125 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:au.anthropic.claude-sonnet-5": { id: "au.anthropic.claude-sonnet-5", name: "Claude Sonnet 5 (AU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.22, cacheWrite: 2.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:au.anthropic.claude-sonnet-5-5": { id: "au.anthropic.claude-sonnet-5-5", name: "Claude Sonnet 5.5 (AU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.11, cacheWrite: 2.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:ca.amazon.nova-lite-v1:0": { id: "ca.amazon.nova-lite-v1:0", name: "Nova Lite (CA)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.064, output: 0.256, cacheRead: 0.016, cacheWrite: 0.064 }, contextWindow: 3e5, maxTokens: 1e4, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek.v3-v1:0": { id: "deepseek.v3-v1:0", name: "DeepSeek-V3.1", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.58, output: 1.68, cacheRead: 0, cacheWrite: 0 }, contextWindow: 163840, maxTokens: 81920, compat: { supportsStrictMode: true }, type: "chat" }, "chat:deepseek.v3.2": { id: "deepseek.v3.2", name: "DeepSeek V3.2", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.62, output: 1.85, cacheRead: 0, cacheWrite: 0 }, contextWindow: 163840, maxTokens: 81920, compat: { supportsStrictMode: true }, type: "chat" }, "chat:eu.amazon.nova-2-lite-v1:0": { id: "eu.amazon.nova-2-lite-v1:0", name: "Nova 2 Lite (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.374, output: 3.157, cacheRead: 0.0935, cacheWrite: 0.374 }, contextWindow: 1e6, maxTokens: 65535, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.amazon.nova-lite-v1:0": { id: "eu.amazon.nova-lite-v1:0", name: "Nova Lite (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.069, output: 0.276, cacheRead: 0.01725, cacheWrite: 0.069 }, contextWindow: 3e5, maxTokens: 1e4, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.amazon.nova-micro-v1:0": { id: "eu.amazon.nova-micro-v1:0", name: "Nova Micro (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.04, output: 0.16, cacheRead: 0.01, cacheWrite: 0.04 }, contextWindow: 128e3, maxTokens: 1e4, type: "chat" }, "chat:eu.amazon.nova-pro-v1:0": { id: "eu.amazon.nova-pro-v1:0", name: "Nova Pro (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.92, output: 3.68, cacheRead: 0.23, cacheWrite: 0.92 }, contextWindow: 3e5, maxTokens: 1e4, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-fable-5": { id: "eu.anthropic.claude-fable-5", name: "Claude Fable 5 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 11, output: 55, cacheRead: 1.1, cacheWrite: 13.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-haiku-4-5-20251001-v1:0": { id: "eu.anthropic.claude-haiku-4-5-20251001-v1:0", name: "Claude Haiku 4.5 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 1.1, output: 5.5, cacheRead: 0.11, cacheWrite: 1.375 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-haiku-5-5": { id: "eu.anthropic.claude-haiku-5-5", name: "Claude Haiku 5.5 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.11, output: 0.55, cacheRead: 0.011, cacheWrite: 0.1375, tiers: [{ inputTokensAbove: 1e5, input: 0.55, output: 2.75, cacheRead: 0.055, cacheWrite: 0.6875 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-opus-4-5-20251101-v1:0": { id: "eu.anthropic.claude-opus-4-5-20251101-v1:0", name: "Claude Opus 4.5 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-opus-4-6-v1": { id: "eu.anthropic.claude-opus-4-6-v1", name: "Claude Opus 4.6 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-opus-4-7": { id: "eu.anthropic.claude-opus-4-7", name: "Claude Opus 4.7 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-opus-4-8": { id: "eu.anthropic.claude-opus-4-8", name: "Claude Opus 4.8 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-opus-5": { id: "eu.anthropic.claude-opus-5", name: "Claude Opus 5 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-opus-5-5": { id: "eu.anthropic.claude-opus-5-5", name: "Claude Opus 5.5 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 4.4, output: 22, cacheRead: 0.22, cacheWrite: 5.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-sonnet-4-20250514-v1:0": { id: "eu.anthropic.claude-sonnet-4-20250514-v1:0", name: "Claude Sonnet 4 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-sonnet-4-5-20250929-v1:0": { id: "eu.anthropic.claude-sonnet-4-5-20250929-v1:0", name: "Claude Sonnet 4.5 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3.3, output: 16.5, cacheRead: 0.33, cacheWrite: 4.125 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-sonnet-4-6": { id: "eu.anthropic.claude-sonnet-4-6", name: "Claude Sonnet 4.6 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3.3, output: 16.5, cacheRead: 0.33, cacheWrite: 4.125 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-sonnet-5": { id: "eu.anthropic.claude-sonnet-5", name: "Claude Sonnet 5 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.22, cacheWrite: 2.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.anthropic.claude-sonnet-5-5": { id: "eu.anthropic.claude-sonnet-5-5", name: "Claude Sonnet 5.5 (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.11, cacheWrite: 2.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:eu.mistral.pixtral-large-2502-v1:0": { id: "eu.mistral.pixtral-large-2502-v1:0", name: "Pixtral Large (25.02) (EU)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.eu-central-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.amazon.nova-2-lite-v1:0": { id: "global.amazon.nova-2-lite-v1:0", name: "Nova 2 Lite (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 2.5, cacheRead: 0.075, cacheWrite: 0.3 }, contextWindow: 1e6, maxTokens: 65535, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-fable-5": { id: "global.anthropic.claude-fable-5", name: "Claude Fable 5 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-fable-5-1": { id: "global.anthropic.claude-fable-5-1", name: "Claude Fable 5.1 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-haiku-4-5-20251001-v1:0": { id: "global.anthropic.claude-haiku-4-5-20251001-v1:0", name: "Claude Haiku 4.5 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-haiku-5-5": { id: "global.anthropic.claude-haiku-5-5", name: "Claude Haiku 5.5 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 1e5, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-opus-4-5-20251101-v1:0": { id: "global.anthropic.claude-opus-4-5-20251101-v1:0", name: "Claude Opus 4.5 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-opus-4-6-v1": { id: "global.anthropic.claude-opus-4-6-v1", name: "Claude Opus 4.6 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-opus-4-7": { id: "global.anthropic.claude-opus-4-7", name: "Claude Opus 4.7 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-opus-4-8": { id: "global.anthropic.claude-opus-4-8", name: "Claude Opus 4.8 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-opus-5": { id: "global.anthropic.claude-opus-5", name: "Claude Opus 5 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-opus-5-5": { id: "global.anthropic.claude-opus-5-5", name: "Claude Opus 5.5 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-sonnet-4-20250514-v1:0": { id: "global.anthropic.claude-sonnet-4-20250514-v1:0", name: "Claude Sonnet 4 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-sonnet-4-5-20250929-v1:0": { id: "global.anthropic.claude-sonnet-4-5-20250929-v1:0", name: "Claude Sonnet 4.5 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-sonnet-4-6": { id: "global.anthropic.claude-sonnet-4-6", name: "Claude Sonnet 4.6 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-sonnet-5": { id: "global.anthropic.claude-sonnet-5", name: "Claude Sonnet 5 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.anthropic.claude-sonnet-5-5": { id: "global.anthropic.claude-sonnet-5-5", name: "Claude Sonnet 5.5 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.moonshotai.kimi-k3": { id: "global.moonshotai.kimi-k3", name: "Kimi K3 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 1048576, maxTokens: 128e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.openai.gpt-5.6-luna": { id: "global.openai.gpt-5.6-luna", name: "GPT-5.6 Luna (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 272e3, input: 0.4, output: 1.8, cacheRead: 0.04, cacheWrite: 0.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.openai.gpt-5.6-sol": { id: "global.openai.gpt-5.6-sol", name: "GPT-5.6 Sol (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.openai.gpt-5.6-terra": { id: "global.openai.gpt-5.6-terra", name: "GPT-5.6 Terra (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.openai.gpt-6-astra": { id: "global.openai.gpt-6-astra", name: "GPT-6 Astra (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5, tiers: [{ inputTokensAbove: 272e3, input: 20, output: 75, cacheRead: 2, cacheWrite: 25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.openai.gpt-6-luna": { id: "global.openai.gpt-6-luna", name: "GPT-6 Luna (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.openai.gpt-6-sol": { id: "global.openai.gpt-6-sol", name: "GPT-6 Sol (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.openai.gpt-6.1-sol": { id: "global.openai.gpt-6.1-sol", name: "GPT-6.1 Sol (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.openai.gpt-6.1-terra": { id: "global.openai.gpt-6.1-terra", name: "GPT-6.1 Terra (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.xai.grok-4.6": { id: "global.xai.grok-4.6", name: "Grok 4.6 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 5e5, maxTokens: 5e5, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.xai.grok-4.7": { id: "global.xai.grok-4.7", name: "Grok 4.7 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 5e5, maxTokens: 5e5, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:global.zai.glm-5.3": { id: "global.zai.glm-5.3", name: "GLM-5.3 (Global)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 1.68, output: 5.28, cacheRead: 0.312, cacheWrite: 2.1 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, type: "chat" }, "chat:google.gemma-4-26b-a4b": { id: "google.gemma-4-26b-a4b", name: "Gemma 4 26B A4B IT", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.13, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google.gemma-4-31b": { id: "google.gemma-4-31b", name: "Gemma 4 31B IT", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.14, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google.gemma-4-e2b": { id: "google.gemma-4-e2b", name: "Gemma 4 E2B IT", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.04, output: 0.08, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 8192, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:in.anthropic.claude-haiku-4-5-20251001-v1:0": { id: "in.anthropic.claude-haiku-4-5-20251001-v1:0", name: "Claude Haiku 4.5 (India)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 1.1, output: 5.5, cacheRead: 0.11, cacheWrite: 1.375 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:in.anthropic.claude-opus-5": { id: "in.anthropic.claude-opus-5", name: "Claude Opus 5 (India)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:in.anthropic.claude-sonnet-5": { id: "in.anthropic.claude-sonnet-5", name: "Claude Sonnet 5 (India)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.22, cacheWrite: 2.75 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:in.openai.gpt-5.6-luna": { id: "in.openai.gpt-5.6-luna", name: "GPT-5.6 Luna (India)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.22, output: 1.32, cacheRead: 0.022, cacheWrite: 0.275, tiers: [{ inputTokensAbove: 272e3, input: 0.44, output: 1.98, cacheRead: 0.044, cacheWrite: 0.55 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:in.openai.gpt-5.6-terra": { id: "in.openai.gpt-5.6-terra", name: "GPT-5.6 Terra (India)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 13.2, cacheRead: 0.22, cacheWrite: 2.75, tiers: [{ inputTokensAbove: 272e3, input: 4.4, output: 19.8, cacheRead: 0.44, cacheWrite: 5.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:jp.amazon.nova-2-lite-v1:0": { id: "jp.amazon.nova-2-lite-v1:0", name: "Nova 2 Lite (JP)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.396, output: 3.311, cacheRead: 0.099, cacheWrite: 0.396 }, contextWindow: 1e6, maxTokens: 65535, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:jp.anthropic.claude-haiku-4-5-20251001-v1:0": { id: "jp.anthropic.claude-haiku-4-5-20251001-v1:0", name: "Claude Haiku 4.5 (JP)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 1.1, output: 5.5, cacheRead: 0.11, cacheWrite: 1.375 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:jp.anthropic.claude-haiku-5-5": { id: "jp.anthropic.claude-haiku-5-5", name: "Claude Haiku 5.5 (JP)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.11, output: 0.55, cacheRead: 0.011, cacheWrite: 0.1375, tiers: [{ inputTokensAbove: 1e5, input: 0.55, output: 2.75, cacheRead: 0.055, cacheWrite: 0.6875 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:jp.anthropic.claude-opus-4-7": { id: "jp.anthropic.claude-opus-4-7", name: "Claude Opus 4.7 (JP)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:jp.anthropic.claude-opus-4-8": { id: "jp.anthropic.claude-opus-4-8", name: "Claude Opus 4.8 (JP)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:jp.anthropic.claude-opus-5": { id: "jp.anthropic.claude-opus-5", name: "Claude Opus 5 (JP)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:jp.anthropic.claude-opus-5-5": { id: "jp.anthropic.claude-opus-5-5", name: "Claude Opus 5.5 (JP)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 4.4, output: 22, cacheRead: 0.22, cacheWrite: 5.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:jp.anthropic.claude-sonnet-4-5-20250929-v1:0": { id: "jp.anthropic.claude-sonnet-4-5-20250929-v1:0", name: "Claude Sonnet 4.5 (JP)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3.3, output: 16.5, cacheRead: 0.33, cacheWrite: 4.125 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:jp.anthropic.claude-sonnet-4-6": { id: "jp.anthropic.claude-sonnet-4-6", name: "Claude Sonnet 4.6 (JP)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3.3, output: 16.5, cacheRead: 0.33, cacheWrite: 4.125 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:jp.anthropic.claude-sonnet-5": { id: "jp.anthropic.claude-sonnet-5", name: "Claude Sonnet 5 (JP)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.22, cacheWrite: 2.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta.llama3-1-70b-instruct-v1:0": { id: "meta.llama3-1-70b-instruct-v1:0", name: "Llama 3.1 70B Instruct", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.72, output: 0.72, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, type: "chat" }, "chat:meta.llama3-1-8b-instruct-v1:0": { id: "meta.llama3-1-8b-instruct-v1:0", name: "Llama 3.1 8B Instruct", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.22, output: 0.22, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, type: "chat" }, "chat:meta.llama3-3-70b-instruct-v1:0": { id: "meta.llama3-3-70b-instruct-v1:0", name: "Llama 3.3 70B Instruct", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.72, output: 0.72, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, type: "chat" }, "chat:meta.llama4-maverick-17b-instruct-v1:0": { id: "meta.llama4-maverick-17b-instruct-v1:0", name: "Llama 4 Maverick 17B Instruct", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.24, output: 0.97, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 8192, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta.llama4-scout-17b-instruct-v1:0": { id: "meta.llama4-scout-17b-instruct-v1:0", name: "Llama 4 Scout 17B Instruct", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.17, output: 0.66, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e7, maxTokens: 8192, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:minimax.minimax-m2": { id: "minimax.minimax-m2", name: "MiniMax-M2", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 204608, maxTokens: 128e3, compat: { supportsStrictMode: true }, type: "chat" }, "chat:minimax.minimax-m2.1": { id: "minimax.minimax-m2.1", name: "MiniMax-M2.1", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 196608, maxTokens: 131072, compat: { supportsStrictMode: true }, type: "chat" }, "chat:minimax.minimax-m2.5": { id: "minimax.minimax-m2.5", name: "MiniMax-M2.5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 196608, maxTokens: 98304, compat: { supportsStrictMode: true }, type: "chat" }, "chat:mistral.devstral-2-123b": { id: "mistral.devstral-2-123b", name: "Devstral 2 123B", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.4, output: 2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 8192, compat: { supportsStrictMode: true }, type: "chat" }, "chat:mistral.magistral-small-2509": { id: "mistral.magistral-small-2509", name: "Magistral Small 1.2", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.5, output: 1.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4e4, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral.ministral-3-14b-instruct": { id: "mistral.ministral-3-14b-instruct", name: "Ministral 14B 3.0", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.2, output: 0.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral.ministral-3-3b-instruct": { id: "mistral.ministral-3-3b-instruct", name: "Ministral 3 3B", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.1, output: 0.1, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 8192, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral.ministral-3-8b-instruct": { id: "mistral.ministral-3-8b-instruct", name: "Ministral 3 8B", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.15, output: 0.15, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral.mistral-large-3-675b-instruct": { id: "mistral.mistral-large-3-675b-instruct", name: "Mistral Large 3", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.5, output: 1.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 8192, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral.pixtral-large-2502-v1:0": { id: "mistral.pixtral-large-2502-v1:0", name: "Pixtral Large (25.02)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral.voxtral-mini-3b-2507": { id: "mistral.voxtral-mini-3b-2507", name: "Voxtral Mini 3B 2507", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.04, output: 0.04, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32768, maxTokens: 4096, compat: { supportsStrictMode: true }, type: "chat" }, "chat:mistral.voxtral-small-24b-2507": { id: "mistral.voxtral-small-24b-2507", name: "Voxtral Small 24B 2507", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.1, output: 0.3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32768, maxTokens: 8192, compat: { supportsStrictMode: true }, type: "chat" }, "chat:moonshot.kimi-k2-thinking": { id: "moonshot.kimi-k2-thinking", name: "Kimi K2 Thinking", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.6, output: 2.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 16e3, compat: { supportsStrictMode: true }, type: "chat" }, "chat:moonshotai.kimi-k2.5": { id: "moonshotai.kimi-k2.5", name: "Kimi K2.5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.6, output: 3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 16384, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:nvidia.nemotron-nano-12b-v2": { id: "nvidia.nemotron-nano-12b-v2", name: "NVIDIA Nemotron Nano 12B v2 VL BF16", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.2, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 8192, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:nvidia.nemotron-nano-3-30b": { id: "nvidia.nemotron-nano-3-30b", name: "NVIDIA Nemotron Nano 3 30B", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.06, output: 0.24, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 8192, compat: { supportsStrictMode: true }, type: "chat" }, "chat:nvidia.nemotron-nano-9b-v2": { id: "nvidia.nemotron-nano-9b-v2", name: "NVIDIA Nemotron Nano 9B v2", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.06, output: 0.23, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 8192, compat: { supportsStrictMode: true }, type: "chat" }, "chat:nvidia.nemotron-super-3-120b": { id: "nvidia.nemotron-super-3-120b", name: "NVIDIA Nemotron 3 Super 120B A12B", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.15, output: 0.65, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { supportsStrictMode: true }, type: "chat" }, "chat:openai.gpt-5.4": { id: "openai.gpt-5.4", name: "GPT-5.4", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.75, output: 16.5, cacheRead: 0.275, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai.gpt-5.5": { id: "openai.gpt-5.5", name: "GPT-5.5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 33, cacheRead: 0.55, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai.gpt-5.6-luna": { id: "openai.gpt-5.6-luna", name: "GPT-5.6 Luna", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.22, output: 1.32, cacheRead: 0.022, cacheWrite: 0.275, tiers: [{ inputTokensAbove: 272e3, input: 0.44, output: 1.98, cacheRead: 0.044, cacheWrite: 0.55 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai.gpt-5.6-sol": { id: "openai.gpt-5.6-sol", name: "GPT-5.6 Sol", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 4.4, output: 22, cacheRead: 0.44, cacheWrite: 5.5, tiers: [{ inputTokensAbove: 272e3, input: 8.8, output: 33, cacheRead: 0.88, cacheWrite: 11 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai.gpt-5.6-terra": { id: "openai.gpt-5.6-terra", name: "GPT-5.6 Terra", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 13.2, cacheRead: 0.22, cacheWrite: 2.75, tiers: [{ inputTokensAbove: 272e3, input: 4.4, output: 19.8, cacheRead: 0.44, cacheWrite: 5.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai.gpt-6-astra": { id: "openai.gpt-6-astra", name: "GPT-6 Astra", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 11, output: 55, cacheRead: 1.1, cacheWrite: 13.75, tiers: [{ inputTokensAbove: 272e3, input: 22, output: 82.5, cacheRead: 2.2, cacheWrite: 27.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai.gpt-6-luna": { id: "openai.gpt-6-luna", name: "GPT-6 Luna", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.11, output: 0.55, cacheRead: 0.011, cacheWrite: 0.1375, tiers: [{ inputTokensAbove: 272e3, input: 0.22, output: 0.825, cacheRead: 0.022, cacheWrite: 0.275 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai.gpt-6-sol": { id: "openai.gpt-6-sol", name: "GPT-6 Sol", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.22, cacheWrite: 2.75, tiers: [{ inputTokensAbove: 272e3, input: 4.4, output: 16.5, cacheRead: 0.44, cacheWrite: 5.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai.gpt-6.1-sol": { id: "openai.gpt-6.1-sol", name: "GPT-6.1 Sol", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.11, cacheWrite: 2.75, tiers: [{ inputTokensAbove: 272e3, input: 4.4, output: 16.5, cacheRead: 0.22, cacheWrite: 5.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai.gpt-6.1-terra": { id: "openai.gpt-6.1-terra", name: "GPT-6.1 Terra", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 1.1, output: 5.5, cacheRead: 0.055, cacheWrite: 1.375, tiers: [{ inputTokensAbove: 272e3, input: 2.2, output: 8.25, cacheRead: 0.11, cacheWrite: 2.75 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai.gpt-oss-120b": { id: "openai.gpt-oss-120b", name: "gpt-oss-120b", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, compat: { supportsStrictMode: true }, type: "chat" }, "chat:openai.gpt-oss-120b-1:0": { id: "openai.gpt-oss-120b-1:0", name: "gpt-oss-120b", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 128e3, compat: { supportsStrictMode: true }, type: "chat" }, "chat:openai.gpt-oss-20b": { id: "openai.gpt-oss-20b", name: "gpt-oss-20b", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.07, output: 0.3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, compat: { supportsStrictMode: true }, type: "chat" }, "chat:openai.gpt-oss-20b-1:0": { id: "openai.gpt-oss-20b-1:0", name: "gpt-oss-20b", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.07, output: 0.3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 128e3, compat: { supportsStrictMode: true }, type: "chat" }, "chat:openai.gpt-oss-safeguard-120b": { id: "openai.gpt-oss-safeguard-120b", name: "GPT OSS Safeguard 120B", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStrictMode: true }, type: "chat" }, "chat:openai.gpt-oss-safeguard-20b": { id: "openai.gpt-oss-safeguard-20b", name: "GPT OSS Safeguard 20B", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.07, output: 0.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStrictMode: true }, type: "chat" }, "chat:qwen.qwen3-235b-a22b-2507-v1:0": { id: "qwen.qwen3-235b-a22b-2507-v1:0", name: "Qwen3 235B-A22B Instruct 2507", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.22, output: 0.88, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { supportsStrictMode: true }, type: "chat" }, "chat:qwen.qwen3-32b-v1:0": { id: "qwen.qwen3-32b-v1:0", name: "Qwen3 32B", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32768, maxTokens: 16384, compat: { supportsStrictMode: true }, type: "chat" }, "chat:qwen.qwen3-coder-30b-a3b-v1:0": { id: "qwen.qwen3-coder-30b-a3b-v1:0", name: "Qwen3-Coder 30B-A3B Instruct", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { supportsStrictMode: true }, type: "chat" }, "chat:qwen.qwen3-coder-480b-a35b-v1:0": { id: "qwen.qwen3-coder-480b-a35b-v1:0", name: "Qwen3-Coder 480B-A35B Instruct", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.45, output: 1.8, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 65536, compat: { supportsStrictMode: true }, type: "chat" }, "chat:qwen.qwen3-coder-next": { id: "qwen.qwen3-coder-next", name: "Qwen3 Coder Next", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.5, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStrictMode: true }, type: "chat" }, "chat:qwen.qwen3-next-80b-a3b": { id: "qwen.qwen3-next-80b-a3b", name: "Qwen3-Next 80B-A3B Instruct", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.15, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262e3, compat: { supportsStrictMode: true }, type: "chat" }, "chat:qwen.qwen3-vl-235b-a22b": { id: "qwen.qwen3-vl-235b-a22b", name: "Qwen3 VL 235B A22B Instruct", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.53, output: 2.66, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us-gov.openai.gpt-oss-120b-1:0": { id: "us-gov.openai.gpt-oss-120b-1:0", name: "gpt-oss-120b (GovCloud)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.18, output: 0.72, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStrictMode: true }, type: "chat" }, "chat:us-gov.openai.gpt-oss-20b-1:0": { id: "us-gov.openai.gpt-oss-20b-1:0", name: "gpt-oss-20b (GovCloud)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.084, output: 0.36, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStrictMode: true }, type: "chat" }, "chat:us.amazon.nova-2-lite-v1:0": { id: "us.amazon.nova-2-lite-v1:0", name: "Nova 2 Lite (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.33, output: 2.75, cacheRead: 0.0825, cacheWrite: 0.33 }, contextWindow: 1e6, maxTokens: 65535, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.amazon.nova-lite-v1:0": { id: "us.amazon.nova-lite-v1:0", name: "Nova Lite (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.06, output: 0.24, cacheRead: 0.015, cacheWrite: 0.06 }, contextWindow: 3e5, maxTokens: 1e4, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.amazon.nova-micro-v1:0": { id: "us.amazon.nova-micro-v1:0", name: "Nova Micro (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.035, output: 0.14, cacheRead: 875e-5, cacheWrite: 0.035 }, contextWindow: 128e3, maxTokens: 1e4, type: "chat" }, "chat:us.amazon.nova-premier-v1:0": { id: "us.amazon.nova-premier-v1:0", name: "Nova Premier (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 12.5, cacheRead: 0.625, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 1e4, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.amazon.nova-pro-v1:0": { id: "us.amazon.nova-pro-v1:0", name: "Nova Pro (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.8, output: 3.2, cacheRead: 0.2, cacheWrite: 0.8 }, contextWindow: 3e5, maxTokens: 1e4, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-fable-5": { id: "us.anthropic.claude-fable-5", name: "Claude Fable 5 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 11, output: 55, cacheRead: 1.1, cacheWrite: 13.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-fable-5-1": { id: "us.anthropic.claude-fable-5-1", name: "Claude Fable 5.1 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 11, output: 55, cacheRead: 0.275, cacheWrite: 13.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-haiku-4-5-20251001-v1:0": { id: "us.anthropic.claude-haiku-4-5-20251001-v1:0", name: "Claude Haiku 4.5 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 1.1, output: 5.5, cacheRead: 0.11, cacheWrite: 1.375 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-haiku-5-5": { id: "us.anthropic.claude-haiku-5-5", name: "Claude Haiku 5.5 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.11, output: 0.55, cacheRead: 0.011, cacheWrite: 0.1375, tiers: [{ inputTokensAbove: 1e5, input: 0.55, output: 2.75, cacheRead: 0.055, cacheWrite: 0.6875 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-opus-4-1-20250805-v1:0": { id: "us.anthropic.claude-opus-4-1-20250805-v1:0", name: "Claude Opus 4.1 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 15, output: 75, cacheRead: 1.5, cacheWrite: 18.75 }, contextWindow: 2e5, maxTokens: 32e3, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-opus-4-5-20251101-v1:0": { id: "us.anthropic.claude-opus-4-5-20251101-v1:0", name: "Claude Opus 4.5 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-opus-4-6-v1": { id: "us.anthropic.claude-opus-4-6-v1", name: "Claude Opus 4.6 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-opus-4-7": { id: "us.anthropic.claude-opus-4-7", name: "Claude Opus 4.7 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-opus-4-8": { id: "us.anthropic.claude-opus-4-8", name: "Claude Opus 4.8 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-opus-5": { id: "us.anthropic.claude-opus-5", name: "Claude Opus 5 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 5.5, output: 27.5, cacheRead: 0.55, cacheWrite: 6.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-opus-5-5": { id: "us.anthropic.claude-opus-5-5", name: "Claude Opus 5.5 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 4.4, output: 22, cacheRead: 0.22, cacheWrite: 5.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-sonnet-4-20250514-v1:0": { id: "us.anthropic.claude-sonnet-4-20250514-v1:0", name: "Claude Sonnet 4 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-sonnet-4-5-20250929-v1:0": { id: "us.anthropic.claude-sonnet-4-5-20250929-v1:0", name: "Claude Sonnet 4.5 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3.3, output: 16.5, cacheRead: 0.33, cacheWrite: 4.125 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-sonnet-4-6": { id: "us.anthropic.claude-sonnet-4-6", name: "Claude Sonnet 4.6 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3.3, output: 16.5, cacheRead: 0.33, cacheWrite: 4.125 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-sonnet-5": { id: "us.anthropic.claude-sonnet-5", name: "Claude Sonnet 5 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.22, cacheWrite: 2.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.anthropic.claude-sonnet-5-5": { id: "us.anthropic.claude-sonnet-5-5", name: "Claude Sonnet 5.5 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.11, cacheWrite: 2.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.meta.llama3-1-70b-instruct-v1:0": { id: "us.meta.llama3-1-70b-instruct-v1:0", name: "Llama 3.1 70B Instruct (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.72, output: 0.72, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, type: "chat" }, "chat:us.meta.llama3-1-8b-instruct-v1:0": { id: "us.meta.llama3-1-8b-instruct-v1:0", name: "Llama 3.1 8B Instruct (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.22, output: 0.22, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, type: "chat" }, "chat:us.meta.llama3-3-70b-instruct-v1:0": { id: "us.meta.llama3-3-70b-instruct-v1:0", name: "Llama 3.3 70B Instruct (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text"], cost: { input: 0.72, output: 0.72, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, type: "chat" }, "chat:us.meta.llama4-maverick-17b-instruct-v1:0": { id: "us.meta.llama4-maverick-17b-instruct-v1:0", name: "Llama 4 Maverick 17B Instruct (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.24, output: 0.97, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 8192, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.meta.llama4-scout-17b-instruct-v1:0": { id: "us.meta.llama4-scout-17b-instruct-v1:0", name: "Llama 4 Scout 17B Instruct (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 0.17, output: 0.66, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e7, maxTokens: 8192, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.mistral.pixtral-large-2502-v1:0": { id: "us.mistral.pixtral-large-2502-v1:0", name: "Pixtral Large (25.02) (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: false, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.moonshotai.kimi-k3": { id: "us.moonshotai.kimi-k3", name: "Kimi K3 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 3.3, output: 16.5, cacheRead: 0.33, cacheWrite: 4.125 }, contextWindow: 1048576, maxTokens: 128e3, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.openai.gpt-5.6-luna": { id: "us.openai.gpt-5.6-luna", name: "GPT-5.6 Luna (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.22, output: 1.32, cacheRead: 0.022, cacheWrite: 0.275, tiers: [{ inputTokensAbove: 272e3, input: 0.44, output: 1.98, cacheRead: 0.044, cacheWrite: 0.55 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.openai.gpt-5.6-sol": { id: "us.openai.gpt-5.6-sol", name: "GPT-5.6 Sol (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 4.4, output: 22, cacheRead: 0.44, cacheWrite: 5.5, tiers: [{ inputTokensAbove: 272e3, input: 8.8, output: 33, cacheRead: 0.88, cacheWrite: 11 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.openai.gpt-5.6-terra": { id: "us.openai.gpt-5.6-terra", name: "GPT-5.6 Terra (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 13.2, cacheRead: 0.22, cacheWrite: 2.75, tiers: [{ inputTokensAbove: 272e3, input: 4.4, output: 19.8, cacheRead: 0.44, cacheWrite: 5.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.openai.gpt-6-astra": { id: "us.openai.gpt-6-astra", name: "GPT-6 Astra (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 11, output: 55, cacheRead: 1.1, cacheWrite: 13.75, tiers: [{ inputTokensAbove: 272e3, input: 22, output: 82.5, cacheRead: 2.2, cacheWrite: 27.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.openai.gpt-6-luna": { id: "us.openai.gpt-6-luna", name: "GPT-6 Luna (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 0.11, output: 0.55, cacheRead: 0.011, cacheWrite: 0.1375, tiers: [{ inputTokensAbove: 272e3, input: 0.22, output: 0.825, cacheRead: 0.022, cacheWrite: 0.275 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.openai.gpt-6-sol": { id: "us.openai.gpt-6-sol", name: "GPT-6 Sol (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.22, cacheWrite: 2.75, tiers: [{ inputTokensAbove: 272e3, input: 4.4, output: 16.5, cacheRead: 0.44, cacheWrite: 5.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.openai.gpt-6.1-sol": { id: "us.openai.gpt-6.1-sol", name: "GPT-6.1 Sol (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 11, cacheRead: 0.11, cacheWrite: 2.75, tiers: [{ inputTokensAbove: 272e3, input: 4.4, output: 16.5, cacheRead: 0.22, cacheWrite: 5.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.openai.gpt-6.1-terra": { id: "us.openai.gpt-6.1-terra", name: "GPT-6.1 Terra (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 1.1, output: 5.5, cacheRead: 0.055, cacheWrite: 1.375, tiers: [{ inputTokensAbove: 272e3, input: 2.2, output: 8.25, cacheRead: 0.11, cacheWrite: 2.75 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsStrictMode: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.writer.palmyra-x4-v1:0": { id: "us.writer.palmyra-x4-v1:0", name: "Palmyra X4 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 2.5, output: 10, cacheRead: 0, cacheWrite: 0 }, contextWindow: 122880, maxTokens: 8192, type: "chat" }, "chat:us.writer.palmyra-x5-v1:0": { id: "us.writer.palmyra-x5-v1:0", name: "Palmyra X5 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.6, output: 6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 104e4, maxTokens: 8192, type: "chat" }, "chat:us.xai.grok-4.6": { id: "us.xai.grok-4.6", name: "Grok 4.6 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 6.6, cacheRead: 0.55, cacheWrite: 0 }, contextWindow: 5e5, maxTokens: 5e5, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.xai.grok-4.7": { id: "us.xai.grok-4.7", name: "Grok 4.7 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 6.6, cacheRead: 0.55, cacheWrite: 0 }, contextWindow: 5e5, maxTokens: 5e5, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:us.zai.glm-5.3": { id: "us.zai.glm-5.3", name: "GLM-5.3 (US)", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 1.848, output: 5.808, cacheRead: 0.3432, cacheWrite: 2.31 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStrictMode: true }, type: "chat" }, "chat:writer.palmyra-x4-v1:0": { id: "writer.palmyra-x4-v1:0", name: "Palmyra X4", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 2.5, output: 10, cacheRead: 0, cacheWrite: 0 }, contextWindow: 122880, maxTokens: 8192, type: "chat" }, "chat:writer.palmyra-x5-v1:0": { id: "writer.palmyra-x5-v1:0", name: "Palmyra X5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.6, output: 6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 104e4, maxTokens: 8192, type: "chat" }, "chat:xai.grok-4.3": { id: "xai.grok-4.3", name: "Grok 4.3", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:xai.grok-4.6": { id: "xai.grok-4.6", name: "Grok 4.6", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text", "image"], cost: { input: 2.2, output: 6.6, cacheRead: 0.55, cacheWrite: 0 }, contextWindow: 5e5, maxTokens: 5e5, compat: { supportsStrictMode: true }, inputLimits: { images: { maxPerMessage: 20, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:zai.glm-4.7": { id: "zai.glm-4.7", name: "GLM-4.7", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.6, output: 2.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 131072, compat: { supportsStrictMode: true }, type: "chat" }, "chat:zai.glm-4.7-flash": { id: "zai.glm-4.7-flash", name: "GLM-4.7-Flash", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 0.07, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 131072, compat: { supportsStrictMode: true }, type: "chat" }, "chat:zai.glm-5": { id: "zai.glm-5", name: "GLM-5", api: "bedrock-converse-stream", provider: "amazon-bedrock", baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com", reasoning: true, input: ["text"], cost: { input: 1, output: 3.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 131072, compat: { supportsStrictMode: true }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/model-catalog.js +function flattenModelCatalog(groups, type) { + return Object.fromEntries(Object.values(groups).flatMap((models3) => Object.values(models3)).filter((model2) => model2.type === type).map((model2) => [model2.id, model2])); +} +function flattenChatModelCatalog(_provider, groups) { + return flattenModelCatalog(groups, "chat"); +} +function flattenImageModelCatalog(_provider, groups) { + return flattenModelCatalog(groups, "image"); +} +function flattenClassifierModelCatalog(_provider, groups) { + return flattenModelCatalog(groups, "classifier"); +} + +// node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.js +var AMAZON_BEDROCK_MODELS = flattenChatModelCatalog("amazon-bedrock", amazon_bedrock_default); +var AMAZON_BEDROCK_IMAGE_MODELS = flattenImageModelCatalog("amazon-bedrock", amazon_bedrock_default); +var AMAZON_BEDROCK_CLASSIFIER_MODELS = flattenClassifierModelCatalog("amazon-bedrock", amazon_bedrock_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/ant-ling.json +var ant_ling_default = { "openai-completions": { "chat:Ling-2.6-1T": { id: "Ling-2.6-1T", name: "Ling 2.6 1T", api: "openai-completions", baseUrl: "https://api.ant-ling.com/v1", provider: "ant-ling", reasoning: false, input: ["text"], cost: { input: 0.06, output: 0.25, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "ant-ling", supportsStrictMode: true, supportsLongCacheRetention: false }, type: "chat" }, "chat:Ling-2.6-flash": { id: "Ling-2.6-flash", name: "Ling 2.6 Flash", api: "openai-completions", baseUrl: "https://api.ant-ling.com/v1", provider: "ant-ling", reasoning: false, input: ["text"], cost: { input: 0.01, output: 0.02, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "ant-ling", supportsStrictMode: true, supportsLongCacheRetention: false }, type: "chat" }, "chat:Ring-2.6-1T": { id: "Ring-2.6-1T", name: "Ring 2.6 1T", api: "openai-completions", baseUrl: "https://api.ant-ling.com/v1", provider: "ant-ling", reasoning: true, input: ["text"], cost: { input: 0.06, output: 0.25, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "ant-ling", supportsStrictMode: true, supportsLongCacheRetention: false }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: "xhigh" }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/ant-ling.models.js +var ANT_LING_MODELS = flattenChatModelCatalog("ant-ling", ant_ling_default); +var ANT_LING_IMAGE_MODELS = flattenImageModelCatalog("ant-ling", ant_ling_default); +var ANT_LING_CLASSIFIER_MODELS = flattenClassifierModelCatalog("ant-ling", ant_ling_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/anthropic.json +var anthropic_default = { "anthropic-messages": { "chat:claude-fable-5": { id: "claude-fable-5", name: "Claude Fable 5", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolChanges: true, supportsStrictTools: true, allowedFallbackModels: [{ provider: "anthropic", model: "claude-opus-4-8", cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 } }, { provider: "anthropic", model: "claude-opus-5", cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 } }] }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-fable-5-1": { id: "claude-fable-5-1", name: "Claude Fable 5.1", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsMidConvoEffort: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolChanges: true, supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-haiku-4-5": { id: "claude-haiku-4-5", name: "Claude Haiku 4.5 (latest)", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 100, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-haiku-4-5-20251001": { id: "claude-haiku-4-5-20251001", name: "Claude Haiku 4.5", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 100, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-haiku-5-5": { id: "claude-haiku-5-5", name: "Claude Haiku 5.5", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 1e5, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoEffort: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolChanges: true, supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-5": { id: "claude-opus-4-5", name: "Claude Opus 4.5 (latest)", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 100, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-5-20251101": { id: "claude-opus-4-5-20251101", name: "Claude Opus 4.5", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 100, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-6": { id: "claude-opus-4-6", name: "Claude Opus 4.6", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { max: "max" }, compat: { forceAdaptiveThinking: true, supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-7": { id: "claude-opus-4-7", name: "Claude Opus 4.7", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-8": { id: "claude-opus-4-8", name: "Claude Opus 4.8", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoSystemMessages: true, supportsMidConvoToolChanges: true, supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-5": { id: "claude-opus-5", name: "Claude Opus 5", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoEffort: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolChanges: true, supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-5-5": { id: "claude-opus-5-5", name: "Claude Opus 5.5", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoEffort: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolChanges: true, supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-4-5": { id: "claude-sonnet-4-5", name: "Claude Sonnet 4.5 (latest)", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 100, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-4-5-20250929": { id: "claude-sonnet-4-5-20250929", name: "Claude Sonnet 4.5", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 2e5, maxTokens: 64e3, compat: { supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 100, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-4-6": { id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { max: "max" }, compat: { forceAdaptiveThinking: true, supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-5": { id: "claude-sonnet-5", name: "Claude Sonnet 5", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-5-5": { id: "claude-sonnet-5-5", name: "Claude Sonnet 5.5", api: "anthropic-messages", provider: "anthropic", baseUrl: "https://api.anthropic.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoEffort: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolChanges: true, supportsStrictTools: true }, promptCache: { short: 300, long: 3600 }, inputLimits: { maxRequestBytes: 33554432, images: { maxPerRequest: 600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/anthropic.models.js +var ANTHROPIC_MODELS = flattenChatModelCatalog("anthropic", anthropic_default); +var ANTHROPIC_IMAGE_MODELS = flattenImageModelCatalog("anthropic", anthropic_default); +var ANTHROPIC_CLASSIFIER_MODELS = flattenClassifierModelCatalog("anthropic", anthropic_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/azure.json +var azure_default = { "azure-openai-responses": { "chat:chat-latest": { id: "chat-latest", name: "Chat Latest", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4": { id: "gpt-4", name: "GPT-4", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: false, input: ["text"], cost: { input: 30, output: 60, cacheRead: 0, cacheWrite: 0 }, contextWindow: 8192, maxTokens: 8192, type: "chat" }, "chat:gpt-4-turbo": { id: "gpt-4-turbo", name: "GPT-4 Turbo", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: false, input: ["text", "image"], cost: { input: 10, output: 30, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4.1": { id: "gpt-4.1", name: "GPT-4.1", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: false, input: ["text", "image"], cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4.1-mini": { id: "gpt-4.1-mini", name: "GPT-4.1 mini", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: false, input: ["text", "image"], cost: { input: 0.4, output: 1.6, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4.1-nano": { id: "gpt-4.1-nano", name: "GPT-4.1 nano", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: false, input: ["text", "image"], cost: { input: 0.1, output: 0.4, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o": { id: "gpt-4o", name: "GPT-4o", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o-2024-05-13": { id: "gpt-4o-2024-05-13", name: "GPT-4o (2024-05-13)", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: false, input: ["text", "image"], cost: { input: 5, output: 15, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o-2024-08-06": { id: "gpt-4o-2024-08-06", name: "GPT-4o (2024-08-06)", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o-2024-11-20": { id: "gpt-4o-2024-11-20", name: "GPT-4o (2024-11-20)", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o-mini": { id: "gpt-4o-mini", name: "GPT-4o mini", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: false, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5": { id: "gpt-5", name: "GPT-5", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-chat-latest": { id: "gpt-5-chat-latest", name: "GPT-5 Chat Latest", api: "azure-openai-responses", baseUrl: "", provider: "azure", reasoning: false, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, thinkingLevelMap: { off: null }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-mini": { id: "gpt-5-mini", name: "GPT-5 Mini", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 0.25, output: 2, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-nano": { id: "gpt-5-nano", name: "GPT-5 Nano", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 0.05, output: 0.4, cacheRead: 5e-3, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-pro": { id: "gpt-5-pro", name: "GPT-5 Pro", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 15, output: 120, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.1": { id: "gpt-5.1", name: "GPT-5.1", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.2": { id: "gpt-5.2", name: "GPT-5.2", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.2-pro": { id: "gpt-5.2-pro", name: "GPT-5.2 Pro", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 21, output: 168, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.3-codex": { id: "gpt-5.3-codex", name: "GPT-5.3 Codex", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.3-codex-spark": { id: "gpt-5.3-codex-spark", name: "GPT-5.3 Codex Spark", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 32e3, thinkingLevelMap: { off: null, xhigh: "xhigh" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4": { id: "gpt-5.4", name: "GPT-5.4", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-mini": { id: "gpt-5.4-mini", name: "GPT-5.4 mini", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-nano": { id: "gpt-5.4-nano", name: "GPT-5.4 nano", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.25, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-pro": { id: "gpt-5.4-pro", name: "GPT-5.4 Pro", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 30, output: 180, cacheRead: 0, cacheWrite: 0 }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.5": { id: "gpt-5.5", name: "GPT-5.5", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.5-pro": { id: "gpt-5.5-pro", name: "GPT-5.5 Pro", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 30, output: 180, cacheRead: 0, cacheWrite: 0 }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", minimal: null, low: null }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-cyber": { id: "gpt-5.6-cyber", name: "GPT-5.6 Cyber", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 12.5, output: 75, cacheRead: 1.25, cacheWrite: 15.625 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-luna": { id: "gpt-5.6-luna", name: "GPT-5.6 Luna", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25 }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-sol": { id: "gpt-5.6-sol", name: "GPT-5.6 Sol", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5 }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-terra": { id: "gpt-5.6-terra", name: "GPT-5.6 Terra", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5 }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-astra": { id: "gpt-6-astra", name: "GPT-6 Astra", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-luna": { id: "gpt-6-luna", name: "GPT-6 Luna", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125 }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-sol": { id: "gpt-6-sol", name: "GPT-6 Sol", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-sol": { id: "gpt-6.1-sol", name: "GPT-6.1 Sol", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5 }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-terra": { id: "gpt-6.1-terra", name: "GPT-6.1 Terra", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25 }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-daybreak-blue-latest": { id: "gpt-daybreak-blue-latest", name: "Daybreak Blue", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5 }, contextWindow: 105e4, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-daybreak-red-latest": { id: "gpt-daybreak-red-latest", name: "Daybreak Red", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 12.5, output: 75, cacheRead: 1.25, cacheWrite: 15.625 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o1": { id: "o1", name: "o1", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 15, output: 60, cacheRead: 7.5, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o1-pro": { id: "o1-pro", name: "o1-pro", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 150, output: 600, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o3": { id: "o3", name: "o3", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o3-mini": { id: "o3-mini", name: "o3-mini", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text"], cost: { input: 1.1, output: 4.4, cacheRead: 0.55, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, type: "chat" }, "chat:o3-pro": { id: "o3-pro", name: "o3-pro", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 20, output: 80, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o4-mini": { id: "o4-mini", name: "o4-mini", api: "azure-openai-responses", provider: "azure", baseUrl: "", reasoning: true, input: ["text", "image"], cost: { input: 1.1, output: 4.4, cacheRead: 0.275, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "openai-completions": { "chat:deepseek-v4-pro": { id: "deepseek-v4-pro", name: "DeepSeek V4 Pro", api: "openai-completions", baseUrl: "", provider: "azure", reasoning: true, input: ["text"], cost: { input: 1.925, output: 3.828, cacheRead: 0.165, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "openai", supportsDeveloperRole: false, supportsMidConvoSystemMessages: true, supportsLongCacheRetention: false }, thinkingLevelMap: { minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/azure.models.js +var AZURE_MODELS = flattenChatModelCatalog("azure", azure_default); +var AZURE_IMAGE_MODELS = flattenImageModelCatalog("azure", azure_default); +var AZURE_CLASSIFIER_MODELS = flattenClassifierModelCatalog("azure", azure_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/baseten.json +var baseten_default = { "openai-completions": { "chat:deepseek-ai/DeepSeek-V4-Flash-0731": { id: "deepseek-ai/DeepSeek-V4-Flash-0731", name: "DeepSeek V4 Flash 0731", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text"], cost: { input: 0.13, output: 0.26, cacheRead: 0.028, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 384e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4-Pro-0813": { id: "deepseek-ai/DeepSeek-V4-Pro-0813", name: "DeepSeek V4 Pro 0813", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text"], cost: { input: 1.32, output: 3.96, cacheRead: 0.132, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4.1-Flash": { id: "deepseek-ai/DeepSeek-V4.1-Flash", name: "DeepSeek V4.1 Flash", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 7e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 32768, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4.1-Flash-1017": { id: "deepseek-ai/DeepSeek-V4.1-Flash-1017", name: "DeepSeek V4.1 Flash 1017", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 7e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4.1-Flash-1017-Fast": { id: "deepseek-ai/DeepSeek-V4.1-Flash-1017-Fast", name: "DeepSeek V4.1 Flash 1017 Fast", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.6, output: 2.4, cacheRead: 0.014, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4.1-Flash-Fast": { id: "deepseek-ai/DeepSeek-V4.1-Flash-Fast", name: "DeepSeek V4.1 Flash Fast", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.6, output: 2.4, cacheRead: 0.014, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 32768, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/Kimi-K3": { id: "moonshotai/Kimi-K3", name: "Kimi K3", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B": { id: "nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B", name: "Nemotron Ultra", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text"], cost: { input: 0.6, output: 2.4, cacheRead: 0.12, cacheWrite: 0 }, contextWindow: 202800, maxTokens: 202800, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, type: "chat" }, "chat:openai/gpt-oss-120b": { id: "openai/gpt-oss-120b", name: "OpenAI GPT 120B", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text"], cost: { input: 0.1, output: 0.5, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 128072, maxTokens: 128072, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, type: "chat" }, "chat:zai-org/GLM-5.2": { id: "zai-org/GLM-5.2", name: "GLM 5.2", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.14, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "baseten", chatTemplateArgs: { enable_thinking: { $var: "thinking.enabled" } } }, type: "chat" }, "chat:zai-org/GLM-5.2-Fast": { id: "zai-org/GLM-5.2-Fast", name: "GLM 5.2 Fast", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text"], cost: { input: 2.1, output: 6.6, cacheRead: 0.21, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "baseten", chatTemplateArgs: { enable_thinking: { $var: "thinking.enabled" } } }, type: "chat" }, "chat:zai-org/GLM-5.3": { id: "zai-org/GLM-5.3", name: "GLM 5.3", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.4, output: 4.4, cacheRead: 0.14, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:zai-org/GLM-5.3-Fast": { id: "zai-org/GLM-5.3-Fast", name: "GLM 5.3 Fast", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 2.1, output: 6.6, cacheRead: 0.21, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:zai-org/GLM-5.3-Flash": { id: "zai-org/GLM-5.3-Flash", name: "GLM 5.3 Flash", api: "openai-completions", provider: "baseten", baseUrl: "https://inference.baseten.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, supportsUsageInStreaming: true, maxTokensField: "max_tokens", sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, thinkingFormat: "openai" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/baseten.models.js +var BASETEN_MODELS = flattenChatModelCatalog("baseten", baseten_default); +var BASETEN_IMAGE_MODELS = flattenImageModelCatalog("baseten", baseten_default); +var BASETEN_CLASSIFIER_MODELS = flattenClassifierModelCatalog("baseten", baseten_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/cerebras.json +var cerebras_default = { "openai-completions": { "chat:gpt-oss-120b": { id: "gpt-oss-120b", name: "GPT OSS 120B", api: "openai-completions", provider: "cerebras", baseUrl: "https://api.cerebras.ai/v1", reasoning: true, input: ["text"], cost: { input: 0.35, output: 0.75, cacheRead: 0.35, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 40960, compat: { supportsStore: false, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:qwen-3.8-27b": { id: "qwen-3.8-27b", name: "Qwen3.8 27B", api: "openai-completions", provider: "cerebras", baseUrl: "https://api.cerebras.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.99, output: 1.49, cacheRead: 0.99, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 40960, compat: { supportsStore: false, supportsDeveloperRole: false }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/cerebras.models.js +var CEREBRAS_MODELS = flattenChatModelCatalog("cerebras", cerebras_default); +var CEREBRAS_IMAGE_MODELS = flattenImageModelCatalog("cerebras", cerebras_default); +var CEREBRAS_CLASSIFIER_MODELS = flattenClassifierModelCatalog("cerebras", cerebras_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +var cloudflare_ai_gateway_default = { "anthropic-messages": { "chat:claude-fable-5": { id: "claude-fable-5", name: "Claude Fable 5", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { sendSessionAffinityHeaders: true, forceAdaptiveThinking: true }, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-fable-5-1": { id: "claude-fable-5-1", name: "Claude Fable 5.1", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { sendSessionAffinityHeaders: true, forceAdaptiveThinking: true }, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-haiku-4-5": { id: "claude-haiku-4-5", name: "Claude Haiku 4.5 (latest)", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, contextWindow: 2e5, maxTokens: 64e3, compat: { sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-haiku-5-5": { id: "claude-haiku-5-5", name: "Claude Haiku 5.5", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 1e5, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { sendSessionAffinityHeaders: true, forceAdaptiveThinking: true, supportsTemperature: false }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-5": { id: "claude-opus-4-5", name: "Claude Opus 4.5 (latest)", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 2e5, maxTokens: 64e3, compat: { sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-6": { id: "claude-opus-4-6", name: "Claude Opus 4.6", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { sendSessionAffinityHeaders: true, forceAdaptiveThinking: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-7": { id: "claude-opus-4-7", name: "Claude Opus 4.7", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { sendSessionAffinityHeaders: true, forceAdaptiveThinking: true, supportsTemperature: false }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-8": { id: "claude-opus-4-8", name: "Claude Opus 4.8", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { sendSessionAffinityHeaders: true, forceAdaptiveThinking: true, supportsTemperature: false }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-5": { id: "claude-opus-5", name: "Claude Opus 5", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { sendSessionAffinityHeaders: true, forceAdaptiveThinking: true, supportsTemperature: false }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-5-5": { id: "claude-opus-5-5", name: "Claude Opus 5.5", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { sendSessionAffinityHeaders: true, forceAdaptiveThinking: true, supportsTemperature: false }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-4-5": { id: "claude-sonnet-4-5", name: "Claude Sonnet 4.5 (latest)", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 2e5, maxTokens: 64e3, compat: { sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-4-6": { id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { sendSessionAffinityHeaders: true, forceAdaptiveThinking: true }, thinkingLevelMap: { max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-5": { id: "claude-sonnet-5", name: "Claude Sonnet 5", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { sendSessionAffinityHeaders: true, forceAdaptiveThinking: true }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-5-5": { id: "claude-sonnet-5-5", name: "Claude Sonnet 5.5", api: "anthropic-messages", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { sendSessionAffinityHeaders: true, forceAdaptiveThinking: true, supportsTemperature: false }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "openai-completions": { "chat:workers-ai/@cf/deepseek-ai/deepseek-v4-flash-0731": { id: "workers-ai/@cf/deepseek-ai/deepseek-v4-flash-0731", name: "DeepSeek V4 Flash 0731", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text"], cost: { input: 0.44, output: 1.32, cacheRead: 0.014, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", max: "max" }, type: "chat" }, "chat:workers-ai/@cf/deepseek-ai/deepseek-v4-pro-0813": { id: "workers-ai/@cf/deepseek-ai/deepseek-v4-pro-0813", name: "DeepSeek V4 Pro 0813", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text"], cost: { input: 1.32, output: 3.96, cacheRead: 0.044, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", max: "max" }, type: "chat" }, "chat:workers-ai/@cf/deepseek-ai/deepseek-v4.1-flash-1017": { id: "workers-ai/@cf/deepseek-ai/deepseek-v4.1-flash-1017", name: "DeepSeek V4.1 Flash 1017", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:workers-ai/@cf/google/gemma-4-26b-a4b-it": { id: "workers-ai/@cf/google/gemma-4-26b-a4b-it", name: "Gemma 4 26B A4B IT", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.3, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 16384, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:workers-ai/@cf/ibm-granite/granite-4.0-h-micro": { id: "workers-ai/@cf/ibm-granite/granite-4.0-h-micro", name: "Granite 4.0 H Micro", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: false, input: ["text"], cost: { input: 0.017, output: 0.112, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131e3, maxTokens: 131e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:workers-ai/@cf/meta/llama-3.3-70b-instruct-fp8-fast": { id: "workers-ai/@cf/meta/llama-3.3-70b-instruct-fp8-fast", name: "Llama 3.3 70B Instruct fp8 Fast", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: false, input: ["text"], cost: { input: 0.293, output: 2.253, cacheRead: 0, cacheWrite: 0 }, contextWindow: 24e3, maxTokens: 24e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:workers-ai/@cf/meta/llama-4-scout-17b-16e-instruct": { id: "workers-ai/@cf/meta/llama-4-scout-17b-16e-instruct", name: "Llama 4 Scout 17B 16E Instruct", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: false, input: ["text", "image"], cost: { input: 0.27, output: 0.85, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131e3, maxTokens: 16384, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:workers-ai/@cf/mistralai/mistral-small-3.1-24b-instruct": { id: "workers-ai/@cf/mistralai/mistral-small-3.1-24b-instruct", name: "Mistral Small 3.1 24B Instruct", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: false, input: ["text", "image"], cost: { input: 0.351, output: 0.555, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 128e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:workers-ai/@cf/moonshotai/kimi-k2.6": { id: "workers-ai/@cf/moonshotai/kimi-k2.6", name: "Kimi K2.6", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.16, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:workers-ai/@cf/moonshotai/kimi-k2.7-code": { id: "workers-ai/@cf/moonshotai/kimi-k2.7-code", name: "Kimi K2.7 Code", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.19, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:workers-ai/@cf/nvidia/nemotron-3-120b-a12b": { id: "workers-ai/@cf/nvidia/nemotron-3-120b-a12b", name: "Nemotron 3 Super 120B", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text"], cost: { input: 0.5, output: 1.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 256e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:workers-ai/@cf/openai/gpt-oss-120b": { id: "workers-ai/@cf/openai/gpt-oss-120b", name: "GPT OSS 120B", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text"], cost: { input: 0.35, output: 0.75, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:workers-ai/@cf/openai/gpt-oss-20b": { id: "workers-ai/@cf/openai/gpt-oss-20b", name: "GPT OSS 20B", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text"], cost: { input: 0.2, output: 0.3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:workers-ai/@cf/qwen/qwen3-30b-a3b-fp8": { id: "workers-ai/@cf/qwen/qwen3-30b-a3b-fp8", name: "Qwen3 30B A3b fp8", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text"], cost: { input: 0.0509, output: 0.335, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32768, maxTokens: 32768, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:workers-ai/@cf/qwen/qwen3.8-27b": { id: "workers-ai/@cf/qwen/qwen3.8-27b", name: "Qwen3.8 27B", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text", "image"], cost: { input: 0.45, output: 3.2, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:workers-ai/@cf/zai-org/glm-4.7-flash": { id: "workers-ai/@cf/zai-org/glm-4.7-flash", name: "GLM-4.7-Flash", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text"], cost: { input: 0.0605, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:workers-ai/@cf/zai-org/glm-5.2": { id: "workers-ai/@cf/zai-org/glm-5.2", name: "Glm 5.2", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:workers-ai/@cf/zai-org/glm-5.3": { id: "workers-ai/@cf/zai-org/glm-5.3", name: "Glm 5.3", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:workers-ai/@cf/zai-org/glm-5.3-flash": { id: "workers-ai/@cf/zai-org/glm-5.3-flash", name: "Glm 5.3 Flash", api: "openai-completions", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/compat", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "openai-responses": { "chat:gpt-4.1": { id: "gpt-4.1", name: "GPT-4.1", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: false, input: ["text", "image"], cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, compat: { supportsStrictMode: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4.1-mini": { id: "gpt-4.1-mini", name: "GPT-4.1 mini", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: false, input: ["text", "image"], cost: { input: 0.4, output: 1.6, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, compat: { supportsStrictMode: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4.1-nano": { id: "gpt-4.1-nano", name: "GPT-4.1 nano", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: false, input: ["text", "image"], cost: { input: 0.1, output: 0.4, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 32768, compat: { supportsStrictMode: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o": { id: "gpt-4o", name: "GPT-4o", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: false, input: ["text", "image"], cost: { input: 1.25, output: 5, cacheRead: 0.625, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStrictMode: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o-mini": { id: "gpt-4o-mini", name: "GPT-4o mini", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: false, input: ["text", "image"], cost: { input: 0.075, output: 0.3, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStrictMode: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5": { id: "gpt-5", name: "GPT-5", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-mini": { id: "gpt-5-mini", name: "GPT-5 Mini", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 0.25, output: 2, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-nano": { id: "gpt-5-nano", name: "GPT-5 Nano", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 0.05, output: 0.4, cacheRead: 5e-3, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.1": { id: "gpt-5.1", name: "GPT-5.1", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4": { id: "gpt-5.4", name: "GPT-5.4", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-mini": { id: "gpt-5.4-mini", name: "GPT-5.4 mini", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-nano": { id: "gpt-5.4-nano", name: "GPT-5.4 nano", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.25, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-pro": { id: "gpt-5.4-pro", name: "GPT-5.4 Pro", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 30, output: 180, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.5": { id: "gpt-5.5", name: "GPT-5.5", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 30, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.5-pro": { id: "gpt-5.5-pro", name: "GPT-5.5 Pro", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 30, output: 180, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-luna": { id: "gpt-5.6-luna", name: "GPT-5.6 Luna", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 272e3, input: 0.4, output: 1.8, cacheRead: 0.04, cacheWrite: 0.5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-sol": { id: "gpt-5.6-sol", name: "GPT-5.6 Sol", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-terra": { id: "gpt-5.6-terra", name: "GPT-5.6 Terra", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-astra": { id: "gpt-6-astra", name: "GPT-6 Astra", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5, tiers: [{ inputTokensAbove: 272e3, input: 20, output: 75, cacheRead: 2, cacheWrite: 25 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-luna": { id: "gpt-6-luna", name: "GPT-6 Luna", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-sol": { id: "gpt-6-sol", name: "GPT-6 Sol", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-sol": { id: "gpt-6.1-sol", name: "GPT-6.1 Sol", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-terra": { id: "gpt-6.1-terra", name: "GPT-6.1 Terra", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o3": { id: "o3", name: "o3", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o3-mini": { id: "o3-mini", name: "o3-mini", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text"], cost: { input: 1.1, output: 4.4, cacheRead: 0.55, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true }, type: "chat" }, "chat:o4-mini": { id: "o4-mini", name: "o4-mini", api: "openai-responses", provider: "cloudflare-ai-gateway", baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/openai", reasoning: true, input: ["text", "image"], cost: { input: 1.1, output: 4.4, cacheRead: 0.275, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.models.js +var CLOUDFLARE_AI_GATEWAY_MODELS = flattenChatModelCatalog("cloudflare-ai-gateway", cloudflare_ai_gateway_default); +var CLOUDFLARE_AI_GATEWAY_IMAGE_MODELS = flattenImageModelCatalog("cloudflare-ai-gateway", cloudflare_ai_gateway_default); +var CLOUDFLARE_AI_GATEWAY_CLASSIFIER_MODELS = flattenClassifierModelCatalog("cloudflare-ai-gateway", cloudflare_ai_gateway_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.json +var cloudflare_workers_ai_default = { "cloudflare-workers-ai-system-one": { "classifier:@cf/cloudflare/clef": { type: "classifier", id: "@cf/cloudflare/clef", name: "Clef", api: "cloudflare-workers-ai-system-one", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai", input: ["text", "image"], cost: { input: 0.24, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 65536, compat: { imageInput: "images" } }, "classifier:@cf/cloudflare/clef-flash": { type: "classifier", id: "@cf/cloudflare/clef-flash", name: "Clef Flash", api: "cloudflare-workers-ai-system-one", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai", input: ["text", "image"], cost: { input: 0.038, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 24576, compat: { imageInput: "images" } }, "classifier:@cf/cloudflare/clef-omni": { type: "classifier", id: "@cf/cloudflare/clef-omni", name: "Clef Omni", api: "cloudflare-workers-ai-system-one", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai", input: ["text", "image"], cost: { input: 0.15, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 64e3, compat: { imageInput: "images" } }, "classifier:typesafe/jev": { type: "classifier", id: "typesafe/jev", name: "Jev", api: "cloudflare-workers-ai-system-one", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai", input: ["text", "image"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32e3, compat: { imageInput: "assets" } }, "classifier:typesafe/jev-1.14.0": { type: "classifier", id: "typesafe/jev-1.14.0", name: "Jev 1.14", api: "cloudflare-workers-ai-system-one", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai", input: ["text", "image"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32e3, compat: { imageInput: "assets" } } }, "openai-completions": { "chat:@cf/deepseek-ai/deepseek-v4-flash-0731": { id: "@cf/deepseek-ai/deepseek-v4-flash-0731", name: "DeepSeek V4 Flash 0731", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text"], cost: { input: 0.44, output: 1.32, cacheRead: 0.014, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", max: "max" }, type: "chat" }, "chat:@cf/deepseek-ai/deepseek-v4-pro-0813": { id: "@cf/deepseek-ai/deepseek-v4-pro-0813", name: "DeepSeek V4 Pro 0813", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text"], cost: { input: 1.32, output: 3.96, cacheRead: 0.044, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", max: "max" }, type: "chat" }, "chat:@cf/deepseek-ai/deepseek-v4.1-flash-1017": { id: "@cf/deepseek-ai/deepseek-v4.1-flash-1017", name: "DeepSeek V4.1 Flash 1017", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:@cf/google/gemma-4-26b-a4b-it": { id: "@cf/google/gemma-4-26b-a4b-it", name: "Gemma 4 26B A4B IT", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.3, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 16384, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:@cf/ibm-granite/granite-4.0-h-micro": { id: "@cf/ibm-granite/granite-4.0-h-micro", name: "Granite 4.0 H Micro", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: false, input: ["text"], cost: { input: 0.017, output: 0.112, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131e3, maxTokens: 131e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:@cf/meta/llama-3.3-70b-instruct-fp8-fast": { id: "@cf/meta/llama-3.3-70b-instruct-fp8-fast", name: "Llama 3.3 70B Instruct fp8 Fast", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: false, input: ["text"], cost: { input: 0.293, output: 2.253, cacheRead: 0, cacheWrite: 0 }, contextWindow: 24e3, maxTokens: 24e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:@cf/meta/llama-4-scout-17b-16e-instruct": { id: "@cf/meta/llama-4-scout-17b-16e-instruct", name: "Llama 4 Scout 17B 16E Instruct", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: false, input: ["text", "image"], cost: { input: 0.27, output: 0.85, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131e3, maxTokens: 16384, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:@cf/mistralai/mistral-small-3.1-24b-instruct": { id: "@cf/mistralai/mistral-small-3.1-24b-instruct", name: "Mistral Small 3.1 24B Instruct", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: false, input: ["text", "image"], cost: { input: 0.351, output: 0.555, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 128e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:@cf/moonshotai/kimi-k2.6": { id: "@cf/moonshotai/kimi-k2.6", name: "Kimi K2.6", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.16, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:@cf/moonshotai/kimi-k2.7-code": { id: "@cf/moonshotai/kimi-k2.7-code", name: "Kimi K2.7 Code", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.19, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:@cf/nvidia/nemotron-3-120b-a12b": { id: "@cf/nvidia/nemotron-3-120b-a12b", name: "Nemotron 3 Super 120B", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text"], cost: { input: 0.5, output: 1.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 256e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: null }, type: "chat" }, "chat:@cf/openai/gpt-oss-120b": { id: "@cf/openai/gpt-oss-120b", name: "GPT OSS 120B", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text"], cost: { input: 0.35, output: 0.75, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:@cf/openai/gpt-oss-20b": { id: "@cf/openai/gpt-oss-20b", name: "GPT OSS 20B", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text"], cost: { input: 0.2, output: 0.3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:@cf/qwen/qwen3-30b-a3b-fp8": { id: "@cf/qwen/qwen3-30b-a3b-fp8", name: "Qwen3 30B A3b fp8", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text"], cost: { input: 0.0509, output: 0.335, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32768, maxTokens: 32768, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:@cf/qwen/qwen3.8-27b": { id: "@cf/qwen/qwen3.8-27b", name: "Qwen3.8 27B", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.45, output: 3.2, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:@cf/zai-org/glm-4.7-flash": { id: "@cf/zai-org/glm-4.7-flash", name: "GLM-4.7-Flash", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text"], cost: { input: 0.0605, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:@cf/zai-org/glm-5.2": { id: "@cf/zai-org/glm-5.2", name: "Glm 5.2", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:@cf/zai-org/glm-5.3": { id: "@cf/zai-org/glm-5.3", name: "Glm 5.3", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:@cf/zai-org/glm-5.3-flash": { id: "@cf/zai-org/glm-5.3-flash", name: "Glm 5.3 Flash", api: "openai-completions", provider: "cloudflare-workers-ai", baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, supportsLongCacheRetention: false, sendSessionAffinityHeaders: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-workers-ai.models.js +var CLOUDFLARE_WORKERS_AI_MODELS = flattenChatModelCatalog("cloudflare-workers-ai", cloudflare_workers_ai_default); +var CLOUDFLARE_WORKERS_AI_IMAGE_MODELS = flattenImageModelCatalog("cloudflare-workers-ai", cloudflare_workers_ai_default); +var CLOUDFLARE_WORKERS_AI_CLASSIFIER_MODELS = flattenClassifierModelCatalog("cloudflare-workers-ai", cloudflare_workers_ai_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/deepseek.json +var deepseek_default = { "openai-completions": { "chat:deepseek-flash": { id: "deepseek-flash", name: "DeepSeek V4.1 Flash", api: "openai-completions", baseUrl: "https://api.deepseek.com", provider: "deepseek", reasoning: true, thinkingLevelMap: { minimal: null, low: "low", medium: null, high: "high", max: "max" }, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStore: false, supportsDeveloperRole: false, maxTokensField: "max_tokens", requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek", supportsStrictMode: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek-v4-pro": { id: "deepseek-v4-pro", name: "DeepSeek V4 Pro", api: "openai-completions", baseUrl: "https://api.deepseek.com", provider: "deepseek", reasoning: true, input: ["text"], cost: { input: 1.32, output: 3.96, cacheRead: 0.044, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStore: false, supportsDeveloperRole: false, maxTokensField: "max_tokens", requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek", supportsStrictMode: true, supportsMidConvoSystemMessages: true }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", max: "max" }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/deepseek.models.js +var DEEPSEEK_MODELS = flattenChatModelCatalog("deepseek", deepseek_default); +var DEEPSEEK_IMAGE_MODELS = flattenImageModelCatalog("deepseek", deepseek_default); +var DEEPSEEK_CLASSIFIER_MODELS = flattenClassifierModelCatalog("deepseek", deepseek_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +var fireworks_default = { "anthropic-messages": { "chat:accounts/fireworks/models/deepseek-v4p1-flash": { id: "accounts/fireworks/models/deepseek-v4p1-flash", name: "DeepSeek V4.1 Flash", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/models/deepseek-v4p1-flash-1017": { id: "accounts/fireworks/models/deepseek-v4p1-flash-1017", name: "DeepSeek V4.1 Flash 1017", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/models/ember-1": { id: "accounts/fireworks/models/ember-1", name: "Ember-1", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/models/gpt-oss-120b": { id: "accounts/fireworks/models/gpt-oss-120b", name: "GPT OSS 120B", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text"], cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:accounts/fireworks/models/inkling": { id: "accounts/fireworks/models/inkling", name: "Inkling", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 4.05, cacheRead: 0.17, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/models/minimax-m3": { id: "accounts/fireworks/models/minimax-m3", name: "MiniMax-M3", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 512e3, maxTokens: 512e3, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:accounts/fireworks/models/minimax-m3p1-flash": { id: "accounts/fireworks/models/minimax-m3p1-flash", name: "MiniMax-M3.1-Flash", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 512e3, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/models/muse-spark-open": { id: "accounts/fireworks/models/muse-spark-open", name: "Muse Spark Open", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/models/nemotron-3-ultra-nvfp4": { id: "accounts/fireworks/models/nemotron-3-ultra-nvfp4", name: "Nemotron 3 Ultra 550B A55B", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text"], cost: { input: 0.6, output: 2.4, cacheRead: 0.12, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 128e3, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false }, type: "chat" }, "chat:accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b": { id: "accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b", name: "Nemotron 3.5 Lightning 30B A3B", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text"], cost: { input: 0.05, output: 0.2, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false }, type: "chat" }, "chat:accounts/fireworks/models/qwen3p8-2p4t-a95b": { id: "accounts/fireworks/models/qwen3p8-2p4t-a95b", name: "Qwen3.8 2.4T A95B", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text"], cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, type: "chat" }, "chat:accounts/fireworks/models/qwen3p8-max": { id: "accounts/fireworks/models/qwen3p8-max", name: "Qwen3.8 Max", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/routers/deepseek-flash-latest": { id: "accounts/fireworks/routers/deepseek-flash-latest", name: "DeepSeek Flash Latest", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/routers/deepseek-v4p1-flash-1017-spot": { id: "accounts/fireworks/routers/deepseek-v4p1-flash-1017-spot", name: "DeepSeek V4.1 Flash 1017 Spot", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 0.21, output: 0.84, cacheRead: 42e-4, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/routers/deepseek-v4p1-flash-spot": { id: "accounts/fireworks/routers/deepseek-v4p1-flash-spot", name: "DeepSeek V4.1 Flash Spot", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 0.21, output: 0.84, cacheRead: 42e-4, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/routers/kimi-fast-latest": { id: "accounts/fireworks/routers/kimi-fast-latest", name: "Kimi Fast Latest", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 4.5, output: 22.5, cacheRead: 0.45, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/routers/kimi-latest": { id: "accounts/fireworks/routers/kimi-latest", name: "Kimi Latest", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/routers/minimax-latest": { id: "accounts/fireworks/routers/minimax-latest", name: "MiniMax Latest", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 512e3, maxTokens: 512e3, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:accounts/fireworks/routers/qwen-max-latest": { id: "accounts/fireworks/routers/qwen-max-latest", name: "Qwen Max Latest (Qwen3.8 Max)", api: "anthropic-messages", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { allowEmptySignature: true, sendSessionAffinityHeaders: true, supportsEagerToolInputStreaming: false, supportsCacheControlOnTools: false, supportsLongCacheRetention: false, forceAdaptiveThinking: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "openai-completions": { "chat:accounts/fireworks/models/glm-5p3": { id: "accounts/fireworks/models/glm-5p3", name: "GLM 5.3", api: "openai-completions", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1048573, maxTokens: 262144, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, sendSessionAffinityHeaders: true, supportsLongCacheRetention: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:accounts/fireworks/models/glm-5p3-flash": { id: "accounts/fireworks/models/glm-5p3-flash", name: "GLM 5.3 Flash", api: "openai-completions", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048573, maxTokens: 131072, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, sendSessionAffinityHeaders: true, supportsLongCacheRetention: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/models/kimi-k3": { id: "accounts/fireworks/models/kimi-k3", name: "Kimi K3", api: "openai-completions", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference/v1", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "openai", supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/routers/glm-5p3-fast": { id: "accounts/fireworks/routers/glm-5p3-fast", name: "GLM 5.3 Fast", api: "openai-completions", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference/v1", reasoning: true, input: ["text"], cost: { input: 2.1, output: 6.6, cacheRead: 0.39, cacheWrite: 0 }, contextWindow: 1048572, maxTokens: 262144, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, sendSessionAffinityHeaders: true, supportsLongCacheRetention: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:accounts/fireworks/routers/glm-5p3-spot": { id: "accounts/fireworks/routers/glm-5p3-spot", name: "GLM 5.3 Spot", api: "openai-completions", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference/v1", reasoning: true, input: ["text"], cost: { input: 0.98, output: 3.08, cacheRead: 0.182, cacheWrite: 0 }, contextWindow: 1048573, maxTokens: 262144, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, sendSessionAffinityHeaders: true, supportsLongCacheRetention: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:accounts/fireworks/routers/glm-fast-latest": { id: "accounts/fireworks/routers/glm-fast-latest", name: "GLM 5.3 Fast (Latest)", api: "openai-completions", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference/v1", reasoning: true, input: ["text"], cost: { input: 2.1, output: 6.6, cacheRead: 0.39, cacheWrite: 0 }, contextWindow: 1048572, maxTokens: 262144, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, sendSessionAffinityHeaders: true, supportsLongCacheRetention: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:accounts/fireworks/routers/glm-flash-latest": { id: "accounts/fireworks/routers/glm-flash-latest", name: "GLM Flash Latest (GLM 5.3 Flash)", api: "openai-completions", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048573, maxTokens: 131072, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, sendSessionAffinityHeaders: true, supportsLongCacheRetention: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/routers/glm-latest": { id: "accounts/fireworks/routers/glm-latest", name: "GLM Latest", api: "openai-completions", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1048573, maxTokens: 262144, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, sendSessionAffinityHeaders: true, supportsLongCacheRetention: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:accounts/fireworks/routers/kimi-k3-fast": { id: "accounts/fireworks/routers/kimi-k3-fast", name: "Kimi K3 Fast", api: "openai-completions", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference/v1", reasoning: true, input: ["text", "image"], cost: { input: 4.5, output: 22.5, cacheRead: 0.45, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "openai", supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:accounts/fireworks/routers/kimi-k3-spot": { id: "accounts/fireworks/routers/kimi-k3-spot", name: "Kimi K3 Spot", api: "openai-completions", provider: "fireworks", baseUrl: "https://api.fireworks.ai/inference/v1", reasoning: true, input: ["text", "image"], cost: { input: 2.1, output: 10.5, cacheRead: 0.21, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, sendSessionAffinityHeaders: true, supportsLongCacheRetention: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "openai", supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/fireworks.models.js +var FIREWORKS_MODELS = flattenChatModelCatalog("fireworks", fireworks_default); +var FIREWORKS_IMAGE_MODELS = flattenImageModelCatalog("fireworks", fireworks_default); +var FIREWORKS_CLASSIFIER_MODELS = flattenClassifierModelCatalog("fireworks", fireworks_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/github-copilot.json +var github_copilot_default = { "anthropic-messages": { "chat:claude-fable-5": { id: "claude-fable-5", name: "Claude Fable 5", api: "anthropic-messages", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-fable-5.1": { id: "claude-fable-5.1", name: "Claude Fable 5.1", api: "anthropic-messages", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-haiku-4.5": { id: "claude-haiku-4.5", name: "Claude Haiku 4.5 (latest)", api: "anthropic-messages", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, contextWindow: 2e5, maxTokens: 64e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, compat: { supportsEagerToolInputStreaming: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-haiku-5.5": { id: "claude-haiku-5.5", name: "Claude Haiku 5.5", api: "anthropic-messages", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 1e5, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] }, contextWindow: 1e6, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4.8": { id: "claude-opus-4.8", name: "Claude Opus 4.8", api: "anthropic-messages", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 64e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { xhigh: "xhigh", max: "max", minimal: "low" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-5": { id: "claude-opus-5", name: "Claude Opus 5", api: "anthropic-messages", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 64e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { xhigh: "xhigh", max: "max", minimal: "low" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-5.5": { id: "claude-opus-5.5", name: "Claude Opus 5.5", api: "anthropic-messages", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5 }, contextWindow: 1e6, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-4.6": { id: "claude-sonnet-4.6", name: "Claude Sonnet 4.6", api: "anthropic-messages", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 1e6, maxTokens: 32e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { max: "max", minimal: "low" }, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-5": { id: "claude-sonnet-5", name: "Claude Sonnet 5", api: "anthropic-messages", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-5.5": { id: "claude-sonnet-5.5", name: "Claude Sonnet 5.5", api: "anthropic-messages", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "openai-completions": { "chat:gemini-3.8-flash": { id: "gemini-3.8-flash", name: "Gemini 3.8 Flash", api: "openai-completions", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 64e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-4-argon": { id: "gemini-4-argon", name: "Gemini 4 Argon", api: "openai-completions", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k3": { id: "kimi-k3", name: "Kimi K3", api: "openai-completions", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, compat: { supportsStrictMode: true, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "openai-responses": { "chat:gpt-5.3-codex": { id: "gpt-5.3-codex", name: "GPT-5.3 Codex", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-nano": { id: "gpt-5.4-nano", name: "GPT-5.4 nano", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.25, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-luna": { id: "gpt-5.6-luna", name: "GPT-5.6 Luna", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 2e5, input: 0.4, output: 1.8, cacheRead: 0.04, cacheWrite: 0.5 }] }, contextWindow: 105e4, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-sol": { id: "gpt-5.6-sol", name: "GPT-5.6 Sol", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 105e4, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-terra": { id: "gpt-5.6-terra", name: "GPT-5.6 Terra", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-astra": { id: "gpt-6-astra", name: "GPT-6 Astra", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5, tiers: [{ inputTokensAbove: 272e3, input: 20, output: 75, cacheRead: 2, cacheWrite: 25 }] }, contextWindow: 1e6, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-luna": { id: "gpt-6-luna", name: "GPT-6 Luna", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 1e6, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-sol": { id: "gpt-6-sol", name: "GPT-6 Sol", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 1e6, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-sol": { id: "gpt-6.1-sol", name: "GPT-6.1 Sol", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-terra": { id: "gpt-6.1-terra", name: "GPT-6.1 Terra", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-4.5": { id: "grok-4.5", name: "Grok 4.5", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-4.6": { id: "grok-4.6", name: "Grok 4.6", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-4.7": { id: "grok-4.7", name: "Grok 4.7", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mai-code-1.1-flash": { id: "mai-code-1.1-flash", name: "MAI-Code-1.1-Flash", api: "openai-responses", provider: "github-copilot", baseUrl: "https://api.individual.githubcopilot.com", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 128e3, headers: { "User-Agent": "GitHubCopilotChat/0.35.0", "Editor-Version": "vscode/1.107.0", "Editor-Plugin-Version": "copilot-chat/0.35.0", "Copilot-Integration-Id": "vscode-chat" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/github-copilot.models.js +var GITHUB_COPILOT_MODELS = flattenChatModelCatalog("github-copilot", github_copilot_default); +var GITHUB_COPILOT_IMAGE_MODELS = flattenImageModelCatalog("github-copilot", github_copilot_default); +var GITHUB_COPILOT_CLASSIFIER_MODELS = flattenClassifierModelCatalog("github-copilot", github_copilot_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/google.json +var google_default = { "google-generative-ai": { "chat:deep-research-max-preview-04-2026": { id: "deep-research-max-preview-04-2026", name: "Deep Research Max Preview (Apr-21-2026)", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 131072, maxTokens: 65536, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deep-research-preview-04-2026": { id: "deep-research-preview-04-2026", name: "Deep Research Preview (Apr-21-2026)", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 131072, maxTokens: 65536, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-2.5-computer-use-preview-10-2025": { id: "gemini-2.5-computer-use-preview-10-2025", name: "Gemini 2.5 Computer Use Preview 10-2025", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 15, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 128e3, maxTokens: 64e3, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-2.5-flash": { id: "gemini-2.5-flash", name: "Gemini 2.5 Flash", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-2.5-flash-lite": { id: "gemini-2.5-flash-lite", name: "Gemini 2.5 Flash-Lite", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.4, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-2.5-pro": { id: "gemini-2.5-pro", name: "Gemini 2.5 Pro", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0 }] }, contextWindow: 1048576, maxTokens: 65536, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3-flash-preview": { id: "gemini-3-flash-preview", name: "Gemini 3 Flash Preview", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.5, output: 3, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.1-flash-lite": { id: "gemini-3.1-flash-lite", name: "Gemini 3.1 Flash Lite", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.25, output: 1.5, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.1-flash-lite-preview": { id: "gemini-3.1-flash-lite-preview", name: "Gemini 3.1 Flash Lite Preview", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.25, output: 1.5, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.1-pro-preview": { id: "gemini-3.1-pro-preview", name: "Gemini 3.1 Pro Preview", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.1-pro-preview-customtools": { id: "gemini-3.1-pro-preview-customtools", name: "Gemini 3.1 Pro Preview Custom Tools", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.5-flash": { id: "gemini-3.5-flash", name: "Gemini 3.5 Flash", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 1.5, output: 9, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.5-flash-lite": { id: "gemini-3.5-flash-lite", name: "Gemini 3.5 Flash Lite", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.6-flash": { id: "gemini-3.6-flash", name: "Gemini 3.6 Flash", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.7-flash": { id: "gemini-3.7-flash", name: "Gemini 3.7 Flash", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.8-flash": { id: "gemini-3.8-flash", name: "Gemini 3.8 Flash", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-4-argon": { id: "gemini-4-argon", name: "Gemini 4 Argon", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 32768, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-flash-latest": { id: "gemini-flash-latest", name: "Gemini Flash Latest", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 1.5, output: 9, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-flash-lite-latest": { id: "gemini-flash-lite-latest", name: "Gemini Flash-Lite Latest", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.25, output: 1.5, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-pro-latest": { id: "gemini-pro-latest", name: "Gemini Pro Latest", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-robotics-er-2-preview": { id: "gemini-robotics-er-2-preview", name: "Gemini Robotics-ER 2 Preview", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemma-4-26b-a4b-it": { id: "gemma-4-26b-a4b-it", name: "Gemma 4 26B A4B IT", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, thinkingLevelMap: { off: null, minimal: "MINIMAL", low: null, medium: null, high: "HIGH" }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemma-4-31b-it": { id: "gemma-4-31b-it", name: "Gemma 4 31B IT", api: "google-generative-ai", provider: "google", baseUrl: "https://generativelanguage.googleapis.com/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, thinkingLevelMap: { off: null, minimal: "MINIMAL", low: null, medium: null, high: "HIGH" }, inputLimits: { maxRequestBytes: 20971520, images: { maxPerRequest: 3600, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/google.models.js +var GOOGLE_MODELS = flattenChatModelCatalog("google", google_default); +var GOOGLE_IMAGE_MODELS = flattenImageModelCatalog("google", google_default); +var GOOGLE_CLASSIFIER_MODELS = flattenClassifierModelCatalog("google", google_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/google-vertex.json +var google_vertex_default = { "google-vertex": { "chat:gemini-2.5-flash": { id: "gemini-2.5-flash", name: "Gemini 2.5 Flash", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-2.5-flash-lite": { id: "gemini-2.5-flash-lite", name: "Gemini 2.5 Flash-Lite", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.4, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-2.5-pro": { id: "gemini-2.5-pro", name: "Gemini 2.5 Pro", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3-flash-preview": { id: "gemini-3-flash-preview", name: "Gemini 3 Flash Preview", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 0.5, output: 3, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.1-flash-lite": { id: "gemini-3.1-flash-lite", name: "Gemini 3.1 Flash Lite", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 0.25, output: 1.5, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.1-pro-preview": { id: "gemini-3.1-pro-preview", name: "Gemini 3.1 Pro Preview", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.1-pro-preview-customtools": { id: "gemini-3.1-pro-preview-customtools", name: "Gemini 3.1 Pro Preview Custom Tools", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.5-flash": { id: "gemini-3.5-flash", name: "Gemini 3.5 Flash", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 1.5, output: 9, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.5-flash-lite": { id: "gemini-3.5-flash-lite", name: "Gemini 3.5 Flash Lite", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.6-flash": { id: "gemini-3.6-flash", name: "Gemini 3.6 Flash", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.7-flash": { id: "gemini-3.7-flash", name: "Gemini 3.7 Flash", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.8-flash": { id: "gemini-3.8-flash", name: "Gemini 3.8 Flash", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-4-argon": { id: "gemini-4-argon", name: "Gemini 4 Argon", api: "google-vertex", provider: "google-vertex", baseUrl: "https://{location}-aiplatform.googleapis.com", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.models.js +var GOOGLE_VERTEX_MODELS = flattenChatModelCatalog("google-vertex", google_vertex_default); +var GOOGLE_VERTEX_IMAGE_MODELS = flattenImageModelCatalog("google-vertex", google_vertex_default); +var GOOGLE_VERTEX_CLASSIFIER_MODELS = flattenClassifierModelCatalog("google-vertex", google_vertex_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/groq.json +var groq_default = { "openai-completions": { "chat:llama-3.1-8b-instant": { id: "llama-3.1-8b-instant", name: "Llama 3.1 8B", api: "openai-completions", provider: "groq", baseUrl: "https://api.groq.com/openai/v1", reasoning: false, input: ["text"], cost: { input: 0.05, output: 0.08, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, compat: { supportsStrictMode: true }, type: "chat" }, "chat:llama-3.3-70b-versatile": { id: "llama-3.3-70b-versatile", name: "Llama 3.3 70B", api: "openai-completions", provider: "groq", baseUrl: "https://api.groq.com/openai/v1", reasoning: false, input: ["text"], cost: { input: 0.59, output: 0.79, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsStrictMode: true }, type: "chat" }, "chat:openai/gpt-oss-120b": { id: "openai/gpt-oss-120b", name: "GPT OSS 120B", api: "openai-completions", provider: "groq", baseUrl: "https://api.groq.com/openai/v1", reasoning: true, input: ["text"], cost: { input: 0.15, output: 0.6, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 65536, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:openai/gpt-oss-20b": { id: "openai/gpt-oss-20b", name: "GPT OSS 20B", api: "openai-completions", provider: "groq", baseUrl: "https://api.groq.com/openai/v1", reasoning: true, input: ["text"], cost: { input: 0.075, output: 0.3, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 65536, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:openai/gpt-oss-safeguard-20b": { id: "openai/gpt-oss-safeguard-20b", name: "Safety GPT OSS 20B", api: "openai-completions", provider: "groq", baseUrl: "https://api.groq.com/openai/v1", reasoning: true, input: ["text"], cost: { input: 0.075, output: 0.3, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 65536, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:qwen/qwen3.6-27b": { id: "qwen/qwen3.6-27b", name: "Qwen3.6 27B", api: "openai-completions", provider: "groq", baseUrl: "https://api.groq.com/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.6, output: 3, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "default", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen/qwen3.8-27b": { id: "qwen/qwen3.8-27b", name: "Qwen3.8 27B", api: "openai-completions", provider: "groq", baseUrl: "https://api.groq.com/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.8, output: 4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, compat: { supportsStrictMode: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/groq.models.js +var GROQ_MODELS = flattenChatModelCatalog("groq", groq_default); +var GROQ_IMAGE_MODELS = flattenImageModelCatalog("groq", groq_default); +var GROQ_CLASSIFIER_MODELS = flattenClassifierModelCatalog("groq", groq_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +var huggingface_default = { "openai-completions": { "chat:deepseek-ai/DeepSeek-R1": { id: "deepseek-ai/DeepSeek-R1", name: "DeepSeek-R1", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.7, output: 2.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 64e3, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:deepseek-ai/DeepSeek-R1-0528": { id: "deepseek-ai/DeepSeek-R1-0528", name: "DeepSeek-R1-0528", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 3, output: 5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 163840, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V3": { id: "deepseek-ai/DeepSeek-V3", name: "DeepSeek-V3", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 0.4, output: 1.3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 64e3, maxTokens: 8192, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V3-0324": { id: "deepseek-ai/DeepSeek-V3-0324", name: "DeepSeek V3 0324", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 0.27, output: 1.12, cacheRead: 0, cacheWrite: 0 }, contextWindow: 163840, maxTokens: 163840, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V3.1": { id: "deepseek-ai/DeepSeek-V3.1", name: "DeepSeek-V3.1", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.27, output: 1, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 8192, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V3.2": { id: "deepseek-ai/DeepSeek-V3.2", name: "DeepSeek-V3.2", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.28, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 163840, maxTokens: 65536, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4-Flash": { id: "deepseek-ai/DeepSeek-V4-Flash", name: "DeepSeek V4 Flash", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.14, output: 0.28, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 384e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4-Flash-0731": { id: "deepseek-ai/DeepSeek-V4-Flash-0731", name: "DeepSeek V4 Flash 0731", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.14, output: 0.28, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 384e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4-Flash-Vision-Exp": { id: "deepseek-ai/DeepSeek-V4-Flash-Vision-Exp", name: "DeepSeek V4 Flash Vision Exp", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.44, output: 1.32, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 384e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4-Pro": { id: "deepseek-ai/DeepSeek-V4-Pro", name: "DeepSeek V4 Pro", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.435, output: 0.87, cacheRead: 3625e-6, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 393216, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4-Pro-0813": { id: "deepseek-ai/DeepSeek-V4-Pro-0813", name: "DeepSeek V4 Pro 0813", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 1.32, output: 3.96, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4.1-Flash": { id: "deepseek-ai/DeepSeek-V4.1-Flash", name: "DeepSeek V4.1 Flash", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 384e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4.1-Flash-1017": { id: "deepseek-ai/DeepSeek-V4.1-Flash-1017", name: "DeepSeek V4.1 Flash 1017", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 384e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemma-3-12b-it": { id: "google/gemma-3-12b-it", name: "Gemma 3 12B IT", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text", "image"], cost: { input: 0.05, output: 0.15, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemma-3-27b-it": { id: "google/gemma-3-27b-it", name: "Gemma 3 27B IT", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text", "image"], cost: { input: 0.08, output: 0.16, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemma-3-4b-it": { id: "google/gemma-3-4b-it", name: "Gemma 3 4B IT", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text", "image"], cost: { input: 0.05, output: 0.1, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemma-4-26B-A4B-it": { id: "google/gemma-4-26B-A4B-it", name: "Gemma 4 26B A4B IT", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.13, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemma-4-31B-it": { id: "google/gemma-4-31B-it", name: "Gemma 4 31B IT", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.14, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta-llama/Llama-3.1-8B-Instruct": { id: "meta-llama/Llama-3.1-8B-Instruct", name: "Llama-3.1-8B-Instruct", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 0.06, output: 0.06, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 4096, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:meta-llama/Llama-3.3-70B-Instruct": { id: "meta-llama/Llama-3.3-70B-Instruct", name: "Llama-3.3-70B-Instruct", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 0.59, output: 0.79, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 4096, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:MiniMaxAI/MiniMax-M1-80k": { id: "MiniMaxAI/MiniMax-M1-80k", name: "MiniMax M1 80K", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.55, output: 2.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 8e4, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:MiniMaxAI/MiniMax-M2": { id: "MiniMaxAI/MiniMax-M2", name: "MiniMax-M2", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:MiniMaxAI/MiniMax-M2.1": { id: "MiniMaxAI/MiniMax-M2.1", name: "MiniMax-M2.1", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:MiniMaxAI/MiniMax-M2.5": { id: "MiniMaxAI/MiniMax-M2.5", name: "MiniMax-M2.5", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:MiniMaxAI/MiniMax-M2.7": { id: "MiniMaxAI/MiniMax-M2.7", name: "MiniMax-M2.7", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:MiniMaxAI/MiniMax-M3": { id: "MiniMaxAI/MiniMax-M3", name: "MiniMax-M3", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 524288, maxTokens: 512e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:MiniMaxAI/MiniMax-M3.1-Flash": { id: "MiniMaxAI/MiniMax-M3.1-Flash", name: "MiniMax-M3.1-Flash", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 512e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/Kimi-K2-Instruct": { id: "moonshotai/Kimi-K2-Instruct", name: "Kimi-K2-Instruct", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 1, output: 3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:moonshotai/Kimi-K2-Instruct-0905": { id: "moonshotai/Kimi-K2-Instruct-0905", name: "Kimi-K2-Instruct-0905", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 1, output: 3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 16384, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:moonshotai/Kimi-K2-Thinking": { id: "moonshotai/Kimi-K2-Thinking", name: "Kimi-K2-Thinking", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.6, output: 2.5, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:moonshotai/Kimi-K2.5": { id: "moonshotai/Kimi-K2.5", name: "Kimi-K2.5", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.6, output: 3, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/Kimi-K2.6": { id: "moonshotai/Kimi-K2.6", name: "Kimi-K2.6", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.16, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/Kimi-K2.7-Code": { id: "moonshotai/Kimi-K2.7-Code", name: "Kimi K2.7 Code", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/Kimi-K3": { id: "moonshotai/Kimi-K3", name: "Kimi K3", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-oss-120b": { id: "openai/gpt-oss-120b", name: "GPT OSS 120B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.25, output: 0.69, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:openai/gpt-oss-20b": { id: "openai/gpt-oss-20b", name: "GPT OSS 20B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.1, output: 0.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:Qwen/Qwen2.5-Coder-32B-Instruct": { id: "Qwen/Qwen2.5-Coder-32B-Instruct", name: "Qwen2.5-Coder-32B-Instruct", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 0.06, output: 0.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 8192, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:Qwen/Qwen3-235B-A22B": { id: "Qwen/Qwen3-235B-A22B", name: "Qwen3 235B-A22B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.2, output: 0.8, cacheRead: 0, cacheWrite: 0 }, contextWindow: 40960, maxTokens: 16384, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:Qwen/Qwen3-235B-A22B-Instruct-2507": { id: "Qwen/Qwen3-235B-A22B-Instruct-2507", name: "Qwen3 235B-A22B Instruct 2507", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 0.855, output: 2.565, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 16384, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:Qwen/Qwen3-235B-A22B-Thinking-2507": { id: "Qwen/Qwen3-235B-A22B-Thinking-2507", name: "Qwen3-235B-A22B-Thinking-2507", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.3, output: 3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 81920, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:Qwen/Qwen3-30B-A3B": { id: "Qwen/Qwen3-30B-A3B", name: "Qwen3 30B A3B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.12, output: 0.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 40960, maxTokens: 16384, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:Qwen/Qwen3-32B": { id: "Qwen/Qwen3-32B", name: "Qwen3 32B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.29, output: 0.59, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:Qwen/Qwen3-8B": { id: "Qwen/Qwen3-8B", name: "Qwen3 8B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.07, output: 0.18, cacheRead: 0, cacheWrite: 0 }, contextWindow: 40960, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:Qwen/Qwen3-Coder-30B-A3B-Instruct": { id: "Qwen/Qwen3-Coder-30B-A3B-Instruct", name: "Qwen3-Coder 30B-A3B Instruct", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 0.07, output: 0.26, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:Qwen/Qwen3-Coder-480B-A35B-Instruct": { id: "Qwen/Qwen3-Coder-480B-A35B-Instruct", name: "Qwen3-Coder-480B-A35B-Instruct", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 2, output: 2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:Qwen/Qwen3-Coder-Next": { id: "Qwen/Qwen3-Coder-Next", name: "Qwen3-Coder-Next", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 0.2, output: 1.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:Qwen/Qwen3-Next-80B-A3B-Instruct": { id: "Qwen/Qwen3-Next-80B-A3B-Instruct", name: "Qwen3-Next-80B-A3B-Instruct", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text"], cost: { input: 0.25, output: 1, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:Qwen/Qwen3-VL-235B-A22B-Instruct": { id: "Qwen/Qwen3-VL-235B-A22B-Instruct", name: "Qwen3 VL 235B A22B Instruct", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text", "image"], cost: { input: 0.3, output: 1.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:Qwen/Qwen3-VL-235B-A22B-Thinking": { id: "Qwen/Qwen3-VL-235B-A22B-Thinking", name: "Qwen3 VL 235B A22B Thinking", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.98, output: 3.95, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:Qwen/Qwen3-VL-30B-A3B-Instruct": { id: "Qwen/Qwen3-VL-30B-A3B-Instruct", name: "Qwen3 VL 30B A3B Instruct", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: false, input: ["text", "image"], cost: { input: 0.2, output: 0.7, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:Qwen/Qwen3.5-122B-A10B": { id: "Qwen/Qwen3.5-122B-A10B", name: "Qwen3.5 122B-A10B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.4, output: 3.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:Qwen/Qwen3.5-27B": { id: "Qwen/Qwen3.5-27B", name: "Qwen3.5 27B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 2.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:Qwen/Qwen3.5-35B-A3B": { id: "Qwen/Qwen3.5-35B-A3B", name: "Qwen3.5 35B-A3B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.25, output: 2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:Qwen/Qwen3.5-397B-A17B": { id: "Qwen/Qwen3.5-397B-A17B", name: "Qwen3.5-397B-A17B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.6, output: 3.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:Qwen/Qwen3.5-9B": { id: "Qwen/Qwen3.5-9B", name: "Qwen3.5 9B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.17, output: 0.25, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:Qwen/Qwen3.6-27B": { id: "Qwen/Qwen3.6-27B", name: "Qwen3.6 27B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.47, output: 3.19, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:Qwen/Qwen3.6-35B-A3B": { id: "Qwen/Qwen3.6-35B-A3B", name: "Qwen3.6 35B-A3B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.95, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:Qwen/Qwen3.8-2.4T-A95B": { id: "Qwen/Qwen3.8-2.4T-A95B", name: "Qwen3.8 2.4T A95B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 2.5, output: 6.25, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, type: "chat" }, "chat:Qwen/Qwen3.8-27B": { id: "Qwen/Qwen3.8-27B", name: "Qwen3.8 27B", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.4, output: 3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:stepfun-ai/Step-3.5-Flash": { id: "stepfun-ai/Step-3.5-Flash", name: "Step 3.5 Flash", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.1, output: 0.3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:stepfun-ai/Step-3.7-Flash": { id: "stepfun-ai/Step-3.7-Flash", name: "Step 3.7 Flash", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.15, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:tencent/Hy3": { id: "tencent/Hy3", name: "Hy3", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.14, output: 0.58, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 128e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: null }, type: "chat" }, "chat:tencent/Hy4-preview": { id: "tencent/Hy4-preview", name: "Hy4 preview", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.834, output: 2.501, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 64e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, type: "chat" }, "chat:thinkingmachines/Inkling": { id: "thinkingmachines/Inkling", name: "Inkling", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 4.05, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:thinkingmachines/Inkling-Small": { id: "thinkingmachines/Inkling-Small", name: "Inkling Small", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.5, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 524288, maxTokens: 1048576, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:XiaomiMiMo/MiMo-V2.5": { id: "XiaomiMiMo/MiMo-V2.5", name: "MiMo-V2.5", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.4, output: 2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, type: "chat" }, "chat:XiaomiMiMo/MiMo-V2.5-Pro": { id: "XiaomiMiMo/MiMo-V2.5-Pro", name: "MiMo-V2.5-Pro", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 1, output: 3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, type: "chat" }, "chat:zai-org/GLM-4.5-Air": { id: "zai-org/GLM-4.5-Air", name: "GLM-4.5-Air", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.13, output: 0.85, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 98304, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:zai-org/GLM-4.5V": { id: "zai-org/GLM-4.5V", name: "GLM-4.5V", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.6, output: 1.8, cacheRead: 0, cacheWrite: 0 }, contextWindow: 65536, maxTokens: 16384, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:zai-org/GLM-4.6": { id: "zai-org/GLM-4.6", name: "GLM-4.6", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.55, output: 2.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:zai-org/GLM-4.6V-Flash": { id: "zai-org/GLM-4.6V-Flash", name: "GLM-4.6V-Flash", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 0.9, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:zai-org/GLM-4.7": { id: "zai-org/GLM-4.7", name: "GLM-4.7", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0.6, output: 2.2, cacheRead: 0.11, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:zai-org/GLM-4.7-Flash": { id: "zai-org/GLM-4.7-Flash", name: "GLM-4.7-Flash", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 128e3, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:zai-org/GLM-5": { id: "zai-org/GLM-5", name: "GLM-5", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 1, output: 3.2, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:zai-org/GLM-5.1": { id: "zai-org/GLM-5.1", name: "GLM-5.1", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 1, output: 3.2, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:zai-org/GLM-5.2": { id: "zai-org/GLM-5.2", name: "GLM-5.2", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, type: "chat" }, "chat:zai-org/GLM-5.3": { id: "zai-org/GLM-5.3", name: "GLM-5.3", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:zai-org/GLM-5.3-Flash": { id: "zai-org/GLM-5.3-Flash", name: "GLM-5.3-Flash", api: "openai-completions", provider: "huggingface", baseUrl: "https://router.huggingface.co/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsDeveloperRole: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/huggingface.models.js +var HUGGINGFACE_MODELS = flattenChatModelCatalog("huggingface", huggingface_default); +var HUGGINGFACE_IMAGE_MODELS = flattenImageModelCatalog("huggingface", huggingface_default); +var HUGGINGFACE_CLASSIFIER_MODELS = flattenClassifierModelCatalog("huggingface", huggingface_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/kimi-coding.json +var kimi_coding_default = { "openai-completions": { "chat:k3": { id: "k3", name: "Kimi K3", api: "openai-completions", provider: "kimi-coding", baseUrl: "https://api.kimi.com/coding/v1", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: false, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "openai", requiresReasoningContentOnAssistantMessages: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:k3-256k": { id: "k3-256k", name: "Kimi K3-256K", api: "openai-completions", provider: "kimi-coding", baseUrl: "https://api.kimi.com/coding/v1", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { supportsStrictMode: false, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "openai", requiresReasoningContentOnAssistantMessages: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:k3.1-pro": { id: "k3.1-pro", name: "Kimi K3.1 Pro", api: "openai-completions", provider: "kimi-coding", baseUrl: "https://api.kimi.com/coding/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: false, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "openai", requiresReasoningContentOnAssistantMessages: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:k3.1-pro-highspeed": { id: "k3.1-pro-highspeed", name: "Kimi K3.1 Pro Highspeed", api: "openai-completions", provider: "kimi-coding", baseUrl: "https://api.kimi.com/coding/v1", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: false, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "openai", requiresReasoningContentOnAssistantMessages: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-for-coding": { id: "kimi-for-coding", name: "kimi-for-coding", api: "openai-completions", provider: "kimi-coding", baseUrl: "https://api.kimi.com/coding/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.19, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 32768, compat: { supportsStrictMode: false, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "openai", requiresReasoningContentOnAssistantMessages: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-for-coding-highspeed": { id: "kimi-for-coding-highspeed", name: "Kimi For Coding HighSpeed", api: "openai-completions", provider: "kimi-coding", baseUrl: "https://api.kimi.com/coding/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.9, output: 8, cacheRead: 0.38, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsStrictMode: false, supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "deepseek", supportsMidConvoSystemMessages: true }, thinkingLevelMap: { off: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.js +var KIMI_CODING_MODELS = flattenChatModelCatalog("kimi-coding", kimi_coding_default); +var KIMI_CODING_IMAGE_MODELS = flattenImageModelCatalog("kimi-coding", kimi_coding_default); +var KIMI_CODING_CLASSIFIER_MODELS = flattenClassifierModelCatalog("kimi-coding", kimi_coding_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/meta.json +var meta_default = { "openai-responses": { "chat:muse-spark-1.1": { id: "muse-spark-1.1", name: "Muse Spark 1.1", api: "openai-responses", provider: "meta", baseUrl: "https://api.meta.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:muse-spark-1.2": { id: "muse-spark-1.2", name: "Muse Spark 1.2", api: "openai-responses", provider: "meta", baseUrl: "https://api.meta.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:muse-spark-1.2-contributor": { id: "muse-spark-1.2-contributor", name: "Muse Spark 1.2 Contributor", api: "openai-responses", provider: "meta", baseUrl: "https://api.meta.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.2, cacheRead: 2e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:muse-spark-1.3": { id: "muse-spark-1.3", name: "Muse Spark 1.3", api: "openai-responses", provider: "meta", baseUrl: "https://api.meta.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:muse-spark-1.3-contributor": { id: "muse-spark-1.3-contributor", name: "Muse Spark 1.3 Contributor", api: "openai-responses", provider: "meta", baseUrl: "https://api.meta.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.2, cacheRead: 2e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:muse-wonder-1.0": { id: "muse-wonder-1.0", name: "Muse Wonder", api: "openai-responses", provider: "meta", baseUrl: "https://api.meta.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/meta.models.js +var META_MODELS = flattenChatModelCatalog("meta", meta_default); +var META_IMAGE_MODELS = flattenImageModelCatalog("meta", meta_default); +var META_CLASSIFIER_MODELS = flattenClassifierModelCatalog("meta", meta_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/minimax.json +var minimax_default = { "anthropic-messages": { "chat:MiniMax-M2.7": { id: "MiniMax-M2.7", name: "MiniMax-M2.7", api: "anthropic-messages", provider: "minimax", baseUrl: "https://api.minimax.io/anthropic", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0.375 }, contextWindow: 204800, maxTokens: 131072, type: "chat" }, "chat:MiniMax-M2.7-highspeed": { id: "MiniMax-M2.7-highspeed", name: "MiniMax-M2.7-highspeed", api: "anthropic-messages", provider: "minimax", baseUrl: "https://api.minimax.io/anthropic", reasoning: true, input: ["text"], cost: { input: 0.6, output: 2.4, cacheRead: 0.06, cacheWrite: 0.375 }, contextWindow: 204800, maxTokens: 131072, type: "chat" }, "chat:MiniMax-M3": { id: "MiniMax-M3", name: "MiniMax-M3", api: "anthropic-messages", provider: "minimax", baseUrl: "https://api.minimax.io/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0, tiers: [{ inputTokensAbove: 512e3, input: 0.6, output: 2.4, cacheRead: 0.12, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 524288, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:MiniMax-M3.1-Flash": { id: "MiniMax-M3.1-Flash", name: "MiniMax-M3.1-Flash", api: "anthropic-messages", provider: "minimax", baseUrl: "https://api.minimax.io/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 524288, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/minimax.models.js +var MINIMAX_MODELS = flattenChatModelCatalog("minimax", minimax_default); +var MINIMAX_IMAGE_MODELS = flattenImageModelCatalog("minimax", minimax_default); +var MINIMAX_CLASSIFIER_MODELS = flattenClassifierModelCatalog("minimax", minimax_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/minimax-cn.json +var minimax_cn_default = { "anthropic-messages": { "chat:MiniMax-M2.7": { id: "MiniMax-M2.7", name: "MiniMax-M2.7", api: "anthropic-messages", provider: "minimax-cn", baseUrl: "https://api.minimaxi.com/anthropic", reasoning: true, input: ["text"], cost: { input: 0.3137, output: 1.2549, cacheRead: 0.0627, cacheWrite: 0.3922 }, contextWindow: 204800, maxTokens: 131072, type: "chat" }, "chat:MiniMax-M2.7-highspeed": { id: "MiniMax-M2.7-highspeed", name: "MiniMax-M2.7-highspeed", api: "anthropic-messages", provider: "minimax-cn", baseUrl: "https://api.minimaxi.com/anthropic", reasoning: true, input: ["text"], cost: { input: 0.6275, output: 2.5098, cacheRead: 0.0627, cacheWrite: 0.3922 }, contextWindow: 204800, maxTokens: 131072, type: "chat" }, "chat:MiniMax-M3": { id: "MiniMax-M3", name: "MiniMax-M3", api: "anthropic-messages", provider: "minimax-cn", baseUrl: "https://api.minimaxi.com/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.3137, output: 1.2549, cacheRead: 0.0627, cacheWrite: 0, tiers: [{ inputTokensAbove: 512e3, input: 0.6275, output: 2.5098, cacheRead: 0.1255, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 524288, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:MiniMax-M3.1-Flash": { id: "MiniMax-M3.1-Flash", name: "MiniMax-M3.1-Flash", api: "anthropic-messages", provider: "minimax-cn", baseUrl: "https://api.minimaxi.com/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.1494, output: 0.5976, cacheRead: 0.0149, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 524288, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/minimax-cn.models.js +var MINIMAX_CN_MODELS = flattenChatModelCatalog("minimax-cn", minimax_cn_default); +var MINIMAX_CN_IMAGE_MODELS = flattenImageModelCatalog("minimax-cn", minimax_cn_default); +var MINIMAX_CN_CLASSIFIER_MODELS = flattenClassifierModelCatalog("minimax-cn", minimax_cn_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/mistral.json +var mistral_default = { "mistral-conversations": { "chat:codestral-2508": { id: "codestral-2508", name: "Codestral 25.08", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text"], cost: { input: 0.3, output: 0.9, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 8192, type: "chat" }, "chat:codestral-latest": { id: "codestral-latest", name: "Codestral (latest)", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text"], cost: { input: 0.3, output: 0.9, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 4096, type: "chat" }, "chat:deepseek-v4-1-flash-1017": { id: "deepseek-v4-1-flash-1017", name: "DeepSeek V4.1 Flash 1017", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 7e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:devstral-2512": { id: "devstral-2512", name: "Devstral 2", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text"], cost: { input: 0.4, output: 2, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, type: "chat" }, "chat:devstral-latest": { id: "devstral-latest", name: "Devstral 2", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text"], cost: { input: 0.4, output: 2, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, type: "chat" }, "chat:devstral-medium-latest": { id: "devstral-medium-latest", name: "Devstral 2 (latest)", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text"], cost: { input: 0.4, output: 2, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, type: "chat" }, "chat:glm-5-2": { id: "glm-5-2", name: "GLM-5.2", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.14, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:labs-devstral-small-2512": { id: "labs-devstral-small-2512", name: "Devstral Small 2", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 256e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:labs-leanstral-1-5-1": { id: "labs-leanstral-1-5-1", name: "Leanstral 1.5", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:magistral-medium-latest": { id: "magistral-medium-latest", name: "Magistral Medium (latest)", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 5, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 16384, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:ministral-14b-2512": { id: "ministral-14b-2512", name: "Ministral 3 14B", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0.2, output: 0.2, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:ministral-3b-2512": { id: "ministral-3b-2512", name: "Ministral 3 3B", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0.1, output: 0.1, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:ministral-3b-latest": { id: "ministral-3b-latest", name: "Ministral 3B (latest)", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0.1, output: 0.1, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:ministral-8b-2512": { id: "ministral-8b-2512", name: "Ministral 3 8B", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0.15, output: 0.15, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:ministral-8b-latest": { id: "ministral-8b-latest", name: "Ministral 8B (latest)", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0.15, output: 0.15, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-large-2512": { id: "mistral-large-2512", name: "Mistral Large 3", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0.5, output: 1.5, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-large-4": { id: "mistral-large-4", name: "Mistral Large 4", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text", "image"], cost: { input: 0.7, output: 2.1, cacheRead: 0.07, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-large-4-0-8": { id: "mistral-large-4-0-8", name: "Mistral Large 4.0.8", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text", "image"], cost: { input: 0.7, output: 2.1, cacheRead: 0.07, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-large-latest": { id: "mistral-large-latest", name: "Mistral Large (latest)", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0.5, output: 1.5, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-medium-2505": { id: "mistral-medium-2505", name: "Mistral Medium 3", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0.4, output: 2, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-medium-2508": { id: "mistral-medium-2508", name: "Mistral Medium 3.1", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0.4, output: 2, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-medium-2604": { id: "mistral-medium-2604", name: "Mistral Medium 3.5", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text", "image"], cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-medium-3.5": { id: "mistral-medium-3.5", name: "Mistral Medium 3.5", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1.5, output: 7.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-medium-latest": { id: "mistral-medium-latest", name: "Mistral Medium (latest)", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text", "image"], cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-small-2506": { id: "mistral-small-2506", name: "Mistral Small 3.2", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0.1, output: 0.3, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-small-2603": { id: "mistral-small-2603", name: "Mistral Small 4", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-small-latest": { id: "mistral-small-latest", name: "Mistral Small (latest)", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:open-mistral-nemo": { id: "open-mistral-nemo", name: "Open Mistral Nemo", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text"], cost: { input: 0.15, output: 0.15, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 128e3, type: "chat" }, "chat:pixtral-12b": { id: "pixtral-12b", name: "Pixtral 12B", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text", "image"], cost: { input: 0.15, output: 0.15, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:voxtral-small-2507": { id: "voxtral-small-2507", name: "Voxtral Small", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text"], cost: { input: 0.1, output: 0.4, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 32768, maxTokens: 32e3, type: "chat" }, "chat:voxtral-small-latest": { id: "voxtral-small-latest", name: "Voxtral Small (latest)", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: false, input: ["text"], cost: { input: 0.1, output: 0.4, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 32768, maxTokens: 32e3, type: "chat" }, "chat:zai-glm-5-2": { id: "zai-glm-5-2", name: "GLM-5.2", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.14, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:zai-glm-5-3": { id: "zai-glm-5-3", name: "GLM-5.3", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.14, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:zai-glm-5-3-flash": { id: "zai-glm-5-3-flash", name: "GLM-5.3-Flash", api: "mistral-conversations", provider: "mistral", baseUrl: "https://api.mistral.ai", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/mistral.models.js +var MISTRAL_MODELS = flattenChatModelCatalog("mistral", mistral_default); +var MISTRAL_IMAGE_MODELS = flattenImageModelCatalog("mistral", mistral_default); +var MISTRAL_CLASSIFIER_MODELS = flattenClassifierModelCatalog("mistral", mistral_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai.json +var moonshotai_default = { "openai-completions": { "chat:kimi-k2.6": { id: "kimi-k2.6", name: "Kimi K2.6", api: "openai-completions", provider: "moonshotai", baseUrl: "https://api.moonshot.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.16, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "deepseek", supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k2.7-code": { id: "kimi-k2.7-code", name: "Kimi K2.7 Code", api: "openai-completions", provider: "moonshotai", baseUrl: "https://api.moonshot.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.19, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "deepseek", supportsMidConvoSystemMessages: true }, thinkingLevelMap: { off: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k2.7-code-highspeed": { id: "kimi-k2.7-code-highspeed", name: "Kimi K2.7 Code HighSpeed", api: "openai-completions", provider: "moonshotai", baseUrl: "https://api.moonshot.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.9, output: 8, cacheRead: 0.38, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "deepseek", supportsMidConvoSystemMessages: true }, thinkingLevelMap: { off: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k3": { id: "kimi-k3", name: "Kimi K3", api: "openai-completions", provider: "moonshotai", baseUrl: "https://api.moonshot.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "openai", requiresReasoningContentOnAssistantMessages: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k3.1-pro": { id: "kimi-k3.1-pro", name: "Kimi K3.1 Pro", api: "openai-completions", provider: "moonshotai", baseUrl: "https://api.moonshot.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "openai", requiresReasoningContentOnAssistantMessages: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k3.1-pro-highspeed": { id: "kimi-k3.1-pro-highspeed", name: "Kimi K3.1 Pro Highspeed", api: "openai-completions", provider: "moonshotai", baseUrl: "https://api.moonshot.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "openai", requiresReasoningContentOnAssistantMessages: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/moonshotai.models.js +var MOONSHOTAI_MODELS = flattenChatModelCatalog("moonshotai", moonshotai_default); +var MOONSHOTAI_IMAGE_MODELS = flattenImageModelCatalog("moonshotai", moonshotai_default); +var MOONSHOTAI_CLASSIFIER_MODELS = flattenClassifierModelCatalog("moonshotai", moonshotai_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai-cn.json +var moonshotai_cn_default = { "openai-completions": { "chat:kimi-k2.6": { id: "kimi-k2.6", name: "Kimi K2.6", api: "openai-completions", provider: "moonshotai-cn", baseUrl: "https://api.moonshot.cn/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.9711, output: 4.0337, cacheRead: 0.1643, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "deepseek", supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k2.7-code": { id: "kimi-k2.7-code", name: "Kimi K2.7 Code", api: "openai-completions", provider: "moonshotai-cn", baseUrl: "https://api.moonshot.cn/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.9711, output: 4.0337, cacheRead: 0.1942, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "deepseek", supportsMidConvoSystemMessages: true }, thinkingLevelMap: { off: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k2.7-code-highspeed": { id: "kimi-k2.7-code-highspeed", name: "Kimi K2.7 Code HighSpeed", api: "openai-completions", provider: "moonshotai-cn", baseUrl: "https://api.moonshot.cn/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.9421, output: 8.0673, cacheRead: 0.3884, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "deepseek", supportsMidConvoSystemMessages: true }, thinkingLevelMap: { off: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k3": { id: "kimi-k3", name: "Kimi K3", api: "openai-completions", provider: "moonshotai-cn", baseUrl: "https://api.moonshot.cn/v1", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "openai", requiresReasoningContentOnAssistantMessages: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k3.1-pro": { id: "kimi-k3.1-pro", name: "Kimi K3.1 Pro", api: "openai-completions", provider: "moonshotai-cn", baseUrl: "https://api.moonshot.cn/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.9437, output: 10.1671, cacheRead: 0.1944, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "openai", requiresReasoningContentOnAssistantMessages: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k3.1-pro-highspeed": { id: "kimi-k3.1-pro-highspeed", name: "Kimi K3.1 Pro Highspeed", api: "openai-completions", provider: "moonshotai-cn", baseUrl: "https://api.moonshot.cn/v1", reasoning: true, input: ["text", "image"], cost: { input: 3.8874, output: 20.3342, cacheRead: 0.1944, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", supportsStrictMode: false, thinkingFormat: "openai", requiresReasoningContentOnAssistantMessages: true, supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/moonshotai-cn.models.js +var MOONSHOTAI_CN_MODELS = flattenChatModelCatalog("moonshotai-cn", moonshotai_cn_default); +var MOONSHOTAI_CN_IMAGE_MODELS = flattenImageModelCatalog("moonshotai-cn", moonshotai_cn_default); +var MOONSHOTAI_CN_CLASSIFIER_MODELS = flattenClassifierModelCatalog("moonshotai-cn", moonshotai_cn_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +var nvidia_default = { "openai-completions": { "chat:deepseek-ai/deepseek-v4.1-flash": { id: "deepseek-ai/deepseek-v4.1-flash", name: "DeepSeek V4.1 Flash", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/diffusiongemma-26b-a4b-it": { id: "google/diffusiongemma-26b-a4b-it", name: "DiffusionGemma 26B A4B IT", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 25e4, maxTokens: 32768, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemma-3-12b-it": { id: "google/gemma-3-12b-it", name: "Gemma 3 12B IT", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemma-3-4b-it": { id: "google/gemma-3-4b-it", name: "Gemma 3 4B IT", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/llama-3.2-11b-vision-instruct": { id: "meta/llama-3.2-11b-vision-instruct", name: "Llama 3.2 11b Vision Instruct", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/llama-3.2-90b-vision-instruct": { id: "meta/llama-3.2-90b-vision-instruct", name: "Llama-3.2-90B-Vision-Instruct", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/muse-glimmer-30b": { id: "meta/muse-glimmer-30b", name: "Muse Glimmer 30B", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:minimaxai/minimax-m3.1-flash": { id: "minimaxai/minimax-m3.1-flash", name: "MiniMax-M3.1-Flash", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistralai/mistral-7b-instruct-v0.3": { id: "mistralai/mistral-7b-instruct-v0.3", name: "Mistral-7B-Instruct-v0.3", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 65536, maxTokens: 65536, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, type: "chat" }, "chat:moonshotai/kimi-k2.6": { id: "moonshotai/kimi-k2.6", name: "Kimi K2.6", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:nvidia/cosmos-reason2-8b": { id: "nvidia/cosmos-reason2-8b", name: "Cosmos Reason2 8B", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:nvidia/llama-3.1-nemotron-70b-instruct": { id: "nvidia/llama-3.1-nemotron-70b-instruct", name: "Llama 3.1 Nemotron 70B Instruct", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, type: "chat" }, "chat:nvidia/llama-3.1-nemotron-ultra-253b-v1": { id: "nvidia/llama-3.1-nemotron-ultra-253b-v1", name: "Llama 3.1 Nemotron Ultra 253B", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, type: "chat" }, "chat:nvidia/nemotron-3-nano-omni-30b-a3b-reasoning": { id: "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning", name: "Nemotron 3 Nano Omni", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 65536, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:nvidia/nemotron-3-ultra-550b-a55b": { id: "nvidia/nemotron-3-ultra-550b-a55b", name: "Nemotron 3 Ultra 550B A55B", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, type: "chat" }, "chat:nvidia/nemotron-3.5-lightning-30b-a3b": { id: "nvidia/nemotron-3.5-lightning-30b-a3b", name: "Nemotron 3.5 Lightning 30B A3B", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, type: "chat" }, "chat:nvidia/nemotron-3.5-super-vl-120b-a12b": { id: "nvidia/nemotron-3.5-super-vl-120b-a12b", name: "Nemotron 3.5 Super VL 120B A12B", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 8192, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-oss-20b": { id: "openai/gpt-oss-20b", name: "GPT OSS 20B", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, type: "chat" }, "chat:poolside/laguna-xs-2.1": { id: "poolside/laguna-xs-2.1", name: "Laguna XS 2.1", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 16384, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, type: "chat" }, "chat:stepfun-ai/step-5-preview": { id: "stepfun-ai/step-5-preview", name: "Step 5 Preview", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:z-ai/glm-5.3-flash": { id: "z-ai/glm-5.3-flash", name: "GLM-5.3-Flash", api: "openai-completions", provider: "nvidia", baseUrl: "https://integrate.api.nvidia.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, headers: { "NVCF-POLL-SECONDS": "3600" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false, supportsStrictMode: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/nvidia.models.js +var NVIDIA_MODELS = flattenChatModelCatalog("nvidia", nvidia_default); +var NVIDIA_IMAGE_MODELS = flattenImageModelCatalog("nvidia", nvidia_default); +var NVIDIA_CLASSIFIER_MODELS = flattenClassifierModelCatalog("nvidia", nvidia_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +var openai_default = { "openai-decisions": { "classifier:gpt-6-luna": { type: "classifier", id: "gpt-6-luna", name: "GPT-6 Luna", api: "openai-decisions", provider: "openai", baseUrl: "https://api.openai.com/v1", input: ["text", "image"], cost: { input: 0.1, output: 0, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 922e3 } }, "openai-responses": { "chat:chat-latest": { id: "chat-latest", name: "Chat Latest", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4": { id: "gpt-4", name: "GPT-4", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: false, input: ["text"], cost: { input: 30, output: 60, cacheRead: 0, cacheWrite: 0 }, contextWindow: 8192, maxTokens: 8192, compat: { supportsStrictMode: true }, type: "chat" }, "chat:gpt-4-turbo": { id: "gpt-4-turbo", name: "GPT-4 Turbo", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 10, output: 30, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4.1": { id: "gpt-4.1", name: "GPT-4.1", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4.1-mini": { id: "gpt-4.1-mini", name: "GPT-4.1 mini", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 0.4, output: 1.6, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4.1-nano": { id: "gpt-4.1-nano", name: "GPT-4.1 nano", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 0.1, output: 0.4, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o": { id: "gpt-4o", name: "GPT-4o", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o-2024-05-13": { id: "gpt-4o-2024-05-13", name: "GPT-4o (2024-05-13)", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 5, output: 15, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o-2024-08-06": { id: "gpt-4o-2024-08-06", name: "GPT-4o (2024-08-06)", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o-2024-11-20": { id: "gpt-4o-2024-11-20", name: "GPT-4o (2024-11-20)", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-4o-mini": { id: "gpt-4o-mini", name: "GPT-4o mini", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: false, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5": { id: "gpt-5", name: "GPT-5", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-chat-latest": { id: "gpt-5-chat-latest", name: "GPT-5 Chat Latest", api: "openai-responses", baseUrl: "https://api.openai.com/v1", provider: "openai", reasoning: false, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, thinkingLevelMap: { off: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-mini": { id: "gpt-5-mini", name: "GPT-5 Mini", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.25, output: 2, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-nano": { id: "gpt-5-nano", name: "GPT-5 Nano", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.05, output: 0.4, cacheRead: 5e-3, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-pro": { id: "gpt-5-pro", name: "GPT-5 Pro", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 15, output: 120, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.1": { id: "gpt-5.1", name: "GPT-5.1", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.2": { id: "gpt-5.2", name: "GPT-5.2", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.2-pro": { id: "gpt-5.2-pro", name: "GPT-5.2 Pro", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 21, output: 168, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.3-codex": { id: "gpt-5.3-codex", name: "GPT-5.3 Codex", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.3-codex-spark": { id: "gpt-5.3-codex-spark", name: "GPT-5.3 Codex Spark", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 32e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4": { id: "gpt-5.4", name: "GPT-5.4", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 5, output: 22.5, cacheRead: 0.5, cacheWrite: 0 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsMidConvoSystemMessages: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-mini": { id: "gpt-5.4-mini", name: "GPT-5.4 mini", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsMidConvoSystemMessages: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-nano": { id: "gpt-5.4-nano", name: "GPT-5.4 nano", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.25, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-pro": { id: "gpt-5.4-pro", name: "GPT-5.4 Pro", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 30, output: 180, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 60, output: 270, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsMidConvoSystemMessages: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.5": { id: "gpt-5.5", name: "GPT-5.5", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 10, output: 45, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsMidConvoSystemMessages: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.5-pro": { id: "gpt-5.5-pro", name: "GPT-5.5 Pro", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 30, output: 180, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 60, output: 270, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-cyber": { id: "gpt-5.6-cyber", name: "GPT-5.6 Cyber", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 12.5, output: 75, cacheRead: 1.25, cacheWrite: 15.625 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsExplicitPromptCacheMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-luna": { id: "gpt-5.6-luna", name: "GPT-5.6 Luna", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 272e3, input: 0.4, output: 1.8, cacheRead: 0.04, cacheWrite: 0.5 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true, supportsExplicitPromptCacheMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-sol": { id: "gpt-5.6-sol", name: "GPT-5.6 Sol", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true, supportsExplicitPromptCacheMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-terra": { id: "gpt-5.6-terra", name: "GPT-5.6 Terra", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true, supportsExplicitPromptCacheMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-astra": { id: "gpt-6-astra", name: "GPT-6 Astra", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5, tiers: [{ inputTokensAbove: 272e3, input: 20, output: 75, cacheRead: 2, cacheWrite: 25 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true, supportsExplicitPromptCacheMode: true, supportsMidConvoEffort: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-luna": { id: "gpt-6-luna", name: "GPT-6 Luna", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true, supportsExplicitPromptCacheMode: true, supportsMidConvoEffort: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-sol": { id: "gpt-6-sol", name: "GPT-6 Sol", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true, supportsExplicitPromptCacheMode: true, supportsMidConvoEffort: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-sol": { id: "gpt-6.1-sol", name: "GPT-6.1 Sol", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true, supportsExplicitPromptCacheMode: true, supportsMidConvoEffort: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-terra": { id: "gpt-6.1-terra", name: "GPT-6.1 Terra", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true, supportsExplicitPromptCacheMode: true, supportsMidConvoEffort: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-daybreak-blue-latest": { id: "gpt-daybreak-blue-latest", name: "Daybreak Blue", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsExplicitPromptCacheMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-daybreak-red-latest": { id: "gpt-daybreak-red-latest", name: "Daybreak Red", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 12.5, output: 75, cacheRead: 1.25, cacheWrite: 15.625 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsStrictMode: true, supportsExplicitPromptCacheMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o1": { id: "o1", name: "o1", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 15, output: 60, cacheRead: 7.5, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o1-pro": { id: "o1-pro", name: "o1-pro", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 150, output: 600, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o3": { id: "o3", name: "o3", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o3-mini": { id: "o3-mini", name: "o3-mini", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text"], cost: { input: 1.1, output: 4.4, cacheRead: 0.55, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true }, type: "chat" }, "chat:o3-pro": { id: "o3-pro", name: "o3-pro", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 20, output: 80, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:o4-mini": { id: "o4-mini", name: "o4-mini", api: "openai-responses", provider: "openai", baseUrl: "https://api.openai.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.1, output: 4.4, cacheRead: 0.275, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, compat: { supportsStrictMode: true }, inputLimits: { maxRequestBytes: 536870912, images: { maxPerRequest: 1500, resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/openai.models.js +var OPENAI_MODELS = flattenChatModelCatalog("openai", openai_default); +var OPENAI_IMAGE_MODELS = flattenImageModelCatalog("openai", openai_default); +var OPENAI_CLASSIFIER_MODELS = flattenClassifierModelCatalog("openai", openai_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +var openai_codex_default = { "openai-codex-responses": { "chat:gpt-5.6-luna": { id: "gpt-5.6-luna", name: "GPT-5.6 Luna", api: "openai-codex-responses", provider: "openai-codex", baseUrl: "https://chatgpt.com/backend-api", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 272e3, input: 0.4, output: 1.8, cacheRead: 0.04, cacheWrite: 0.5 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max", minimal: "low" }, compat: { supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-sol": { id: "gpt-5.6-sol", name: "GPT-5.6 Sol", api: "openai-codex-responses", provider: "openai-codex", baseUrl: "https://chatgpt.com/backend-api", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max", minimal: "low" }, compat: { supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-terra": { id: "gpt-5.6-terra", name: "GPT-5.6 Terra", api: "openai-codex-responses", provider: "openai-codex", baseUrl: "https://chatgpt.com/backend-api", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max", minimal: "low" }, compat: { supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-astra": { id: "gpt-6-astra", name: "GPT-6 Astra", api: "openai-codex-responses", provider: "openai-codex", baseUrl: "https://chatgpt.com/backend-api", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5, tiers: [{ inputTokensAbove: 272e3, input: 20, output: 75, cacheRead: 2, cacheWrite: 25 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-luna": { id: "gpt-6-luna", name: "GPT-6 Luna", api: "openai-codex-responses", provider: "openai-codex", baseUrl: "https://chatgpt.com/backend-api", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-sol": { id: "gpt-6-sol", name: "GPT-6 Sol", api: "openai-codex-responses", provider: "openai-codex", baseUrl: "https://chatgpt.com/backend-api", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 272e3, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-sol": { id: "gpt-6.1-sol", name: "GPT-6.1 Sol", api: "openai-codex-responses", provider: "openai-codex", baseUrl: "https://chatgpt.com/backend-api", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, contextWindow: 5e5, maxTokens: 128e3, thinkingLevelMap: { off: null, minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-terra": { id: "gpt-6.1-terra", name: "GPT-6.1 Terra", api: "openai-codex-responses", provider: "openai-codex", baseUrl: "https://chatgpt.com/backend-api", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 5e5, maxTokens: 128e3, thinkingLevelMap: { off: "none", minimal: "low", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, compat: { supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js +var OPENAI_CODEX_MODELS = flattenChatModelCatalog("openai-codex", openai_codex_default); +var OPENAI_CODEX_IMAGE_MODELS = flattenImageModelCatalog("openai-codex", openai_codex_default); +var OPENAI_CODEX_CLASSIFIER_MODELS = flattenClassifierModelCatalog("openai-codex", openai_codex_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +var opencode_default = { "anthropic-messages": { "chat:claude-fable-5": { id: "claude-fable-5", name: "Claude Fable 5", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-fable-5-1": { id: "claude-fable-5-1", name: "Claude Fable 5.1", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-haiku-4-5": { id: "claude-haiku-4-5", name: "Claude Haiku 4.5", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-haiku-5-5": { id: "claude-haiku-5-5", name: "Claude Haiku 5.5", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 1e5, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-5": { id: "claude-opus-4-5", name: "Claude Opus 4.5", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-6": { id: "claude-opus-4-6", name: "Claude Opus 4.6", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { max: "max" }, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-7": { id: "claude-opus-4-7", name: "Claude Opus 4.7", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-8": { id: "claude-opus-4-8", name: "Claude Opus 4.8", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-5": { id: "claude-opus-5", name: "Claude Opus 5", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-5-5": { id: "claude-opus-5-5", name: "Claude Opus 5.5", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-4-5": { id: "claude-sonnet-4-5", name: "Claude Sonnet 4.5", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75, tiers: [{ inputTokensAbove: 2e5, input: 6, output: 22.5, cacheRead: 0.6, cacheWrite: 7.5 }] }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-4-6": { id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 1e6, maxTokens: 64e3, thinkingLevelMap: { max: "max" }, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-5": { id: "claude-sonnet-5", name: "Claude Sonnet 5", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-5-5": { id: "claude-sonnet-5-5", name: "Claude Sonnet 5.5", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.5-plus": { id: "qwen3.5-plus", name: "Qwen3.5 Plus", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25 }, contextWindow: 262144, maxTokens: 65536, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.6-plus": { id: "qwen3.6-plus", name: "Qwen3.6 Plus", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.5, output: 3, cacheRead: 0.05, cacheWrite: 0.625 }, contextWindow: 262144, maxTokens: 65536, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.8-flash": { id: "qwen3.8-flash", name: "Qwen3.8 Flash", api: "anthropic-messages", provider: "opencode", baseUrl: "https://opencode.ai/inference/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.47, cacheRead: 0.016, cacheWrite: 0.2 }, contextWindow: 1e6, maxTokens: 131072, compat: { allowEmptySignature: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "google-generative-ai": { "chat:gemini-3-flash": { id: "gemini-3-flash", name: "Gemini 3 Flash", api: "google-generative-ai", provider: "opencode", baseUrl: "https://opencode.ai/inference/google/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.5, output: 3, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.1-pro": { id: "gemini-3.1-pro", name: "Gemini 3.1 Pro Preview", api: "google-generative-ai", provider: "opencode", baseUrl: "https://opencode.ai/inference/google/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.5-flash": { id: "gemini-3.5-flash", name: "Gemini 3.5 Flash", api: "google-generative-ai", provider: "opencode", baseUrl: "https://opencode.ai/inference/google/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 1.5, output: 9, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.5-flash-lite": { id: "gemini-3.5-flash-lite", name: "Gemini 3.5 Flash Lite", api: "google-generative-ai", provider: "opencode", baseUrl: "https://opencode.ai/inference/google/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.6-flash": { id: "gemini-3.6-flash", name: "Gemini 3.6 Flash", api: "google-generative-ai", provider: "opencode", baseUrl: "https://opencode.ai/inference/google/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.7-flash": { id: "gemini-3.7-flash", name: "Gemini 3.7 Flash", api: "google-generative-ai", provider: "opencode", baseUrl: "https://opencode.ai/inference/google/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-3.8-flash": { id: "gemini-3.8-flash", name: "Gemini 3.8 Flash", api: "google-generative-ai", provider: "opencode", baseUrl: "https://opencode.ai/inference/google/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gemini-4-argon": { id: "gemini-4-argon", name: "Gemini 4 Argon", api: "google-generative-ai", provider: "opencode", baseUrl: "https://opencode.ai/inference/google/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "openai-completions": { "chat:beam-free": { id: "beam-free", name: "Beam Free", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, type: "chat" }, "chat:big-pickle": { id: "big-pickle", name: "Big Pickle", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 32e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, type: "chat" }, "chat:deepseek-v4-pro": { id: "deepseek-v4-pro", name: "DeepSeek V4 Pro", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text"], cost: { input: 1.74, output: 3.48, cacheRead: 0.145, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens", supportsLongCacheRetention: false, requiresReasoningContentOnAssistantMessages: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-v4.1-flash": { id: "deepseek-v4.1-flash", name: "DeepSeek V4.1 Flash", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens", supportsLongCacheRetention: false, requiresReasoningContentOnAssistantMessages: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek-v4.1-flash-free": { id: "deepseek-v4.1-flash-free", name: "DeepSeek V4.1 Flash Free", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 32e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens", requiresReasoningContentOnAssistantMessages: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:flint-40b-free": { id: "flint-40b-free", name: "Flint 40B Free", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, type: "chat" }, "chat:glm-5": { id: "glm-5", name: "GLM-5", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text"], cost: { input: 1, output: 3.2, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, type: "chat" }, "chat:glm-5.1": { id: "glm-5.1", name: "GLM-5.1", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, type: "chat" }, "chat:glm-5.2": { id: "glm-5.2", name: "GLM-5.2", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:glm-5.3": { id: "glm-5.3", name: "GLM-5.3", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:glm-5.3-flash": { id: "glm-5.3-flash", name: "GLM-5.3-Flash", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:glm-5.3-flash-free": { id: "glm-5.3-flash-free", name: "GLM-5.3-Flash Free", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 32e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k2.5": { id: "kimi-k2.5", name: "Kimi K2.5", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.6, output: 3, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens", supportsLongCacheRetention: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k2.6": { id: "kimi-k2.6", name: "Kimi K2.6", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.16, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, thinkingFormat: "deepseek", supportsReasoningEffort: false, maxTokensField: "max_tokens", supportsLongCacheRetention: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k2.7-code": { id: "kimi-k2.7-code", name: "Kimi K2.7 Code", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.19, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k3": { id: "kimi-k3", name: "Kimi K3", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens", supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mimo-v2.6-flash-free": { id: "mimo-v2.6-flash-free", name: "MiMo-V2.6-Flash Free", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 32e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:minimax-m2.5": { id: "minimax-m2.5", name: "MiniMax-M2.5", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, type: "chat" }, "chat:minimax-m2.7": { id: "minimax-m2.7", name: "MiniMax-M2.7", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens", supportsLongCacheRetention: false }, type: "chat" }, "chat:minimax-m3": { id: "minimax-m3", name: "MiniMax-M3", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 512e3, maxTokens: 128e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral-large-4": { id: "mistral-large-4", name: "Mistral Large 4", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.68, output: 2.09, cacheRead: 0.07, cacheWrite: 0 }, contextWindow: 524288, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:nemotron-3.5-lightning-free": { id: "nemotron-3.5-lightning-free", name: "Nemotron 3.5 Lightning Free", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, type: "chat" }, "chat:nemotron-3.5-super-vl-free": { id: "nemotron-3.5-super-vl-free", name: "Nemotron 3.5 Super VL Free", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.8-max": { id: "qwen3.8-max", name: "Qwen3.8 Max", api: "openai-completions", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 2.5 }, contextWindow: 262144, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "openai-responses": { "chat:gpt-5": { id: "gpt-5", name: "GPT-5", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.07, output: 8.5, cacheRead: 0.107, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-codex": { id: "gpt-5-codex", name: "GPT-5 Codex", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.07, output: 8.5, cacheRead: 0.107, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5-nano": { id: "gpt-5-nano", name: "GPT-5 Nano", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.05, output: 0.4, cacheRead: 5e-3, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.1": { id: "gpt-5.1", name: "GPT-5.1", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.07, output: 8.5, cacheRead: 0.107, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.1-codex": { id: "gpt-5.1-codex", name: "GPT-5.1 Codex", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.07, output: 8.5, cacheRead: 0.107, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.1-codex-max": { id: "gpt-5.1-codex-max", name: "GPT-5.1 Codex Max", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.1-codex-mini": { id: "gpt-5.1-codex-mini", name: "GPT-5.1 Codex Mini", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.25, output: 2, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.2": { id: "gpt-5.2", name: "GPT-5.2", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.2-codex": { id: "gpt-5.2-codex", name: "GPT-5.2 Codex", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.3-codex": { id: "gpt-5.3-codex", name: "GPT-5.3 Codex", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4": { id: "gpt-5.4", name: "GPT-5.4", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 5, output: 22.5, cacheRead: 0.5, cacheWrite: 0 }] }, contextWindow: 272e3, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-mini": { id: "gpt-5.4-mini", name: "GPT-5.4 Mini", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-nano": { id: "gpt-5.4-nano", name: "GPT-5.4 Nano", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.25, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.4-pro": { id: "gpt-5.4-pro", name: "GPT-5.4 Pro", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 30, output: 180, cacheRead: 30, cacheWrite: 0 }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.5": { id: "gpt-5.5", name: "GPT-5.5", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 10, output: 45, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.5-pro": { id: "gpt-5.5-pro", name: "GPT-5.5 Pro", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 30, output: 180, cacheRead: 30, cacheWrite: 0 }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-luna": { id: "gpt-5.6-luna", name: "GPT-5.6 Luna", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 272e3, input: 0.4, output: 1.8, cacheRead: 0.04, cacheWrite: 0.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-sol": { id: "gpt-5.6-sol", name: "GPT-5.6 Sol", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-terra": { id: "gpt-5.6-terra", name: "GPT-5.6 Terra", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-astra": { id: "gpt-6-astra", name: "GPT-6 Astra", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5, tiers: [{ inputTokensAbove: 272e3, input: 20, output: 75, cacheRead: 2, cacheWrite: 25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-luna": { id: "gpt-6-luna", name: "GPT-6 Luna", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-sol": { id: "gpt-6-sol", name: "GPT-6 Sol", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-sol": { id: "gpt-6.1-sol", name: "GPT-6.1 Sol", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsAdditionalTools: true, supportsOpenAIGrammarTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-4.5": { id: "grok-4.5", name: "Grok 4.5", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.3, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 0.6, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 5e5, compat: { sessionAffinityFormat: "openai-nosession" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-4.6": { id: "grok-4.6", name: "Grok 4.6", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 5e5, compat: { sessionAffinityFormat: "openai-nosession" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-4.7": { id: "grok-4.7", name: "Grok 4.7", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 5e5, compat: { sessionAffinityFormat: "openai-nosession" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-build-0.1": { id: "grok-build-0.1", name: "Grok Build 0.1", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 2, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 256e3, compat: { sessionAffinityFormat: "openai-nosession", supportsReasoningEffort: false }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:muse-spark-1.2": { id: "muse-spark-1.2", name: "Muse Spark 1.2", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { sessionAffinityFormat: "openai-nosession" }, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:muse-spark-1.3": { id: "muse-spark-1.3", name: "Muse Spark 1.3", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { sessionAffinityFormat: "openai-nosession" }, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:muse-wonder-1.0": { id: "muse-wonder-1.0", name: "Muse Wonder", api: "openai-responses", provider: "opencode", baseUrl: "https://opencode.ai/inference/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { sessionAffinityFormat: "openai-nosession" }, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "typesafe-system-one": { "classifier:jev-1.13": { type: "classifier", id: "jev-1.13", name: "Jev 1.13", api: "typesafe-system-one", provider: "opencode", baseUrl: "https://opencode.ai/inference/systemone/v1", input: ["text"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32e3 }, "classifier:jev-1.13-free": { type: "classifier", id: "jev-1.13-free", name: "Jev 1.13 Free", api: "typesafe-system-one", provider: "opencode", baseUrl: "https://opencode.ai/inference/systemone/v1", input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32e3 } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/opencode.models.js +var OPENCODE_MODELS = flattenChatModelCatalog("opencode", opencode_default); +var OPENCODE_IMAGE_MODELS = flattenImageModelCatalog("opencode", opencode_default); +var OPENCODE_CLASSIFIER_MODELS = flattenClassifierModelCatalog("opencode", opencode_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +var opencode_go_default = { "anthropic-messages": { "chat:claude-haiku-5-5": { id: "claude-haiku-5-5", name: "Claude Haiku 5.5", api: "anthropic-messages", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 1e5, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, compat: { forceAdaptiveThinking: true, supportsTemperature: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:minimax-m3": { id: "minimax-m3", name: "MiniMax-M3", api: "anthropic-messages", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0, tiers: [{ inputTokensAbove: 512e3, input: 0.6, output: 2.4, cacheRead: 0.12, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.7-plus": { id: "qwen3.7-plus", name: "Qwen3.7 Plus", api: "anthropic-messages", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.4, output: 1.6, cacheRead: 0.04, cacheWrite: 0.5, tiers: [{ inputTokensAbove: 256e3, input: 1.2, output: 4.8, cacheRead: 0.12, cacheWrite: 1.5 }] }, contextWindow: 1e6, maxTokens: 65536, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.8-flash": { id: "qwen3.8-flash", name: "Qwen3.8 Flash", api: "anthropic-messages", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.47, cacheRead: 0.016, cacheWrite: 0.2 }, contextWindow: 1e6, maxTokens: 131072, compat: { allowEmptySignature: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.8-max": { id: "qwen3.8-max", name: "Qwen3.8 Max", api: "anthropic-messages", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/anthropic", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "google-generative-ai": { "chat:gemini-4-argon": { id: "gemini-4-argon", name: "Gemini 4 Argon", api: "google-generative-ai", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/google/v1beta", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "openai-completions": { "chat:beam-free": { id: "beam-free", name: "Beam Free", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, type: "chat" }, "chat:deepseek-v4-pro": { id: "deepseek-v4-pro", name: "DeepSeek V4 Pro (New)", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text"], cost: { input: 0.66, output: 1.98, cacheRead: 0.022, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens", requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", max: "max" }, type: "chat" }, "chat:deepseek-v4.1-flash": { id: "deepseek-v4.1-flash", name: "DeepSeek V4.1 Flash", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 3e-3, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens", requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:glm-5.2": { id: "glm-5.2", name: "GLM-5.2", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:glm-5.3": { id: "glm-5.3", name: "GLM-5.3", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:glm-5.3-flash": { id: "glm-5.3-flash", name: "GLM-5.3-Flash", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:hy3": { id: "hy3", name: "Hy3", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text"], cost: { input: 0.14, output: 0.58, cacheRead: 0.035, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 128e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: null }, type: "chat" }, "chat:hy4-preview": { id: "hy4-preview", name: "Hy4 preview", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text"], cost: { input: 0.834, output: 2.501, cacheRead: 0.042, cacheWrite: 0 }, contextWindow: 1024e3, maxTokens: 64e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, type: "chat" }, "chat:iceman-contributor-free": { id: "iceman-contributor-free", name: "Iceman Contributor Free", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, type: "chat" }, "chat:kimi-k2.7-code": { id: "kimi-k2.7-code", name: "Kimi K2.7 Code", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.19, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k3": { id: "kimi-k3", name: "Kimi K3", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens", supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: null, xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k3.1-pro": { id: "kimi-k3.1-pro", name: "Kimi K3.1 Pro", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens", supportsMidConvoSystemMessages: true, supportsMidConvoToolAdditions: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:longcat-2.0": { id: "longcat-2.0", name: "LongCat-2.0", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, type: "chat" }, "chat:mimo-v2.5": { id: "mimo-v2.5", name: "MiMo V2.5", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.14, output: 0.28, cacheRead: 28e-4, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mimo-v2.5-pro": { id: "mimo-v2.5-pro", name: "MiMo V2.5 Pro", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text"], cost: { input: 0.435, output: 0.87, cacheRead: 3625e-6, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 128e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, type: "chat" }, "chat:mimo-v2.6-flash": { id: "mimo-v2.6-flash", name: "MiMo-V2.6-Flash", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.14, output: 0.28, cacheRead: 28e-4, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mimo-v2.6-pro": { id: "mimo-v2.6-pro", name: "MiMo-V2.6-Pro", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.435, output: 0.87, cacheRead: 3625e-6, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:minimax-m3.1-flash": { id: "minimax-m3.1-flash", name: "MiniMax M3.1 Flash", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 512e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:step-5-preview": { id: "step-5-preview", name: "Step 5 Preview", api: "openai-completions", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 2.7, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsStore: false, supportsDeveloperRole: false, supportsStrictMode: true, maxTokensField: "max_tokens" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "openai-responses": { "chat:gpt-5.6-luna": { id: "gpt-5.6-luna", name: "GPT-5.6 Luna", api: "openai-responses", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 272e3, input: 0.4, output: 1.8, cacheRead: 0.04, cacheWrite: 0.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsAdditionalTools: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-luna": { id: "gpt-6-luna", name: "GPT-6 Luna", api: "openai-responses", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { sessionAffinityFormat: "openai-nosession", supportsMidConvoSystemMessages: true, supportsAdditionalTools: true }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-4.7": { id: "grok-4.7", name: "Grok 4.7", api: "openai-responses", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 5e5, compat: { sessionAffinityFormat: "openai-nosession" }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:muse-spark-1.2-contributor": { id: "muse-spark-1.2-contributor", name: "Muse Spark 1.2 Contributor", api: "openai-responses", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.2, cacheRead: 2e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { sessionAffinityFormat: "openai-nosession" }, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:muse-spark-1.3-contributor": { id: "muse-spark-1.3-contributor", name: "Muse Spark 1.3 Contributor", api: "openai-responses", provider: "opencode-go", baseUrl: "https://opencode.ai/inference/go/openai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.2, cacheRead: 2e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { sessionAffinityFormat: "openai-nosession" }, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.models.js +var OPENCODE_GO_MODELS = flattenChatModelCatalog("opencode-go", opencode_go_default); +var OPENCODE_GO_IMAGE_MODELS = flattenImageModelCatalog("opencode-go", opencode_go_default); +var OPENCODE_GO_CLASSIFIER_MODELS = flattenClassifierModelCatalog("opencode-go", opencode_go_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +var openrouter_default = { "anthropic-messages": { "chat:~anthropic/claude-fable-latest": { type: "chat", id: "~anthropic/claude-fable-latest", name: "Anthropic: Claude Fable Latest", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~anthropic/claude-haiku-latest": { type: "chat", id: "~anthropic/claude-haiku-latest", name: "Anthropic: Claude Haiku Latest", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 1e5, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~anthropic/claude-opus-latest": { type: "chat", id: "~anthropic/claude-opus-latest", name: "Anthropic: Claude Opus Latest", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~anthropic/claude-sonnet-latest": { type: "chat", id: "~anthropic/claude-sonnet-latest", name: "Anthropic: Claude Sonnet Latest", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-fable-5": { type: "chat", id: "anthropic/claude-fable-5", name: "Anthropic: Claude Fable 5", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-fable-5.1": { type: "chat", id: "anthropic/claude-fable-5.1", name: "Anthropic: Claude Fable 5.1", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true, supportsMidConvoEffort: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-haiku-4.5": { type: "chat", id: "anthropic/claude-haiku-4.5", name: "Anthropic: Claude Haiku 4.5", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-haiku-5.5": { type: "chat", id: "anthropic/claude-haiku-5.5", name: "Anthropic: Claude Haiku 5.5", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 1e5, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoEffort: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-4.1": { type: "chat", id: "anthropic/claude-opus-4.1", name: "Anthropic: Claude Opus 4.1", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 15, output: 75, cacheRead: 1.5, cacheWrite: 18.75 }, contextWindow: 2e5, maxTokens: 32e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-4.5": { type: "chat", id: "anthropic/claude-opus-4.5", name: "Anthropic: Claude Opus 4.5", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-4.6": { type: "chat", id: "anthropic/claude-opus-4.6", name: "Anthropic: Claude Opus 4.6", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-4.7": { type: "chat", id: "anthropic/claude-opus-4.7", name: "Anthropic: Claude Opus 4.7", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true, supportsTemperature: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-4.8": { type: "chat", id: "anthropic/claude-opus-4.8", name: "Anthropic: Claude Opus 4.8", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true, supportsTemperature: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-5": { type: "chat", id: "anthropic/claude-opus-5", name: "Anthropic: Claude Opus 5", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true, supportsTemperature: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-5.5": { type: "chat", id: "anthropic/claude-opus-5.5", name: "Anthropic: Claude Opus 5.5", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoEffort: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-sonnet-4.5": { type: "chat", id: "anthropic/claude-sonnet-4.5", name: "Anthropic: Claude Sonnet 4.5", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75, tiers: [{ inputTokensAbove: 2e5, input: 6, output: 22.5, cacheRead: 0.6, cacheWrite: 7.5 }] }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-sonnet-4.6": { type: "chat", id: "anthropic/claude-sonnet-4.6", name: "Anthropic: Claude Sonnet 4.6", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-sonnet-5": { type: "chat", id: "anthropic/claude-sonnet-5", name: "Anthropic: Claude Sonnet 5", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-sonnet-5.5": { type: "chat", id: "anthropic/claude-sonnet-5.5", name: "Anthropic: Claude Sonnet 5.5", api: "anthropic-messages", baseUrl: "https://openrouter.ai/api", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsMidConvoEffort: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } } }, "openai-completions": { "chat:~deepseek/deepseek-flash-latest": { type: "chat", id: "~deepseek/deepseek-flash-latest", name: "DeepSeek: DeepSeek Flash Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.035, output: 0.5, cacheRead: 5e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~deepseek/deepseek-pro-latest": { type: "chat", id: "~deepseek/deepseek-pro-latest", name: "DeepSeek: DeepSeek Pro Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], cost: { input: 0.1035, output: 8, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 393216, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:~deepseek/deepseek-v4-flash-latest": { type: "chat", id: "~deepseek/deepseek-v4-flash-latest", name: "DeepSeek: DeepSeek V4 Flash Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], cost: { input: 0.059, output: 0.3, cacheRead: 0.035, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true } }, "chat:~google/gemini-flash-latest": { type: "chat", id: "~google/gemini-flash-latest", name: "Google: Gemini Flash Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0.041667 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~google/gemini-pro-latest": { type: "chat", id: "~google/gemini-pro-latest", name: "Google: Gemini Pro Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 0.1875 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~moonshotai/kimi-latest": { type: "chat", id: "~moonshotai/kimi-latest", name: "MoonshotAI: Kimi Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.1495, output: 7.15, cacheRead: 0.07475, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~openai/gpt-astra-latest": { type: "chat", id: "~openai/gpt-astra-latest", name: "OpenAI: GPT Astra Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5, tiers: [{ inputTokensAbove: 272e3, input: 20, output: 75, cacheRead: 2, cacheWrite: 25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~openai/gpt-luna-latest": { type: "chat", id: "~openai/gpt-luna-latest", name: "OpenAI: GPT Luna Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~openai/gpt-mini-latest": { type: "chat", id: "~openai/gpt-mini-latest", name: "OpenAI: GPT Mini Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~openai/gpt-sol-latest": { type: "chat", id: "~openai/gpt-sol-latest", name: "OpenAI: GPT Sol Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~openai/gpt-terra-latest": { type: "chat", id: "~openai/gpt-terra-latest", name: "OpenAI: GPT Terra Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~unbiased/pareto-latest": { type: "chat", id: "~unbiased/pareto-latest", name: "Pareto Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.8, output: 3.2, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~x-ai/grok-latest": { type: "chat", id: "~x-ai/grok-latest", name: "xAI: Grok Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 45e4, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~z-ai/glm-flash-latest": { type: "chat", id: "~z-ai/glm-flash-latest", name: "Z.ai: GLM Flash Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.0285, output: 0.0923, cacheRead: 0.0285, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:~z-ai/glm-latest": { type: "chat", id: "~z-ai/glm-latest", name: "Z.ai: GLM Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], cost: { input: 0.0699, output: 1.4, cacheRead: 0.0689, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:aion-labs/aion-2.0": { type: "chat", id: "aion-labs/aion-2.0", name: "AionLabs: Aion-2.0", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.8, output: 1.6, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:aion-labs/aion-3.0": { type: "chat", id: "aion-labs/aion-3.0", name: "AionLabs: Aion-3.0", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 3, output: 6, cacheRead: 0.75, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:aion-labs/aion-3.0-mini": { type: "chat", id: "aion-labs/aion-3.0-mini", name: "AionLabs: Aion-3.0-Mini", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.7, output: 1.4, cacheRead: 0.18, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:aion-labs/aion-3.5": { type: "chat", id: "aion-labs/aion-3.5", name: "AionLabs: Aion 3.5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], cost: { input: 3, output: 6, cacheRead: 0.75, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:aion-labs/aion-3.5-mini": { type: "chat", id: "aion-labs/aion-3.5-mini", name: "AionLabs: Aion 3.5 Mini", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], cost: { input: 0.7, output: 1.4, cacheRead: 0.18, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:amazon/nova-2-lite-v1": { type: "chat", id: "amazon/nova-2-lite-v1", name: "Amazon: Nova 2 Lite", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 2.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65535, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:amazon/nova-lite-v1": { type: "chat", id: "amazon/nova-lite-v1", name: "Amazon: Nova Lite 1.0", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.06, output: 0.24, cacheRead: 0, cacheWrite: 0 }, contextWindow: 3e5, maxTokens: 5120, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:amazon/nova-micro-v1": { type: "chat", id: "amazon/nova-micro-v1", name: "Amazon: Nova Micro 1.0", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.035, output: 0.14, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 5120, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:amazon/nova-premier-v1": { type: "chat", id: "amazon/nova-premier-v1", name: "Amazon: Nova Premier 1.0", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 12.5, cacheRead: 0.625, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 32e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:amazon/nova-pro-v1": { type: "chat", id: "amazon/nova-pro-v1", name: "Amazon: Nova Pro 1.0", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.8, output: 3.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 3e5, maxTokens: 5120, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-fable-5:batch": { type: "chat", id: "anthropic/claude-fable-5:batch", name: "Anthropic: Claude Fable 5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-fable-5.1:batch": { type: "chat", id: "anthropic/claude-fable-5.1:batch", name: "Anthropic: Claude Fable 5.1 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.125, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-haiku-4.5:batch": { type: "chat", id: "anthropic/claude-haiku-4.5:batch", name: "Anthropic: Claude Haiku 4.5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }, contextWindow: 2e5, maxTokens: 64e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-haiku-5.5:batch": { type: "chat", id: "anthropic/claude-haiku-5.5:batch", name: "Anthropic: Claude Haiku 5.5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.05, output: 0.25, cacheRead: 5e-3, cacheWrite: 0.0625, tiers: [{ inputTokensAbove: 1e5, input: 0.25, output: 1.25, cacheRead: 0.025, cacheWrite: 0.3125 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-4.1:batch": { type: "chat", id: "anthropic/claude-opus-4.1:batch", name: "Anthropic: Claude Opus 4.1 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 7.5, output: 37.5, cacheRead: 0.75, cacheWrite: 9.375 }, contextWindow: 2e5, maxTokens: 32e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-4.5:batch": { type: "chat", id: "anthropic/claude-opus-4.5:batch", name: "Anthropic: Claude Opus 4.5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 2.5, output: 12.5, cacheRead: 0.25, cacheWrite: 3.125 }, contextWindow: 2e5, maxTokens: 64e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-4.6:batch": { type: "chat", id: "anthropic/claude-opus-4.6:batch", name: "Anthropic: Claude Opus 4.6 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 2.5, output: 12.5, cacheRead: 0.25, cacheWrite: 3.125 }, contextWindow: 1e6, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-4.7:batch": { type: "chat", id: "anthropic/claude-opus-4.7:batch", name: "Anthropic: Claude Opus 4.7 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2.5, output: 12.5, cacheRead: 0.25, cacheWrite: 3.125 }, contextWindow: 1e6, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-4.8:batch": { type: "chat", id: "anthropic/claude-opus-4.8:batch", name: "Anthropic: Claude Opus 4.8 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2.5, output: 12.5, cacheRead: 0.25, cacheWrite: 3.125 }, contextWindow: 1e6, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-5:batch": { type: "chat", id: "anthropic/claude-opus-5:batch", name: "Anthropic: Claude Opus 5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2.5, output: 12.5, cacheRead: 0.25, cacheWrite: 3.125 }, contextWindow: 1e6, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-opus-5.5:batch": { type: "chat", id: "anthropic/claude-opus-5.5:batch", name: "Anthropic: Claude Opus 5.5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-sonnet-4.5:batch": { type: "chat", id: "anthropic/claude-sonnet-4.5:batch", name: "Anthropic: Claude Sonnet 4.5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 1.875, tiers: [{ inputTokensAbove: 2e5, input: 3, output: 11.25, cacheRead: 0.3, cacheWrite: 3.75 }] }, contextWindow: 1e6, maxTokens: 64e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-sonnet-4.6:batch": { type: "chat", id: "anthropic/claude-sonnet-4.6:batch", name: "Anthropic: Claude Sonnet 4.6 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 1.875 }, contextWindow: 1e6, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-sonnet-5:batch": { type: "chat", id: "anthropic/claude-sonnet-5:batch", name: "Anthropic: Claude Sonnet 5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:anthropic/claude-sonnet-5.5:batch": { type: "chat", id: "anthropic/claude-sonnet-5.5:batch", name: "Anthropic: Claude Sonnet 5.5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25 }, contextWindow: 1e6, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, cacheControlFormat: "anthropic", sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:auto": { id: "auto", name: "Auto", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e6, maxTokens: 3e4, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:bytedance-seed/seed-1.6": { type: "chat", id: "bytedance-seed/seed-1.6", name: "ByteDance Seed: Seed 1.6", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.25, output: 2, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 128e3, input: 0.5, output: 4, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 262144, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:bytedance-seed/seed-1.6-flash": { type: "chat", id: "bytedance-seed/seed-1.6-flash", name: "ByteDance Seed: Seed 1.6 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.075, output: 0.3, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 128e3, input: 0.1, output: 0.8, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 262144, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:bytedance-seed/seed-2-1-turbo": { type: "chat", id: "bytedance-seed/seed-2-1-turbo", name: "ByteDance Seed: Seed 2.1 Turbo", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.5, output: 2.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:bytedance-seed/seed-2.0-code": { type: "chat", id: "bytedance-seed/seed-2.0-code", name: "ByteDance Seed: Seed-2.0-Code", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.5, output: 3, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 128e3, input: 1, output: 6, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 262144, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:bytedance-seed/seed-2.0-lite": { type: "chat", id: "bytedance-seed/seed-2.0-lite", name: "ByteDance Seed: Seed-2.0-Lite", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.25, output: 2, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 128e3, input: 0.5, output: 4, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 262144, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:bytedance-seed/seed-2.0-mini": { type: "chat", id: "bytedance-seed/seed-2.0-mini", name: "ByteDance Seed: Seed-2.0-Mini", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.1, output: 0.4, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 128e3, input: 0.2, output: 0.8, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 262144, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:cohere/command-a-plus": { type: "chat", id: "cohere/command-a-plus", name: "Cohere: Command A+", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.5, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 192e3, maxTokens: 64e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:cohere/command-r-08-2024": { type: "chat", id: "cohere/command-r-08-2024", name: "Cohere: Command R (08-2024)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:cohere/command-r-plus-08-2024": { type: "chat", id: "cohere/command-r-plus-08-2024", name: "Cohere: Command R+ (08-2024)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 2.5, output: 10, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:cohere/north-mini-code:free": { type: "chat", id: "cohere/north-mini-code:free", name: "Cohere: North Mini Code (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 64e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:deepseek/deepseek-chat": { type: "chat", id: "deepseek/deepseek-chat", name: "DeepSeek: DeepSeek V3", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.2574, output: 1.0287, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:deepseek/deepseek-chat-v3-0324": { type: "chat", id: "deepseek/deepseek-chat-v3-0324", name: "DeepSeek: DeepSeek V3 0324", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.29, output: 1.14, cacheRead: 0.11, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 115200, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:deepseek/deepseek-chat-v3.1": { type: "chat", id: "deepseek/deepseek-chat-v3.1", name: "DeepSeek: DeepSeek V3.1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.25, output: 0.95, cacheRead: 0.13, cacheWrite: 0 }, contextWindow: 163840, maxTokens: 147456, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:deepseek/deepseek-r1-0528": { type: "chat", id: "deepseek/deepseek-r1-0528", name: "DeepSeek: R1 0528", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.5, output: 2.15, cacheRead: 0.35, cacheWrite: 0 }, contextWindow: 163840, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:deepseek/deepseek-v3.1-terminus": { type: "chat", id: "deepseek/deepseek-v3.1-terminus", name: "DeepSeek: DeepSeek V3.1 Terminus", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.27, output: 1, cacheRead: 0, cacheWrite: 0 }, contextWindow: 163840, maxTokens: 147456, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:deepseek/deepseek-v3.2": { type: "chat", id: "deepseek/deepseek-v3.2", name: "DeepSeek: DeepSeek V3.2", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.26, output: 0.38, cacheRead: 0.13, cacheWrite: 0 }, contextWindow: 163840, maxTokens: 147456, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:deepseek/deepseek-v3.2-exp": { type: "chat", id: "deepseek/deepseek-v3.2-exp", name: "DeepSeek: DeepSeek V3.2 Exp", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.27, output: 0.41, cacheRead: 0, cacheWrite: 0 }, contextWindow: 163840, maxTokens: 147456, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:deepseek/deepseek-v4-flash": { type: "chat", id: "deepseek/deepseek-v4-flash", name: "DeepSeek: DeepSeek V4 Flash 0423", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: "xhigh", max: null }, input: ["text"], cost: { input: 0.091, output: 0.182, cacheRead: 0.0182, cacheWrite: 0 }, contextWindow: 1048575, maxTokens: 943717, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true } }, "chat:deepseek/deepseek-v4-flash-0731": { type: "chat", id: "deepseek/deepseek-v4-flash-0731", name: "DeepSeek: DeepSeek V4 Flash 0731", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], cost: { input: 0.119, output: 0.238, cacheRead: 0.0238, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true } }, "chat:deepseek/deepseek-v4-flash-vision-exp": { type: "chat", id: "deepseek/deepseek-v4-flash-vision-exp", name: "DeepSeek: DeepSeek V4 Flash Vision Exp", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.2156, output: 0.6468, cacheRead: 686e-5, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:deepseek/deepseek-v4-pro": { type: "chat", id: "deepseek/deepseek-v4-pro", name: "DeepSeek: DeepSeek V4 Pro 0423", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: "xhigh", max: null }, input: ["text"], cost: { input: 1.6, output: 3.2, cacheRead: 0.135, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 393216, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true } }, "chat:deepseek/deepseek-v4-pro-0813": { type: "chat", id: "deepseek/deepseek-v4-pro-0813", name: "DeepSeek: DeepSeek V4 Pro 0813", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], cost: { input: 0.115, output: 4, cacheRead: 0.11, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true } }, "chat:deepseek/deepseek-v4.1-flash": { type: "chat", id: "deepseek/deepseek-v4.1-flash", name: "DeepSeek: DeepSeek V4.1 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.045, output: 0.5, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:deepseek/deepseek-v4.1-flash-1017": { type: "chat", id: "deepseek/deepseek-v4.1-flash-1017", name: "DeepSeek: DeepSeek V4.1 Flash 1017", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 3e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 393216, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:deepseek/deepseek-v4.1-flash:batch": { type: "chat", id: "deepseek/deepseek-v4.1-flash:batch", name: "DeepSeek: DeepSeek V4.1 Flash (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.05, output: 0.15, cacheRead: 4e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 384e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:dots-studio/dots-3-note-preview:free": { type: "chat", id: "dots-studio/dots-3-note-preview:free", name: "Dots Studio: Dots3-Note Preview (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 512e3, maxTokens: 460800, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:elorian/glimpse": { type: "chat", id: "elorian/glimpse", name: "Elorian: Glimpse", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.6, output: 3, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:fireworks/ember-1": { type: "chat", id: "fireworks/ember-1", name: "Fireworks: Ember-1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-2.5-flash": { type: "chat", id: "google/gemini-2.5-flash", name: "Google: Gemini 2.5 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0.083333 }, contextWindow: 1048576, maxTokens: 65535, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-2.5-flash-lite": { type: "chat", id: "google/gemini-2.5-flash-lite", name: "Google: Gemini 2.5 Flash Lite", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.4, cacheRead: 0.01, cacheWrite: 0.083333 }, contextWindow: 1048576, maxTokens: 65535, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-2.5-pro": { type: "chat", id: "google/gemini-2.5-pro", name: "Google: Gemini 2.5 Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0.375, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0.375 }] }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-2.5-pro-preview": { type: "chat", id: "google/gemini-2.5-pro-preview", name: "Google: Gemini 2.5 Pro Preview 06-05", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0.375, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0.375 }] }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3-flash-preview": { type: "chat", id: "google/gemini-3-flash-preview", name: "Google: Gemini 3 Flash Preview", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.5, output: 3, cacheRead: 0.05, cacheWrite: 0.083333 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3-flash-preview:batch": { type: "chat", id: "google/gemini-3-flash-preview:batch", name: "Google: Gemini 3 Flash Preview (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.25, output: 1.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3-pro-image": { type: "chat", id: "google/gemini-3-pro-image", name: "Google: Nano Banana Pro (Gemini 3 Pro Image)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0.375 }, contextWindow: 65536, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.1-flash-lite": { type: "chat", id: "google/gemini-3.1-flash-lite", name: "Google: Gemini 3.1 Flash Lite", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.25, output: 1.5, cacheRead: 0.025, cacheWrite: 0.083333 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.1-flash-lite-preview": { type: "chat", id: "google/gemini-3.1-flash-lite-preview", name: "Google: Gemini 3.1 Flash Lite Preview", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.25, output: 1.5, cacheRead: 0.025, cacheWrite: 0.083333 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.1-flash-lite:batch": { type: "chat", id: "google/gemini-3.1-flash-lite:batch", name: "Google: Gemini 3.1 Flash Lite (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.125, output: 0.75, cacheRead: 0.0125, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.1-pro-preview": { type: "chat", id: "google/gemini-3.1-pro-preview", name: "Google: Gemini 3.1 Pro Preview", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0.375, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 0.375 }] }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.1-pro-preview-customtools": { type: "chat", id: "google/gemini-3.1-pro-preview-customtools", name: "Google: Gemini 3.1 Pro Preview Custom Tools", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0.375, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 0.375 }] }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.1-pro-preview:batch": { type: "chat", id: "google/gemini-3.1-pro-preview:batch", name: "Google: Gemini 3.1 Pro Preview (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1, output: 6, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2, output: 9, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.5-flash": { type: "chat", id: "google/gemini-3.5-flash", name: "Google: Gemini 3.5 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1.5, output: 9, cacheRead: 0.15, cacheWrite: 0.083333 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.5-flash-lite": { type: "chat", id: "google/gemini-3.5-flash-lite", name: "Google: Gemini 3.5 Flash Lite", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0.083333 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.5-flash-lite:batch": { type: "chat", id: "google/gemini-3.5-flash-lite:batch", name: "Google: Gemini 3.5 Flash Lite (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.15, output: 1.25, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.5-flash:batch": { type: "chat", id: "google/gemini-3.5-flash:batch", name: "Google: Gemini 3.5 Flash (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.6-flash": { type: "chat", id: "google/gemini-3.6-flash", name: "Google: Gemini 3.6 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0.041667 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.6-flash:batch": { type: "chat", id: "google/gemini-3.6-flash:batch", name: "Google: Gemini 3.6 Flash (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.375, output: 1.875, cacheRead: 0.0375, cacheWrite: 0.041667 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.7-flash": { type: "chat", id: "google/gemini-3.7-flash", name: "Google: Gemini 3.7 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0.041667 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.7-flash:batch": { type: "chat", id: "google/gemini-3.7-flash:batch", name: "Google: Gemini 3.7 Flash (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.375, output: 1.875, cacheRead: 0.0375, cacheWrite: 0.041667 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.8-flash": { type: "chat", id: "google/gemini-3.8-flash", name: "Google: Gemini 3.8 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.825, output: 4.125, cacheRead: 0.0825, cacheWrite: 0.041667 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-3.8-flash:batch": { type: "chat", id: "google/gemini-3.8-flash:batch", name: "Google: Gemini 3.8 Flash (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.375, output: 1.875, cacheRead: 0.0375, cacheWrite: 0.041667 }, contextWindow: 1048576, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-4-argon": { type: "chat", id: "google/gemini-4-argon", name: "Google: Gemini 4 Argon", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 0.1875 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-4-argon:batch": { type: "chat", id: "google/gemini-4-argon:batch", name: "Google: Gemini 4 Argon (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 0.1875 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemini-nano-banana-2.1": { type: "chat", id: "google/gemini-nano-banana-2.1", name: "Google: Nano Banana 2.1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: null, medium: null, high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1.5, output: 7.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 65536, maxTokens: 58982, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemma-3-12b-it": { type: "chat", id: "google/gemma-3-12b-it", name: "Google: Gemma 3 12B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.05, output: 0.15, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemma-3-27b-it": { type: "chat", id: "google/gemma-3-27b-it", name: "Google: Gemma 3 27B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.08, output: 0.35, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 117964, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemma-4-26b-a4b-it": { type: "chat", id: "google/gemma-4-26b-a4b-it", name: "Google: Gemma 4 26B A4B ", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.074, output: 0.223, cacheRead: 0.037, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemma-4-26b-a4b-it:free": { type: "chat", id: "google/gemma-4-26b-a4b-it:free", name: "Google: Gemma 4 26B A4B (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemma-4-31b-it": { type: "chat", id: "google/gemma-4-31b-it", name: "Google: Gemma 4 31B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.2, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:google/gemma-4-31b-it:free": { type: "chat", id: "google/gemma-4-31b-it:free", name: "Google: Gemma 4 31B (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:ibm-granite/granite-4.2-8b": { type: "chat", id: "ibm-granite/granite-4.2-8b", name: "IBM: Granite 4.2 8B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.06, output: 0.15, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 117964, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:inception/mercury-2": { type: "chat", id: "inception/mercury-2", name: "Inception: Mercury 2", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.25, output: 0.75, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 5e4, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:inception/mercury-2.5": { type: "chat", id: "inception/mercury-2.5", name: "Inception: Mercury 2.5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.04, output: 0.15, cacheRead: 4e-3, cacheWrite: 0 }, contextWindow: 26e4, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:inception/mercury-3": { type: "chat", id: "inception/mercury-3", name: "Inception: Mercury 3", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.1, output: 0.35, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:inclusionai/ling-3.0-flash": { type: "chat", id: "inclusionai/ling-3.0-flash", name: "inclusionAI: Ling 3.0 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.021, output: 0.063, cacheRead: 42e-4, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:inclusionai/ling-3.0-flash-vl": { type: "chat", id: "inclusionai/ling-3.0-flash-vl", name: "inclusionAI: Ling 3.0 Flash VL", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.06, output: 0.18, cacheRead: 0.012, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:inclusionai/ling-3.1-flash": { type: "chat", id: "inclusionai/ling-3.1-flash", name: "inclusionAI: Ling 3.1 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.075, output: 0.225, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 262144, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:liquid/lfm-2.5-2.6b": { type: "chat", id: "liquid/lfm-2.5-2.6b", name: "LiquidAI: LFM2.5-2.6B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.35, output: 0.5, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:liquid/lfm-2.5-2.6b:free": { type: "chat", id: "liquid/lfm-2.5-2.6b:free", name: "LiquidAI: LFM2.5-2.6B (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 65536, maxTokens: 8192, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:liquid/lfm-2.5-24b-a2b": { type: "chat", id: "liquid/lfm-2.5-24b-a2b", name: "LiquidAI: LFM2.5-24B-A2B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.05, output: 0.7, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:meituan/longcat-2.0": { type: "chat", id: "meituan/longcat-2.0", name: "Meituan: LongCat 2.0", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1048756, maxTokens: 262144, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:meta-llama/llama-3.1-70b-instruct": { type: "chat", id: "meta-llama/llama-3.1-70b-instruct", name: "Meta: Llama 3.1 70B Instruct", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.4, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:meta-llama/llama-3.1-8b-instruct": { type: "chat", id: "meta-llama/llama-3.1-8b-instruct", name: "Meta: Llama 3.1 8B Instruct", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.05, output: 0.08, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 117964, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:meta-llama/llama-3.3-70b-instruct": { type: "chat", id: "meta-llama/llama-3.3-70b-instruct", name: "Meta: Llama 3.3 70B Instruct", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.1, output: 0.32, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:meta-llama/llama-4-maverick": { type: "chat", id: "meta-llama/llama-4-maverick", name: "Meta: Llama 4 Maverick", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.1875, output: 0.6525, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:meta-llama/llama-4-scout": { type: "chat", id: "meta-llama/llama-4-scout", name: "Meta: Llama 4 Scout", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.1, output: 0.3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 327680, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:meta/muse-glimmer-30b": { type: "chat", id: "meta/muse-glimmer-30b", name: "Meta: Muse Glimmer 30B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:meta/muse-spark-1.1": { type: "chat", id: "meta/muse-spark-1.1", name: "Meta: Muse Spark 1.1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:meta/muse-spark-1.2": { type: "chat", id: "meta/muse-spark-1.2", name: "Meta: Muse Spark 1.2", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:meta/muse-spark-1.2-contributor": { type: "chat", id: "meta/muse-spark-1.2-contributor", name: "Meta: Muse Spark 1.2 Contributor", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 0.1, output: 0.2, cacheRead: 2e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:meta/muse-spark-1.3": { type: "chat", id: "meta/muse-spark-1.3", name: "Meta: Muse Spark 1.3", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:meta/muse-spark-1.3-contributor": { type: "chat", id: "meta/muse-spark-1.3-contributor", name: "Meta: Muse Spark 1.3 Contributor", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.1, output: 0.2, cacheRead: 2e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:meta/muse-spark-open": { type: "chat", id: "meta/muse-spark-open", name: "Meta: Muse Spark Open", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:meta/muse-wonder": { type: "chat", id: "meta/muse-wonder", name: "Meta: Muse Wonder", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:minimax/minimax-m1": { type: "chat", id: "minimax/minimax-m1", name: "MiniMax: MiniMax M1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.55, output: 2.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 4e4, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:minimax/minimax-m2": { type: "chat", id: "minimax/minimax-m2", name: "MiniMax: MiniMax M2", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.255, output: 1.02, cacheRead: 0, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:minimax/minimax-m2.1": { type: "chat", id: "minimax/minimax-m2.1", name: "MiniMax: MiniMax M2.1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:minimax/minimax-m2.5": { type: "chat", id: "minimax/minimax-m2.5", name: "MiniMax: MiniMax M2.5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.27, output: 0.95, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 198e3, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:minimax/minimax-m2.7": { type: "chat", id: "minimax/minimax-m2.7", name: "MiniMax: MiniMax M2.7", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:minimax/minimax-m3": { type: "chat", id: "minimax/minimax-m3", name: "MiniMax: MiniMax M3", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 524288, maxTokens: 512e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:minimax/minimax-m3.1-flash": { type: "chat", id: "minimax/minimax-m3.1-flash", name: "MiniMax: MiniMax M3.1 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 524288, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/codestral-2508": { type: "chat", id: "mistralai/codestral-2508", name: "Mistral: Codestral 2508", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.3, output: 0.9, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 204800, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:mistralai/devstral-2512": { type: "chat", id: "mistralai/devstral-2512", name: "Mistral: Devstral 2 2512", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.4, output: 2, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 209715, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:mistralai/ministral-14b-2512": { type: "chat", id: "mistralai/ministral-14b-2512", name: "Mistral: Ministral 3 14B 2512", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.2, output: 0.2, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 209715, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/ministral-3b-2512": { type: "chat", id: "mistralai/ministral-3b-2512", name: "Mistral: Ministral 3 3B 2512", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.1, output: 0.1, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 104857, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/ministral-8b-2512": { type: "chat", id: "mistralai/ministral-8b-2512", name: "Mistral: Ministral 3 8B 2512", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.15, output: 0.15, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 209715, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/mistral-large": { type: "chat", id: "mistralai/mistral-large", name: "Mistral Large", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 2, output: 6, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 102400, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:mistralai/mistral-large-2407": { type: "chat", id: "mistralai/mistral-large-2407", name: "Mistral Large 2407", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 2, output: 6, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 104857, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:mistralai/mistral-large-2512": { type: "chat", id: "mistralai/mistral-large-2512", name: "Mistral: Mistral Large 3 2512", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.5, output: 1.5, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 209715, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/mistral-large-4-0": { type: "chat", id: "mistralai/mistral-large-4-0", name: "Mistral: Mistral Large 4", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.7, output: 2.1, cacheRead: 0.07, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/mistral-medium-3": { type: "chat", id: "mistralai/mistral-medium-3", name: "Mistral: Mistral Medium 3", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.4, output: 2, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 104857, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/mistral-medium-3-5": { type: "chat", id: "mistralai/mistral-medium-3-5", name: "Mistral: Mistral Medium 3.5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1.5, output: 7.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 209715, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/mistral-medium-3-5:batch": { type: "chat", id: "mistralai/mistral-medium-3-5:batch", name: "Mistral: Mistral Medium 3.5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.75, output: 3.75, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 209715, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/mistral-medium-3.1": { type: "chat", id: "mistralai/mistral-medium-3.1", name: "Mistral: Mistral Medium 3.1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.4, output: 2, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 104857, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/mistral-nemo": { type: "chat", id: "mistralai/mistral-nemo", name: "Mistral: Mistral Nemo", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.029, output: 0.03, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:mistralai/mistral-saba": { type: "chat", id: "mistralai/mistral-saba", name: "Mistral: Saba", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.2, output: 0.6, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 32768, maxTokens: 26214, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:mistralai/mistral-small-2603": { type: "chat", id: "mistralai/mistral-small-2603", name: "Mistral: Mistral Small 4", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 209715, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/mistral-small-3.1-24b-instruct": { type: "chat", id: "mistralai/mistral-small-3.1-24b-instruct", name: "Mistral: Mistral Small 3.1 24B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.351, output: 0.555, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 102400, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/mistral-small-3.2-24b-instruct": { type: "chat", id: "mistralai/mistral-small-3.2-24b-instruct", name: "Mistral: Mistral Small 3.2 24B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.075, output: 0.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:mistralai/mixtral-8x22b-instruct": { type: "chat", id: "mistralai/mixtral-8x22b-instruct", name: "Mistral: Mixtral 8x22B Instruct", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 2, output: 6, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 65536, maxTokens: 52428, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:mistralai/voxtral-small-24b-2507": { type: "chat", id: "mistralai/voxtral-small-24b-2507", name: "Mistral: Voxtral Small 24B 2507", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.1, output: 0.3, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 32768, maxTokens: 26214, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:moonshotai/kimi-k2": { type: "chat", id: "moonshotai/kimi-k2", name: "MoonshotAI: Kimi K2 0711", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.57, output: 2.3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 98304, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:moonshotai/kimi-k2-0905": { type: "chat", id: "moonshotai/kimi-k2-0905", name: "MoonshotAI: Kimi K2 0905", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.6, output: 2.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 98304, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:moonshotai/kimi-k2-thinking": { type: "chat", id: "moonshotai/kimi-k2-thinking", name: "MoonshotAI: Kimi K2 Thinking", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.6, output: 2.5, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 98304, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:moonshotai/kimi-k2.5": { type: "chat", id: "moonshotai/kimi-k2.5", name: "MoonshotAI: Kimi K2.5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.41, output: 2.06, cacheRead: 0.07, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 4096, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:moonshotai/kimi-k2.6": { type: "chat", id: "moonshotai/kimi-k2.6", name: "MoonshotAI: Kimi K2.6", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.65, output: 3.41, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, requiresReasoningContentOnAssistantMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:moonshotai/kimi-k2.7-code": { type: "chat", id: "moonshotai/kimi-k2.7-code", name: "MoonshotAI: Kimi K2.7 Code", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text", "image"], cost: { input: 0.6, output: 3.5, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:moonshotai/kimi-k3": { type: "chat", id: "moonshotai/kimi-k3", name: "MoonshotAI: Kimi K3", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.192, output: 15, cacheRead: 0.182, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:moonshotai/kimi-k3:batch": { type: "chat", id: "moonshotai/kimi-k3:batch", name: "MoonshotAI: Kimi K3 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 2.28, output: 11.4, cacheRead: 0.228, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:moonshotai/kimi-k3.1-pro": { type: "chat", id: "moonshotai/kimi-k3.1-pro", name: "MoonshotAI: Kimi K3.1 Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:nex-agi/nex-n2.5-pro": { type: "chat", id: "nex-agi/nex-n2.5-pro", name: "Nex AGI: Nex-N2.5-Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.075, output: 0.25, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:nvidia/nemotron-3-nano-30b-a3b": { type: "chat", id: "nvidia/nemotron-3-nano-30b-a3b", name: "NVIDIA: Nemotron 3 Nano 30B A3B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.06, output: 0.24, cacheRead: 0.012, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free": { type: "chat", id: "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free", name: "NVIDIA: Nemotron 3 Nano Omni (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:nvidia/nemotron-3-super-120b-a12b": { type: "chat", id: "nvidia/nemotron-3-super-120b-a12b", name: "NVIDIA: Nemotron 3 Super", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: null, xhigh: null, max: null }, input: ["text"], cost: { input: 0.3, output: 2.4, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:nvidia/nemotron-3-ultra-550b-a55b": { type: "chat", id: "nvidia/nemotron-3-ultra-550b-a55b", name: "NVIDIA: Nemotron 3 Ultra", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: "medium", high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.6, output: 2.4, cacheRead: 0.12, cacheWrite: 0 }, contextWindow: 202800, maxTokens: 182520, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:nvidia/nemotron-3-ultra-550b-a55b:free": { type: "chat", id: "nvidia/nemotron-3-ultra-550b-a55b:free", name: "NVIDIA: Nemotron 3 Ultra (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: "medium", high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:nvidia/nemotron-3.5-lightning": { type: "chat", id: "nvidia/nemotron-3.5-lightning", name: "NVIDIA: Nemotron 3.5 Lightning", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.07, output: 0.2, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:nvidia/nemotron-3.5-lightning:free": { type: "chat", id: "nvidia/nemotron-3.5-lightning:free", name: "NVIDIA: Nemotron 3.5 Lightning (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:nvidia/nemotron-3.5-super-vl": { type: "chat", id: "nvidia/nemotron-3.5-super-vl", name: "NVIDIA: Nemotron 3.5 Super VL", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:nvidia/nemotron-3.5-super-vl:free": { type: "chat", id: "nvidia/nemotron-3.5-super-vl:free", name: "NVIDIA: Nemotron 3.5 Super VL (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-3.5-turbo-0613": { type: "chat", id: "openai/gpt-3.5-turbo-0613", name: "OpenAI: GPT-3.5 Turbo (older v0613)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 1, output: 2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4095, maxTokens: 3685, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:openai/gpt-3.5-turbo-16k": { type: "chat", id: "openai/gpt-3.5-turbo-16k", name: "OpenAI: GPT-3.5 Turbo 16k", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 3, output: 4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 16385, maxTokens: 4096, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:openai/gpt-4": { type: "chat", id: "openai/gpt-4", name: "OpenAI: GPT-4", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 30, output: 60, cacheRead: 0, cacheWrite: 0 }, contextWindow: 8191, maxTokens: 4096, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:openai/gpt-4-turbo:batch": { type: "chat", id: "openai/gpt-4-turbo:batch", name: "OpenAI: GPT-4 Turbo (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 5, output: 15, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4.1": { type: "chat", id: "openai/gpt-4.1", name: "OpenAI: GPT-4.1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4.1-mini": { type: "chat", id: "openai/gpt-4.1-mini", name: "OpenAI: GPT-4.1 Mini", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.4, output: 1.6, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4.1-mini:batch": { type: "chat", id: "openai/gpt-4.1-mini:batch", name: "OpenAI: GPT-4.1 Mini (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.2, output: 0.8, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4.1-nano": { type: "chat", id: "openai/gpt-4.1-nano", name: "OpenAI: GPT-4.1 Nano", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.1, output: 0.4, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 942818, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4.1-nano:batch": { type: "chat", id: "openai/gpt-4.1-nano:batch", name: "OpenAI: GPT-4.1 Nano (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.05, output: 0.2, cacheRead: 0.0125, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4.1:batch": { type: "chat", id: "openai/gpt-4.1:batch", name: "OpenAI: GPT-4.1 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 1, output: 4, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4o": { type: "chat", id: "openai/gpt-4o", name: "OpenAI: GPT-4o", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4o-2024-05-13": { type: "chat", id: "openai/gpt-4o-2024-05-13", name: "OpenAI: GPT-4o (2024-05-13)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 5, output: 15, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4096, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4o-2024-08-06": { type: "chat", id: "openai/gpt-4o-2024-08-06", name: "OpenAI: GPT-4o (2024-08-06)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4o-2024-11-20": { type: "chat", id: "openai/gpt-4o-2024-11-20", name: "OpenAI: GPT-4o (2024-11-20)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4o-mini": { type: "chat", id: "openai/gpt-4o-mini", name: "OpenAI: GPT-4o-mini", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4o-mini-2024-07-18": { type: "chat", id: "openai/gpt-4o-mini-2024-07-18", name: "OpenAI: GPT-4o-mini (2024-07-18)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4o-mini:batch": { type: "chat", id: "openai/gpt-4o-mini:batch", name: "OpenAI: GPT-4o-mini (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.075, output: 0.3, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-4o:batch": { type: "chat", id: "openai/gpt-4o:batch", name: "OpenAI: GPT-4o (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 1.25, output: 5, cacheRead: 0.625, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5": { type: "chat", id: "openai/gpt-5", name: "OpenAI: GPT-5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5-mini": { type: "chat", id: "openai/gpt-5-mini", name: "OpenAI: GPT-5 Mini", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.25, output: 2, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5-mini:batch": { type: "chat", id: "openai/gpt-5-mini:batch", name: "OpenAI: GPT-5 Mini (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.125, output: 1, cacheRead: 0.0125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5-nano": { type: "chat", id: "openai/gpt-5-nano", name: "OpenAI: GPT-5 Nano", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.05, output: 0.4, cacheRead: 5e-3, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5-nano:batch": { type: "chat", id: "openai/gpt-5-nano:batch", name: "OpenAI: GPT-5 Nano (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.025, output: 0.2, cacheRead: 25e-4, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5-pro": { type: "chat", id: "openai/gpt-5-pro", name: "OpenAI: GPT-5 Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 15, output: 120, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5-pro:batch": { type: "chat", id: "openai/gpt-5-pro:batch", name: "OpenAI: GPT-5 Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 7.5, output: 60, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5:batch": { type: "chat", id: "openai/gpt-5:batch", name: "OpenAI: GPT-5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.625, output: 5, cacheRead: 0.0625, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.1": { type: "chat", id: "openai/gpt-5.1", name: "OpenAI: GPT-5.1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.1-codex": { type: "chat", id: "openai/gpt-5.1-codex", name: "OpenAI: GPT-5.1-Codex", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.13, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.1-codex-max": { type: "chat", id: "openai/gpt-5.1-codex-max", name: "OpenAI: GPT-5.1-Codex-Max", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.1-codex-mini": { type: "chat", id: "openai/gpt-5.1-codex-mini", name: "OpenAI: GPT-5.1-Codex-Mini", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.25, output: 2, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.1:batch": { type: "chat", id: "openai/gpt-5.1:batch", name: "OpenAI: GPT-5.1 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.625, output: 5, cacheRead: 0.0625, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.2": { type: "chat", id: "openai/gpt-5.2", name: "OpenAI: GPT-5.2", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.2-chat": { type: "chat", id: "openai/gpt-5.2-chat", name: "OpenAI: GPT-5.2 Chat", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 32e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.2-codex": { type: "chat", id: "openai/gpt-5.2-codex", name: "OpenAI: GPT-5.2-Codex", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.2-pro": { type: "chat", id: "openai/gpt-5.2-pro", name: "OpenAI: GPT-5.2 Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 21, output: 168, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.2-pro:batch": { type: "chat", id: "openai/gpt-5.2-pro:batch", name: "OpenAI: GPT-5.2 Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 10.5, output: 84, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.2:batch": { type: "chat", id: "openai/gpt-5.2:batch", name: "OpenAI: GPT-5.2 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 0.875, output: 7, cacheRead: 0.0875, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.3-codex": { type: "chat", id: "openai/gpt-5.3-codex", name: "OpenAI: GPT-5.3-Codex", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.4": { type: "chat", id: "openai/gpt-5.4", name: "OpenAI: GPT-5.4", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 5, output: 22.5, cacheRead: 0.5, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.4-mini": { type: "chat", id: "openai/gpt-5.4-mini", name: "OpenAI: GPT-5.4 Mini", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.4-mini:batch": { type: "chat", id: "openai/gpt-5.4-mini:batch", name: "OpenAI: GPT-5.4 Mini (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 0.375, output: 2.25, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.4-nano": { type: "chat", id: "openai/gpt-5.4-nano", name: "OpenAI: GPT-5.4 Nano", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 0.2, output: 1.25, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.4-nano:batch": { type: "chat", id: "openai/gpt-5.4-nano:batch", name: "OpenAI: GPT-5.4 Nano (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 0.1, output: 0.625, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.4-pro": { type: "chat", id: "openai/gpt-5.4-pro", name: "OpenAI: GPT-5.4 Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 30, output: 180, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 60, output: 270, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.4-pro:batch": { type: "chat", id: "openai/gpt-5.4-pro:batch", name: "OpenAI: GPT-5.4 Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 15, output: 90, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 30, output: 135, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.4:batch": { type: "chat", id: "openai/gpt-5.4:batch", name: "OpenAI: GPT-5.4 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 1.25, output: 7.5, cacheRead: 0.125, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 2.5, output: 11.25, cacheRead: 0.25, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.5": { type: "chat", id: "openai/gpt-5.5", name: "OpenAI: GPT-5.5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 10, output: 45, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.5-pro": { type: "chat", id: "openai/gpt-5.5-pro", name: "OpenAI: GPT-5.5 Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 30, output: 180, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 60, output: 270, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.5-pro:batch": { type: "chat", id: "openai/gpt-5.5-pro:batch", name: "OpenAI: GPT-5.5 Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: null, medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 15, output: 90, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 30, output: 135, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.5:batch": { type: "chat", id: "openai/gpt-5.5:batch", name: "OpenAI: GPT-5.5 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 5, output: 22.5, cacheRead: 0.5, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-luna": { type: "chat", id: "openai/gpt-5.6-luna", name: "OpenAI: GPT-5.6 Luna", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 272e3, input: 0.4, output: 1.8, cacheRead: 0.04, cacheWrite: 0.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-luna-pro": { type: "chat", id: "openai/gpt-5.6-luna-pro", name: "OpenAI: GPT-5.6 Luna Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 272e3, input: 0.4, output: 1.8, cacheRead: 0.04, cacheWrite: 0.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-luna-pro:batch": { type: "chat", id: "openai/gpt-5.6-luna-pro:batch", name: "OpenAI: GPT-5.6 Luna Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.1, output: 0.6, cacheRead: 0.01, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.9, cacheRead: 0.02, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-luna:batch": { type: "chat", id: "openai/gpt-5.6-luna:batch", name: "OpenAI: GPT-5.6 Luna (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.1, output: 0.6, cacheRead: 0.01, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.9, cacheRead: 0.02, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-sol": { type: "chat", id: "openai/gpt-5.6-sol", name: "OpenAI: GPT-5.6 Sol", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-sol-pro": { type: "chat", id: "openai/gpt-5.6-sol-pro", name: "OpenAI: GPT-5.6 Sol Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-sol-pro:batch": { type: "chat", id: "openai/gpt-5.6-sol-pro:batch", name: "OpenAI: GPT-5.6 Sol Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-sol:batch": { type: "chat", id: "openai/gpt-5.6-sol:batch", name: "OpenAI: GPT-5.6 Sol (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-terra": { type: "chat", id: "openai/gpt-5.6-terra", name: "OpenAI: GPT-5.6 Terra", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-terra-pro": { type: "chat", id: "openai/gpt-5.6-terra-pro", name: "OpenAI: GPT-5.6 Terra Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-terra-pro:batch": { type: "chat", id: "openai/gpt-5.6-terra-pro:batch", name: "OpenAI: GPT-5.6 Terra Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1, output: 6, cacheRead: 0.1, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 9, cacheRead: 0.2, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-5.6-terra:batch": { type: "chat", id: "openai/gpt-5.6-terra:batch", name: "OpenAI: GPT-5.6 Terra (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1, output: 6, cacheRead: 0.1, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 9, cacheRead: 0.2, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-astra": { type: "chat", id: "openai/gpt-6-astra", name: "OpenAI: GPT-6 Astra", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5, tiers: [{ inputTokensAbove: 272e3, input: 20, output: 75, cacheRead: 2, cacheWrite: 25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-astra-pro": { type: "chat", id: "openai/gpt-6-astra-pro", name: "OpenAI: GPT-6 Astra Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5, tiers: [{ inputTokensAbove: 272e3, input: 20, output: 75, cacheRead: 2, cacheWrite: 25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-astra-pro:batch": { type: "chat", id: "openai/gpt-6-astra-pro:batch", name: "OpenAI: GPT-6 Astra Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25, tiers: [{ inputTokensAbove: 272e3, input: 10, output: 37.5, cacheRead: 1, cacheWrite: 12.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-astra:batch": { type: "chat", id: "openai/gpt-6-astra:batch", name: "OpenAI: GPT-6 Astra (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25, tiers: [{ inputTokensAbove: 272e3, input: 10, output: 37.5, cacheRead: 1, cacheWrite: 12.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-luna": { type: "chat", id: "openai/gpt-6-luna", name: "OpenAI: GPT-6 Luna", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-luna-pro": { type: "chat", id: "openai/gpt-6-luna-pro", name: "OpenAI: GPT-6 Luna Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-luna-pro:batch": { type: "chat", id: "openai/gpt-6-luna-pro:batch", name: "OpenAI: GPT-6 Luna Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.05, output: 0.25, cacheRead: 5e-3, cacheWrite: 0.0625, tiers: [{ inputTokensAbove: 272e3, input: 0.1, output: 0.375, cacheRead: 0.01, cacheWrite: 0.125 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-luna:batch": { type: "chat", id: "openai/gpt-6-luna:batch", name: "OpenAI: GPT-6 Luna (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.05, output: 0.25, cacheRead: 5e-3, cacheWrite: 0.0625, tiers: [{ inputTokensAbove: 272e3, input: 0.1, output: 0.375, cacheRead: 0.01, cacheWrite: 0.125 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-sol": { type: "chat", id: "openai/gpt-6-sol", name: "OpenAI: GPT-6 Sol", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-sol-pro": { type: "chat", id: "openai/gpt-6-sol-pro", name: "OpenAI: GPT-6 Sol Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-sol-pro:batch": { type: "chat", id: "openai/gpt-6-sol-pro:batch", name: "OpenAI: GPT-6 Sol Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.2, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6-sol:batch": { type: "chat", id: "openai/gpt-6-sol:batch", name: "OpenAI: GPT-6 Sol (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.2, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6.1-sol": { type: "chat", id: "openai/gpt-6.1-sol", name: "OpenAI: GPT-6.1 Sol", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6.1-sol-pro": { type: "chat", id: "openai/gpt-6.1-sol-pro", name: "OpenAI: GPT-6.1 Sol Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6.1-sol-pro:batch": { type: "chat", id: "openai/gpt-6.1-sol-pro:batch", name: "OpenAI: GPT-6.1 Sol Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6.1-sol:batch": { type: "chat", id: "openai/gpt-6.1-sol:batch", name: "OpenAI: GPT-6.1 Sol (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6.1-terra": { type: "chat", id: "openai/gpt-6.1-terra", name: "OpenAI: GPT-6.1 Terra", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true, supportsMidConvoSystemMessages: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6.1-terra-pro": { type: "chat", id: "openai/gpt-6.1-terra-pro", name: "OpenAI: GPT-6.1 Terra Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6.1-terra-pro:batch": { type: "chat", id: "openai/gpt-6.1-terra-pro:batch", name: "OpenAI: GPT-6.1 Terra Pro (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.5, output: 2.5, cacheRead: 0.025, cacheWrite: 0.625, tiers: [{ inputTokensAbove: 272e3, input: 1, output: 3.75, cacheRead: 0.05, cacheWrite: 1.25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-6.1-terra:batch": { type: "chat", id: "openai/gpt-6.1-terra:batch", name: "OpenAI: GPT-6.1 Terra (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.5, output: 2.5, cacheRead: 0.025, cacheWrite: 0.625, tiers: [{ inputTokensAbove: 272e3, input: 1, output: 3.75, cacheRead: 0.05, cacheWrite: 1.25 }] }, contextWindow: 105e4, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-audio": { type: "chat", id: "openai/gpt-audio", name: "OpenAI: GPT Audio", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 2.5, output: 10, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:openai/gpt-audio-mini": { type: "chat", id: "openai/gpt-audio-mini", name: "OpenAI: GPT Audio Mini", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.6, output: 2.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:openai/gpt-chat-latest": { type: "chat", id: "openai/gpt-chat-latest", name: "OpenAI: GPT Chat Latest", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/gpt-oss-120b": { type: "chat", id: "openai/gpt-oss-120b", name: "OpenAI: gpt-oss-120b", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.15, output: 0.6, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 65536, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:openai/gpt-oss-120b:batch": { type: "chat", id: "openai/gpt-oss-120b:batch", name: "OpenAI: gpt-oss-120b (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.0296, output: 0.136, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 117964, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:openai/gpt-oss-20b": { type: "chat", id: "openai/gpt-oss-20b", name: "OpenAI: gpt-oss-20b", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.03, output: 0.13, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 117964, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:openai/gpt-oss-20b:batch": { type: "chat", id: "openai/gpt-oss-20b:batch", name: "OpenAI: gpt-oss-20b (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.024, output: 0.112, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 117964, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:openai/gpt-oss-safeguard-20b": { type: "chat", id: "openai/gpt-oss-safeguard-20b", name: "OpenAI: gpt-oss-safeguard-20b", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.075, output: 0.3, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 65536, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:openai/o3": { type: "chat", id: "openai/o3", name: "OpenAI: o3", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text", "image"], cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/o3-mini:batch": { type: "chat", id: "openai/o3-mini:batch", name: "OpenAI: o3 Mini (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.55, output: 2.2, cacheRead: 0.275, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:openai/o3-pro": { type: "chat", id: "openai/o3-pro", name: "OpenAI: o3 Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text", "image"], cost: { input: 20, output: 80, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/o3:batch": { type: "chat", id: "openai/o3:batch", name: "OpenAI: o3 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text", "image"], cost: { input: 1, output: 4, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openai/o4-mini:batch": { type: "chat", id: "openai/o4-mini:batch", name: "OpenAI: o4 Mini (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text", "image"], cost: { input: 0.55, output: 2.2, cacheRead: 0.1375, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, compat: { thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openrouter/auto": { type: "chat", id: "openrouter/auto", name: "Auto Router", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e6, maxTokens: 4096, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openrouter/auto-beta": { type: "chat", id: "openrouter/auto-beta", name: "Auto Router (Beta)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openrouter/free": { type: "chat", id: "openrouter/free", name: "Free Models Router", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 4096, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:openrouter/fusion": { id: "openrouter/fusion", name: "OpenRouter: Fusion", api: "openai-completions", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 3e4, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, type: "chat" }, "chat:openrouter/pareto-code": { type: "chat", id: "openrouter/pareto-code", name: "Pareto Code Router", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e6, maxTokens: 4096, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:particle-ai/particle-1": { type: "chat", id: "particle-ai/particle-1", name: "Particle AI: Particle-1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 0.05, output: 0.5, cacheRead: 3e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:perceptron/perceptron-mk1.5": { type: "chat", id: "perceptron/perceptron-mk1.5", name: "Perceptron: Perceptron Mk1.5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.15, output: 1.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 36864, maxTokens: 8192, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:prism-ml/ternary-bonsai-2-27b": { type: "chat", id: "prism-ml/ternary-bonsai-2-27b", name: "PrismML: Ternary Bonsai 2 27B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: "medium", high: null, xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 0.075, output: 0.5, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:prism-ml/ternary-bonsai-2-9b": { type: "chat", id: "prism-ml/ternary-bonsai-2-9b", name: "PrismML: Ternary Bonsai 2 9B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.08, output: 0.13, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen-2.5-72b-instruct": { type: "chat", id: "qwen/qwen-2.5-72b-instruct", name: "Qwen2.5 72B Instruct", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.36, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32768, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen-2.5-7b-instruct": { type: "chat", id: "qwen/qwen-2.5-7b-instruct", name: "Qwen: Qwen2.5 7B Instruct", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.1, output: 0.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32768, maxTokens: 29491, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen-plus": { type: "chat", id: "qwen/qwen-plus", name: "Qwen: Qwen-Plus", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.26, output: 0.78, cacheRead: 0.052, cacheWrite: 0.325, tiers: [{ inputTokensAbove: 256e3, input: 0.78, output: 2.34, cacheRead: 0.156, cacheWrite: 0.975 }] }, contextWindow: 1e6, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-14b": { type: "chat", id: "qwen/qwen3-14b", name: "Qwen: Qwen3 14B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.12, output: 0.24, cacheRead: 0, cacheWrite: 0 }, contextWindow: 40960, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-235b-a22b-2507": { type: "chat", id: "qwen/qwen3-235b-a22b-2507", name: "Qwen: Qwen3 235B A22B Instruct 2507", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.09, output: 0.55, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-235b-a22b-thinking-2507": { type: "chat", id: "qwen/qwen3-235b-a22b-thinking-2507", name: "Qwen: Qwen3 235B A22B Thinking 2507", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.45, output: 3.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-30b-a3b": { type: "chat", id: "qwen/qwen3-30b-a3b", name: "Qwen: Qwen3 30B A3B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.12, output: 0.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 40960, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-30b-a3b-instruct-2507": { type: "chat", id: "qwen/qwen3-30b-a3b-instruct-2507", name: "Qwen: Qwen3 30B A3B Instruct 2507", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.1, output: 0.3, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-32b": { type: "chat", id: "qwen/qwen3-32b", name: "Qwen: Qwen3 32B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.08, output: 0.28, cacheRead: 0, cacheWrite: 0 }, contextWindow: 40960, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-coder": { type: "chat", id: "qwen/qwen3-coder", name: "Qwen: Qwen3 Coder 480B A35B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.3, output: 1, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-coder-30b-a3b-instruct": { type: "chat", id: "qwen/qwen3-coder-30b-a3b-instruct", name: "Qwen: Qwen3 Coder 30B A3B Instruct", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.07, output: 0.28, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-coder-flash": { type: "chat", id: "qwen/qwen3-coder-flash", name: "Qwen: Qwen3 Coder Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.195, output: 0.975, cacheRead: 0.039, cacheWrite: 0.24375, tiers: [{ inputTokensAbove: 32e3, input: 0.325, output: 1.625, cacheRead: 0.065, cacheWrite: 0.40625 }, { inputTokensAbove: 128e3, input: 0.52, output: 2.6, cacheRead: 0.104, cacheWrite: 0.65 }] }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-coder-next": { type: "chat", id: "qwen/qwen3-coder-next", name: "Qwen: Qwen3 Coder Next", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.12, output: 0.8, cacheRead: 0.07, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-next-80b-a3b-instruct": { type: "chat", id: "qwen/qwen3-next-80b-a3b-instruct", name: "Qwen: Qwen3 Next 80B A3B Instruct", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 0.09, output: 1.1, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3-vl-235b-a22b-instruct": { type: "chat", id: "qwen/qwen3-vl-235b-a22b-instruct", name: "Qwen: Qwen3 VL 235B A22B Instruct", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.21, output: 1.9, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3-vl-30b-a3b-instruct": { type: "chat", id: "qwen/qwen3-vl-30b-a3b-instruct", name: "Qwen: Qwen3 VL 30B A3B Instruct", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3-vl-30b-a3b-thinking": { type: "chat", id: "qwen/qwen3-vl-30b-a3b-thinking", name: "Qwen: Qwen3 VL 30B A3B Thinking", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text", "image"], cost: { input: 0.29, output: 1, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3-vl-8b-instruct": { type: "chat", id: "qwen/qwen3-vl-8b-instruct", name: "Qwen: Qwen3 VL 8B Instruct", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.25, output: 0.75, cacheRead: 0.12, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.5-122b-a10b": { type: "chat", id: "qwen/qwen3.5-122b-a10b", name: "Qwen: Qwen3.5-122B-A10B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.26, output: 2.08, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.5-27b": { type: "chat", id: "qwen/qwen3.5-27b", name: "Qwen: Qwen3.5-27B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.26, output: 2.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 81920, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.5-35b-a3b": { type: "chat", id: "qwen/qwen3.5-35b-a3b", name: "Qwen: Qwen3.5-35B-A3B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.14, output: 1, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 81920, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.5-397b-a17b": { type: "chat", id: "qwen/qwen3.5-397b-a17b", name: "Qwen: Qwen3.5 397B A17B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.5, output: 3.6, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.5-9b": { type: "chat", id: "qwen/qwen3.5-9b", name: "Qwen: Qwen3.5-9B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.17, output: 0.25, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.5-flash-02-23": { type: "chat", id: "qwen/qwen3.5-flash-02-23", name: "Qwen: Qwen3.5-Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.065, output: 0.26, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.5-plus-02-15": { type: "chat", id: "qwen/qwen3.5-plus-02-15", name: "Qwen: Qwen3.5 Plus 2026-02-15", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.26, output: 1.56, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 256e3, input: 0.325, output: 1.95, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.5-plus-20260420": { type: "chat", id: "qwen/qwen3.5-plus-20260420", name: "Qwen: Qwen3.5 Plus 2026-04-20", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.8, cacheRead: 0, cacheWrite: 0.375, tiers: [{ inputTokensAbove: 256e3, input: 0.375, output: 2.25, cacheRead: 0, cacheWrite: 0.46875 }] }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.6-27b": { type: "chat", id: "qwen/qwen3.6-27b", name: "Qwen: Qwen3.6 27B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.45, output: 2.7, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.6-35b-a3b": { type: "chat", id: "qwen/qwen3.6-35b-a3b", name: "Qwen: Qwen3.6 35B A3B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.1, output: 0.9, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.6-flash": { type: "chat", id: "qwen/qwen3.6-flash", name: "Qwen: Qwen3.6 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.1875, output: 1.125, cacheRead: 0, cacheWrite: 0.234375, tiers: [{ inputTokensAbove: 256e3, input: 0.75, output: 3, cacheRead: 0, cacheWrite: 0.9375 }] }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.6-plus": { type: "chat", id: "qwen/qwen3.6-plus", name: "Qwen: Qwen3.6 Plus", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.325, output: 1.95, cacheRead: 0, cacheWrite: 0.40625, tiers: [{ inputTokensAbove: 256e3, input: 1.3, output: 3.9, cacheRead: 0, cacheWrite: 1.625 }] }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.7-flash": { type: "chat", id: "qwen/qwen3.7-flash", name: "Qwen: Qwen3.7 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.03, output: 0.13, cacheRead: 6e-3, cacheWrite: 0.038, tiers: [{ inputTokensAbove: 32e3, input: 0.1, output: 0.4, cacheRead: 0.02, cacheWrite: 0.125 }, { inputTokensAbove: 256e3, input: 0.2, output: 0.8, cacheRead: 0.04, cacheWrite: 0.25 }] }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.7-max": { type: "chat", id: "qwen/qwen3.7-max", name: "Qwen: Qwen3.7 Max", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 1.475, output: 4.425, cacheRead: 0.295, cacheWrite: 1.84375 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3.7-plus": { type: "chat", id: "qwen/qwen3.7-plus", name: "Qwen: Qwen3.7 Plus", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.32, output: 1.28, cacheRead: 0.064, cacheWrite: 0.4, tiers: [{ inputTokensAbove: 256e3, input: 0.96, output: 3.84, cacheRead: 0.192, cacheWrite: 1.2 }] }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.7-plus:batch": { type: "chat", id: "qwen/qwen3.7-plus:batch", name: "Qwen: Qwen3.7 Plus (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.23, output: 0.92, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.8-2.4t-a95b": { type: "chat", id: "qwen/qwen3.8-2.4t-a95b", name: "Qwen: Qwen3.8 2.4T A95B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, input: ["text"], cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:qwen/qwen3.8-27b": { type: "chat", id: "qwen/qwen3.8-27b", name: "Qwen: Qwen3.8 27B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 0.15, output: 1.875, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.8-flash": { type: "chat", id: "qwen/qwen3.8-flash", name: "Qwen: Qwen3.8 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.47, cacheRead: 0.016, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.8-max-0902": { type: "chat", id: "qwen/qwen3.8-max-0902", name: "Qwen: Qwen3.8 Max (0902)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.8-max-prime": { type: "chat", id: "qwen/qwen3.8-max-prime", name: "Qwen: Qwen3.8 Max Prime", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 4, output: 12, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:qwen/qwen3.8-omni-flash": { type: "chat", id: "qwen/qwen3.8-omni-flash", name: "Qwen: Qwen3.8 Omni Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.47, cacheRead: 0.016, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:recursive/flint-v1.0:free": { type: "chat", id: "recursive/flint-v1.0:free", name: "Recursive: Flint (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:reflection/beam-1.0-501b-a23b": { type: "chat", id: "reflection/beam-1.0-501b-a23b", name: "Reflection: Beam 1.0 501B A23B", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text"], cost: { input: 0.25, output: 1, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:rekaai/reka-edge": { type: "chat", id: "rekaai/reka-edge", name: "Reka Edge", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.1, output: 0.1, cacheRead: 0, cacheWrite: 0 }, contextWindow: 16384, maxTokens: 14745, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:relace/relace-search": { type: "chat", id: "relace/relace-search", name: "Relace: Relace Search", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text"], cost: { input: 1, output: 3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 128e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:sakana/fugu-max": { type: "chat", id: "sakana/fugu-max", name: "Sakana: Fugu Max", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:sakana/fugu-ultra": { type: "chat", id: "sakana/fugu-ultra", name: "Sakana: Fugu Ultra", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 10, output: 45, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:sakana/fugu-ultra-v2": { type: "chat", id: "sakana/fugu-ultra-v2", name: "Sakana: Fugu Ultra v2", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 10, output: 45, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 128e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:sakana/sakana-namazu": { type: "chat", id: "sakana/sakana-namazu", name: "Sakana: Sakana Namazu", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:stepfun/step-3.5-flash": { type: "chat", id: "stepfun/step-3.5-flash", name: "StepFun: Step 3.5 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text"], cost: { input: 0.1, output: 0.3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:stepfun/step-3.7-flash": { type: "chat", id: "stepfun/step-3.7-flash", name: "StepFun: Step 3.7 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 0.2, output: 1.15, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 230400, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:stepfun/step-5-preview": { type: "chat", id: "stepfun/step-5-preview", name: "StepFun: Step 5 Preview", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1, output: 2.7, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 64e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:tencent/hy3": { type: "chat", id: "tencent/hy3", name: "Tencent: Hy3", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.132, output: 0.528, cacheRead: 0.033, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 128e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:tencent/hy3-preview": { type: "chat", id: "tencent/hy3-preview", name: "Tencent: Hy3 preview", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.18, output: 0.6, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:tencent/hy4-preview": { type: "chat", id: "tencent/hy4-preview", name: "Tencent: Hy4 preview", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: null }, input: ["text"], cost: { input: 0.834, output: 2.501, cacheRead: 0.042, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 64e3, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:thinkingmachines/inkling": { type: "chat", id: "thinkingmachines/inkling", name: "Thinking Machines: Inkling", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 1, output: 4.05, cacheRead: 0.17, cacheWrite: 0 }, contextWindow: 524288, maxTokens: 471859, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:thinkingmachines/inkling-small": { type: "chat", id: "thinkingmachines/inkling-small", name: "Thinking Machines: Inkling Small", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.45, output: 1.2, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 524288, maxTokens: 262144, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:thinkingmachines/inkling-small:free": { type: "chat", id: "thinkingmachines/inkling-small:free", name: "Thinking Machines: Inkling Small (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:thinkingmachines/inkling:free": { type: "chat", id: "thinkingmachines/inkling:free", name: "Thinking Machines: Inkling (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:typesafe/jev-router": { type: "chat", id: "typesafe/jev-router", name: "TypeSafe: Jev Router", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:unbiased/pareto-26.10": { type: "chat", id: "unbiased/pareto-26.10", name: "Pareto 26.10", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 0.8, output: 3.2, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:unbiased/pareto-26.9": { type: "chat", id: "unbiased/pareto-26.9", name: "Pareto 26.9", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: false, input: ["text", "image"], cost: { input: 2.5, output: 7.5, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:upstage/solar-mini4": { type: "chat", id: "upstage/solar-mini4", name: "Upstage: Solar Mini 4", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text"], cost: { input: 0.05, output: 0.2, cacheRead: 5e-3, cacheWrite: 0 }, contextWindow: 524288, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:upstage/solar-pro4": { type: "chat", id: "upstage/solar-pro4", name: "Upstage: Solar Pro 4", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: "minimal", low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text"], cost: { input: 0.15, output: 0.6, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 524288, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:x-ai/grok-4.20": { type: "chat", id: "x-ai/grok-4.20", name: "SpaceXAI: Grok 4.20", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 5, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 2e6, maxTokens: 18e5, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:x-ai/grok-4.3": { type: "chat", id: "x-ai/grok-4.3", name: "SpaceXAI: Grok 4.3", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 5, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 9e5, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:x-ai/grok-4.3:batch": { type: "chat", id: "x-ai/grok-4.3:batch", name: "SpaceXAI: Grok 4.3 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 1, output: 2, cacheRead: 0.16, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2, output: 4, cacheRead: 0.32, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 9e5, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:x-ai/grok-4.5": { type: "chat", id: "x-ai/grok-4.5", name: "SpaceXAI: Grok 4.5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.3, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 0.6, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 45e4, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:x-ai/grok-4.6": { type: "chat", id: "x-ai/grok-4.6", name: "SpaceXAI: Grok 4.6", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 45e4, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:x-ai/grok-4.7": { type: "chat", id: "x-ai/grok-4.7", name: "SpaceXAI: Grok 4.7", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 45e4, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:x-ai/grok-build-0.1": { type: "chat", id: "x-ai/grok-build-0.1", name: "SpaceXAI: Grok Build 0.1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null }, input: ["text", "image"], cost: { input: 1, output: 2, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2, output: 4, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 256e3, maxTokens: 230400, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:xiaomi/mimo-v2.5": { type: "chat", id: "xiaomi/mimo-v2.5", name: "Xiaomi: MiMo-V2.5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.4, output: 2, cacheRead: 0.08, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:xiaomi/mimo-v2.5-pro": { type: "chat", id: "xiaomi/mimo-v2.5-pro", name: "Xiaomi: MiMo-V2.5-Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.48, output: 1.8, cacheRead: 0.096, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:xiaomi/mimo-v2.6-flash": { type: "chat", id: "xiaomi/mimo-v2.6-flash", name: "Xiaomi: MiMo-V2.6-Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.14, output: 0.28, cacheRead: 28e-4, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:xiaomi/mimo-v2.6-pro": { type: "chat", id: "xiaomi/mimo-v2.6-pro", name: "Xiaomi: MiMo-V2.6-Pro", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.435, output: 0.87, cacheRead: 36e-4, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:xiaomi/mimo-v2.6-pro-ultraspeed": { type: "chat", id: "xiaomi/mimo-v2.6-pro-ultraspeed", name: "Xiaomi: MiMo-V2.6-Pro-UltraSpeed", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 4.35, output: 8.7, cacheRead: 0.036, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:xingchen-agi/xing4.0-29b-a4b:free": { type: "chat", id: "xingchen-agi/xing4.0-29b-a4b:free", name: "XingChen: Xing4.0 29B A4B (free)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 235929, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-4.5": { type: "chat", id: "z-ai/glm-4.5", name: "Z.ai: GLM 4.5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.6, output: 2.2, cacheRead: 0.11, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 98304, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-4.5-air": { type: "chat", id: "z-ai/glm-4.5-air", name: "Z.ai: GLM 4.5 Air", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.13, output: 0.85, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 98304, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-4.5v": { type: "chat", id: "z-ai/glm-4.5v", name: "Z.ai: GLM 4.5V", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.6, output: 1.8, cacheRead: 0.11, cacheWrite: 0 }, contextWindow: 65536, maxTokens: 16384, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:z-ai/glm-4.6": { type: "chat", id: "z-ai/glm-4.6", name: "Z.ai: GLM 4.6", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.5, output: 2, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-4.6v": { type: "chat", id: "z-ai/glm-4.6v", name: "Z.ai: GLM 4.6V", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 0.9, cacheRead: 0.055, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 32768, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:z-ai/glm-4.7": { type: "chat", id: "z-ai/glm-4.7", name: "Z.ai: GLM 4.7", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.6, output: 2.2, cacheRead: 0.11, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-4.7-flash": { type: "chat", id: "z-ai/glm-4.7-flash", name: "Z.ai: GLM 4.7 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.0605, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 117964, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-5": { type: "chat", id: "z-ai/glm-5", name: "Z.ai: GLM 5", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 0.6, output: 1.9, cacheRead: 0.119, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-5-turbo": { type: "chat", id: "z-ai/glm-5-turbo", name: "Z.ai: GLM 5 Turbo", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 1.2, output: 4, cacheRead: 0.24, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-5.1": { type: "chat", id: "z-ai/glm-5.1", name: "Z.ai: GLM 5.1", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-5.2": { type: "chat", id: "z-ai/glm-5.2", name: "Z.ai: GLM 5.2", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: "xhigh", max: null }, input: ["text"], cost: { input: 6e-3, output: 6.8, cacheRead: 5e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-5.3": { type: "chat", id: "z-ai/glm-5.3", name: "Z.ai: GLM 5.3", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], cost: { input: 0.08, output: 3.6, cacheRead: 0.076, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 943718, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-5.3-flash": { type: "chat", id: "z-ai/glm-5.3-flash", name: "Z.ai: GLM 5.3 Flash", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.0285, output: 0.0923, cacheRead: 0.0285, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:z-ai/glm-5.3-flash:batch": { type: "chat", id: "z-ai/glm-5.3-flash:batch", name: "Z.ai: GLM 5.3 Flash (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.05, output: 0.18, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:z-ai/glm-5.3-flashx": { type: "chat", id: "z-ai/glm-5.3-flashx", name: "Z.ai: GLM 5.3 FlashX", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], cost: { input: 0.37, output: 1.25, cacheRead: 0.09, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "chat:z-ai/glm-5.3-prime": { type: "chat", id: "z-ai/glm-5.3-prime", name: "Z.ai: GLM 5.3 Prime", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], cost: { input: 2.8, output: 8.8, cacheRead: 0.56, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-5.3:batch": { type: "chat", id: "z-ai/glm-5.3:batch", name: "Z.ai: GLM 5.3 (batch)", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], cost: { input: 0.45, output: 2, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true } }, "chat:z-ai/glm-5v-turbo": { type: "chat", id: "z-ai/glm-5v-turbo", name: "Z.ai: GLM 5V Turbo", api: "openai-completions", baseUrl: "https://openrouter.ai/api/v1", provider: "openrouter", reasoning: true, input: ["text", "image"], cost: { input: 1.2, output: 4, cacheRead: 0.24, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 131072, compat: { supportsDeveloperRole: false, thinkingFormat: "openrouter", supportsStrictMode: true, sendSessionAffinityHeaders: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } } }, "openrouter-images": { "image:black-forest-labs/flux-3-image": { type: "image", id: "black-forest-labs/flux-3-image", name: "Black Forest Labs: FLUX 3 Image", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:black-forest-labs/flux-3-image-klein": { type: "image", id: "black-forest-labs/flux-3-image-klein", name: "Black Forest Labs: FLUX 3 Image Klein", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:black-forest-labs/flux.2-flex": { type: "image", id: "black-forest-labs/flux.2-flex", name: "Black Forest Labs: FLUX.2 Flex", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:black-forest-labs/flux.2-klein-4b": { type: "image", id: "black-forest-labs/flux.2-klein-4b", name: "Black Forest Labs: FLUX.2 Klein 4B", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:black-forest-labs/flux.2-max": { type: "image", id: "black-forest-labs/flux.2-max", name: "Black Forest Labs: FLUX.2 Max", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:black-forest-labs/flux.2-pro": { type: "image", id: "black-forest-labs/flux.2-pro", name: "Black Forest Labs: FLUX.2 Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:bytedance-seed/seedream-4.5": { type: "image", id: "bytedance-seed/seedream-4.5", name: "ByteDance Seed: Seedream 4.5", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["image", "text"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:bytedance-seed/seedream-5-0-flash": { type: "image", id: "bytedance-seed/seedream-5-0-flash", name: "ByteDance Seed: Seedream 5.0 Flash", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:bytedance-seed/seedream-5-0-lite": { type: "image", id: "bytedance-seed/seedream-5-0-lite", name: "ByteDance Seed: Seedream 5.0 Lite", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:bytedance-seed/seedream-5-0-pro": { type: "image", id: "bytedance-seed/seedream-5-0-pro", name: "ByteDance Seed: Seedream 5.0 Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:google/gemini-2.5-flash-image": { type: "image", id: "google/gemini-2.5-flash-image", name: "Google: Nano Banana (Gemini 2.5 Flash Image)", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["image", "text"], output: ["image", "text"], cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0.083333 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:google/gemini-3-pro-image": { type: "image", id: "google/gemini-3-pro-image", name: "Google: Nano Banana Pro (Gemini 3 Pro Image)", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["image", "text"], output: ["image", "text"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0.375 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:google/gemini-3-pro-image-preview": { type: "image", id: "google/gemini-3-pro-image-preview", name: "Google: Nano Banana Pro (Gemini 3 Pro Image Preview)", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["image", "text"], output: ["image", "text"], cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0.375 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:google/gemini-3.1-flash-image": { type: "image", id: "google/gemini-3.1-flash-image", name: "Google: Nano Banana 2 (Gemini 3.1 Flash Image)", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["image", "text"], output: ["image", "text"], cost: { input: 0.5, output: 3, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:google/gemini-3.1-flash-image-preview": { type: "image", id: "google/gemini-3.1-flash-image-preview", name: "Google: Nano Banana 2 (Gemini 3.1 Flash Image Preview)", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["image", "text"], output: ["image", "text"], cost: { input: 0.5, output: 3, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:google/gemini-3.1-flash-lite-image": { type: "image", id: "google/gemini-3.1-flash-lite-image", name: "Google: Nano Banana 2 Lite (Gemini 3.1 Flash Lite Image)", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["image", "text"], output: ["image", "text"], cost: { input: 0.25, output: 1.5, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:google/gemini-nano-banana-2.1": { type: "image", id: "google/gemini-nano-banana-2.1", name: "Google: Nano Banana 2.1", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["image", "text"], output: ["image", "text"], cost: { input: 1.5, output: 7.5, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:krea/k3-edit": { type: "image", id: "krea/k3-edit", name: "Krea: K3 Edit", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:krea/krea-2-large": { type: "image", id: "krea/krea-2-large", name: "Krea: Krea 2 Large", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:krea/krea-2-medium": { type: "image", id: "krea/krea-2-medium", name: "Krea: Krea 2 Medium", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:krea/krea-2-medium-turbo": { type: "image", id: "krea/krea-2-medium-turbo", name: "Krea: Krea 2 Medium Turbo", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:meta/muse-image": { type: "image", id: "meta/muse-image", name: "Meta: Muse Image", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:microsoft/mai-image-2.5": { type: "image", id: "microsoft/mai-image-2.5", name: "Microsoft AI: MAI-Image-2.5", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 5, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:microsoft/mai-image-2.5-pro": { type: "image", id: "microsoft/mai-image-2.5-pro", name: "Microsoft AI: MAI-Image-2.5 Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 5, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:microsoft/mai-image-2.6": { type: "image", id: "microsoft/mai-image-2.6", name: "Microsoft AI: MAI-Image-2.6", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 5, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:microsoft/mai-image-2.6-flash": { type: "image", id: "microsoft/mai-image-2.6-flash", name: "Microsoft AI: MAI-Image-2.6 Flash", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 1.75, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:openai/gpt-5-image": { type: "image", id: "openai/gpt-5-image", name: "OpenAI: GPT-5 Image", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["image", "text"], output: ["image", "text"], cost: { input: 10, output: 10, cacheRead: 1.25, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:openai/gpt-5-image-mini": { type: "image", id: "openai/gpt-5-image-mini", name: "OpenAI: GPT-5 Image Mini", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["image", "text"], output: ["image", "text"], cost: { input: 2.5, output: 2, cacheRead: 0.25, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:openai/gpt-5.4-image-2": { type: "image", id: "openai/gpt-5.4-image-2", name: "OpenAI: GPT-5.4 Image 2", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["image", "text"], output: ["image", "text"], cost: { input: 8, output: 15, cacheRead: 2, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:openai/gpt-image-1": { type: "image", id: "openai/gpt-image-1", name: "OpenAI: GPT Image 1", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 10, output: 10, cacheRead: 1.25, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:openai/gpt-image-1-mini": { type: "image", id: "openai/gpt-image-1-mini", name: "OpenAI: GPT Image 1 Mini", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 2.5, output: 2.5, cacheRead: 0.25, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:openai/gpt-image-2": { type: "image", id: "openai/gpt-image-2", name: "OpenAI: GPT Image 2", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 8, output: 8, cacheRead: 2, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:openai/gpt-image-2.5-flare": { type: "image", id: "openai/gpt-image-2.5-flare", name: "OpenAI: GPT Image 2.5 Flare", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 8, output: 8, cacheRead: 2, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:openai/gpt-image-2.5-sunburst": { type: "image", id: "openai/gpt-image-2.5-sunburst", name: "OpenAI: GPT Image 2.5 Sunburst", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 8, output: 8, cacheRead: 2, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:openrouter/auto": { type: "image", id: "openrouter/auto", name: "Auto Router", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:openrouter/auto-beta": { type: "image", id: "openrouter/auto-beta", name: "Auto Router (Beta)", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:qwen/qwen-image-2.1-pro": { type: "image", id: "qwen/qwen-image-2.1-pro", name: "Qwen: Qwen Image 2.1 Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:qwen/qwen-image-2.1-turbo": { type: "image", id: "qwen/qwen-image-2.1-turbo", name: "Qwen: Qwen Image 2.1 Turbo", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:qwen/qwen-image-3": { type: "image", id: "qwen/qwen-image-3", name: "Qwen: Qwen Image 3", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:qwen/qwen-image-3-pro": { type: "image", id: "qwen/qwen-image-3-pro", name: "Qwen: Qwen Image 3 Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v3": { type: "image", id: "recraft/recraft-v3", name: "Recraft: Recraft V3", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4": { type: "image", id: "recraft/recraft-v4", name: "Recraft: Recraft V4", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4-pro": { type: "image", id: "recraft/recraft-v4-pro", name: "Recraft: Recraft V4 Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4-pro-vector": { type: "image", id: "recraft/recraft-v4-pro-vector", name: "Recraft: Recraft V4 Pro Vector", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4-styles": { type: "image", id: "recraft/recraft-v4-styles", name: "Recraft: Recraft V4 Styles", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4-styles-pro": { type: "image", id: "recraft/recraft-v4-styles-pro", name: "Recraft: Recraft V4 Styles Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4-styles-pro-vector": { type: "image", id: "recraft/recraft-v4-styles-pro-vector", name: "Recraft: Recraft V4 Styles Pro Vector", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4-styles-vector": { type: "image", id: "recraft/recraft-v4-styles-vector", name: "Recraft: Recraft V4 Styles Vector", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4-vector": { type: "image", id: "recraft/recraft-v4-vector", name: "Recraft: Recraft V4 Vector", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4.1": { type: "image", id: "recraft/recraft-v4.1", name: "Recraft: Recraft V4.1", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4.1-flash": { type: "image", id: "recraft/recraft-v4.1-flash", name: "Recraft: Recraft V4.1 Flash", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 } }, "image:recraft/recraft-v4.1-pro": { type: "image", id: "recraft/recraft-v4.1-pro", name: "Recraft: Recraft V4.1 Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4.1-pro-vector": { type: "image", id: "recraft/recraft-v4.1-pro-vector", name: "Recraft: Recraft V4.1 Pro Vector", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4.1-utility": { type: "image", id: "recraft/recraft-v4.1-utility", name: "Recraft: Recraft V4.1 Utility", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4.1-utility-pro": { type: "image", id: "recraft/recraft-v4.1-utility-pro", name: "Recraft: Recraft V4.1 Utility Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:recraft/recraft-v4.1-vector": { type: "image", id: "recraft/recraft-v4.1-vector", name: "Recraft: Recraft V4.1 Vector", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:sourceful/riverflow-v2-fast": { type: "image", id: "sourceful/riverflow-v2-fast", name: "Sourceful: Riverflow V2 Fast", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:sourceful/riverflow-v2-pro": { type: "image", id: "sourceful/riverflow-v2-pro", name: "Sourceful: Riverflow V2 Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:sourceful/riverflow-v2.5-fast": { type: "image", id: "sourceful/riverflow-v2.5-fast", name: "Sourceful: Riverflow V2.5 Fast", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:sourceful/riverflow-v2.5-pro": { type: "image", id: "sourceful/riverflow-v2.5-pro", name: "Sourceful: Riverflow V2.5 Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:sourceful/riverflow-v2.6-pro": { type: "image", id: "sourceful/riverflow-v2.6-pro", name: "Sourceful: Riverflow V2.6 Pro", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:tencent/hy-image-v3.5-preview": { type: "image", id: "tencent/hy-image-v3.5-preview", name: "Tencent: Hy Image 3.5 Preview", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:x-ai/grok-imagine-image-2.0": { type: "image", id: "x-ai/grok-imagine-image-2.0", name: "xAI: Grok Imagine Image 2.0", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } }, "image:x-ai/grok-imagine-image-quality": { type: "image", id: "x-ai/grok-imagine-image-quality", name: "SpaceXAI: Grok Imagine Image Quality", api: "openrouter-images", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], output: ["image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } } } }, "typesafe-system-one": { "classifier:~liquid/d1-latest": { type: "classifier", id: "~liquid/d1-latest", name: "LiquidAI: d1 Latest", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.02, output: 0, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 65536, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:~liquid/d1-ultra-latest": { type: "classifier", id: "~liquid/d1-ultra-latest", name: "LiquidAI: d1-ultra Latest", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.042, output: 0, cacheRead: 0.042, cacheWrite: 0 }, contextWindow: 32768, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:~perplexity/pplx-decider-flash-latest": { type: "classifier", id: "~perplexity/pplx-decider-flash-latest", name: "Perplexity: Decider Flash Latest", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.01, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:~perplexity/pplx-decider-latest": { type: "classifier", id: "~perplexity/pplx-decider-latest", name: "Perplexity: Decider Latest", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.02, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:~typesafe/jev-latest": { type: "classifier", id: "~typesafe/jev-latest", name: "TypeSafe: Jev Latest", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:baseten/elephant-1": { type: "classifier", id: "baseten/elephant-1", name: "Baseten: Elephant 1", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.035, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 16384, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:baseten/joey-1": { type: "classifier", id: "baseten/joey-1", name: "Baseten: Joey 1", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.01, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 16384, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:baseten/mammoth-1": { type: "classifier", id: "baseten/mammoth-1", name: "Baseten: Mammoth 1", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.1, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 16384, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:cloudflare/clef": { type: "classifier", id: "cloudflare/clef", name: "Cloudflare: Clef", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.24, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 65536, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:cloudflare/clef-flash": { type: "classifier", id: "cloudflare/clef-flash", name: "Cloudflare: Clef Flash", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.038, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 24576, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:cloudflare/clef-omni": { type: "classifier", id: "cloudflare/clef-omni", name: "Cloudflare: Clef Omni", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.15, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 65536, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:inception/mercury-decide": { type: "classifier", id: "inception/mercury-decide", name: "Inception: Mercury Decide", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.02, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 65536, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:jaredpalmer/kev-4b": { type: "classifier", id: "jaredpalmer/kev-4b", name: "Jared Palmer: Kev 4B", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 8192, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:liquid/d1": { type: "classifier", id: "liquid/d1", name: "LiquidAI: d1", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.02, output: 0, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 65536, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:liquid/d1-ultra": { type: "classifier", id: "liquid/d1-ultra", name: "LiquidAI: d1-ultra", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.042, output: 0, cacheRead: 0.042, cacheWrite: 0 }, contextWindow: 32768, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:liquid/d1.1": { type: "classifier", id: "liquid/d1.1", name: "LiquidAI: d1.1", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.02, output: 0, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 65536, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:microsoft/microsoft-decision-1": { type: "classifier", id: "microsoft/microsoft-decision-1", name: "Microsoft: Microsoft-Decision-1", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32768, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:nace-ai/drex-max": { type: "classifier", id: "nace-ai/drex-max", name: "Nace.AI: Drex Max", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.06, output: 0, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 262144, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:nace-ai/drex-v1.5": { type: "classifier", id: "nace-ai/drex-v1.5", name: "Nace.AI: Drex v1.5", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text"], cost: { input: 0.04, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:nace-ai/drex-v2.0": { type: "classifier", id: "nace-ai/drex-v2.0", name: "Nace.AI: Drex v2.0", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text"], cost: { input: 0.06, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:openai/gpt-6-luna-decisions": { type: "classifier", id: "openai/gpt-6-luna-decisions", name: "OpenAI: GPT-6 Luna Decisions", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.1, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 105e4, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:perplexity/pplx-decider-flash-v1.2": { type: "classifier", id: "perplexity/pplx-decider-flash-v1.2", name: "Perplexity: Decider Flash V1.2", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.01, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:perplexity/pplx-decider-v1.2": { type: "classifier", id: "perplexity/pplx-decider-v1.2", name: "Perplexity: Decider V1.2", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.02, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:respan/span-01": { type: "classifier", id: "respan/span-01", name: "Respan: Span-01", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text"], cost: { input: 0.02, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4096, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:respan/span-01-lite": { type: "classifier", id: "respan/span-01-lite", name: "Respan: Span-01 Lite", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4096, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:respan/span-01-lite:free": { type: "classifier", id: "respan/span-01-lite:free", name: "Respan: Span-01 Lite (free)", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4096, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:respan/span-02": { type: "classifier", id: "respan/span-02", name: "Respan: Span-02", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.01, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:scaledown/classify-1": { type: "classifier", id: "scaledown/classify-1", name: "ScaleDown: Classify-1", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.04, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:togethercomputer/tev1-4b-experimental": { type: "classifier", id: "togethercomputer/tev1-4b-experimental", name: "Together: Tev1 4B Experimental", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32768, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:typesafe/jev-1.13": { type: "classifier", id: "typesafe/jev-1.13", name: "TypeSafe: Jev 1.13", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:typesafe/jev-1.14": { type: "classifier", id: "typesafe/jev-1.14", name: "TypeSafe: Jev 1.14", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text", "image"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:upstage/solar-decide": { type: "classifier", id: "upstage/solar-decide", name: "Upstage: Solar Decide", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text"], cost: { input: 0.05, output: 0, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 524288, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } }, "classifier:upstage/solar-decide-flash": { type: "classifier", id: "upstage/solar-decide-flash", name: "Upstage: Solar Decide Flash", api: "typesafe-system-one", provider: "openrouter", baseUrl: "https://openrouter.ai/api/v1", input: ["text"], cost: { input: 0.05, output: 0, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 524288, compat: { imageInput: "state-image-urls", sendImageOptInHeader: false } } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js +var OPENROUTER_MODELS = flattenChatModelCatalog("openrouter", openrouter_default); +var OPENROUTER_IMAGE_MODELS = flattenImageModelCatalog("openrouter", openrouter_default); +var OPENROUTER_CLASSIFIER_MODELS = flattenClassifierModelCatalog("openrouter", openrouter_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan.json +var qwen_token_plan_default = { "openai-completions": { "chat:deepseek-v3.2": { id: "deepseek-v3.2", name: "DeepSeek V3.2", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 65536, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, type: "chat" }, "chat:deepseek-v4-flash": { id: "deepseek-v4-flash", name: "DeepSeek V4 Flash", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-v4-flash-0731": { id: "deepseek-v4-flash-0731", name: "DeepSeek V4 Flash 0731", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-v4-pro": { id: "deepseek-v4-pro", name: "DeepSeek V4 Pro", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-v4-pro-0813": { id: "deepseek-v4-pro-0813", name: "DeepSeek V4 Pro 0813", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-v4.1-flash": { id: "deepseek-v4.1-flash", name: "DeepSeek V4.1 Flash", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek-v4.1-flash-1017": { id: "deepseek-v4.1-flash-1017", name: "DeepSeek V4.1 Flash 1017", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:glm-5": { id: "glm-5", name: "GLM-5", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 16384, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:glm-5.1": { id: "glm-5.1", name: "GLM-5.1", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 128e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:glm-5.2": { id: "glm-5.2", name: "GLM-5.2", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:glm-5.3": { id: "glm-5.3", name: "GLM-5.3", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:kimi-k2.5": { id: "kimi-k2.5", name: "Kimi K2.5", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 98304, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k2.6": { id: "kimi-k2.6", name: "Kimi K2.6", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k2.7-code": { id: "kimi-k2.7-code", name: "Kimi K2.7 Code", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:MiniMax-M2.5": { id: "MiniMax-M2.5", name: "MiniMax-M2.5", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 196608, maxTokens: 32768, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, type: "chat" }, "chat:qwen3.6-flash": { id: "qwen3.6-flash", name: "Qwen3.6 Flash", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.6-plus": { id: "qwen3.6-plus", name: "Qwen3.6 Plus", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.7-max": { id: "qwen3.7-max", name: "Qwen3.7 Max", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, type: "chat" }, "chat:qwen3.7-plus": { id: "qwen3.7-plus", name: "Qwen3.7 Plus", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.8-flash": { id: "qwen3.8-flash", name: "Qwen3.8 Flash", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.8-max": { id: "qwen3.8-max", name: "Qwen3.8 Max", api: "openai-completions", provider: "qwen-token-plan", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.models.js +var QWEN_TOKEN_PLAN_MODELS = flattenChatModelCatalog("qwen-token-plan", qwen_token_plan_default); +var QWEN_TOKEN_PLAN_IMAGE_MODELS = flattenImageModelCatalog("qwen-token-plan", qwen_token_plan_default); +var QWEN_TOKEN_PLAN_CLASSIFIER_MODELS = flattenClassifierModelCatalog("qwen-token-plan", qwen_token_plan_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan-cn.json +var qwen_token_plan_cn_default = { "openai-completions": { "chat:deepseek-v3.2": { id: "deepseek-v3.2", name: "DeepSeek V3.2", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 65536, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, type: "chat" }, "chat:deepseek-v4-flash": { id: "deepseek-v4-flash", name: "DeepSeek V4 Flash", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-v4-flash-0731": { id: "deepseek-v4-flash-0731", name: "DeepSeek V4 Flash 0731", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-v4-pro": { id: "deepseek-v4-pro", name: "DeepSeek V4 Pro", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-v4-pro-0813": { id: "deepseek-v4-pro-0813", name: "DeepSeek V4 Pro 0813", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-v4.1-flash": { id: "deepseek-v4.1-flash", name: "DeepSeek V4.1 Flash", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek-v4.1-flash-1017": { id: "deepseek-v4.1-flash-1017", name: "DeepSeek V4.1 Flash 1017", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:glm-5": { id: "glm-5", name: "GLM-5", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 16384, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:glm-5.1": { id: "glm-5.1", name: "GLM-5.1", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 202752, maxTokens: 128e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:glm-5.2": { id: "glm-5.2", name: "GLM-5.2", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:glm-5.3": { id: "glm-5.3", name: "GLM-5.3", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:kimi-k2.5": { id: "kimi-k2.5", name: "Kimi K2.5", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 98304, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k2.6": { id: "kimi-k2.6", name: "Kimi K2.6", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k2.7-code": { id: "kimi-k2.7-code", name: "Kimi K2.7 Code", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:MiniMax-M2.5": { id: "MiniMax-M2.5", name: "MiniMax-M2.5", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 196608, maxTokens: 32768, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, type: "chat" }, "chat:qwen3.6-flash": { id: "qwen3.6-flash", name: "Qwen3.6 Flash", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.6-plus": { id: "qwen3.6-plus", name: "Qwen3.6 Plus", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.7-max": { id: "qwen3.7-max", name: "Qwen3.7 Max", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, type: "chat" }, "chat:qwen3.7-plus": { id: "qwen3.7-plus", name: "Qwen3.7 Plus", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.8-flash": { id: "qwen3.8-flash", name: "Qwen3.8 Flash", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.8-max": { id: "qwen3.8-max", name: "Qwen3.8 Max", api: "openai-completions", provider: "qwen-token-plan-cn", baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.models.js +var QWEN_TOKEN_PLAN_CN_MODELS = flattenChatModelCatalog("qwen-token-plan-cn", qwen_token_plan_cn_default); +var QWEN_TOKEN_PLAN_CN_IMAGE_MODELS = flattenImageModelCatalog("qwen-token-plan-cn", qwen_token_plan_cn_default); +var QWEN_TOKEN_PLAN_CN_CLASSIFIER_MODELS = flattenClassifierModelCatalog("qwen-token-plan-cn", qwen_token_plan_cn_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan-individual.json +var qwen_token_plan_individual_default = { "openai-completions": { "chat:deepseek-v4-flash-0731": { id: "deepseek-v4-flash-0731", name: "DeepSeek V4 Flash 0731", api: "openai-completions", provider: "qwen-token-plan-individual", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-v4-pro": { id: "deepseek-v4-pro", name: "DeepSeek V4 Pro", api: "openai-completions", provider: "qwen-token-plan-individual", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:deepseek-v4-pro-0813": { id: "deepseek-v4-pro-0813", name: "DeepSeek V4 Pro 0813", api: "openai-completions", provider: "qwen-token-plan-individual", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:glm-5.2": { id: "glm-5.2", name: "GLM-5.2", api: "openai-completions", provider: "qwen-token-plan-individual", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, type: "chat" }, "chat:qwen3.6-flash": { id: "qwen3.6-flash", name: "Qwen3.6 Flash", api: "openai-completions", provider: "qwen-token-plan-individual", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.7-max": { id: "qwen3.7-max", name: "Qwen3.7 Max", api: "openai-completions", provider: "qwen-token-plan-individual", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, type: "chat" }, "chat:qwen3.7-plus": { id: "qwen3.7-plus", name: "Qwen3.7 Plus", api: "openai-completions", provider: "qwen-token-plan-individual", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: false }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.8-flash": { id: "qwen3.8-flash", name: "Qwen3.8 Flash", api: "openai-completions", provider: "qwen-token-plan-individual", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:qwen3.8-max": { id: "qwen3.8-max", name: "Qwen3.8 Max", api: "openai-completions", provider: "qwen-token-plan-individual", baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStrictMode: true, thinkingFormat: "qwen", supportsDeveloperRole: false, supportsStore: false, supportsReasoningEffort: true }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: null, xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-individual.models.js +var QWEN_TOKEN_PLAN_INDIVIDUAL_MODELS = flattenChatModelCatalog("qwen-token-plan-individual", qwen_token_plan_individual_default); +var QWEN_TOKEN_PLAN_INDIVIDUAL_IMAGE_MODELS = flattenImageModelCatalog("qwen-token-plan-individual", qwen_token_plan_individual_default); +var QWEN_TOKEN_PLAN_INDIVIDUAL_CLASSIFIER_MODELS = flattenClassifierModelCatalog("qwen-token-plan-individual", qwen_token_plan_individual_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/radius.json +var radius_default = { "pi-messages": { "chat:balanced": { id: "balanced", name: "Balanced", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], contextWindow: 1048576, maxTokens: 131072, lab: "Moonshot AI", cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, enabled: true, providers: [{ id: "fireworks", name: "Fireworks AI", credential: "radius", source: "radius" }, { id: "relace", name: "Relace", credential: "radius", source: "radius" }, { id: "sference", name: "sference", credential: "radius", source: "radius" }, { id: "baseten", name: "Baseten", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:cheap": { id: "cheap", name: "Cheap", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], contextWindow: 1e6, maxTokens: 32768, lab: "DeepSeek", cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, enabled: true, providers: [{ id: "fireworks", name: "Fireworks AI", credential: "radius", source: "radius" }, { id: "relace", name: "Relace", credential: "radius", source: "radius" }, { id: "baseten", name: "Baseten", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-fable-5": { id: "claude-fable-5", name: "Claude Fable 5", reasoning: true, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 1e6, maxTokens: 128e3, lab: "Anthropic", cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, enabled: true, providers: [{ id: "anthropic", name: "Anthropic", credential: "radius", source: "radius" }], promptCache: { short: 300, long: 3600 }, api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-fable-5-1": { id: "claude-fable-5-1", name: "Claude Fable 5.1", reasoning: true, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 1e6, maxTokens: 128e3, lab: "Anthropic", cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, enabled: true, providers: [{ id: "anthropic", name: "Anthropic", credential: "radius", source: "radius" }], promptCache: { short: 300, long: 3600 }, api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-haiku-4-5": { id: "claude-haiku-4-5", name: "Claude Haiku 4.5", reasoning: true, input: ["text", "image"], contextWindow: 2e5, maxTokens: 64e3, lab: "Anthropic", cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, enabled: true, providers: [{ id: "anthropic", name: "Anthropic", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-haiku-5-5": { id: "claude-haiku-5-5", name: "Claude Haiku 5.5", reasoning: true, thinkingLevelMap: { minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 1e6, maxTokens: 128e3, lab: "Anthropic", cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 1e5, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] }, enabled: true, providers: [{ id: "anthropic", name: "Anthropic", credential: "radius", source: "radius" }], promptCache: { short: 300, long: 3600 }, api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-5": { id: "claude-opus-4-5", name: "Claude Opus 4.5", reasoning: true, input: ["text", "image"], contextWindow: 2e5, maxTokens: 64e3, lab: "Anthropic", cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, enabled: true, providers: [{ id: "anthropic", name: "Anthropic", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-4-8": { id: "claude-opus-4-8", name: "Claude Opus 4.8", reasoning: true, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 1e6, maxTokens: 128e3, lab: "Anthropic", cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, enabled: true, providers: [{ id: "anthropic", name: "Anthropic", credential: "radius", source: "radius" }], promptCache: { short: 300, long: 3600 }, api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-5": { id: "claude-opus-5", name: "Claude Opus 5", reasoning: true, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 1e6, maxTokens: 128e3, lab: "Anthropic", cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, enabled: true, providers: [{ id: "anthropic", name: "Anthropic", credential: "radius", source: "radius" }], promptCache: { short: 300, long: 3600 }, api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-opus-5-5": { id: "claude-opus-5-5", name: "Claude Opus 5.5", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 1e6, maxTokens: 128e3, lab: "Anthropic", cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5 }, enabled: true, providers: [{ id: "anthropic", name: "Anthropic", credential: "radius", source: "radius" }], promptCache: { short: 300, long: 3600 }, api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-4-5": { id: "claude-sonnet-4-5", name: "Claude Sonnet 4.5", reasoning: true, input: ["text", "image"], contextWindow: 2e5, maxTokens: 64e3, lab: "Anthropic", cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, enabled: true, providers: [{ id: "anthropic", name: "Anthropic", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-5": { id: "claude-sonnet-5", name: "Claude Sonnet 5", reasoning: true, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 1e6, maxTokens: 128e3, lab: "Anthropic", cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, enabled: true, providers: [{ id: "anthropic", name: "Anthropic", credential: "radius", source: "radius" }], promptCache: { short: 300, long: 3600 }, api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:claude-sonnet-5-5": { id: "claude-sonnet-5-5", name: "Claude Sonnet 5.5", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 1e6, maxTokens: 128e3, lab: "Anthropic", cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, enabled: true, providers: [{ id: "anthropic", name: "Anthropic", credential: "radius", source: "radius" }], promptCache: { short: 300, long: 3600 }, api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek-v4.1-flash": { id: "deepseek-v4.1-flash", name: "DeepSeek V4.1 Flash", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], contextWindow: 1e6, maxTokens: 32768, lab: "DeepSeek", cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, enabled: true, providers: [{ id: "fireworks", name: "Fireworks AI", credential: "radius", source: "radius" }, { id: "relace", name: "Relace", credential: "radius", source: "radius" }, { id: "baseten", name: "Baseten", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:glm-5.3": { id: "glm-5.3", name: "GLM-5.3", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], contextWindow: 1e6, maxTokens: 131072, lab: "Z.ai", cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, enabled: true, providers: [{ id: "fireworks", name: "Fireworks AI", credential: "radius", source: "radius" }, { id: "baseten", name: "Baseten", credential: "radius", source: "radius" }, { id: "vercel-ai-gateway", name: "Vercel AI Gateway", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", type: "chat" }, "chat:glm-5.3-flash": { id: "glm-5.3-flash", name: "GLM-5.3 Flash", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text"], contextWindow: 1e6, maxTokens: 131072, lab: "Z.ai", cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, enabled: true, providers: [{ id: "fireworks", name: "Fireworks AI", credential: "radius", source: "radius" }, { id: "relace", name: "Relace", credential: "radius", source: "radius" }, { id: "baseten", name: "Baseten", credential: "radius", source: "radius" }, { id: "sference", name: "sference", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", type: "chat" }, "chat:gpt-5.6-luna": { id: "gpt-5.6-luna", name: "GPT 5.6 Luna", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 272e3, maxTokens: 128e3, lab: "OpenAI", cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 272e3, input: 0.4, output: 1.8, cacheRead: 0.04, cacheWrite: 0.5 }] }, enabled: true, providers: [{ id: "openai", name: "OpenAI", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-sol": { id: "gpt-5.6-sol", name: "GPT 5.6 Sol", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 272e3, maxTokens: 128e3, lab: "OpenAI", cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, enabled: true, providers: [{ id: "openai", name: "OpenAI", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-5.6-terra": { id: "gpt-5.6-terra", name: "GPT 5.6 Terra", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 272e3, maxTokens: 128e3, lab: "OpenAI", cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 5 }] }, enabled: true, providers: [{ id: "openai", name: "OpenAI", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-astra": { id: "gpt-6-astra", name: "GPT 6 Astra", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 272e3, maxTokens: 128e3, lab: "OpenAI", cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5, tiers: [{ inputTokensAbove: 272e3, input: 20, output: 75, cacheRead: 2, cacheWrite: 25 }] }, enabled: true, providers: [{ id: "openai", name: "OpenAI", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-luna": { id: "gpt-6-luna", name: "GPT 6 Luna", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 105e4, maxTokens: 128e3, lab: "OpenAI", cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, enabled: true, providers: [{ id: "openai", name: "OpenAI", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6-sol": { id: "gpt-6-sol", name: "GPT 6 Sol", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 105e4, maxTokens: 128e3, lab: "OpenAI", cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, enabled: true, providers: [{ id: "openai", name: "OpenAI", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:gpt-6.1-sol": { id: "gpt-6.1-sol", name: "GPT 6.1 Sol", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 272e3, maxTokens: 128e3, lab: "OpenAI", cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, enabled: true, providers: [{ id: "openai", name: "OpenAI", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-4.7": { id: "grok-4.7", name: "Grok 4.7", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, input: ["text", "image"], contextWindow: 5e5, maxTokens: 5e5, lab: "xAI", cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, enabled: true, providers: [{ id: "xai", name: "xAI", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:kimi-k3": { id: "kimi-k3", name: "Kimi K3", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, input: ["text", "image"], contextWindow: 1048576, maxTokens: 131072, lab: "Moonshot AI", cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, enabled: true, providers: [{ id: "fireworks", name: "Fireworks AI", credential: "radius", source: "radius" }, { id: "relace", name: "Relace", credential: "radius", source: "radius" }, { id: "sference", name: "sference", credential: "radius", source: "radius" }, { id: "baseten", name: "Baseten", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:minimax-m3.1-flash": { id: "minimax-m3.1-flash", name: "MiniMax M3.1 Flash", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 1e6, maxTokens: 524288, lab: "MiniMax", cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, enabled: true, providers: [{ id: "minimax", name: "MiniMax", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:precise": { id: "precise", name: "Precise", reasoning: true, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: "max" }, input: ["text", "image"], contextWindow: 272e3, maxTokens: 128e3, lab: "OpenAI", cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, enabled: true, providers: [{ id: "openai", name: "OpenAI", credential: "radius", source: "radius" }], api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:recursive/flint": { id: "recursive/flint", name: "Flint (free, trains on data)", reasoning: true, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: null, xhigh: null, max: null }, input: ["text"], contextWindow: 262144, maxTokens: 65536, lab: "Recursive", cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, enabled: true, providers: [{ id: "recursive", name: "Recursive", credential: "radius", source: "radius" }], free: true, api: "pi-messages", provider: "radius", baseUrl: "https://radius.pi.dev/v1", type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/radius.models.js +var RADIUS_MODELS = flattenChatModelCatalog("radius", radius_default); +var RADIUS_IMAGE_MODELS = flattenImageModelCatalog("radius", radius_default); +var RADIUS_CLASSIFIER_MODELS = flattenClassifierModelCatalog("radius", radius_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +var together_default = { "openai-completions": { "chat:deepseek-ai/DeepSeek-V4-Pro-0813": { id: "deepseek-ai/DeepSeek-V4-Pro-0813", name: "DeepSeek V4 Pro 0813", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text"], cost: { input: 1.32, output: 3.96, cacheRead: 0.13, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 384e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null, high: "high", xhigh: null }, type: "chat" }, "chat:deepseek-ai/DeepSeek-V4.1-Flash": { id: "deepseek-ai/DeepSeek-V4.1-Flash", name: "DeepSeek V4.1 Flash", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 384e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta-models/Muse-Spark-Open-816B-A42B": { id: "meta-models/Muse-Spark-Open-816B-A42B", name: "Muse Spark Open", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:MiniMaxAI/MiniMax-M3": { id: "MiniMaxAI/MiniMax-M3", name: "MiniMax-M3", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 524288, maxTokens: 524288, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/Kimi-K3": { id: "moonshotai/Kimi-K3", name: "Kimi K3", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:nvidia/NVIDIA-Nemotron-3.5-Super-VL": { id: "nvidia/NVIDIA-Nemotron-3.5-Super-VL", name: "Nemotron 3.5 Super VL 120B A12B", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-oss-120b": { id: "openai/gpt-oss-120b", name: "GPT OSS 120B", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text"], cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "openai", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: null, max: null }, type: "chat" }, "chat:Qwen/Qwen3.5-9B": { id: "Qwen/Qwen3.5-9B", name: "Qwen3.5 9B", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.17, output: 0.25, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:Qwen/Qwen3.6-Plus": { id: "Qwen/Qwen3.6-Plus", name: "Qwen3.6 Plus", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text"], cost: { input: 0.5, output: 3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65536, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, type: "chat" }, "chat:Qwen/Qwen3.7-Max": { id: "Qwen/Qwen3.7-Max", name: "Qwen3.7 Max", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text"], cost: { input: 2.5, output: 7.5, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, type: "chat" }, "chat:reflection/Beam-1.0-501B-A23B": { id: "reflection/Beam-1.0-501B-A23B", name: "Beam 1.0 501B A23B", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text"], cost: { input: 0.4, output: 1.2, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, type: "chat" }, "chat:thinkingmachines/Inkling": { id: "thinkingmachines/Inkling", name: "Inkling", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1, output: 4.05, cacheRead: 0.17, cacheWrite: 0 }, contextWindow: 524288, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:zai-org/GLM-5.2": { id: "zai-org/GLM-5.2", name: "GLM-5.2", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1048575, maxTokens: 164e3, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, type: "chat" }, "chat:zai-org/GLM-5.3": { id: "zai-org/GLM-5.3", name: "GLM-5.3", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1048575, maxTokens: 262144, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, type: "chat" }, "chat:zai-org/GLM-5.3-Flash": { id: "zai-org/GLM-5.3-Flash", name: "GLM-5.3-Flash", api: "openai-completions", provider: "together", baseUrl: "https://api.together.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1048575, maxTokens: 4e5, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "together", supportsLongCacheRetention: false, supportsStrictMode: false }, thinkingLevelMap: { minimal: null, low: null, medium: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/together.models.js +var TOGETHER_MODELS = flattenChatModelCatalog("together", together_default); +var TOGETHER_IMAGE_MODELS = flattenImageModelCatalog("together", together_default); +var TOGETHER_CLASSIFIER_MODELS = flattenClassifierModelCatalog("together", together_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/typesafe.json +var typesafe_default = { "typesafe-system-one": { "classifier:jev-latest": { type: "classifier", id: "jev-latest", name: "Jev", api: "typesafe-system-one", provider: "typesafe", baseUrl: "https://api.typesafe.ai/v1/", input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 64e3, compat: { imageInput: "assets", sendImageOptInHeader: true } } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/typesafe.models.js +var TYPESAFE_MODELS = flattenChatModelCatalog("typesafe", typesafe_default); +var TYPESAFE_IMAGE_MODELS = flattenImageModelCatalog("typesafe", typesafe_default); +var TYPESAFE_CLASSIFIER_MODELS = flattenClassifierModelCatalog("typesafe", typesafe_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +var vercel_ai_gateway_default = { "anthropic-messages": { "chat:alibaba/qwen-3-14b": { id: "alibaba/qwen-3-14b", name: "Qwen3-14B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.12, output: 0.24, cacheRead: 0, cacheWrite: 0 }, contextWindow: 40960, maxTokens: 16384, type: "chat" }, "chat:alibaba/qwen-3-235b": { id: "alibaba/qwen-3-235b", name: "Qwen3 235B A22B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.22, output: 0.88, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 16384, type: "chat" }, "chat:alibaba/qwen-3-30b": { id: "alibaba/qwen-3-30b", name: "Qwen3-30B-A3B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.12, output: 0.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 40960, maxTokens: 16384, type: "chat" }, "chat:alibaba/qwen-3-32b": { id: "alibaba/qwen-3-32b", name: "Qwen 3 32B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, type: "chat" }, "chat:alibaba/qwen3-coder": { id: "alibaba/qwen3-coder", name: "Qwen3 Coder 480B A35B Instruct", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.22, output: 1.8, cacheRead: 0.022, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, type: "chat" }, "chat:alibaba/qwen3-coder-30b-a3b": { id: "alibaba/qwen3-coder-30b-a3b", name: "Qwen 3 Coder 30B A3B Instruct", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 8192, type: "chat" }, "chat:alibaba/qwen3-coder-next": { id: "alibaba/qwen3-coder-next", name: "Qwen3 Coder Next", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.5, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 256e3, type: "chat" }, "chat:alibaba/qwen3-max-thinking": { id: "alibaba/qwen3-max-thinking", name: "Qwen 3 Max Thinking", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 1.2, output: 6, cacheRead: 0.24, cacheWrite: 0, tiers: [{ inputTokensAbove: 32e3, input: 2.4, output: 12, cacheRead: 0.48, cacheWrite: 0 }, { inputTokensAbove: 128e3, input: 3, output: 15, cacheRead: 0.6, cacheWrite: 0 }] }, contextWindow: 256e3, maxTokens: 65536, type: "chat" }, "chat:alibaba/qwen3-next-80b-a3b-instruct": { id: "alibaba/qwen3-next-80b-a3b-instruct", name: "Qwen3 Next 80B A3B Instruct", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262114, maxTokens: 262114, type: "chat" }, "chat:alibaba/qwen3-next-80b-a3b-thinking": { id: "alibaba/qwen3-next-80b-a3b-thinking", name: "Qwen3 Next 80B A3B Thinking", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 1.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, type: "chat" }, "chat:alibaba/qwen3-vl-instruct": { id: "alibaba/qwen3-vl-instruct", name: "Qwen3 VL 235B A22B Instruct", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.2, output: 0.88, cacheRead: 0.11, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.5-flash": { id: "alibaba/qwen3.5-flash", name: "Qwen 3.5 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.1, output: 0.4, cacheRead: 0.01, cacheWrite: 0.125 }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.5-plus": { id: "alibaba/qwen3.5-plus", name: "Qwen 3.5 Plus", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.4, output: 2.4, cacheRead: 0.04, cacheWrite: 0.5, tiers: [{ inputTokensAbove: 256e3, input: 0.5, output: 3, cacheRead: 0.05, cacheWrite: 0.625 }] }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.6-27b": { id: "alibaba/qwen3.6-27b", name: "Qwen 3.6 27B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.6, output: 3.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 256e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.6-plus": { id: "alibaba/qwen3.6-plus", name: "Qwen 3.6 Plus", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.5, output: 3, cacheRead: 0.05, cacheWrite: 0.625, tiers: [{ inputTokensAbove: 255999, input: 2, output: 6, cacheRead: 0.2, cacheWrite: 2.5 }] }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.7-flash": { id: "alibaba/qwen3.7-flash", name: "Qwen 3.7 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.03, output: 0.13, cacheRead: 6e-3, cacheWrite: 0.038, tiers: [{ inputTokensAbove: 31999, input: 0.1, output: 0.4, cacheRead: 0.02, cacheWrite: 0.125 }, { inputTokensAbove: 255999, input: 0.2, output: 0.8, cacheRead: 0.04, cacheWrite: 0.25 }] }, contextWindow: 991e3, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.7-max": { id: "alibaba/qwen3.7-max", name: "Qwen 3.7 Max", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 2.5, output: 7.5, cacheRead: 0.5, cacheWrite: 3.125 }, contextWindow: 991e3, maxTokens: 64e3, type: "chat" }, "chat:alibaba/qwen3.7-plus": { id: "alibaba/qwen3.7-plus", name: "Qwen 3.7 Plus", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.4, output: 1.6, cacheRead: 0.08, cacheWrite: 0.5, tiers: [{ inputTokensAbove: 255999, input: 1.2, output: 4.8, cacheRead: 0.24, cacheWrite: 1.5 }] }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.8-2.4t-a95b": { id: "alibaba/qwen3.8-2.4t-a95b", name: "Qwen3.8 2.4T A95B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.8-27b": { id: "alibaba/qwen3.8-27b", name: "Qwen3.8 27B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.5, output: 3, cacheRead: 0.1, cacheWrite: 0.625 }, contextWindow: 1e6, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.8-flash": { id: "alibaba/qwen3.8-flash", name: "Qwen 3.8 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.47, cacheRead: 0.016, cacheWrite: 0.2 }, contextWindow: 991e3, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.8-max": { id: "alibaba/qwen3.8-max", name: "Qwen 3.8 Max", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.8-max-0902": { id: "alibaba/qwen3.8-max-0902", name: "Qwen3.8 Max 0902", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 2.5 }, contextWindow: 991e3, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.8-max-prime": { id: "alibaba/qwen3.8-max-prime", name: "Qwen 3.8 Max Prime", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 4, output: 12, cacheRead: 0.5, cacheWrite: 5 }, contextWindow: 1e6, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:alibaba/qwen3.8-omni-flash": { id: "alibaba/qwen3.8-omni-flash", name: "Qwen 3.8 Omni Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.47, cacheRead: 0.016, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:amazon/nova-2-lite": { id: "amazon/nova-2-lite", name: "Nova 2 Lite", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.33, output: 2.75, cacheRead: 0.0825, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 1e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:amazon/nova-lite": { id: "amazon/nova-lite", name: "Nova Lite", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.06, output: 0.24, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 3e5, maxTokens: 8192, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:amazon/nova-micro": { id: "amazon/nova-micro", name: "Nova Micro", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.035, output: 0.14, cacheRead: 87e-4, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, type: "chat" }, "chat:amazon/nova-pro": { id: "amazon/nova-pro", name: "Nova Pro", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.8, output: 3.2, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 3e5, maxTokens: 8192, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-fable-5": { id: "anthropic/claude-fable-5", name: "Claude Fable 5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true }, cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-fable-5-batch": { id: "anthropic/claude-fable-5-batch", name: "Claude Fable 5 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true }, cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-fable-5.1": { id: "anthropic/claude-fable-5.1", name: "Claude Fable 5.1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true }, cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-fable-5.1-batch": { id: "anthropic/claude-fable-5.1-batch", name: "Claude Fable 5.1 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true }, cost: { input: 5, output: 25, cacheRead: 0.125, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { off: null, xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-haiku-4.5": { id: "anthropic/claude-haiku-4.5", name: "Claude Haiku 4.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-haiku-4.5-batch": { id: "anthropic/claude-haiku-4.5-batch", name: "Claude Haiku 4.5 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-haiku-5.5": { id: "anthropic/claude-haiku-5.5", name: "Claude Haiku 5.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 1e5, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-haiku-5.5-batch": { id: "anthropic/claude-haiku-5.5-batch", name: "Claude Haiku 5.5 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 0.05, output: 0.25, cacheRead: 5e-3, cacheWrite: 0.0625, tiers: [{ inputTokensAbove: 1e5, input: 0.25, output: 1.25, cacheRead: 0.025, cacheWrite: 0.3125 }] }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-4.5": { id: "anthropic/claude-opus-4.5", name: "Claude Opus 4.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-4.5-batch": { id: "anthropic/claude-opus-4.5-batch", name: "Claude Opus 4.5 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2.5, output: 12.5, cacheRead: 0.25, cacheWrite: 3.125 }, contextWindow: 2e5, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-4.6": { id: "anthropic/claude-opus-4.6", name: "Claude Opus 4.6", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true }, cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-4.6-batch": { id: "anthropic/claude-opus-4.6-batch", name: "Claude Opus 4.6 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true }, cost: { input: 2.5, output: 12.5, cacheRead: 0.25, cacheWrite: 3.125 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-4.7": { id: "anthropic/claude-opus-4.7", name: "Claude Opus 4.7", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-4.7-batch": { id: "anthropic/claude-opus-4.7-batch", name: "Claude Opus 4.7 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 2.5, output: 12.5, cacheRead: 0.25, cacheWrite: 3.125 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-4.8": { id: "anthropic/claude-opus-4.8", name: "Claude Opus 4.8", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-4.8-batch": { id: "anthropic/claude-opus-4.8-batch", name: "Claude Opus 4.8 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 2.5, output: 12.5, cacheRead: 0.25, cacheWrite: 3.125 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-4.8-fast": { id: "anthropic/claude-opus-4.8-fast", name: "Claude Opus 4.8 (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-5": { id: "anthropic/claude-opus-5", name: "Claude Opus 5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-5-batch": { id: "anthropic/claude-opus-5-batch", name: "Claude Opus 5 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 2.5, output: 12.5, cacheRead: 0.25, cacheWrite: 3.125 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-5-fast": { id: "anthropic/claude-opus-5-fast", name: "Claude Opus 5 (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-5.5": { id: "anthropic/claude-opus-5.5", name: "Claude Opus 5.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-5.5-batch": { id: "anthropic/claude-opus-5.5-batch", name: "Claude Opus 5.5 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-opus-5.5-fast": { id: "anthropic/claude-opus-5.5-fast", name: "Claude Opus 5.5 (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 8, output: 40, cacheRead: 0.4, cacheWrite: 10 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-sonnet-4.5": { id: "anthropic/claude-sonnet-4.5", name: "Claude Sonnet 4.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75, tiers: [{ inputTokensAbove: 2e5, input: 6, output: 22.5, cacheRead: 0.6, cacheWrite: 7.5 }] }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-sonnet-4.5-batch": { id: "anthropic/claude-sonnet-4.5-batch", name: "Claude Sonnet 4.5 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 1.875, tiers: [{ inputTokensAbove: 2e5, input: 3, output: 11.25, cacheRead: 0.3, cacheWrite: 3.75 }] }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-sonnet-4.6": { id: "anthropic/claude-sonnet-4.6", name: "Claude Sonnet 4.6", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true }, cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-sonnet-4.6-batch": { id: "anthropic/claude-sonnet-4.6-batch", name: "Claude Sonnet 4.6 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true }, cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 1.875 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-sonnet-5": { id: "anthropic/claude-sonnet-5", name: "Claude Sonnet 5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true }, cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-sonnet-5-batch": { id: "anthropic/claude-sonnet-5-batch", name: "Claude Sonnet 5 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true }, cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-sonnet-5.5": { id: "anthropic/claude-sonnet-5.5", name: "Claude Sonnet 5.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:anthropic/claude-sonnet-5.5-batch": { id: "anthropic/claude-sonnet-5.5-batch", name: "Claude Sonnet 5.5 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true, forceAdaptiveThinking: true, supportsTemperature: false }, cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", max: "max" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:bytedance/seed-1.6": { id: "bytedance/seed-1.6", name: "Seed 1.6", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.25, output: 2, cacheRead: 0.05, cacheWrite: 0, tiers: [{ inputTokensAbove: 128e3, input: 0.5, output: 4, cacheRead: 0.05, cacheWrite: 0 }] }, contextWindow: 256e3, maxTokens: 32e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:bytedance/seed-1.8": { id: "bytedance/seed-1.8", name: "Bytedance Seed 1.8", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.25, output: 2, cacheRead: 0.05, cacheWrite: 0, tiers: [{ inputTokensAbove: 128e3, input: 0.5, output: 4, cacheRead: 0.05, cacheWrite: 0 }] }, contextWindow: 256e3, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:bytedance/seed-2.1-turbo": { id: "bytedance/seed-2.1-turbo", name: "Seed 2.1 Turbo", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.5, output: 2.5, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:callstack/apex": { id: "callstack/apex", name: "Apex", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.5, output: 3, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:cohere/command-a": { id: "cohere/command-a", name: "Command A", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 2.5, output: 10, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 8e3, type: "chat" }, "chat:deepseek/deepseek-r1": { id: "deepseek/deepseek-r1", name: "DeepSeek-R1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 1.35, output: 5.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, type: "chat" }, "chat:deepseek/deepseek-v3.1": { id: "deepseek/deepseek-v3.1", name: "DeepSeek V3.1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.25, output: 0.95, cacheRead: 0.13, cacheWrite: 0 }, contextWindow: 163840, maxTokens: 128e3, type: "chat" }, "chat:deepseek/deepseek-v3.2": { id: "deepseek/deepseek-v3.2", name: "DeepSeek V3.2", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.62, output: 1.85, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8e3, type: "chat" }, "chat:deepseek/deepseek-v3.2-thinking": { id: "deepseek/deepseek-v3.2-thinking", name: "DeepSeek V3.2 Thinking", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.62, output: 1.85, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8e3, type: "chat" }, "chat:deepseek/deepseek-v4-flash": { id: "deepseek/deepseek-v4-flash", name: "DeepSeek V4 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.13, output: 0.26, cacheRead: 0.028, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, type: "chat" }, "chat:deepseek/deepseek-v4-flash-0731": { id: "deepseek/deepseek-v4-flash-0731", name: "DeepSeek V4 Flash 0731", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.076, output: 0.153, cacheRead: 0.014, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, type: "chat" }, "chat:deepseek/deepseek-v4-flash-vision-exp": { id: "deepseek/deepseek-v4-flash-vision-exp", name: "DeepSeek V4 Flash Vision Exp", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.2156, output: 0.6468, cacheRead: 68e-4, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek/deepseek-v4-pro": { id: "deepseek/deepseek-v4-pro", name: "DeepSeek V4 Pro", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.66, output: 1.98, cacheRead: 0.022, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, type: "chat" }, "chat:deepseek/deepseek-v4-pro-0813": { id: "deepseek/deepseek-v4-pro-0813", name: "DeepSeek V4 Pro 0813", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.66, output: 1.98, cacheRead: 0.066, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 384e3, type: "chat" }, "chat:deepseek/deepseek-v4.1-flash": { id: "deepseek/deepseek-v4.1-flash", name: "DeepSeek V4.1 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 1.2, cacheRead: 7e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek/deepseek-v4.1-flash-1017": { id: "deepseek/deepseek-v4.1-flash-1017", name: "DeepSeek V4.1 Flash 1017", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 1.2, cacheRead: 7e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek/deepseek-v4.1-flash-1017-fast": { id: "deepseek/deepseek-v4.1-flash-1017-fast", name: "DeepSeek V4.1 Flash 1017 Fast", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.6, output: 2.4, cacheRead: 0.014, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:deepseek/deepseek-v4.1-flash-fast": { id: "deepseek/deepseek-v4.1-flash-fast", name: "DeepSeek V4.1 Flash Fast", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.6, output: 2.4, cacheRead: 0.014, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:fireworks/ember-1": { id: "fireworks/ember-1", name: "Ember-1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-2.5-flash": { id: "google/gemini-2.5-flash", name: "Gemini 2.5 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65535, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-2.5-flash-batch": { id: "google/gemini-2.5-flash-batch", name: "Gemini 2.5 Flash (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 1.25, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-2.5-flash-lite": { id: "google/gemini-2.5-flash-lite", name: "Gemini 2.5 Flash Lite", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.1, output: 0.4, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65535, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-2.5-flash-lite-batch": { id: "google/gemini-2.5-flash-lite-batch", name: "Gemini 2.5 Flash Lite (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.05, output: 0.2, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 65535, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-2.5-pro": { id: "google/gemini-2.5-pro", name: "Gemini 2.5 Pro", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0 }] }, contextWindow: 1048576, maxTokens: 65535, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-2.5-pro-batch": { id: "google/gemini-2.5-pro-batch", name: "Gemini 2.5 Pro (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.625, output: 5, cacheRead: 0.125, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 1.25, output: 7.5, cacheRead: 0.25, cacheWrite: 0 }] }, contextWindow: 1048576, maxTokens: 65535, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3-flash": { id: "google/gemini-3-flash", name: "Gemini 3 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.5, output: 3, cacheRead: 0.05, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 0.5, output: 3, cacheRead: 0.05, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 65e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3-flash-batch": { id: "google/gemini-3-flash-batch", name: "Gemini 3 Flash (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.25, output: 1.5, cacheRead: 0.05, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 0.25, output: 1.5, cacheRead: 0.05, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.1-flash-lite": { id: "google/gemini-3.1-flash-lite", name: "Gemini 3.1 Flash Lite", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.25, output: 1.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.1-flash-lite-batch": { id: "google/gemini-3.1-flash-lite-batch", name: "Gemini 3.1 Flash Lite (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.125, output: 0.75, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.1-pro-preview": { id: "google/gemini-3.1-pro-preview", name: "Gemini 3.1 Pro Preview", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.1-pro-preview-batch": { id: "google/gemini-3.1-pro-preview-batch", name: "Gemini 3.1 Pro Preview (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 6, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2, output: 9, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.5-flash": { id: "google/gemini-3.5-flash", name: "Gemini 3.5 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.5, output: 9, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.5-flash-batch": { id: "google/gemini-3.5-flash-batch", name: "Gemini 3.5 Flash (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.5-flash-lite": { id: "google/gemini-3.5-flash-lite", name: "Gemini 3.5 Flash Lite", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 2.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.5-flash-lite-batch": { id: "google/gemini-3.5-flash-lite-batch", name: "Gemini 3.5 Flash Lite (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 1.25, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.6-flash": { id: "google/gemini-3.6-flash", name: "Gemini 3.6 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.6-flash-batch": { id: "google/gemini-3.6-flash-batch", name: "Gemini 3.6 Flash (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.375, output: 1.875, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 64e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.7-flash": { id: "google/gemini-3.7-flash", name: "Gemini 3.7 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65535, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.7-flash-batch": { id: "google/gemini-3.7-flash-batch", name: "Gemini 3.7 Flash (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.375, output: 1.875, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65535, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-3.8-flash": { id: "google/gemini-3.8-flash", name: "Gemini 3.8 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.75, output: 3.75, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65535, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemini-4-argon": { id: "google/gemini-4-argon", name: "Gemini 4 Argon", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 1e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemma-4-26b-a4b-it": { id: "google/gemma-4-26b-a4b-it", name: "Google Gemma 4 26B A4B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:google/gemma-4-31b-it": { id: "google/gemma-4-31b-it", name: "Gemma 4 31B IT", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.14, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:inception/mercury-2": { id: "inception/mercury-2", name: "Mercury 2", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.25, output: 0.75, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 128e3, type: "chat" }, "chat:inception/mercury-2.5": { id: "inception/mercury-2.5", name: "Mercury 2.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.04, output: 0.15, cacheRead: 4e-3, cacheWrite: 0 }, contextWindow: 26e4, maxTokens: 65536, type: "chat" }, "chat:inception/mercury-3": { id: "inception/mercury-3", name: "Mercury 3", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.1, output: 0.35, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, type: "chat" }, "chat:inception/mercury-coder-small": { id: "inception/mercury-coder-small", name: "Mercury Coder Small Beta", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.25, output: 1, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32e3, maxTokens: 16384, type: "chat" }, "chat:inclusionai/ling-3.0-flash": { id: "inclusionai/ling-3.0-flash", name: "Ling 3.0 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.021, output: 0.063, cacheRead: 42e-4, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 32e3, type: "chat" }, "chat:inclusionai/ling-3.0-flash-fin": { id: "inclusionai/ling-3.0-flash-fin", name: "Ling 3.0 Flash Fin", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.075, output: 0.22, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 32e3, type: "chat" }, "chat:inclusionai/ling-3.0-flash-sante": { id: "inclusionai/ling-3.0-flash-sante", name: "Ling 3.0 Flash Sante", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.075, output: 0.22, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 32e3, type: "chat" }, "chat:inclusionai/ling-3.0-flash-vl": { id: "inclusionai/ling-3.0-flash-vl", name: "Ling 3.0 Flash VL", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.075, output: 0.22, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 32e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:inclusionai/ling-3.1-flash": { id: "inclusionai/ling-3.1-flash", name: "Ling 3.1 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 0.9, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, type: "chat" }, "chat:inclusionai/ling-3.1-flash-1019": { id: "inclusionai/ling-3.1-flash-1019", name: "Ling 3.1 Flash 1019", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 262144, type: "chat" }, "chat:interfaze/interfaze-beta": { id: "interfaze/interfaze-beta", name: "Interfaze Beta", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.5, output: 3.5, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 32e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:liquid/lfm2.5-24b-a2b": { id: "liquid/lfm2.5-24b-a2b", name: "LFM2.5-24B-A2B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.05, output: 0.7, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8200, type: "chat" }, "chat:meituan/longcat-2.5-preview": { id: "meituan/longcat-2.5-preview", name: "LongCat 2.5 Preview", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 1.2, cacheRead: 6e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/llama-3.1-70b": { id: "meta/llama-3.1-70b", name: "Llama 3.1 70B Instruct", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.72, output: 0.72, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, type: "chat" }, "chat:meta/llama-3.1-8b": { id: "meta/llama-3.1-8b", name: "Llama 3.1 8B Instruct", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.22, output: 0.22, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, type: "chat" }, "chat:meta/llama-3.3-70b": { id: "meta/llama-3.3-70b", name: "Llama 3.3 70B Instruct", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.72, output: 0.72, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, type: "chat" }, "chat:meta/llama-4-maverick": { id: "meta/llama-4-maverick", name: "Llama 4 Maverick 17B Instruct", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.24, output: 0.97, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/llama-4-scout": { id: "meta/llama-4-scout", name: "Llama 4 Scout 17B Instruct", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.17, output: 0.66, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 8192, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/muse-glimmer-30b": { id: "meta/muse-glimmer-30b", name: "Muse Glimmer 30B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.35, output: 1.5, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/muse-spark-1.1": { id: "meta/muse-spark-1.1", name: "Muse Spark 1.1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/muse-spark-1.2": { id: "meta/muse-spark-1.2", name: "Muse Spark 1.2", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/muse-spark-1.2-contributor": { id: "meta/muse-spark-1.2-contributor", name: "Muse Spark 1.2 Contributor", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.1, output: 0.2, cacheRead: 2e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/muse-spark-1.3": { id: "meta/muse-spark-1.3", name: "Muse Spark 1.3", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/muse-spark-1.3-contributor": { id: "meta/muse-spark-1.3-contributor", name: "Muse Spark 1.3 Contributor", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.1, output: 0.2, cacheRead: 2e-3, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/muse-spark-open": { id: "meta/muse-spark-open", name: "Muse Spark Open", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 4.25, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:meta/muse-wonder-1.0": { id: "meta/muse-wonder-1.0", name: "Muse Wonder", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:minimax/minimax-m2": { id: "minimax/minimax-m2", name: "MiniMax M2", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 1.2, cacheRead: 0.03, cacheWrite: 0.375 }, contextWindow: 205e3, maxTokens: 205e3, type: "chat" }, "chat:minimax/minimax-m2.1": { id: "minimax/minimax-m2.1", name: "MiniMax M2.1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 1.2, cacheRead: 0.03, cacheWrite: 0.375 }, contextWindow: 204800, maxTokens: 131072, type: "chat" }, "chat:minimax/minimax-m2.1-lightning": { id: "minimax/minimax-m2.1-lightning", name: "MiniMax M2.1 Lightning", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 2.4, cacheRead: 0.03, cacheWrite: 0.375 }, contextWindow: 204800, maxTokens: 131072, type: "chat" }, "chat:minimax/minimax-m2.5": { id: "minimax/minimax-m2.5", name: "MiniMax M2.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 1.2, cacheRead: 0.03, cacheWrite: 0.375 }, contextWindow: 204800, maxTokens: 131e3, type: "chat" }, "chat:minimax/minimax-m2.5-highspeed": { id: "minimax/minimax-m2.5-highspeed", name: "MiniMax M2.5 High Speed", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.6, output: 2.4, cacheRead: 0.03, cacheWrite: 0.375 }, contextWindow: 204800, maxTokens: 131e3, type: "chat" }, "chat:minimax/minimax-m2.7": { id: "minimax/minimax-m2.7", name: "MiniMax M2.7", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0.375 }, contextWindow: 204800, maxTokens: 131e3, type: "chat" }, "chat:minimax/minimax-m2.7-highspeed": { id: "minimax/minimax-m2.7-highspeed", name: "MiniMax M2.7 High Speed", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.6, output: 2.4, cacheRead: 0.06, cacheWrite: 0.375 }, contextWindow: 204800, maxTokens: 131100, type: "chat" }, "chat:minimax/minimax-m3": { id: "minimax/minimax-m3", name: "MiniMax M3", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0 }, contextWindow: 512e3, maxTokens: 512e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:minimax/minimax-m3.1-flash": { id: "minimax/minimax-m3.1-flash", name: "MiniMax-M3.1-Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral/codestral": { id: "mistral/codestral", name: "Mistral Codestral", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 0.9, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 4e3, type: "chat" }, "chat:mistral/ministral-14b": { id: "mistral/ministral-14b", name: "Ministral 14B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.2, output: 0.2, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral/ministral-3b": { id: "mistral/ministral-3b", name: "Ministral 3B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.1, output: 0.1, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 4e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral/ministral-8b": { id: "mistral/ministral-8b", name: "Ministral 8B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.15, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 4e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral/mistral-large-3": { id: "mistral/mistral-large-3", name: "Mistral Large 3", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.5, output: 1.5, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral/mistral-large-4": { id: "mistral/mistral-large-4", name: "Mistral Large 4", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.7, output: 2.1, cacheRead: 0.07, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral/mistral-medium-3.5": { id: "mistral/mistral-medium-3.5", name: "Mistral Medium Latest", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.5, output: 7.5, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 256e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mistral/mistral-nemo": { id: "mistral/mistral-nemo", name: "Mistral Nemo 12B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.029, output: 0.03, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, type: "chat" }, "chat:mistral/mistral-small": { id: "mistral/mistral-small", name: "Mistral Small", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.6, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 4e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mixedbread/toast-1": { id: "mixedbread/toast-1", name: "Toast 1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.3, output: 0.72, cacheRead: 0.036, cacheWrite: 0 }, contextWindow: 131e3, maxTokens: 4e3, type: "chat" }, "chat:moonshotai/kimi-k2": { id: "moonshotai/kimi-k2", name: "Kimi K2 Instruct", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.57, output: 2.3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, type: "chat" }, "chat:moonshotai/kimi-k2.5": { id: "moonshotai/kimi-k2.5", name: "Kimi K2.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.6, output: 3, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 256e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/kimi-k2.6": { id: "moonshotai/kimi-k2.6", name: "Kimi K2.6", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.95, output: 4, cacheRead: 0.16, cacheWrite: 0 }, contextWindow: 262e3, maxTokens: 262e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/kimi-k2.7-code": { id: "moonshotai/kimi-k2.7-code", name: "Kimi K2.7 Code", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.95, output: 4, cacheRead: 0.19, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/kimi-k2.7-code-highspeed": { id: "moonshotai/kimi-k2.7-code-highspeed", name: "Kimi K2.7 Code High Speed", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.9, output: 8, cacheRead: 0.38, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/kimi-k3": { id: "moonshotai/kimi-k3", name: "Kimi K3", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/kimi-k3-fast": { id: "moonshotai/kimi-k3-fast", name: "Kimi K3 Fast", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 4.5, output: 22.5, cacheRead: 0.45, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/kimi-k3.1-pro": { id: "moonshotai/kimi-k3.1-pro", name: "Kimi K3.1 Pro", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2 }, contextWindow: 1048576, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:moonshotai/kimi-k3.1-pro-highspeed": { id: "moonshotai/kimi-k3.1-pro-highspeed", name: "Kimi K3.1 Pro Highspeed", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 4 }, contextWindow: 1048576, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:nvidia/nemotron-3-nano-30b-a3b": { id: "nvidia/nemotron-3-nano-30b-a3b", name: "Nemotron 3 Nano 30B A3B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.05, output: 0.2, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, type: "chat" }, "chat:nvidia/nemotron-3-super-120b-a12b": { id: "nvidia/nemotron-3-super-120b-a12b", name: "NVIDIA Nemotron 3 Super 120B A12B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.65, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 32e3, type: "chat" }, "chat:nvidia/nemotron-3-ultra-550b-a55b": { id: "nvidia/nemotron-3-ultra-550b-a55b", name: "Nemotron 3 Ultra", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.6, output: 2.4, cacheRead: 0.12, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65e3, type: "chat" }, "chat:nvidia/nemotron-3.5-lightning": { id: "nvidia/nemotron-3.5-lightning", name: "Nemotron 3.5 Lightning 30B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.05, output: 0.2, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 131072, type: "chat" }, "chat:nvidia/nemotron-3.5-lightning-free": { id: "nvidia/nemotron-3.5-lightning-free", name: "Nemotron 3.5 Lightning Free", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 65e3, type: "chat" }, "chat:nvidia/nemotron-3.5-super-vl": { id: "nvidia/nemotron-3.5-super-vl", name: "NVIDIA Nemotron 3.5 Super VL", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.2, output: 0.5, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:nvidia/nemotron-nano-12b-v2-vl": { id: "nvidia/nemotron-nano-12b-v2-vl", name: "Nvidia Nemotron Nano 12B V2 VL", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.2, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:nvidia/nemotron-nano-9b-v2": { id: "nvidia/nemotron-nano-9b-v2", name: "Nvidia Nemotron Nano 9B V2", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.06, output: 0.23, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, type: "chat" }, "chat:openai/gpt-4.1": { id: "openai/gpt-4.1", name: "GPT-4.1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4.1-batch": { id: "openai/gpt-4.1-batch", name: "GPT-4.1 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 4, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4.1-fast": { id: "openai/gpt-4.1-fast", name: "GPT-4.1 (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 3.5, output: 14, cacheRead: 0.875, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4.1-mini": { id: "openai/gpt-4.1-mini", name: "GPT-4.1 mini", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.4, output: 1.6, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4.1-mini-batch": { id: "openai/gpt-4.1-mini-batch", name: "GPT-4.1 mini (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.2, output: 0.8, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4.1-mini-fast": { id: "openai/gpt-4.1-mini-fast", name: "GPT-4.1 mini (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.7, output: 2.8, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4.1-nano": { id: "openai/gpt-4.1-nano", name: "GPT-4.1 nano", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.1, output: 0.4, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1047576, maxTokens: 32768, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4o": { id: "openai/gpt-4o", name: "GPT-4o", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4o-batch": { id: "openai/gpt-4o-batch", name: "GPT-4o (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 5, cacheRead: 0.625, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4o-fast": { id: "openai/gpt-4o-fast", name: "GPT-4o (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 4.25, output: 17, cacheRead: 2.125, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4o-mini": { id: "openai/gpt-4o-mini", name: "GPT-4o mini", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.6, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4o-mini-batch": { id: "openai/gpt-4o-mini-batch", name: "GPT-4o mini (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.075, output: 0.3, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-4o-mini-fast": { id: "openai/gpt-4o-mini-fast", name: "GPT-4o mini (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.25, output: 1, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16384, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5": { id: "openai/gpt-5", name: "GPT-5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5-batch": { id: "openai/gpt-5-batch", name: "GPT-5 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.625, output: 5, cacheRead: 0.0625, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5-codex": { id: "openai/gpt-5-codex", name: "GPT-5-Codex", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 10, cacheRead: 0.13, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5-fast": { id: "openai/gpt-5-fast", name: "GPT-5 (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2.5, output: 20, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5-mini": { id: "openai/gpt-5-mini", name: "GPT-5 mini", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.25, output: 2, cacheRead: 0.025, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5-mini-batch": { id: "openai/gpt-5-mini-batch", name: "GPT-5 mini (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.125, output: 1, cacheRead: 0.0125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5-mini-fast": { id: "openai/gpt-5-mini-fast", name: "GPT-5 mini (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.45, output: 3.6, cacheRead: 0.045, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5-nano": { id: "openai/gpt-5-nano", name: "GPT-5 nano", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.05, output: 0.4, cacheRead: 5e-3, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5-nano-batch": { id: "openai/gpt-5-nano-batch", name: "GPT-5 nano (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.025, output: 0.2, cacheRead: 25e-4, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5-pro": { id: "openai/gpt-5-pro", name: "GPT-5 pro", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 15, output: 120, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 272e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5-pro-batch": { id: "openai/gpt-5-pro-batch", name: "GPT-5 pro (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 7.5, output: 60, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 272e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.1-codex": { id: "openai/gpt-5.1-codex", name: "GPT-5.1-Codex", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 10, cacheRead: 0.13, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.1-codex-max": { id: "openai/gpt-5.1-codex-max", name: "GPT 5.1 Codex Max", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.1-codex-mini": { id: "openai/gpt-5.1-codex-mini", name: "GPT 5.1 Codex Mini", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.25, output: 2, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.1-thinking": { id: "openai/gpt-5.1-thinking", name: "GPT 5.1 Thinking", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 10, cacheRead: 0.125, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.1-thinking-fast": { id: "openai/gpt-5.1-thinking-fast", name: "GPT 5.1 Thinking (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2.5, output: 20, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.2": { id: "openai/gpt-5.2", name: "GPT 5.2", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.2-batch": { id: "openai/gpt-5.2-batch", name: "GPT 5.2 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.875, output: 7, cacheRead: 0.0875, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.2-codex": { id: "openai/gpt-5.2-codex", name: "GPT 5.2 Codex", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.2-fast": { id: "openai/gpt-5.2-fast", name: "GPT 5.2 (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 3.5, output: 28, cacheRead: 0.35, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.2-pro": { id: "openai/gpt-5.2-pro", name: "GPT 5.2 ", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 21, output: 168, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.3-codex": { id: "openai/gpt-5.3-codex", name: "GPT 5.3 Codex", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.3-codex-fast": { id: "openai/gpt-5.3-codex-fast", name: "GPT 5.3 Codex (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 3.5, output: 28, cacheRead: 0.35, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.4": { id: "openai/gpt-5.4", name: "GPT 5.4", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0, tiers: [{ inputTokensAbove: 271999, input: 5, output: 22.5, cacheRead: 0.5, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.4-batch": { id: "openai/gpt-5.4-batch", name: "GPT 5.4 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 7.5, cacheRead: 0.125, cacheWrite: 0, tiers: [{ inputTokensAbove: 271999, input: 2.5, output: 11.25, cacheRead: 0.25, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.4-fast": { id: "openai/gpt-5.4-fast", name: "GPT 5.4 (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.4-mini": { id: "openai/gpt-5.4-mini", name: "GPT 5.4 Mini", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.4-mini-batch": { id: "openai/gpt-5.4-mini-batch", name: "GPT 5.4 Mini (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.375, output: 2.25, cacheRead: 0.0375, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.4-mini-fast": { id: "openai/gpt-5.4-mini-fast", name: "GPT 5.4 Mini (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.5, output: 9, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.4-nano": { id: "openai/gpt-5.4-nano", name: "GPT 5.4 Nano", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.2, output: 1.25, cacheRead: 0.02, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.4-nano-batch": { id: "openai/gpt-5.4-nano-batch", name: "GPT 5.4 Nano (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.1, output: 0.625, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 4e5, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.4-pro": { id: "openai/gpt-5.4-pro", name: "GPT 5.4 Pro", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 30, output: 180, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 271999, input: 60, output: 270, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.5": { id: "openai/gpt-5.5", name: "GPT 5.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 271999, input: 10, output: 45, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.5-batch": { id: "openai/gpt-5.5-batch", name: "GPT 5.5 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0, tiers: [{ inputTokensAbove: 271999, input: 5, output: 22.5, cacheRead: 0.5, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.5-fast": { id: "openai/gpt-5.5-fast", name: "GPT 5.5 (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 12.5, output: 75, cacheRead: 1.25, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.5-pro": { id: "openai/gpt-5.5-pro", name: "GPT 5.5 Pro", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 30, output: 180, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 271999, input: 60, output: 270, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh", off: null, minimal: null, low: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.5-pro-batch": { id: "openai/gpt-5.5-pro-batch", name: "GPT 5.5 Pro (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 15, output: 90, cacheRead: 0, cacheWrite: 0, tiers: [{ inputTokensAbove: 271999, input: 30, output: 135, cacheRead: 0, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.6-luna": { id: "openai/gpt-5.6-luna", name: "GPT 5.6 Luna", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 271999, input: 0.4, output: 1.8, cacheRead: 0.04, cacheWrite: 0.5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.6-luna-batch": { id: "openai/gpt-5.6-luna-batch", name: "GPT 5.6 Luna (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.1, output: 0.6, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 271999, input: 0.2, output: 0.9, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.6-luna-fast": { id: "openai/gpt-5.6-luna-fast", name: "GPT 5.6 Luna (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.4, output: 2.4, cacheRead: 0.04, cacheWrite: 0.5, tiers: [{ inputTokensAbove: 271999, input: 0.8, output: 3.6, cacheRead: 0.08, cacheWrite: 1 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.6-sol": { id: "openai/gpt-5.6-sol", name: "GPT 5.6 Sol", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 271999, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.6-sol-batch": { id: "openai/gpt-5.6-sol-batch", name: "GPT 5.6 Sol (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 271999, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.6-sol-fast": { id: "openai/gpt-5.6-sol-fast", name: "GPT 5.6 Sol (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 8, output: 40, cacheRead: 0.8, cacheWrite: 10, tiers: [{ inputTokensAbove: 271999, input: 16, output: 60, cacheRead: 1.6, cacheWrite: 20 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.6-terra": { id: "openai/gpt-5.6-terra", name: "GPT 5.6 Terra", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 271999, input: 4, output: 18, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.6-terra-batch": { id: "openai/gpt-5.6-terra-batch", name: "GPT 5.6 Terra (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 6, cacheRead: 0.1, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 271999, input: 2, output: 9, cacheRead: 0.2, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-5.6-terra-fast": { id: "openai/gpt-5.6-terra-fast", name: "GPT 5.6 Terra (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 4, output: 24, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 271999, input: 8, output: 36, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6-astra": { id: "openai/gpt-6-astra", name: "GPT-6 Astra", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5, tiers: [{ inputTokensAbove: 272e3, input: 20, output: 75, cacheRead: 2, cacheWrite: 25 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6-astra-batch": { id: "openai/gpt-6-astra-batch", name: "GPT-6 Astra (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25, tiers: [{ inputTokensAbove: 272e3, input: 10, output: 37.5, cacheRead: 1, cacheWrite: 12.5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6-astra-fast": { id: "openai/gpt-6-astra-fast", name: "GPT-6 Astra (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 20, output: 100, cacheRead: 2, cacheWrite: 25, tiers: [{ inputTokensAbove: 272e3, input: 40, output: 150, cacheRead: 4, cacheWrite: 50 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6-luna": { id: "openai/gpt-6-luna", name: "GPT-6 Luna", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 272e3, input: 0.2, output: 0.75, cacheRead: 0.02, cacheWrite: 0.25 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6-luna-batch": { id: "openai/gpt-6-luna-batch", name: "GPT-6 Luna (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.05, output: 0.25, cacheRead: 5e-3, cacheWrite: 0.0625, tiers: [{ inputTokensAbove: 272e3, input: 0.1, output: 0.375, cacheRead: 0.01, cacheWrite: 0.125 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6-luna-fast": { id: "openai/gpt-6-luna-fast", name: "GPT-6 Luna (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.2, output: 1, cacheRead: 0.02, cacheWrite: 0.25, tiers: [{ inputTokensAbove: 272e3, input: 0.4, output: 1.5, cacheRead: 0.04, cacheWrite: 0.5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6-sol": { id: "openai/gpt-6-sol", name: "GPT-6 Sol", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 10, cacheRead: 0.2, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.4, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6-sol-batch": { id: "openai/gpt-6-sol-batch", name: "GPT-6 Sol (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.2, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6-sol-fast": { id: "openai/gpt-6-sol-fast", name: "GPT-6 Sol (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.8, cacheWrite: 10 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6.1-sol": { id: "openai/gpt-6.1-sol", name: "GPT-6.1 Sol", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6.1-sol-batch": { id: "openai/gpt-6.1-sol-batch", name: "GPT-6.1 Sol (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6.1-sol-fast": { id: "openai/gpt-6.1-sol-fast", name: "GPT-6.1 Sol (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 4, output: 20, cacheRead: 0.2, cacheWrite: 5, tiers: [{ inputTokensAbove: 272e3, input: 8, output: 30, cacheRead: 0.4, cacheWrite: 10 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6.1-terra": { id: "openai/gpt-6.1-terra", name: "GPT-6.1 Terra", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 5, cacheRead: 0.05, cacheWrite: 1.25, tiers: [{ inputTokensAbove: 272e3, input: 2, output: 7.5, cacheRead: 0.1, cacheWrite: 2.5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-6.1-terra-fast": { id: "openai/gpt-6.1-terra-fast", name: "GPT-6.1 Terra (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 10, cacheRead: 0.1, cacheWrite: 2.5, tiers: [{ inputTokensAbove: 272e3, input: 4, output: 15, cacheRead: 0.2, cacheWrite: 5 }] }, contextWindow: 105e4, maxTokens: 128e3, thinkingLevelMap: { xhigh: "xhigh" }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/gpt-oss-120b": { id: "openai/gpt-oss-120b", name: "GPT OSS 120B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.1, output: 0.5, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 131072, type: "chat" }, "chat:openai/gpt-oss-20b": { id: "openai/gpt-oss-20b", name: "GPT OSS 20B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.03, output: 0.14, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 8192, type: "chat" }, "chat:openai/gpt-oss-safeguard-120b": { id: "openai/gpt-oss-safeguard-120b", name: "GPT OSS Safeguard 120B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.6, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16e3, type: "chat" }, "chat:openai/gpt-oss-safeguard-20b": { id: "openai/gpt-oss-safeguard-20b", name: "GPT OSS Safeguard 20B", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.07, output: 0.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 16e3, type: "chat" }, "chat:openai/o1": { id: "openai/o1", name: "o1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 15, output: 60, cacheRead: 7.5, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/o3": { id: "openai/o3", name: "o3", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/o3-fast": { id: "openai/o3-fast", name: "o3 (Fast)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 3.5, output: 14, cacheRead: 0.875, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/o3-mini": { id: "openai/o3-mini", name: "o3-mini", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 1.1, output: 4.4, cacheRead: 0.55, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, type: "chat" }, "chat:openai/o3-pro": { id: "openai/o3-pro", name: "o3 Pro", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 20, output: 80, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:openai/o4-mini": { id: "openai/o4-mini", name: "o4-mini", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.1, output: 4.4, cacheRead: 0.275, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 1e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:particle/particle-1": { id: "particle/particle-1", name: "Particle-1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.125, output: 0.5, cacheRead: 0.015, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:poolside/laguna-s-2.1": { id: "poolside/laguna-s-2.1", name: "Laguna S 2.1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.09, output: 0.18, cacheRead: 9e-3, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, type: "chat" }, "chat:quiverai/arrow-2": { id: "quiverai/arrow-2", name: "Arrow 2", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 4, output: 20, cacheRead: 0.4, cacheWrite: 5 }, contextWindow: 131072, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:quiverai/arrow-2-telos": { id: "quiverai/arrow-2-telos", name: "Arrow 2 Telos", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 6, output: 30, cacheRead: 0.6, cacheWrite: 7.5 }, contextWindow: 131072, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:reflection/beam": { id: "reflection/beam", name: "Beam 1.0", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, type: "chat" }, "chat:reflection/beam-free": { id: "reflection/beam-free", name: "Beam 1.0 (Free)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, type: "chat" }, "chat:sakana/fugu-max": { id: "sakana/fugu-max", name: "Fugu Max", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 6, cacheRead: 0.25, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 1e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:sakana/fugu-ultra": { id: "sakana/fugu-ultra", name: "Fugu Ultra", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 10, output: 45, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 1e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:sakana/fugu-ultra-v2": { id: "sakana/fugu-ultra-v2", name: "Fugu Ultra v2", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 272e3, input: 10, output: 45, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 1e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:sakana/namazu": { id: "sakana/namazu", name: "Sakana Namazu", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.95, output: 4, cacheRead: 0.15, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 256e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.20-multi-agent": { id: "spacexai/grok-4.20-multi-agent", name: "Grok 4.20 Multi-Agent", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 5, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 2e6, maxTokens: 2e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.20-multi-agent-batch": { id: "spacexai/grok-4.20-multi-agent-batch", name: "Grok 4.20 Multi-Agent (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 2, cacheRead: 0.16, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2, output: 4, cacheRead: 0.32, cacheWrite: 0 }] }, contextWindow: 2e6, maxTokens: 2e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.20-multi-agent-beta": { id: "spacexai/grok-4.20-multi-agent-beta", name: "Grok 4.20 Multi Agent Beta", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 5, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 2e6, maxTokens: 2e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.20-non-reasoning": { id: "spacexai/grok-4.20-non-reasoning", name: "Grok 4.20 Non-Reasoning", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 5, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 2e6, maxTokens: 2e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.20-non-reasoning-batch": { id: "spacexai/grok-4.20-non-reasoning-batch", name: "Grok 4.20 Non-Reasoning (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 2, cacheRead: 0.16, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2, output: 4, cacheRead: 0.32, cacheWrite: 0 }] }, contextWindow: 2e6, maxTokens: 2e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.20-non-reasoning-beta": { id: "spacexai/grok-4.20-non-reasoning-beta", name: "Grok 4.20 Beta Non-Reasoning", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: false, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 5, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 2e6, maxTokens: 2e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.20-reasoning": { id: "spacexai/grok-4.20-reasoning", name: "Grok 4.20 Reasoning", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 5, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 2e6, maxTokens: 2e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.20-reasoning-batch": { id: "spacexai/grok-4.20-reasoning-batch", name: "Grok 4.20 Reasoning (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 2, cacheRead: 0.16, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2, output: 4, cacheRead: 0.32, cacheWrite: 0 }] }, contextWindow: 2e6, maxTokens: 2e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.20-reasoning-beta": { id: "spacexai/grok-4.20-reasoning-beta", name: "Grok 4.20 Beta Reasoning", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 5, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 2e6, maxTokens: 2e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.3": { id: "spacexai/grok-4.3", name: "Grok 4.3", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 5, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 1e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.3-batch": { id: "spacexai/grok-4.3-batch", name: "Grok 4.3 (Batch)", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 2, cacheRead: 0.16, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2, output: 4, cacheRead: 0.32, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 1e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.5": { id: "spacexai/grok-4.5", name: "Grok 4.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 6, cacheRead: 0.3, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 0.6, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 5e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.6": { id: "spacexai/grok-4.6", name: "Grok 4.6", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 5e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-4.7": { id: "spacexai/grok-4.7", name: "Grok 4.7", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 5e5, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-build-0.1": { id: "spacexai/grok-build-0.1", name: "Grok Build 0.1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 2, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2, output: 4, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 256e3, maxTokens: 256e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:spacexai/grok-voice-3.0": { id: "spacexai/grok-voice-3.0", name: "Grok Voice 3.0", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4096, maxTokens: 4096, type: "chat" }, "chat:stealth/glyph-cluster": { id: "stealth/glyph-cluster", name: "Glyph Cluster", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 256e3, type: "chat" }, "chat:stepfun/step-3.7-flash": { id: "stepfun/step-3.7-flash", name: "Step 3.7 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.2, output: 1.15, cacheRead: 0.04, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 256e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:stepfun/step-5-preview": { id: "stepfun/step-5-preview", name: "Step 5 Preview", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 2.7, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 1048576, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:tencent/hy3": { id: "tencent/hy3", name: "Hy3", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.14, output: 0.58, cacheRead: 0.035, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, type: "chat" }, "chat:tencent/hy4-preview": { id: "tencent/hy4-preview", name: "Tencent Hy4 Preview", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.834, output: 2.501, cacheRead: 0.042, cacheWrite: 0 }, contextWindow: 1024e3, maxTokens: 64e3, type: "chat" }, "chat:thinkingmachines/inkling": { id: "thinkingmachines/inkling", name: "Inkling", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 4.05, cacheRead: 0.17, cacheWrite: 0 }, contextWindow: 256e3, maxTokens: 256e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:thinkingmachines/inkling-small": { id: "thinkingmachines/inkling-small", name: "Inkling Small", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.45, output: 1.2, cacheRead: 0.1, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 1e6, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:xiaomi/mimo-v2.5": { id: "xiaomi/mimo-v2.5", name: "MiMo M2.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.119, output: 0.238, cacheRead: 25e-4, cacheWrite: 0 }, contextWindow: 105e4, maxTokens: 131100, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:xiaomi/mimo-v2.5-pro": { id: "xiaomi/mimo-v2.5-pro", name: "MiMo V2.5 Pro", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.3045, output: 0.609, cacheRead: 28e-4, cacheWrite: 0 }, contextWindow: 105e4, maxTokens: 131e3, type: "chat" }, "chat:xiaomi/mimo-v2.6-flash": { id: "xiaomi/mimo-v2.6-flash", name: "MiMo V2.6 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.14, output: 0.28, cacheRead: 28e-4, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:xiaomi/mimo-v2.6-pro": { id: "xiaomi/mimo-v2.6-pro", name: "MiMo V2.6 Pro", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.435, output: 0.87, cacheRead: 36e-4, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:xiaomi/mimo-v2.6-pro-ultraspeed": { id: "xiaomi/mimo-v2.6-pro-ultraspeed", name: "MiMo V2.6 Pro UltraSpeed", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 4.35, output: 8.7, cacheRead: 0.036, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:zai/glm-4.5": { id: "zai/glm-4.5", name: "GLM 4.5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.6, output: 2.2, cacheRead: 0.11, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 96e3, type: "chat" }, "chat:zai/glm-4.5-air": { id: "zai/glm-4.5-air", name: "GLM 4.5 Air", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.2, output: 1.1, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 96e3, type: "chat" }, "chat:zai/glm-4.5v": { id: "zai/glm-4.5v", name: "GLM 4.5V", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.6, output: 1.8, cacheRead: 0.11, cacheWrite: 0 }, contextWindow: 66e3, maxTokens: 16e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:zai/glm-4.6": { id: "zai/glm-4.6", name: "GLM 4.6", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.6, output: 2.2, cacheRead: 0.11, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 96e3, type: "chat" }, "chat:zai/glm-4.7": { id: "zai/glm-4.7", name: "GLM 4.7", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.6, output: 2.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 12e4, type: "chat" }, "chat:zai/glm-4.7-flash": { id: "zai/glm-4.7-flash", name: "GLM 4.7 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.07, output: 0.4, cacheRead: 0, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 131e3, type: "chat" }, "chat:zai/glm-4.7-flashx": { id: "zai/glm-4.7-flashx", name: "GLM 4.7 FlashX", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.06, output: 0.4, cacheRead: 0.01, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 128e3, type: "chat" }, "chat:zai/glm-5": { id: "zai/glm-5", name: "GLM 5", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 1, output: 3.2, cacheRead: 0, cacheWrite: 0 }, contextWindow: 202800, maxTokens: 131100, type: "chat" }, "chat:zai/glm-5-turbo": { id: "zai/glm-5-turbo", name: "GLM 5 Turbo", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 1.2, output: 4, cacheRead: 0.24, cacheWrite: 0 }, contextWindow: 202800, maxTokens: 131100, type: "chat" }, "chat:zai/glm-5.1": { id: "zai/glm-5.1", name: "GLM 5.1", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 202800, maxTokens: 64e3, type: "chat" }, "chat:zai/glm-5.2": { id: "zai/glm-5.2", name: "GLM 5.2", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 0.8, output: 2.55, cacheRead: 0.16, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, type: "chat" }, "chat:zai/glm-5.2-fast": { id: "zai/glm-5.2-fast", name: "GLM 5.2 Fast", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 2.8, output: 8.8, cacheRead: 0.56, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 128e3, type: "chat" }, "chat:zai/glm-5.3": { id: "zai/glm-5.3", name: "GLM 5.3", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 1.4, output: 4.4, cacheRead: 0.14, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 1e6, type: "chat" }, "chat:zai/glm-5.3-fast": { id: "zai/glm-5.3-fast", name: "GLM 5.3 Fast", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text"], compat: { allowEmptySignature: true }, cost: { input: 2.1, output: 6.6, cacheRead: 0.21, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 262144, type: "chat" }, "chat:zai/glm-5.3-flash": { id: "zai/glm-5.3-flash", name: "GLM 5.3 Flash", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:zai/glm-5.3-flashx": { id: "zai/glm-5.3-flashx", name: "GLM 5.3 FlashX", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 0.37, output: 1.25, cacheRead: 0.075, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:zai/glm-5v-turbo": { id: "zai/glm-5v-turbo", name: "GLM 5V Turbo", api: "anthropic-messages", baseUrl: "https://ai-gateway.vercel.sh", provider: "vercel-ai-gateway", reasoning: true, input: ["text", "image"], compat: { allowEmptySignature: true }, cost: { input: 1.2, output: 4, cacheRead: 0.24, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 128e3, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } }, "typesafe-system-one": { "classifier:baseten/elephant-1": { type: "classifier", id: "baseten/elephant-1", name: "Elephant-1", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.035, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 16384 }, "classifier:baseten/joey-1": { type: "classifier", id: "baseten/joey-1", name: "Joey-1", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.01, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 16384 }, "classifier:baseten/mammoth-1": { type: "classifier", id: "baseten/mammoth-1", name: "Mammoth-1", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.1, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 16384 }, "classifier:convaiinnovations/laya": { type: "classifier", id: "convaiinnovations/laya", name: "Laya", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.0105, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 8192 }, "classifier:liquid/d1": { type: "classifier", id: "liquid/d1", name: "Liquid d1", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.02, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 65536 }, "classifier:liquid/d1-ultra": { type: "classifier", id: "liquid/d1-ultra", name: "Liquid d1 Ultra", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32768 }, "classifier:microsoft/microsoft-decision-1": { type: "classifier", id: "microsoft/microsoft-decision-1", name: "Decision-1", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32768 }, "classifier:openai/gpt-6-luna-decisions": { type: "classifier", id: "openai/gpt-6-luna-decisions", name: "GPT-6 Luna Decisions", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.1, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 105e4 }, "classifier:perplexity/pplx-decider-flash-v1.2": { type: "classifier", id: "perplexity/pplx-decider-flash-v1.2", name: "Decider Flash V1.2 4B", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.01, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144 }, "classifier:perplexity/pplx-decider-v1.2": { type: "classifier", id: "perplexity/pplx-decider-v1.2", name: "Decider V1.2 27B", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.02, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144 }, "classifier:scaledown/scaledown-classify-1": { type: "classifier", id: "scaledown/scaledown-classify-1", name: "Classify-1", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.05, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4096 }, "classifier:typesafe-ai/jev": { type: "classifier", id: "typesafe-ai/jev", name: "Jev", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32e3 }, "classifier:typesafe-ai/jev-1.13.0": { type: "classifier", id: "typesafe-ai/jev-1.13.0", name: "Jev 1.13.0", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32e3 }, "classifier:typesafe-ai/jev-1.14.0": { type: "classifier", id: "typesafe-ai/jev-1.14.0", name: "Jev 1.14.0", api: "typesafe-system-one", provider: "vercel-ai-gateway", baseUrl: "https://ai-gateway.vercel.sh/typesafe/v1", input: ["text"], cost: { input: 0.042, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32e3 } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/vercel-ai-gateway.models.js +var VERCEL_AI_GATEWAY_MODELS = flattenChatModelCatalog("vercel-ai-gateway", vercel_ai_gateway_default); +var VERCEL_AI_GATEWAY_IMAGE_MODELS = flattenImageModelCatalog("vercel-ai-gateway", vercel_ai_gateway_default); +var VERCEL_AI_GATEWAY_CLASSIFIER_MODELS = flattenClassifierModelCatalog("vercel-ai-gateway", vercel_ai_gateway_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/xai.json +var xai_default = { "openai-responses": { "chat:grok-4.3": { id: "grok-4.3", name: "Grok 4.3", api: "openai-responses", provider: "xai", baseUrl: "https://api.x.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 1.25, output: 2.5, cacheRead: 0.2, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 2.5, output: 5, cacheRead: 0.4, cacheWrite: 0 }] }, contextWindow: 1e6, maxTokens: 3e4, compat: { supportsLongCacheRetention: false }, thinkingLevelMap: { off: "none", minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-4.5": { id: "grok-4.5", name: "Grok 4.5", api: "openai-responses", provider: "xai", baseUrl: "https://api.x.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.3, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 0.6, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 5e5, compat: { supportsLongCacheRetention: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-4.6": { id: "grok-4.6", name: "Grok 4.6", api: "openai-responses", provider: "xai", baseUrl: "https://api.x.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 5e5, compat: { supportsLongCacheRetention: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:grok-4.7": { id: "grok-4.7", name: "Grok 4.7", api: "openai-responses", provider: "xai", baseUrl: "https://api.x.ai/v1", reasoning: true, input: ["text", "image"], cost: { input: 2, output: 6, cacheRead: 0.5, cacheWrite: 0, tiers: [{ inputTokensAbove: 2e5, input: 4, output: 12, cacheRead: 1, cacheWrite: 0 }] }, contextWindow: 5e5, maxTokens: 5e5, compat: { supportsLongCacheRetention: false }, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: "medium", high: "high", xhigh: "xhigh", max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/xai.models.js +var XAI_MODELS = flattenChatModelCatalog("xai", xai_default); +var XAI_IMAGE_MODELS = flattenImageModelCatalog("xai", xai_default); +var XAI_CLASSIFIER_MODELS = flattenClassifierModelCatalog("xai", xai_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi.json +var xiaomi_default = { "openai-completions": { "chat:mimo-v2.6-flash": { id: "mimo-v2.6-flash", name: "MiMo-V2.6-Flash", api: "openai-completions", provider: "xiaomi", baseUrl: "https://api.xiaomimimo.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.14, output: 0.28, cacheRead: 28e-4, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsReasoningEffort: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { off: "off", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mimo-v2.6-pro": { id: "mimo-v2.6-pro", name: "MiMo-V2.6-Pro", api: "openai-completions", provider: "xiaomi", baseUrl: "https://api.xiaomimimo.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0.435, output: 0.87, cacheRead: 36e-4, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsReasoningEffort: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { off: "off", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mimo-v2.6-pro-ultraspeed": { id: "mimo-v2.6-pro-ultraspeed", name: "MiMo-V2.6-Pro-UltraSpeed", api: "openai-completions", provider: "xiaomi", baseUrl: "https://api.xiaomimimo.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 4.35, output: 8.7, cacheRead: 0.036, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsReasoningEffort: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { off: "off", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.js +var XIAOMI_MODELS = flattenChatModelCatalog("xiaomi", xiaomi_default); +var XIAOMI_IMAGE_MODELS = flattenImageModelCatalog("xiaomi", xiaomi_default); +var XIAOMI_CLASSIFIER_MODELS = flattenClassifierModelCatalog("xiaomi", xiaomi_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-ams.json +var xiaomi_token_plan_ams_default = { "openai-completions": { "chat:mimo-v2.6-flash": { id: "mimo-v2.6-flash", name: "MiMo-V2.6-Flash", api: "openai-completions", provider: "xiaomi-token-plan-ams", baseUrl: "https://token-plan-ams.xiaomimimo.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsReasoningEffort: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { off: "off", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mimo-v2.6-pro": { id: "mimo-v2.6-pro", name: "MiMo-V2.6-Pro", api: "openai-completions", provider: "xiaomi-token-plan-ams", baseUrl: "https://token-plan-ams.xiaomimimo.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsReasoningEffort: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { off: "off", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.js +var XIAOMI_TOKEN_PLAN_AMS_MODELS = flattenChatModelCatalog("xiaomi-token-plan-ams", xiaomi_token_plan_ams_default); +var XIAOMI_TOKEN_PLAN_AMS_IMAGE_MODELS = flattenImageModelCatalog("xiaomi-token-plan-ams", xiaomi_token_plan_ams_default); +var XIAOMI_TOKEN_PLAN_AMS_CLASSIFIER_MODELS = flattenClassifierModelCatalog("xiaomi-token-plan-ams", xiaomi_token_plan_ams_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-cn.json +var xiaomi_token_plan_cn_default = { "openai-completions": { "chat:mimo-v2.6-flash": { id: "mimo-v2.6-flash", name: "MiMo-V2.6-Flash", api: "openai-completions", provider: "xiaomi-token-plan-cn", baseUrl: "https://token-plan-cn.xiaomimimo.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsReasoningEffort: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { off: "off", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mimo-v2.6-pro": { id: "mimo-v2.6-pro", name: "MiMo-V2.6-Pro", api: "openai-completions", provider: "xiaomi-token-plan-cn", baseUrl: "https://token-plan-cn.xiaomimimo.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsReasoningEffort: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { off: "off", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.js +var XIAOMI_TOKEN_PLAN_CN_MODELS = flattenChatModelCatalog("xiaomi-token-plan-cn", xiaomi_token_plan_cn_default); +var XIAOMI_TOKEN_PLAN_CN_IMAGE_MODELS = flattenImageModelCatalog("xiaomi-token-plan-cn", xiaomi_token_plan_cn_default); +var XIAOMI_TOKEN_PLAN_CN_CLASSIFIER_MODELS = flattenClassifierModelCatalog("xiaomi-token-plan-cn", xiaomi_token_plan_cn_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/xiaomi-token-plan-sgp.json +var xiaomi_token_plan_sgp_default = { "openai-completions": { "chat:mimo-v2.6-flash": { id: "mimo-v2.6-flash", name: "MiMo-V2.6-Flash", api: "openai-completions", provider: "xiaomi-token-plan-sgp", baseUrl: "https://token-plan-sgp.xiaomimimo.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsReasoningEffort: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { off: "off", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:mimo-v2.6-pro": { id: "mimo-v2.6-pro", name: "MiMo-V2.6-Pro", api: "openai-completions", provider: "xiaomi-token-plan-sgp", baseUrl: "https://token-plan-sgp.xiaomimimo.com/v1", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1048576, maxTokens: 131072, compat: { supportsStrictMode: true, supportsReasoningEffort: false, requiresReasoningContentOnAssistantMessages: true, thinkingFormat: "deepseek" }, thinkingLevelMap: { off: "off", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: null }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.js +var XIAOMI_TOKEN_PLAN_SGP_MODELS = flattenChatModelCatalog("xiaomi-token-plan-sgp", xiaomi_token_plan_sgp_default); +var XIAOMI_TOKEN_PLAN_SGP_IMAGE_MODELS = flattenImageModelCatalog("xiaomi-token-plan-sgp", xiaomi_token_plan_sgp_default); +var XIAOMI_TOKEN_PLAN_SGP_CLASSIFIER_MODELS = flattenClassifierModelCatalog("xiaomi-token-plan-sgp", xiaomi_token_plan_sgp_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/zai.json +var zai_default = { "openai-completions": { "chat:glm-4.7": { id: "glm-4.7", name: "GLM-4.7", api: "openai-completions", provider: "zai", baseUrl: "https://api.z.ai/api/coding/paas/v4", reasoning: true, input: ["text"], cost: { input: 0.6, output: 2.2, cacheRead: 0.11, cacheWrite: 0 }, contextWindow: 204800, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "zai", supportsStrictMode: true, zaiToolStream: true }, type: "chat" }, "chat:glm-5-turbo": { id: "glm-5-turbo", name: "GLM-5-Turbo", api: "openai-completions", provider: "zai", baseUrl: "https://api.z.ai/api/coding/paas/v4", reasoning: true, input: ["text"], cost: { input: 1.2, output: 4, cacheRead: 0.24, cacheWrite: 0 }, contextWindow: 2e5, maxTokens: 131072, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "zai", supportsStrictMode: true, zaiToolStream: true }, type: "chat" }, "chat:glm-5.2": { id: "glm-5.2", name: "GLM-5.2", api: "openai-completions", provider: "zai", baseUrl: "https://api.z.ai/api/coding/paas/v4", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "zai", supportsStrictMode: true, zaiToolStream: true }, type: "chat" }, "chat:glm-5.2-highspeed": { id: "glm-5.2-highspeed", name: "GLM-5.2 Highspeed", api: "openai-completions", provider: "zai", baseUrl: "https://api.z.ai/api/coding/paas/v4", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, thinkingLevelMap: { off: "none", minimal: null, low: null, medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "zai", supportsStrictMode: true, zaiToolStream: true }, type: "chat" }, "chat:glm-5.3": { id: "glm-5.3", name: "GLM-5.3", api: "openai-completions", provider: "zai", baseUrl: "https://api.z.ai/api/coding/paas/v4", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "zai", supportsStrictMode: true, zaiToolStream: true }, type: "chat" }, "chat:glm-5.3-flash": { id: "glm-5.3-flash", name: "GLM-5.3-Flash", api: "openai-completions", provider: "zai", baseUrl: "https://api.z.ai/api/coding/paas/v4", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "zai", supportsStrictMode: true, zaiToolStream: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:glm-5.3-highspeed": { id: "glm-5.3-highspeed", name: "GLM-5.3 Highspeed", api: "openai-completions", provider: "zai", baseUrl: "https://api.z.ai/api/coding/paas/v4", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "zai", supportsStrictMode: true, zaiToolStream: true }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/zai.models.js +var ZAI_MODELS = flattenChatModelCatalog("zai", zai_default); +var ZAI_IMAGE_MODELS = flattenImageModelCatalog("zai", zai_default); +var ZAI_CLASSIFIER_MODELS = flattenClassifierModelCatalog("zai", zai_default); + +// node_modules/@earendil-works/pi-ai/dist/providers/data/zai-coding-cn.json +var zai_coding_cn_default = { "openai-completions": { "chat:glm-4.6v": { id: "glm-4.6v", name: "GLM-4.6V", api: "openai-completions", provider: "zai-coding-cn", baseUrl: "https://open.bigmodel.cn/api/coding/paas/v4", reasoning: true, input: ["text", "image"], cost: { input: 0.3, output: 0.9, cacheRead: 0.05, cacheWrite: 0 }, contextWindow: 128e3, maxTokens: 32768, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: false, maxTokensField: "max_tokens", thinkingFormat: "zai", supportsStrictMode: true, zaiToolStream: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:glm-5.3": { id: "glm-5.3", name: "GLM-5.3", api: "openai-completions", provider: "zai-coding-cn", baseUrl: "https://open.bigmodel.cn/api/coding/paas/v4", reasoning: true, input: ["text"], cost: { input: 1.4, output: 4.4, cacheRead: 0.26, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "zai", supportsStrictMode: true, zaiToolStream: true }, type: "chat" }, "chat:glm-5.3-flash": { id: "glm-5.3-flash", name: "GLM-5.3-Flash", api: "openai-completions", provider: "zai-coding-cn", baseUrl: "https://open.bigmodel.cn/api/coding/paas/v4", reasoning: true, input: ["text", "image"], cost: { input: 0.15, output: 0.5, cacheRead: 0.03, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "zai", supportsStrictMode: true, zaiToolStream: true }, inputLimits: { images: { resize: { maxWidth: 2e3, maxHeight: 2e3, maxBytes: 4718592, jpegQuality: 80 } } }, type: "chat" }, "chat:glm-5.3-highspeed": { id: "glm-5.3-highspeed", name: "GLM-5.3 Highspeed", api: "openai-completions", provider: "zai-coding-cn", baseUrl: "https://open.bigmodel.cn/api/coding/paas/v4", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 1e6, maxTokens: 131072, thinkingLevelMap: { off: null, minimal: null, low: "low", medium: null, high: "high", xhigh: null, max: "max" }, compat: { supportsStore: false, supportsDeveloperRole: false, supportsReasoningEffort: true, maxTokensField: "max_tokens", thinkingFormat: "zai", supportsStrictMode: true, zaiToolStream: true }, type: "chat" } } }; + +// node_modules/@earendil-works/pi-ai/dist/providers/zai-coding-cn.models.js +var ZAI_CODING_CN_MODELS = flattenChatModelCatalog("zai-coding-cn", zai_coding_cn_default); +var ZAI_CODING_CN_IMAGE_MODELS = flattenImageModelCatalog("zai-coding-cn", zai_coding_cn_default); +var ZAI_CODING_CN_CLASSIFIER_MODELS = flattenClassifierModelCatalog("zai-coding-cn", zai_coding_cn_default); + +// node_modules/@earendil-works/pi-ai/dist/models.generated.js +var MODELS = { + "amazon-bedrock": AMAZON_BEDROCK_MODELS, + "ant-ling": ANT_LING_MODELS, + "anthropic": ANTHROPIC_MODELS, + "azure": AZURE_MODELS, + "baseten": BASETEN_MODELS, + "cerebras": CEREBRAS_MODELS, + "cloudflare-ai-gateway": CLOUDFLARE_AI_GATEWAY_MODELS, + "cloudflare-workers-ai": CLOUDFLARE_WORKERS_AI_MODELS, + "deepseek": DEEPSEEK_MODELS, + "fireworks": FIREWORKS_MODELS, + "github-copilot": GITHUB_COPILOT_MODELS, + "google": GOOGLE_MODELS, + "google-vertex": GOOGLE_VERTEX_MODELS, + "groq": GROQ_MODELS, + "huggingface": HUGGINGFACE_MODELS, + "kimi-coding": KIMI_CODING_MODELS, + "meta": META_MODELS, + "minimax": MINIMAX_MODELS, + "minimax-cn": MINIMAX_CN_MODELS, + "mistral": MISTRAL_MODELS, + "moonshotai": MOONSHOTAI_MODELS, + "moonshotai-cn": MOONSHOTAI_CN_MODELS, + "nvidia": NVIDIA_MODELS, + "openai": OPENAI_MODELS, + "openai-codex": OPENAI_CODEX_MODELS, + "opencode": OPENCODE_MODELS, + "opencode-go": OPENCODE_GO_MODELS, + "openrouter": OPENROUTER_MODELS, + "qwen-token-plan": QWEN_TOKEN_PLAN_MODELS, + "qwen-token-plan-cn": QWEN_TOKEN_PLAN_CN_MODELS, + "qwen-token-plan-individual": QWEN_TOKEN_PLAN_INDIVIDUAL_MODELS, + "radius": RADIUS_MODELS, + "together": TOGETHER_MODELS, + "typesafe": TYPESAFE_MODELS, + "vercel-ai-gateway": VERCEL_AI_GATEWAY_MODELS, + "xai": XAI_MODELS, + "xiaomi": XIAOMI_MODELS, + "xiaomi-token-plan-ams": XIAOMI_TOKEN_PLAN_AMS_MODELS, + "xiaomi-token-plan-cn": XIAOMI_TOKEN_PLAN_CN_MODELS, + "xiaomi-token-plan-sgp": XIAOMI_TOKEN_PLAN_SGP_MODELS, + "zai": ZAI_MODELS, + "zai-coding-cn": ZAI_CODING_CN_MODELS +}; + +// node_modules/@earendil-works/pi-ai/dist/api/openai-completions.lazy.js +init_lazy(); +var openAICompletionsApi = () => lazyApi(() => Promise.resolve().then(() => (init_openai_completions(), openai_completions_exports))); + // node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.lazy.js init_lazy(); var anthropicMessagesApi = () => lazyApi(() => Promise.resolve().then(() => (init_anthropic_messages(), anthropic_messages_exports))); @@ -42049,9 +42489,10 @@ var anthropicMessagesApi = () => lazyApi(() => Promise.resolve().then(() => (ini init_lazy(); var openAIResponsesApi = () => lazyApi(() => Promise.resolve().then(() => (init_openai_responses(), openai_responses_exports))); -// node_modules/@earendil-works/pi-ai/dist/api/openai-completions.lazy.js -init_lazy(); -var openAICompletionsApi = () => lazyApi(() => Promise.resolve().then(() => (init_openai_completions(), openai_completions_exports))); +// node_modules/@earendil-works/pi-ai/dist/providers/all.js +function getBuiltinModel(provider2, modelId) { + return MODELS[provider2]?.[modelId]; +} // models.ts var CONFIG = "/etc/sausage/config.yaml"; @@ -42063,22 +42504,25 @@ var adapters = { function resolveModel(provider2, settings, entry2, catalog2) { const override2 = typeof entry2 === "string" ? { id: entry2 } : entry2; const id = override2.id; - const known = catalog2[settings.catalog ?? provider2]?.models?.[id]; + const known = catalog2(settings.catalog ?? provider2, id); const metadata = { - context_window: known?.limit?.context, - max_tokens: known?.limit?.output, + context_window: known?.contextWindow, + max_tokens: known?.maxTokens, reasoning: known?.reasoning, - cost: known?.cost, ...override2 }; - const cost = { ...known?.cost, ...override2.cost }; + const cost = { ...known?.cost }; + const costFields = { input: "input", output: "output", cache_read: "cacheRead", cache_write: "cacheWrite" }; + for (const [key, field] of Object.entries(costFields)) if (override2.cost?.[key] !== void 0) cost[field] = override2.cost[key]; const missing = ["context_window", "max_tokens", "reasoning"].filter((key) => metadata[key] === void 0); - for (const key of ["input", "output", "cache_read", "cache_write"]) if (cost[key] === void 0) missing.push(`cost.${key}`); + for (const [key, field] of Object.entries(costFields)) if (cost[field] === void 0) missing.push(`cost.${key}`); if (missing.length) throw new Error(`${CONFIG}: ${provider2}/${id} lacks ${missing.join(", ")}`); const extra = Object.keys(override2).filter((key) => !["id", "context_window", "max_tokens", "reasoning", "cost"].includes(key)); const extraCost = Object.keys(override2.cost ?? {}).filter((key) => !["input", "output", "cache_read", "cache_write"].includes(key)); if (extra.length || extraCost.length) throw new Error(`${CONFIG}: invalid overrides for ${provider2}/${id}: ${[...extra, ...extraCost].join(", ")}`); return { + ...known, + type: "chat", id, name: known?.name ?? id, provider: provider2, @@ -42087,18 +42531,12 @@ function resolveModel(provider2, settings, entry2, catalog2) { contextWindow: metadata.context_window, maxTokens: metadata.max_tokens, reasoning: metadata.reasoning, - input: known?.modalities?.input?.filter((type) => ["text", "image"].includes(type)) ?? ["text"], - cost: { input: cost.input, output: cost.output, cacheRead: cost.cache_read, cacheWrite: cost.cache_write } + input: known?.input ?? ["text"], + cost }; } -async function modelCatalog() { - let updated; - try { - const response = await fetch("https://models.dev/api.json", { signal: AbortSignal.timeout(5e3) }); - if (response.ok) updated = await response.json(); - } catch { - } - return Deno.core.ops.op_model_catalog(updated ?? null); +function modelCatalog() { + return getBuiltinModel; } async function configuredModels(readProviders2, catalog2) { const models3 = createModels(); @@ -51958,43 +52396,8 @@ function systemEntry(sections, tools, timestamp2) { return { model: [message] }; } -// node_modules/@earendil-works/pi-ai/dist/utils/uuid.js -var MAX_UUID_V7_TIMESTAMP = 281474976710655; -var MAX_SEQUENCE = (1n << 41n) - 1n; -var lastOrdinaryTimestamp = -1; -var sequence; -function uuidv7(timestampMs) { - const requestedTimestamp = timestampMs ?? Date.now(); - if (!Number.isInteger(requestedTimestamp) || requestedTimestamp < 0 || requestedTimestamp > MAX_UUID_V7_TIMESTAMP) { - throw new RangeError(`UUIDv7 timestamp must be an integer between 0 and ${MAX_UUID_V7_TIMESTAMP}`); - } - const effectiveTimestamp = timestampMs === void 0 ? Math.max(requestedTimestamp, lastOrdinaryTimestamp) : timestampMs; - if (timestampMs === void 0) - lastOrdinaryTimestamp = effectiveTimestamp; - const bytes2 = new Uint8Array(16); - globalThis.crypto.getRandomValues(bytes2); - if (sequence === void 0) { - sequence = BigInt(bytes2[1]) << 32n | BigInt(bytes2[2]) << 24n | BigInt(bytes2[3]) << 16n | BigInt(bytes2[4]) << 8n | BigInt(bytes2[5]); - } else { - if (sequence === MAX_SEQUENCE) - throw new RangeError("UUIDv7 generator sequence exhausted"); - sequence++; - } - const timestamp2 = BigInt(effectiveTimestamp); - for (let index = 5; index >= 0; index--) { - bytes2[index] = Number(timestamp2 >> BigInt((5 - index) * 8)) & 255; - } - bytes2[6] = 112 | Number(sequence >> 37n & 0x0fn); - bytes2[7] = Number(sequence >> 29n & 0xffn); - bytes2[8] = 128 | Number(sequence >> 23n & 0x3fn); - bytes2[9] = Number(sequence >> 15n & 0xffn); - bytes2[10] = Number(sequence >> 7n & 0xffn); - bytes2[11] = Number((sequence & 0x7fn) << 1n) | bytes2[11] & 1; - const hex = Array.from(bytes2, (byte) => byte.toString(16).padStart(2, "0")); - return `${hex.slice(0, 4).join("")}-${hex.slice(4, 6).join("")}-${hex.slice(6, 8).join("")}-${hex.slice(8, 10).join("")}-${hex.slice(10).join("")}`; -} - // node_modules/@earendil-works/pi-durable/dist/harness/provider.js +init_uuid3(); var ProviderDoc = defineDoc({ kind: "pi.provider", version: 1, @@ -68138,21 +68541,22 @@ ${definition.instructions}` : ""].filter(Boolean).join("\n\n"); var assert = (ok2, message) => { if (!ok2) throw new Error(message); }; -var fetch2 = globalThis.fetch; -globalThis.fetch = async () => { - throw new Error("offline"); -}; var catalog = await modelCatalog(); -assert(catalog.openai.models["gpt-6.1-sol"], "packaged snapshot works offline"); -await Deno.core.ops.op_model_catalog({ ...catalog, cache_fixture: { id: "cache_fixture", models: {} } }); -assert((await modelCatalog()).cache_fixture.id === "cache_fixture", "persisted metadata cache works offline"); -await Deno.core.ops.op_model_catalog(catalog); -globalThis.fetch = fetch2; var config = globalThis.providerSettings; var readProviders = () => Deno.core.ops.op_model_providers(); var models2 = await configuredModels(readProviders, catalog); var defaults3 = models2.getModel("responses", "gpt-6.1-sol"); -assert(defaults3.contextWindow === catalog.openai.models["gpt-6.1-sol"].limit.context, "catalog context default"); +var sol = getBuiltinModel("openai", "gpt-6.1-sol"); +var opus = models2.getModel("messages", "claude-opus-5-5"); +var opusCatalog = getBuiltinModel("anthropic", "claude-opus-5-5"); +assert(opus.compat?.forceAdaptiveThinking === true, "Opus 5.5 requires adaptive thinking"); +assert(JSON.stringify(opus.thinkingLevelMap) === JSON.stringify(opusCatalog.thinkingLevelMap) && opus.thinkingLevelMap, "Opus keeps its thinking level map"); +assert(defaults3.contextWindow === sol.contextWindow, "catalog context default"); +assert(sol.cost.tiers?.length && JSON.stringify(defaults3.cost) === JSON.stringify(sol.cost), "Sol keeps its catalog price tiers"); +var custom = resolveModel("anthropic-custom", { ...config.providers.messages, catalog: "anthropic" }, { id: "claude-opus-5-5", context_window: 272e3 }, catalog); +assert(custom.contextWindow === 272e3 && custom.baseUrl === config.providers.messages.base_url, "custom provider overrides its context and URL"); +for (const field of ["compat", "thinkingLevelMap", "promptCache", "inputLimits", "input", "cost"]) assert(JSON.stringify(custom[field]) === JSON.stringify(opusCatalog[field]), `custom provider retains ${field}`); +assert(custom.compat.forceAdaptiveThinking, "custom provider retains adaptive thinking"); var override = resolveModel("custom", { ...config.providers.responses, catalog: "openai" }, { id: "gpt-6.1-sol", context_window: 272e3 }, catalog); assert(override.contextWindow === 272e3 && override.maxTokens === defaults3.maxTokens && override.cost.input === defaults3.cost.input, "context-only override preserves catalog values"); var failure = ""; @@ -68166,7 +68570,13 @@ var supplied = { id: "unknown-model", context_window: 32e3, max_tokens: 4e3, rea assert(resolveModel("custom", config.providers.responses, supplied, catalog).cost.output === 2, "unknown model accepts complete overrides"); for (const [provider2, id] of [["messages", "claude-opus-5-5"], ["responses", "gpt-6.1-sol"], ["chat", "gpt-6.1-sol"]]) { const model2 = models2.getModel(provider2, id); - const result = await models2.completeSimple(model2, { messages: [{ role: "user", content: "Say hello.", timestamp: Date.now() }] }, { maxTokens: 128 }); + const result = await models2.completeSimple(model2, { messages: [{ role: "user", content: "Say hello.", timestamp: Date.now() }] }, { maxTokens: 128, reasoning: provider2 === "messages" ? "high" : void 0, onPayload: (payload) => { + if (provider2 === "messages") { + assert(payload.thinking?.type === "adaptive", "high thinking uses adaptive, not enabled"); + assert(typeof payload.output_config?.effort === "string", "adaptive thinking sets output_config.effort"); + assert(payload.messages.some((message) => message.output_config?.effort === "high"), "high thinking uses the catalog mid-conversation effort marker"); + } + } }); assert(result.stopReason !== "error", `${provider2}: ${result.errorMessage}`); assert(result.content.some((block) => block.type === "text" && block.text === "hello"), `${provider2}: streamed text`); assert(result.usage.cost.total > 0, `${provider2}: computed usage cost`); diff --git a/host/js/provider-models-test.ts b/host/js/provider-models-test.ts index 7635d27..8a3e178 100644 --- a/host/js/provider-models-test.ts +++ b/host/js/provider-models-test.ts @@ -1,5 +1,6 @@ /** Real pi-ai API adapters, catalog metadata, live provider edits, and durable usage. */ import {configuredModels,resolveModel,modelCatalog,CONFIG} from './models'; +import {getBuiltinModel} from '@earendil-works/pi-ai/providers/all'; import {fs} from './extensions'; import {environment} from './environment'; import {BACKGROUND_CONTEXT as context} from '@earendil-works/chord/context'; @@ -7,19 +8,22 @@ import {Harness,createRegistry} from '@earendil-works/pi-durable'; import {openStorage} from './sqlite'; import modelExtension from '../../extensions/models/server'; const assert=(ok:any,message:string)=>{if(!ok)throw new Error(message)}; -const fetch=globalThis.fetch; -globalThis.fetch=async()=>{throw new Error('offline')}; const catalog=await modelCatalog(); -assert(catalog.openai.models['gpt-6.1-sol'],'packaged snapshot works offline'); -await Deno.core.ops.op_model_catalog({...catalog,cache_fixture:{id:'cache_fixture',models:{}}}); -assert((await modelCatalog()).cache_fixture.id==='cache_fixture','persisted metadata cache works offline'); -await Deno.core.ops.op_model_catalog(catalog); -globalThis.fetch=fetch; let config=globalThis.providerSettings; const readProviders=()=>Deno.core.ops.op_model_providers(); const models=await configuredModels(readProviders,catalog); const defaults=models.getModel('responses','gpt-6.1-sol'); -assert(defaults.contextWindow===catalog.openai.models['gpt-6.1-sol'].limit.context,'catalog context default'); +const sol=getBuiltinModel('openai','gpt-6.1-sol'); +const opus=models.getModel('messages','claude-opus-5-5'); +const opusCatalog=getBuiltinModel('anthropic','claude-opus-5-5'); +assert(opus.compat?.forceAdaptiveThinking===true,'Opus 5.5 requires adaptive thinking'); +assert(JSON.stringify(opus.thinkingLevelMap)===JSON.stringify(opusCatalog.thinkingLevelMap)&&opus.thinkingLevelMap,'Opus keeps its thinking level map'); +assert(defaults.contextWindow===sol.contextWindow,'catalog context default'); +assert(sol.cost.tiers?.length&&JSON.stringify(defaults.cost)===JSON.stringify(sol.cost),'Sol keeps its catalog price tiers'); +const custom=resolveModel('anthropic-custom',{...config.providers.messages,catalog:'anthropic'},{id:'claude-opus-5-5',context_window:272000},catalog); +assert(custom.contextWindow===272000&&custom.baseUrl===config.providers.messages.base_url,'custom provider overrides its context and URL'); +for(const field of ['compat','thinkingLevelMap','promptCache','inputLimits','input','cost'])assert(JSON.stringify(custom[field])===JSON.stringify(opusCatalog[field]),`custom provider retains ${field}`); +assert(custom.compat.forceAdaptiveThinking,'custom provider retains adaptive thinking'); const override=resolveModel('custom',{...config.providers.responses,catalog:'openai'},{id:'gpt-6.1-sol',context_window:272000},catalog); assert(override.contextWindow===272000&&override.maxTokens===defaults.maxTokens&&override.cost.input===defaults.cost.input,'context-only override preserves catalog values'); let failure=''; @@ -29,7 +33,13 @@ const supplied={id:'unknown-model',context_window:32000,max_tokens:4000,reasonin assert(resolveModel('custom',config.providers.responses,supplied,catalog).cost.output===2,'unknown model accepts complete overrides'); for(const [provider,id] of [['messages','claude-opus-5-5'],['responses','gpt-6.1-sol'],['chat','gpt-6.1-sol']]){ const model=models.getModel(provider,id); - const result=await models.completeSimple(model,{messages:[{role:'user',content:'Say hello.',timestamp:Date.now()}]},{maxTokens:128}); + const result=await models.completeSimple(model,{messages:[{role:'user',content:'Say hello.',timestamp:Date.now()}]},{maxTokens:128,reasoning:provider==='messages'?'high':undefined,onPayload:payload=>{ + if(provider==='messages'){ + assert(payload.thinking?.type==='adaptive','high thinking uses adaptive, not enabled'); + assert(typeof payload.output_config?.effort==='string','adaptive thinking sets output_config.effort'); + assert(payload.messages.some(message=>message.output_config?.effort==='high'),'high thinking uses the catalog mid-conversation effort marker'); + } + }}); assert(result.stopReason!=='error',`${provider}: ${result.errorMessage}`); assert(result.content.some(block=>block.type==='text'&&block.text==='hello'),`${provider}: streamed text`); assert(result.usage.cost.total>0,`${provider}: computed usage cost`); diff --git a/host/src/harness/config.rs b/host/src/harness/config.rs index 6b3c5bd..c4c8bcf 100644 --- a/host/src/harness/config.rs +++ b/host/src/harness/config.rs @@ -1,5 +1,4 @@ -//! Fresh reads of provider keys and cached models.dev metadata for the host harness. -use deno_core::OpState; +//! Fresh reads of provider configuration and keys for the host harness. use sausage_vfs::{Layer, Open}; use serde::{Deserialize, Serialize}; use std::{collections::BTreeMap, sync::Arc}; @@ -33,29 +32,3 @@ impl Config { .map_err(|error| anyhow::anyhow!("Cannot read {PATH}: {error}")) } } - -pub(super) struct CatalogCache(pub std::path::PathBuf); -#[deno_core::op2] -#[serde] -pub(super) async fn op_model_catalog( - state: std::rc::Rc>, - #[serde] updated: Option, -) -> Result { - let path = state.borrow().borrow::().0.clone(); - let result = async { - if let Some(value) = updated { - tokio::fs::write(&path, serde_json::to_vec(&value)?).await?; - return Ok::<_, anyhow::Error>(value); - } - let bytes = match tokio::fs::read(&path).await { - Ok(bytes) => bytes, - Err(error) if error.kind() == std::io::ErrorKind::NotFound => { - include_bytes!("../../js/models-dev.json").to_vec() - } - Err(error) => return Err(error.into()), - }; - Ok(serde_json::from_slice(&bytes)?) - } - .await; - result.map_err(|error| deno_error::JsErrorBox::generic(error.to_string())) -} diff --git a/host/src/harness/mod.rs b/host/src/harness/mod.rs index f94740c..c79994b 100644 --- a/host/src/harness/mod.rs +++ b/host/src/harness/mod.rs @@ -85,7 +85,6 @@ deno_core::extension!( op_sql, credentials::op_credential_requests, credentials::op_model_providers, - config::op_model_catalog, credentials::op_credential_next, environment::op_file, environment::op_exec, @@ -175,10 +174,6 @@ pub async fn run_module_with_input( })), ..Default::default() }); - runtime - .op_state() - .borrow_mut() - .put(config::CatalogCache(world.host_dir.join("models-dev.json"))); runtime.op_state().borrow_mut().put(loader); runtime .op_state() diff --git a/host/tests/it/provider_models.rs b/host/tests/it/provider_models.rs index 6fe2eb5..b836684 100644 --- a/host/tests/it/provider_models.rs +++ b/host/tests/it/provider_models.rs @@ -104,6 +104,7 @@ async fn provider_transport_and_prices() -> anyhow::Result<()> { ); let result = sausage::harness::run_module(World::open(dir.path())?, Arc::new(NoExec), &source).await; - thread.join().unwrap()?; - result + let server_result = thread.join().unwrap(); + result?; + server_result }